본문 바로가기

코드이야기/R

[R프로그래밍] 서울의 기온데이터로 박스플롯 그리기

지난 포스팅에서 Beautiful Soup Library를 활용하여 작년 서울의 기온데이터를 수집했습니다. 오늘은 이 데이터를 가지고 월별로 기온이 어떻게 변했는지 그래프를 그려보겠습니다. 그래프를 그리는 방법은 다양합니다. 엑셀의 차트, 파이썬의 matplotlib 라이브러리, R의 ggplot2 패키지를 활용할 수 있습니다. 저는 R이 가장 쉽고, 편하고, 다양한 결과물을 만들어 낼 수 있어 즐겨 사용하는 편입니다.





오늘 그려볼 그래프는 R의 ggplot2를 이용해 월별 기온변화에 대한 박스플롯 그리기입니다.

데이터 정비하기

우리가 사용할 데이터는 Weather Underground에서 수집한 작년 한 해 서울의 일별 평균, 최고, 최저기온입니다. 그래프를 그리기 전에 먼저 데이터를 살펴보도록 하겠습니다. 엑셀로 데이터 파일을 불러오면 이상한 데이터들이 눈에 보입니다. 2013년 1월 12일의 평균기온이 31도로 나오는 것입니다.



Weather Underground는 기온을 섭씨와 화씨로 보여주는데, 페이지를 순회할 때 일부 페이지의 기온이 화씨로 수집된 것입니다. 이런 데이터들을 정비하기 위해 엑셀에서 온도단위를 추가해서 섭씨와 화씨로 구분했습니다. 이 중 화씨 데이터만 섭씨로 변환합니다.



화씨에서 32도를 빼고, 그 값에 5/9를 곱하면 됩니다. 변환 결과를 별도의 파일에 'converted-weather-seoul.csv'로 저장했습니다. 이렇게 기초데이터를 정확하게 체크하는 것은 너무나 중요합니다. 기초데이터가 잘못되어 있다면 어떤 분석을 하더라도 올바른 결과가 나올 수 없기 때문입니다.

converted-weather-seoul.csv

데이터 불러오기

R에서는 텍스트 데이터파일, 엑셀파일, SPSS파일의 데이터 등을 불러올 수 있습니다. 우리가 불러올 파일은 CSV형식이므로 R콘솔창에 아래와 같이 입력합니다.

seoul <- read.csv("converted-weather-seoul.csv")

이제 'converted-weather-seoul.csv'의 데이터가 'seoul'이라는 변수에 할당되었습니다.



ggplot2를 이용해 박스플롯 그리기

ggplot2는 해들리 위컴(hadley Wickham)이 만든 그래프 패키지 입니다. 범용성, 명료함, 일관성있는 인터페이스, 멋진 출력결과로 많은 R사용자로부터 사랑받고 있는 패키지 입니다. 평균기온에 대한 박스플롯을 그려보도록 하겠습니다. 단 한 줄의 코드로 아래와 같이 그래프를 그려냅니다.

meanTemp <- ggplot(seoul, aes(factor(Month), MeanTemp)) + geom_boxplot()


전체적으로는 서울의 평균기온은 1월을 최저로 8월까지 상승했다가 다시 하락함을 알 수 있습니다. 월별 기온의 분포역시 1월에는 크다가 7월에 가장 작아졌다 다시 커지는 양상을 보입니다.


박스플롯은 '상자(box)'와 '수염(whiskers)'로 구성됩니다. 상자의 하단은 평균기온의 25백분위수, 상단은 75백분위수, 상자 내부의 가로선은 50백분위수 즉 중앙값을 나타냅니다. 상자의 상단에서 하단까지의 범위를 '사분위수 범위(inter-quantile range; IQR)이라고 부립니다. 상자의 상하단 모서리로 부터 IQR의 1.5배까지 수직으로 이어져 있는 선을 수염이라고 합니다. 그리고 수염의 끝부분보다 바깥쪽에 데이터가 존재한다면 이를 이상치로 보고 까만 점으로 표시합니다. 자세한 내용은 아래 그림을 참조하시기 바랍니다.