Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

류동균의 R 공부방입니다.

서울시 먹거리 분석 #4 본문

Data Analysis

서울시 먹거리 분석 #4

R쟁이 2019. 10. 18. 18:24

이번 블로그에서는 배달음식의 3대장이라고 할 수 있는 피자, 치킨, 중식 데이터를 통합해보려한다. 바로 시작해보자.

 

데이터불러오기

# 필요한 패키지
library(ggplot2) # 데이터 시각화
library(dplyr) # 데이터 핸들링

# 데이터 불러오기
cfood_df <- read.csv("CALL_CFOOD_01MONTH.csv")
chicken_df <- read.csv("CALL_CHICKEN_01MONTH.csv")
pizza_df <- read.csv("CALL_PIZZA_01MONTH.csv")

데이터 통합

치킨, 중식 데이터의 경우 자료형이 같고 컬럼수또한 같았다. 통합을 진행하기전에 먼저 피자 데이터를 간단하게 살펴보자.

> # 데이터 구조 파악
> dim(pizza_df)
[1] 21203     8

행의 개수는 21203개로 30000에 가까웠던 치킨, 중식보다는 적다. 근데 컬럼의 개수가 9개가 아닌 8개이다 한번 컬럼과 자료형을 보자.

> # 데이터 자료형 파악
> str(pizza_df)
'data.frame':	21203 obs. of  8 variables:
 $ 일자       : int  20190101 20190101 20190101 20190101 20190101 20190101 20190101 20190101 ...
 $ 요일       : Factor w/ 7 levels "금","목","수",..: 7 7 7 7 7 7 7 7 7 7 ...
 $ 성별       : Factor w/ 2 levels "남","여": 1 1 2 2 1 1 2 2 2 2 ...
 $ 연령       : Factor w/ 6 levels "10대","20대",..: 5 4 5 5 4 5 3 3 3 6 ...
 $ 발신지_시도: 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/ 214 levels "가락동","가리봉동",..: 34 138 109 138 8 8 8 34 43 87 ...
 $ 통화건수   : int  5 11 5 5 5 5 5 7 5 5 ...

피자 데이터는 다른데이터와는 다르게 "업종" 이라는 컬럼이 없는 것 같다. 또한 "기준일" 이 아닌 "일자" 라는 컬럼명으로 되어있다. 업종이라는 컬럼을 추가 하고 값을 "피자"로 컬럼명을 다른 데이터와 같게 통일 시켜주자.

# 업종 컬럼 추가
pizza_df$업종 <- "피자" %>% as.factor()

# 컬럼순서 변경
pizza_df <- cbind(pizza_df[,1:7], 업종 = pizza_df$업종, 통화건수 = pizza_df$통화건수)

# 컬럼명 변경
colnames(pizza_df) <- c("기준일", "요일", "성별", "연령대", "시도",
						"시군구", "읍면동", "업종", "통화건수")

이제 통일된 데이터가 갖추어 졌으니 통합을 해보자.

# 치킨, 중식, 피자 데이터 통합
total_df <- rbind(cfood_df, chicken_df, pizza_df)

> # 데이터 자료형 파악
> str(total_df)
'data.frame':	79947 obs. of  9 variables:
 $ 기준일  : int  20190101 20190101 20190101 20190101 20190101 20190101 20190101 20190101 ...
 $ 요일    : 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/ 257 levels "가락동","가리봉동",..: 45 7 143 114 35 143 118 35 148 143 ...
 $ 업종    : Factor w/ 3 levels "중국집","치킨",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ 통화건수: int  5 5 5 6 8 5 5 21 35 5 ...

이번에도 기준일과 요일을 좀 만져줘야 할 것 같다. 

# 기준일 자료형 변경
total_df$기준일 <- total_df$기준일 %>%
  as.character() %>%
  as.POSIXct(format = "%Y%m%d")

# 요일 Factor 순서 변경
total_df$요일 <-  factor(total_df$요일, levels = c("월","화","수","목","금","토","일"))

str(total_df)
'data.frame':	79947 obs. of  9 variables:
 $ 기준일  : POSIXct, format: "2019-01-01" "2019-01-01" "2019-01-01" ...
 $ 요일    : Factor w/ 7 levels "월","화","수",..: 2 2 2 2 2 2 2 2 2 2 ...
 $ 성별    : 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/ 257 levels "가락동","가리봉동",..: 45 7 143 114 35 143 118 35 148 143 ...
 $ 업종    : Factor w/ 3 levels "중국집","치킨",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ 통화건수: int  5 5 5 6 8 5 5 21 35 5 ...

데이터 분석에 대한 고찰

이제 데이터 분석을 위한 준비가 되었다. 어떤방향으로 데이터 분석을 해야할지 생각을 해봐야한다. 우선 간단하게 업종별 통화량, 요일별,업종별 통화량을 그래프로 시각화해보자.

# 업종별 통화건수
total_df %>% group_by(업종) %>%
   summarise(통화건수 = sum(통화건수)) %>%
   as.data.frame()   
    업종 통화건수
1 중국집   391984
2   치킨   398752
3   피자   158436

# 업종별 ggplot
ggplot(data = total_df, aes(x = 업종, y = 통화건수)) +
         geom_bar(stat = "identity") +
         ggtitle("업종별 통화량")

# 요일별 업종 통화량 ggplot
ggplot(data = total_df, aes(x = 요일, y= 통화건수, fill = 업종)) + 
  geom_bar(stat = "identity") +
  ggtitle("요일별 업종 통화량")   

수치와 그래프로 확인할 수 있드시 피자의 통화량이 중식, 치킨에 비해 1/2수준도 안되는 것을 볼 수 있다. 원래 중식, 치킨에 비해 인기가 없는 탓도 있겠지만 요즘 피자집들을 보면 동네에 매우 싸고 맛있는 피자집들이 많기때문에 집에가는길에 사서 먹는경우 통화가 발생하지 않은 것과 대형 프렌차이즈 피자의 경우 매장에 직접가서 주문을 하고 가져갈경우 반값정도 할인이되는 혜택이 있기때문에 데이터에 약간의 영향을 주지 않았을까 생각해본다. 또한 업종모두 월요일에는 통화량이 다른날에 비해 현저하게 떨어지는 것을 알 수 있다.

 

이렇게 3개의 업종 데이터를 통합하고 간단하게 분석을 해보았다. 다음글에서는 다른부분들까지 분석을 해볼 예정이다.

'Data Analysis' 카테고리의 다른 글

서울시 먹거리분석#5  (0) 2019.11.11
서울시 먹거리분석 #3  (0) 2019.10.17
서울시 먹거리분석 #2  (0) 2019.10.16
서울시 먹거리분석 #1  (0) 2019.10.16
K-겹 교차검증(K- fold Cross Validation)  (0) 2019.10.02