본문 바로가기

COMPUTING/BIG DATA

혼공 R 데이터 분석 5주차 공부 인증 + 이것저것

여러 가지

안녕하세요 재용입니다. 

벌써 혼공 10기가 단 2주 만을 남기고 있다는 게 믿기지 않네요. 여름방학이 순식간에 지나가고 있다는 걸 이렇게 느끼게 됩니다. 요즘엔 덥기도 덥지만, 다시 코로나가 유행하고 있다고 해요. 남은 8월 동안은 쉴 땐 쉬면서, 몸관리를 잘해갈 수 있게 해야겠습니다.

저는 혼공 4주 차를 완료하고 나서는 매우 알차게 지냈습니다. 가족들과 시간을 보내는 건 당연하고요, 여러 번 친구들을 만나러 싸돌아 다녔습니다. 최근에는 송도에 살고 있는 동기를 만나고 왔는데, 송도가 굉장히 살기 좋은 도시라는 걸 체감하고 왔습니다. 젊은 부부들이 많이 보였고, 여가 시설도 많고, 무엇보다 접근성이 괜찮아서 사람들이 많이 모이더군요. 25년에는 송도역에 KTX도 들어온다고 하니, 관심 있게 계속 봐둘 필요는 있어 보였습니다.

미국식 도시에 있는 듯한 송도.

요즘에 저를 심란하게 만드는 것은 앞으로의 장래와 다음학기 성적입니다. 송도도 그렇고, 요즘은 제가 과연 어떤 모습으로 살지 생각이 많아지더라고요. 나중에 어떤 직장에 있고, 어떤 가정을 꾸리고, 어떤 생활을 하며, 어디서 지낼지 등등 말이죠. 대학생 입장에선 쓸데없는 생각처럼 보일 순 있겠지만, 그럼에도 의미가 있다고 생각해요. 저도 이젠 23살이나 나이를 먹었고, 앞으로 계속 공부해야 하는 입장에 있어서 이런 미래생활상을 그리기엔 지금이 적기라 생각합니다. 그래서 송도 가서도 비슷한 생각들을 하며 지낸 것 같습니다.

조금 내용이 어긋나긴 했는데, 결론은 '여러 가지를 사색할 정도로 여유가 있고, 아주 잘 지내고 있다!'로 지으면 될 것 같습니다. ㅋㅋ 여유가 있는 만큼 늘 계획을 세우며 시간을 알짜로 쓸 수 있어야겠죠. 이번 혼공도 알짜로 공부하고 정리했으니, 한번 시작해 봅시다!

 

CHAPTER 5 데이터 가공하기

이번 챕터는 그전 챕터들과 확실히 분량이 많습니다. 허투루 쓰는 공간도 적고, 집중을 하고 봐야 되는 내용도 많았습니다. 무엇보다도 내용이 많아지니, 제가 배워온 지식들과 연결되는 지점들이 많았습니다. 그래서 사실은 그렇게까지 어렵진 않았습니다. 이런 게 선순환이라고 해야 할까요? 아는 게 많은 건 아니지만, 그래도 관련해서 조금이라도 아는 게 있으니, 속도감 있게 공부할 수 있었던 것 같습니다.

 

첫 번째 소단원에서는 dplyr 패키지에 대해 배웁니다. 이 패키지는 plyr패키지를 위컴이라는 사람이 C++ 베이스로 개량한 것입니다. 그래서 처리 속도도 빠르고, 훨씬 사용자에게 유리한 패키지라고 하네요. 첫 소단원에서는 이 패키지를 설치하고 패키지에 내장된 함수들을 사용해 봅니다. R에도 똑같은 내장함수들이 있기 때문에, 미연에 충돌 방지 차원에서 dplyr::하고 함수를 써야 했던 점이 조금 애로사항이었네요. 그렇지만  다양한 조작 함수들을 배울 수 있어서 흥미로웠습니다. 조건에 맞는 행을 추출하는 filter() 함수, 지정 열 변수만을 추출하는 select() 함수, 정렬하는 arrange() 함수, 열을 추가하는 mutate() 함수, 중복 값을 제거하는 distinct() 함수, 데이터를 요약하는 summarise()와 group_by() 함수 등이 기억에 남네요. 아 그리고 R 코더들에게 날개를 달아주는 %>% 연산자도 배웁니다. 전 주차에서도 뭔가 코드가 불필요하게 쓰인다는 느낌을 계속 받고 있었는데, 이 연산자면 훨씬 깔끔하게 쓸 수 있을 것 같네요. 문법도 꽤 직관적인지라 요긴하게 쓸 수 있을 것 같습니다.

