류동균의 R 공부방입니다.
서울시 먹거리분석 #3 본문
이번 블로그에는 저번블로그에 이어 중국음식 통화량을 분석해보고자 한다. 치킨집 통화량과 뭔가 다른 것이 있는지 한번 살펴보자.
데이터 불러오기
# 필요한 패키지
library(dplyr) # 데이터 핸들링
library(ggplot2) # 데이터 시각화
# 19년 1월 중국음식 데이터
cfood_df <- read.csv("CALL_CFOOD_01MONTH.csv")
데이터 파악
행의 개수는 치킨보다 약간적은 28499개이고 컬럼은 9개이다.
# 데이터 구조 파악
> dim(cfood_df)
[1] 28499 9
그럼 컬럼은 치킨데이터와 똑같이 되어있을까? 한번 살펴보자.
# 데이터 자료형 파악
> str(cfood_df)
'data.frame': 28499 obs. of 9 variables:
$ 기준일 : int 20190101 20190101 20190101 20190101 20190101 20190101 20190101 2019010 ...
$ 요일 : Factor w/ 7 levels "금","목","수",..: 7 7 7 7 7 7 7 7 7 7 ...
$ 성별 : Factor w/ 2 levels "남","여": 1 1 1 1 2 2 2 2 2 2 ...
$ 연령대 : Factor w/ 6 levels "10대","20대",..: 4 4 3 3 6 5 5 5 4 4 ...
$ 시도 : Factor w/ 1 level "서울특별시": 1 1 1 1 1 1 1 1 1 1 ...
$ 시군구 : Factor w/ 25 levels "강남구","강동구",..: 1 1 1 1 1 1 1 1 1 1 ...
$ 읍면동 : Factor w/ 235 levels "가락동","가리봉동",..: 45 7 143 114 35 143 118 35 148 143 ...
$ 업종 : Factor w/ 1 level "중국집": 1 1 1 1 1 1 1 1 1 1 ...
$ 통화건수: int 5 5 5 6 8 5 5 21 35 5 ...
컬럼 또한 치킨데이터와 똑같이 되어있었다. 이부분에서 데이터를 통합할때 좀더 원활하게 진행 할 수 있을 것 같다. 치킨데이터와 마찬가지로 밑에서 기준일과 요일을 보기편하게 만져주도록하자. 요약, NA값도 이어서 확인해보자.
> sum(is.na(cfood_df))
[1] 0
# 데이터 요약
summary(cfood_df)
summary를 했을때 요일을 보면 치킨과 달리 금, 토요일에 통화량이 가장 많은게 아닌 화, 수, 목요일에 통화량이 가장 많은 것이 보인다.
데이터 변환
치킨데이터와 마찬가지로 기준일과 요일을 바꿔주자.
# 기준일을 날짜형으로 변환
cfood_df$기준일 <- cfood_df$기준일 %>%
as.character() %>%
as.POSIXct(format = "%Y%m%d")
# 요일의 Factor 변환
cfood_df$요일 <- factor(cfood_df$요일, levels = c("월","화","수","목","금","토","일"))
치킨데이터와 비교하여 분석
summary를 해봤을때 치킨데이터와 다른점을 발견했다. 업종이 다르기때문에 나오는 결과일 것인데 두개의 업종을 비교하여 살펴보자. 뭔가 업종의 특징을 찾을 수 있을 것 같다.
1. 요일별 비교
# 중식 요일별
days_data_cfood <- cfood_df %>%
group_by(요일) %>%
summarise(통화건수 = sum(통화건수)) %>%
as.data.frame()
# 치킨 요일별
days_data_chicken <- chicken_df %>%
group_by(요일) %>%
summarise(통화건수 = sum(통화건수)) %>%
as.data.frame()
치킨과 금, 토요일에 통화량이 많았던 것과 달리 중식의 경우 수, 목요일에 통화량이 비교적 많은 것을 알 수 있다.
2. 연령대별 비교
# 중식 연령대별
years_data_cfood <- cfood_df %>%
group_by(연령대) %>%
summarise(통화건수 = sum(통화건수)) %>%
as.data.frame()
# 치킨 연령대별
years_data_chicken <- chicken_df %>%
group_by(연령대) %>%
summarise(통화건수 = sum(통화건수)) %>%
as.data.frame()
두 업종 모두 10대 ... 40대 까지 통화량이 증가하고 그이후 50 ... 60대 이상에 통화량이 감소하는 것을 볼 수 있다. 그러나 40대 이후의 통화량의 감소폭이 치킨은 반이상 통화량이 감소하는데 비해 중식은 더 적은 감소폭을 보이는 것을 알 수 있다.
데이터 시각화
두 업종의 데이터를 시각화를 통해 살펴보자.
# ggplot
ggplot(data = chicken_df, aes(x = 요일, y= 통화건수, fill = 연령대)) +
geom_bar(stat = "identity") +
ggtitle("치킨 데이터")
ggplot(data = cfood_df, aes(x = 요일, y= 통화건수, fill = 연령대)) +
geom_bar(stat = "identity") +
ggtitle("중식 데이터")
데이터 분석 방향 설정
위와같이 치킨, 중식 데이터를 비교해보았다. 요일, 연령대 2개의 컬럼을 가지고 보았는데 업종간의 차이가 있었다. 두 업종의 통화량이 최대에 달하는 요일을 보니 중식의 경우 식사의 개념, 치킨의 경우 야식의 개념(물론 요즘 식사로 많이 먹기는 한다)으로 생각될 수 있다고 본다. 또한 연령대의 경우 40대 이후의 감소폭이 꽤나 차이가 나는데 이는 중식이 식사라는 개념을 좀더 보완해준다고 볼 수도 있다. 아무래도 나이가 들수록 야식을 많이는 먹지 않으니 말이다. 다음 글에서는 배달음식의 3대장이라고 할 수 있는 치킨, 피자, 중식 데이터들을 하나의 dataframe으로 통합하여 다뤄 분석을 해보려한다. 마침 각각 업종의 데이터 구조와 자료형이 모두 동일하니 말이다. 또한 현재까지의 분석에서는 연령대별, 요일별으로만 분석을 했었는데 이후에는 모든 컬럼을 전부 활용하여 분석해볼 예정이다.
'Data Analysis' 카테고리의 다른 글
서울시 먹거리분석#5 (0) | 2019.11.11 |
---|---|
서울시 먹거리 분석 #4 (0) | 2019.10.18 |
서울시 먹거리분석 #2 (0) | 2019.10.16 |
서울시 먹거리분석 #1 (0) | 2019.10.16 |
K-겹 교차검증(K- fold Cross Validation) (0) | 2019.10.02 |