Box Plot 그리기

Box Plot 그리는 방법에 대해 짧게 정리해보겠습니다. 네이버 카페 보다가 자료가 있어서 가져왔고요. 문제가 있으면 데이터 삭제하겠습니다.


ozone.csv


New York City 에 대해 오존 레벨 데이터 입니다. 통계 프로그래밍인 R을 이용해서 박스플롯 (Box Plot)을 그리려고 하는데요. 그럼 R로 데이터를 불러와야겠죠. 


데이터 불러오는건 간단합니다. 엑셀파일의 데이타라서 read.csv를 이용하면 되고요 그 뒤에 경로를 입력하면 됩니다. 제가 xx는 제이름부분이라서~ 저렇게 표시되었습니다. 이렇게 파일을 불러오면 str을 이용해서 각 변수별로 어떤 타입을 가지고 있는지 확인하는게 중요해요. str(ozone)을 해보니, 2개의 변수 Yonkers, Stamford 가 있고, 거기엔 각 숫자형식의 데이터가 있는데 총 131개의 observations이 있네요. 

ozone<- read.csv("/Users/XX/Desktop/ozone.csv", header = TRUE)
str(ozone)
## 'data.frame':    131 obs. of  2 variables:##  $ Yonkers : int  37 45 52 51 22 27 25 55 72 132 ...
##  $ Stamford: int  52 49 64 68 26 86 52 75 87 188 ...

전 head도 확인하는데요. 즉 데이터의 상위 몇개정도의 데이타만 보여달란 뜻입니다. 간단한 데이터는 확인할 필요까지는 없지만 변수의 갯수가 많을 경우, 이렇게 확인하는게 좋습니다. 

head(ozone)
##   Yonkers Stamford
## 1      37       52
## 2      45       49
## 3      52       64
## 4      51       68
## 5      22       26
## 6      27       86

이제 Boxplot을 그려볼까요. 가장 간단한 방법은 boxplot(데이터이름) 이고요. 제목이 있으면 더 좋겠죠. 그래서 main부분에 제목을 넣어줍니다. 그러면 아래 그림처럼 boxplot이 떠요. 

boxplot(ozone, main="New York Ozone Levels")
summary(ozone)



위 그림 살펴보면 Yonkers와 Stamford도시간의 ozone level이 어떻게 다른지 확인할 수 있고요. 

Box plot을 보면 맨 아래 라인은 minimum value 그리고 박스 안에서는 Lower Quintile, median, Upper quantile 그리고 마지막 라인은 maximum value입니다. 그 위에 점들은 outliers 을 말하고요.  


각 값들은 summary라는 명령어를 통해 알 수 있습니다. 서로 값이 많이 다른게 보이네요. 

##     Yonkers          Stamford     ##  Min.   :  9.00   Min.   : 14.00  
##  1st Qu.: 33.50   1st Qu.: 50.00  
##  Median : 49.00   Median : 80.00  
##  Mean   : 54.96   Mean   : 90.05  
##  3rd Qu.: 74.50   3rd Qu.:120.50  
##  Max.   :132.00   Max.   :240.00


위에 방법은 가장 간단한 방법이고요. 다른 패키지를 이용하면 더 예쁘게 그릴 수있습니다. 

ggplot2도 좋고 요샌 plotly에 빠져있어서 이걸로 그려볼게요. 계정을 만들면 화면에서도 마우스 오버하면 숫자 나오고 이렇게 해야하는데요. 계정을 만들어서 R에 세팅해야하는지라 귀찮아서 걍 건너뜁니다. 실제로 코드 따라하면 마우스 오버했을때 숫치가 나타나고 그래요. 진짜 예쁩니다ㅎㅎ 


먼저 plotly라는 라이브러리를 불러오고요. 없으면 install.packages(plotly)하면 되겠죠. 


library(plotly)

box_plots <- plot_ly(y=ozone$Yonkers, type="box") %>% add_trace(y=ozone$Stamford)

box_plots


간단하죠? 이러면 아래처럼 그림이 plot이 그려집니다. 


따로따로 그릴수도 있는데요. 데이터포인트와 거기에 따른 박스플랏도 그릴 수 있어요. 


ozone_Yonkers <- plot_ly(y=ozone$Yonkers, type = "box", boxpoints="all", jitter = 0.3)

ozone_Stamford <- plot_ly(y=ozone$Stamford, type = "box", boxpoints="all", jitter = 0.3)

ozone_Yonkers

ozone_Stamford


역시나 코드는 간단합니다. 첫번째 데이터는 Yonkers고요 그 다음은 Stamford 도시에 대한 boxplot이예요. 


두 데이터의 median, mean 값이 다른데 값을 log로 변환해주면 서로 어떻게 다른지 비교가 더 눈에 확 보이겠죠. 이건 다른 내용이라서 box plot에 대한 내용은 여기서 마치겠습니다. 


반응형

+ Recent posts