두 번째 소단원에서는 첫 소단원에서 배운 함수들을 이용해 데이터를 가공하는 법을 배워봅니다. 약간 전단원의 응용 편이라고나 할까요? 그래서 실은 첫 단원을 잘 마쳤다면 술술 연습해 볼 수 있는 부분이기도 했습니다. 그러나 여기서 끝내기엔 조금 아쉬웠는지 '데이터 결합' 파트를 추가했더라고요? 이거는 컴퓨터 활용능력 필기 공부했던 사람들이라면 약간 혀를 내두르는 구간이죠. 일명 '조인'이라는 이름으로 꽤 말장난 같은 문제로 오답률이 높은 문제가 나오거든요. 필기 공부했을 때는 뭐랄까, 제대로 모르고 그냥 '외부 조인은 이런 것이고, 내부 조인은 이런 것이구나'하고 글로 배웠거든요. 거의 눈에 선지를 바르는 느낌으로 찍다시피 했죠. 그런데, 이걸 R로 구체적으로 배우니 기분이 새롭습니다. 이렇게 쉬운 걸, 그땐 그렇게 어렵게 느꼈단 말이야?! 싶더라고요. 이론과 실제는 다르다는 걸 이렇게 다시 되새기게 되네요. 그리고 이제는 조인에 대해 완벽히 기억해 두어야겠습니다. - 내부 조인은 완전히 겹치는 행들만 조인하고(교집합), 외부 조인은 겹치지 않은 행까지 모두 조인한다(합집합)!

세 번째 소단원은 그동안 배운 단원들 중 가장 어려웠던 단원이었습니다. melt(), dcast(), acast() 딱 이 세 가지 함수만 나오는데, 사용법도 심상치 않거든요. 목적에 맞게 제시된 수많은 열들 중에 열을 선택해 데이터를 늘어뜨리고, 압축하 고를 반복할 수 있어요. 그래서 상당히 많은 조합의 데이터 프레임을 제시할 수 있는 것이죠. 그렇게 데이터 구조를 재구성함으로써 데이터를 볼 사람들에게 전달해 줄 내용만을 '떠먹여' 줄 수 있는 셈입니다.

이는 사실 너무 중요한 부분입니다. 연구 결과를 표로 제시할 때 필요한 정보만을 제시하고, 그렇지 못한 정보는 보여주지 않는 게 중요하죠. 연구자의 의도에 맞게 제시할 수 있는 것도 중요한 능력이거든요. 이걸 원본 표에서 몇 개의 열을 삭제하거나 추가하는 걸로 완성된다고 생각하는 건 오산입니다. 그렇기에 이 파트는 쉽지 않았지만, 꼭 필요한 단원이겠거니~하면서 공부했던 것 같네요.

마지막 소단원은 데이터 가공하는 단계에서 빠질 수 없는 '정제'에 대해 다루고 있습니다. 건강보험공단에서 제시해 준 건강 관련 설문 조사 엑셀 파일을 이용해 실습을 진행한 적이 있습니다. 그때, 교수님께서도 늘 말씀하셨던 것이 "쓸데없는 데이터들은 다 쳐내고 분석에 들어가야 한다"라는 것이었습니다. 엑셀파일로 정리되었던 설문조사 결과라 대개 1부터 9까지 문항 결과가 기술되어 있었는데, 가끔 응답하고 싶지 않은 설문자들이 응답 없음은 NA이나 888,999로 결과가 나와있었죠. 이런 걸 정제시키지 않고 그대로 분석에 쓴다면 결과가 어떨까요? 어마어마하게 큰 값인 888,999에 의해 중요한 응답값들이 뭉개져버리겠죠. 그래서 엑셀파일에서는 필터기능을 활용해 이상치와 결측치를 제거하고 진행했었던 기억이 있어요. R에선 따로 코드를 넣어주어야 하는데, 이게 더 괜찮은 것 같습니다. 결측치를 제거도 할 수 있고, 다른 값들로 대체도 할 수 있으니까요. 이런 자유도가 프로그래밍의 매력인 것 같습니다.

 

