본문 바로가기

서울시 먹거리 분석

19.01 요식업계 통화량 시각화

반응형

지난 글에서 19년 1월의 치킨집, 중국집, 피자집의 데이터를 파액해보았습니다. 이번에는 이 데이터를 전부 사용해서 업종별 비교를 하보도록 하겠습니다. 이 분석의 전체적인 방향, 그리고 목차는 기획하기 를 통해 확인하시기 바랍니다.

 

library(dplyr)
library(ggplot2)

> Call_Chicken_01<-read.csv("CALL_CHICKEN_01MONTH.csv")
> Call_cfood_01<-read.csv("CALL_CFOOD_01MONTH.csv")
> Call_pizza_01<-read.csv("CALL_PIZZA_01MONTH.csv")

특이사항 적용

Data를 확인해보니 피자 데이터는 업종이라는 컬럼이 존재하지 않았습니다.

따라서 type을 하나 추가해주도록 하겠습니다.

 

# type 피자가 없어 새로 추가 
type <- rep(“피자”,nrow(Call_pizza_01))

Call_pizza_01 <- cbind(Call_pizza_01[,1:7],type,Call_pizza_01[,8])

# 컬럼 명 영어로 변경 
colnames(Call_chicken_01) <- c(“date”, “wday”, “gender”, “age”, “city”, “county”, “town”, “type”, “call”)
colnames(Call_cfood_01) <- c(“date”, “wday”, “gender”, “age”, “city”, “county”, “town”, “type”, “call”)
colnames(Call_pizza_01) <- c(“date”, “wday”, “gender”, “age”, “city”, “county”, “town”, “type”, “call”)

#Call_food_01로 모두 합침
Call_food_01 <- c()
Call_food_01 <- rbind(Call_food_01,Call_chicken_01)
Call_food_01 <- rbind(Call_food_01,Call_cfood_01)
Call_food_01 <- rbind(Call_food_01,Call_pizza_01)

# 날짜 데이터 형 변환
Call_food_01$date <- as.character(Call_food_01$date)
Call_food_01$date <- as.Date(Call_food_01$date, format = “%Y%m%d”)

# 요일 데이터 순서 조정
Call_food_01$wday <- factor(Call_food_01$wday,
 levels = c(“월”, “화”, “수”,”목”,”금”,”토”,”일”))

# food_list를 사용하여 type를 영어로 변경
food_list <- c(“chicken”, “cfood”,”pizza”)
levels(Call_food_01$type) <- food_list

# Na값 확인
sum(is.na(Call_food_01))

 


어떤 방식으로 Data를 확인하는게 좋을지 생각하기

위의 코드로 인해 치킨집, 중국집, 피자집의 데이터를 모두 합쳤습니다.

이 데이터로 일별, 업종별로 어떤 차이점이 있는지 확인할 수 있을것 같습니다.

group_by()함수를 사용해서 위의 데이터들을 그룹하시키고, group_by_data라고 저장 후 head()함수를 사용해서 첫 부분만 간단하게 보도록 하겠습니다.

 

# 일, 업종별 그룹화
group_by_data <- Call_food_01 %>%
 group_by(date,wday,type) %>%
 summarize(call = sum(call)) %>% as.data.frame()
 
> head(group_by_data)
        date wday    type  call
1 2019-01-01   화 chicken 13635
2 2019-01-01   화   cfood 10695
3 2019-01-01   화   pizza  6400
4 2019-01-02   수 chicken  9273
5 2019-01-02   수   cfood 11664
6 2019-01-02   수   pizza  4182

 

숫자들이 한눈에 들어오지 않기에 시각화를 시키도록 하겠습니다.


plot() 함수를 for문을 통해 이용하도록 하겠습니다.

 

-food_list에서 하나씩 추출하여 치킨집, 중국집, 피자집 별로 그래프를 나누고, ylim을 사용해서 y축을 전체값의 최소, 최대값으로 그래프에 노출시켰습니다.

for(i in 1:3) {
  group_by_data_food <- group_by_data %>%
    filter(type == food_list[i])
  plot(group_by_data_food[,c(1,4)], type="o",pch=20,cex=0.5, col=i,lwd=2, xlab="",ylab="",
       ylim=c(min(group_by_data$call),max(group_by_data$call)))
  par(new=T)
}
legend("topright", legend = food_list, col=c(1:3),pch=20, bg = "white", cex = 1)

 


ggplot()함수를 이용하면 더 보기 좋게 표현이 가능합니다.

R에서 ggplot2라는 패키지를 이용해 사용하는 ggplot 함수는 보기좋은 그래프를 표현할 수 있습니다.

