지난 글에서 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 |