지난 글에서는 2018년 전체의 csv 파일을 하나의 data frame으로 만드는데 초점을 두었습니다.
이번에는 2018년 전체의 데이터를 가지고 시각화하여 이를 파악해보도록 하겠습니다.
2018년 Data 시각화
시각화하기에 앞서 어떠한 방향으로 시각화를 할 지 생각해봐야겠습니다.
1월 Data에 비해 1년 전체의 Data는 얼 별로 파악이 가능하다는 점입니다.
일 단위로 파악을 하는것이 아닌, 조금 더 기간을 두고 파악이 가능합니다.
> head(year_18_food_data_frame)
기준일 요일 성별 연령대 시도 시군구 읍면동 업종 통화건수
1 20180101 월 남 10대 서울특별시 강남구 도곡동 중국집 5
2 20180101 월 남 10대 서울특별시 강남구 삼성동 중국집 5
3 20180101 월 남 20대 서울특별시 강남구 논현동 중국집 16
4 20180101 월 남 20대 서울특별시 강남구 삼성동 중국집 19
5 20180101 월 남 30대 서울특별시 강남구 개포동 중국집 5
6 20180101 월 남 30대 서울특별시 강남구 삼성동 중국집 64
그러나 이 Data만으로는 월을 구분해주기가 어렵습니다. 그래서 dplyr 패키지의 mutate() 함수를 사용하도록 하겠습니다.
mutate()는 조건에 맞는 컬럼을 추가해주는 것입니다. 자세한 내용은 google의 mutate in r로 검색을 해 보는것을 추천드립니다.
mutate()함수를 적용해서 다시 확인해보기
이 때 날짜 데이터에서 월을 추출하는 month()함수를 사용하는데,
이를 위한 패키지로 library(lubridate)를 사용하겠습니다.
# install.packages("lubridate")
library(lubridate)
year_18_food_data_frame$기준일 <- ymd(year_18_food_data_frame$기준일)
year_18_food_data_frame <- year_18_food_data_frame %>% mutate(month = month(year_18_food_data_frame$기준일))
head(year_18_food_data_frame)
str(year_18_food_data_frame)
year_18_food_data_frame$month<-as.factor(year_18_food_data_frame$month)
head(year_18_food_data_frame)
tail(year_18_food_data_frame)
필자의 df에서는 기준일의 속성이 num이어서 date로 변경해주었습니다.
아래의 사진을 보면 month컬럼이 추가 된 것을 볼 수 있습니다.
월별, 지역별, 업종별 Gruop by
월별, 지역별, 업종별 Grooup by를 해보겠습니다.
이번에 알고싶은것은 월별, 지역별 특성이 어떻게 달라지는지 알아보는 것입니다.
이렇게 만든 data_by_month_county 라는 Data를 계속 파고들어가 보겠습니다.
> # group by 월, 시군구, 통화량
> data_by_month_county <- year_18_food_data_frame %>%
+ group_by(month,시군구,업종) %>%
+ summarize(call = sum(통화건수)) %>%
+ arrange(month) %>%
+ arrange(시군구) %>%
+ arrange(업종) %>%
+ as.data.frame()
> head(data_by_month_county)
month 시군구 업종 call
1 1 강남구 중국집 49578
2 2 강남구 중국집 41135
3 3 강남구 중국집 44534
4 4 강남구 중국집 43840
5 5 강남구 중국집 44613
6 6 강남구 중국집 43896
중국집 : 월별 시군구의 시각화
중국집에 대해서 월 별 시군구별로 시각화를 한 경우입니다.
1년 중 분기별로 혹은 특정 주기별로 달라질 것으로 예상했는데, 특정 구에서 너무도 큰 변화폭을 보이는 것을 확인할 수 있습니다.
각 구별로 업종별로 표준편차를 구해보겠습니다.
표준편차를 구해야하는데, 그 전에 강남구와 도봉구는 서로 다른 편차를 가지고 있을것입니다.
20000에서 10의 편차를 갖고 있는것과 5000에서 10의 편차를 갖고있는것은 다르기에 이를 그룹별로 정규화 후 표준편차의 순위를 알아보겠습니다.
이떄 전규화하는 함수를 직접 만들었으며, 이에 100을 곱하여 0~100까지의 값을 갖도록 변환시켰습니다.
그리고 이번에도 mutate() 함수를 사용하여 컬럼을 추가시켰습니다.
> normalize <-function(x){
+ ((x - min(x))*100/(max(x)-min(x)))
+ }
> data_by_month_county<-data_by_month_county %>%
+ group_by(시군구, 업종) %>%
+ mutate(normalized=normalize(call)) %>%
+ arrange(month)%>%
+ arrange(시군구) %>%
+ arrange(업종) %>%
+ as.data.frame()
> data_by_month_county
month 시군구 업종 call normalized
1 1 강남구 중국집 49578 100.0000000
2 2 강남구 중국집 41135 21.1744935
3 3 강남구 중국집 44534 52.9082252
4 4 강남구 중국집 43840 46.4289049
5 5 강남구 중국집 44613 53.6457847
6 6 강남구 중국집 43896 46.9517319
7 7 강남구 중국집 47260 78.3586967
8 8 강남구 중국집 46895 74.9509850
9 9 강남구 중국집 38867 0.0000000
10 10 강남구 중국집 42150 30.6507329
11 11 강남구 중국집 40950 19.4472972
이렇게 강남구만 봤을 때 정규화를 시켜, 38867~49578의 통화량을 0~100으로 변환시켰습니다.
이제 이 변환시킨 값을 가지고 시각화를 하면 조금 더 과감하게 흔들거리는 것을 볼 수 있습니다.
이는 시각화를 위한 용도는 아니었고, 구별로 표준편차가 가장 많은 5개 정도를 뽑기 위한 용도이므로 시각화에는 크게 의미는 두지 않겠습니다.
구별 표준편차의 순위를 두겠습니다.
이번에는 aggregate()함수를 사용해서 표준편차를 구하겠습니다.
이제 이 표준편차를 가지고 1년간 가장 크게 변동이 있는 5개 구를 정해서 파악하도록 하겠습니다.
필요하다면 읍면동 단위로 더 깊숙히 들어갈수도 있습니다.
> sd_by_county <- aggregate(normalized ~ 시군구 + 업종, data_by_month_county, sd) %>%
+ arrange(desc(normalized)) %>%
+ arrange(업종)
> sd_by_county
시군구 업종 normalized
1 관악구 중국집 41.03760
2 동작구 중국집 37.68572
3 성북구 중국집 35.99963
4 성동구 중국집 34.67819
5 중랑구 중국집 34.37440
...
20 종로구 중국집 28.82414
21 금천구 중국집 28.60825
22 마포구 중국집 27.55216
23 양천구 중국집 27.29093
24 서대문구 중국집 27.12003
25 영등포구 중국집 25.70116
마무리하며
1년 데이터를 보니 새로운것이 너무도 많이 나옵니다.
하기전에는 대충 월드컵이라는 이벤트에 무엇인가 있겠다고 생각했었는데, 방학, 개학 이런 이벤트들이 더 영향을 끼치는 것이 아닌가하는 생각이 듭니다.
그래도 1월 데이터만 했을떄는 너무 쉽고 단순헀었지만 1년 데이터를 다루다보니 지레짐작으로 볼 수 없었던 것들이 보입니다.
'서울시 먹거리 분석' 카테고리의 다른 글
2018년 csv파일 불러오기 (0) | 2020.02.20 |
---|---|
원인 파악 (0) | 2020.02.19 |
시각화 해석 (0) | 2020.02.18 |
19.01 요식업계 통화량 시각화 (0) | 2020.02.18 |
19.01 피자집 이용 통화량 분석 (0) | 2020.02.18 |