이러한 그래프를 그리는데에 plot()과 for문을 사용하지 않아도 코드를 통해 쉽게 표현이 가능합니다.

 

그래프를 보면 통화량이 일정한 패턴이 있음을 알 수 있습니다.

직관적으로 생각을 해보면 금,토요일에 통화량이 많고, 월요일이 되면 감소하는것을 알 수 있습니다.

 

치킨집 그래프를 보면 평일의 어느 지점과, 1월 말 즈음에 엄청나게 증가함을 알 수 있습니다.

왜 그러는지에 대한 고찰은 다음 글에서 다시 파악해보도록 하겠습니다.

 

이번 글에서는 시각화를 통해 분석을 하는것에 중점을 두겠습니다.

 

ggplot(group_by_data, aes(x=date, y=call, group = type, colour=type)) + 
 geom_line(size=1) + 
 geom_point(size=2)


이제는 지역별 데이터를 파악해보겠습니다.

서울시의 지역별로 데이터를 나누어서 어느 지역에서 통화량이 많은지, 또 어느 지역에서 치킨통화량이 많지만 중국집 통화량은 적은지를 확인해보도록 하겠습니다.

 

# 구, 별 data 그룹화
data_by_county <- Call_food_01 %>%
 group_by(county,type) %>%
 summarize(call = sum(call)) %>%
 arrange(call) %>%
 as.data.frame()
 
ggplot(data_by_county, 
aes(x=county, y=call, group = type, colour=type)) +  
  geom_line(size=1.3) +
  theme(axis.text.x = element_text(angle = 30, size=14)) + 
  theme(legend.text = element_text(size = 13, face = "italic")) +
  geom_point(size=2)

 

 

그래프로 확실하게 판단이 되지 않습니다.

지역별로 데이터를 정리했지만, 한눈에 보기가 어렵습니다.

따라서, 치킨집, 중국집, 피자집 별로 정렬을 시켜서 각 음식별로 어느 지역에서 가장 많이, 적게 통화량이 있는지를 확인해보겠습니다.

 

먼저 치킨집부터 확인해보겠습니다.

 

ggplot(data_by_county, 
aes(x=county, y=call, group = type, colour=type)) + 
 geom_line(size=1.3) +
 theme(axis.text.x = element_text(angle = 30, size=14)) + 
 theme(legend.text = element_text(size = 13, face = “italic”)) +
 geom_point(size=2) + 
 scale_x_discrete(limits = data_by_county %>% 
 filter(type == “chicken”) %>%
 arrange(call) %>%
 select(county) %>% 
 t %>% 
 as.factor)

 

 


구별 데이터 : 치킨으로 정렬

치킨집 통화량을 보면 강서구에서 가장 많고, 도봉구에서 가장 적은것을 알 수 있습니다.

그 이유를 생각해보는것은 다음 글에서 다시 확인해보도록 하겠습니다.

 


구별 데이터 : 중국집으로 정렬

중국집 통화량은 강남구에서 가장 많고, 도봉구에서 가장 적은것을 알 수 있습니다.

도봉, 관악, 광진, 양천, 금천구에서는 모든 외식업계의 통화량이 적은것을 알 수 있습니다.

왜 이러한 결과가 나오는지에 대해서도 다음 글에서 다시 확인하도록 하겠습니다.

 


구별 데이터 : 피자집으로 정렬

피자집 통화량은 강서구가 가장 많고, 도봉구가 가장 적게 분포되어 있습니다. 피자 데이터는 전체적으로 통화량이 저조하다는 점으로 미루어보아, 치킨과 중국음식보다 배달의 빈도가 더 적다고 판단해도 될 지 다음글에서 다시 언급하도록 하겠습니다.

 

 


데이터에 대한 시각화 및 파악

위의 데이터를 토대로 일별, 지역별로 데이터에 대한 시각화를 이용한 파악을 마무리했습니다.

이제 이를 통ㅎ해 왜 이러한 분포를 띄고 있는지 확인해보려고 합니다.

데이터분석을 하기위해 접근방향을 잡아야하는데, 도메인 지식이 없을 경우에 쉽게 방향을 선택하기가 어렵습니다.

이렇게 최소한의 방향으로 시각화를 통해 어떤 특이사항이 있는지를 파악한 후 분석을 하는것도 도움이 되리라 생각합니다.

 

 

 

반응형

'서울시 먹거리 분석' 카테고리의 다른 글

원인 파악  (0) 2020.02.19
시각화 해석  (0) 2020.02.18
19.01 피자집 이용 통화량 분석  (0) 2020.02.18
19.01월 중국집 이용 통화량 분석  (0) 2020.02.17
19.01 치킨집 이용 통화량 분석  (0) 2020.02.16