5-1

dplyr package load!
filter() 사용하기
select()와 arrange() 함수 사용하기
mutate()와 distinct() 함수 사용하기
요약 관련 함수들과 추출함수들
파이프 연산자 사용하기

5-2

필요한 데이터 추출하기. 깨알같은 파이프연산자.
변수 제외하고 추출하기. select() 함수를 다양하게 사용하기1.
select() 함수를 다양하게 사용하기2. filter함수도 써보기.
데이터 요약하기. 그룹별이 좀 더 보기 좋은 것 같다.
ID키를 이용한 세로 조인. cloud환경에서 실습 자료 불러오는 법을 몰라서 조금 헤맨 건 비밀..
나머지 내부조인과 외부조인도 사용하기. 왜이리 실수를 하는 걸까.
예제 5-2 문제 2번~4번

5-3

names()없이 tolower(airquality)했다가 airquality가 완전 분해되버려서 당황했었음..
melt() 함수 쓴 이후 표 분석해보기
cast() 함수 사용하고 표 확인하기. 정말 쭉 늘여뜨린 게 보인다.
예제 5-3 문제 2~3번
예제 5-3 문제 4번. 개인적으로 코딩하면서도 너무 신기했던 문제. 이런 식으로 할 수 있구나.

5-4

이상치를 박스그림으로 확인하기
예제 5-4 문제 2~4번. 4번 문제는 대체할 수도 있고 ifelse도 쓸 수 있고 다양한 방법이 있다.

 

기본문제 - p.244의 확인문제 2번 풀고 인증하기

위의 예제 사진 참고!

선택문제 - p.261의 확인문제 4번 풀고 인증하기

역시 위의 예제 사진 참고!

 

필기자료

이번에는 필기를 따로 하진 않았습니다. 분량도 꽤 있었을뿐더러, 족장님 말씀대로 직접 실습해 보는 게 중요한 데이터 분석을 이렇게 정리만 이쁘게 하려고 했던 것은 아닌가 생각했었거든요. 그래서 아마 다음 주 마지막 실습도 비슷하게 필기자료는 올라가지 않을 것 같습니다. 간단하게 소단원 마무리 문제정도 onenote에 답을 써 둔 것 공유하는 걸로 할 것 같네요.

 

-> 결국엔 그냥 다시 필기 해봤습니다. 실습을 위주로 공부한다음, 마무리 공부느낌으로 간단히 정리하듯이 했는데 좋은 것 같습니다. 다음 주도 이렇게 해야 겠네요.

5주차 정리.pdf
1.41MB

마무리 및 소감

데이터를 어떻게 다루느냐는 데이터 분석 과정에서의 개인역량 차이가 가장 뚜렷히 나타나는 과정이지 않을까 싶어요. 데이터의 쓰임을 명확히 이해하고, 그것을 올바른 방향으로 사용하고 제시할 수 있게끔 하는 건 정말 쉽지 않은 일이거든요. 지금 배운 데이터 가공법들은 이런 역량을 기르는 데 아주아주 기초적인 내용들입니다. 데이터 전문가가 되기 위해선, 이런 기초적인 내용은 기본이요, 데이터를 더욱 잘 다룰 수 있게 많이 연습해봐야 할 겁니다.

 

최근에는 날이 너무 더운 건 고사하고, 태풍도 불고, 칼부림도 하고... 세상이 너무 뒤숭숭 합니다. 이게 맞나 싶을 정도로 세상이 미쳐 돌아가는 느낌입니다. 저번 토요일에는 분당사는 동기들 만나러 서현역으로 향했는데, 정말 심상치 않더라구요. 경비도 삼엄하고, 다니는 사람들도 뭔가 싱숭생숭하게 다니는 느낌이었습니다. 여러분들도 피해보지 않도록 조금은 조심히 다니시는 게 좋으실 것 같습니다.

그럼 다음주에 마지막 혼공으로 돌아오겠습니다! 감사합니다

 

출처

혼자 공부하는 R데이터분석 p.206~p.273