데이터를 기반으로

R 스터디 3일차 - 다양한 시도와 접근!(중국집&피자) 본문

스터디/R 온라인 스터디

R 스터디 3일차 - 다양한 시도와 접근!(중국집&피자)

이노후 2019. 3. 23. 17:39
728x90
반응형


안녕하십니까?


오늘은 스터디 3일차!


바로! 치킨에 이어서 


이번에는!!!


중국집피자 입니다!!


https://unfinished-god.com/2019/03/17/%EC%84%9C%EC%9A%B8%EC%8B%9C-%EB%A8%B9%EA%B1%B0%EB%A6%AC-%EB%B6%84%EC%84%9D-3-1%EC%9B%94-%EC%A4%91%EA%B5%AD%EC%A7%91-%EC%9D%B4%EC%9A%A9-%ED%86%B5%ED%99%94%EB%9F%89-%EB%B6%84%EC%84%9D-2/



스터디 원본 주소입니다!!!



우선 첫 번째는 바로!!  중국집 입니다!!





코드 원본은 가장 하단에 있습니다!!!

.

.

.



데이터 전처리 부터 시작하겠습니다!


데이터를 먼저 불러오고! 


데이터 타입을 한번 확인했습니다!



기준일을 확인해보니 int 형으로 확인되어 날짜로 인식할 수 있게 바꿔주겠습니다!




우선! 변수 이름들을 통일하기 위하여 


colnames 를 이용하여 변수명을 변경하고 


POSIXct 를 이용하여 타입을 변경합니다!!!





date 변수가 잘 변경 된 것을 확인할 수 있습니다!


이제 null 값을 없애줍니다.


그리고 agewday 변수를 그룹화하여 추출해보았습니다.






저희가 궁금한 점은 콜량이 적고 많은 그룹이죠!!



 call량을 기준으로 오름차순으로 정렬해보았습니다.





예상했지만 10대와 60대 이상의 콜량이 가장 적은 것을 확인할 수 있었습니다.


가장 많은 연령대와 요일은 뒤에서 한번에 확인해 보겠습니다!!

.

.

.


자! 이번에는 피자 입니다!!


https://unfinished-god.com/2019/03/23/%EC%84%9C%EC%9A%B8%EC%8B%9C-%EB%A8%B9%EA%B1%B0%EB%A6%AC-%EB%B6%84%EC%84%9D-3-1%EC%9B%94-%ED%94%BC%EC%9E%90%EC%A7%91-%EC%9D%B4%EC%9A%A9-%ED%86%B5%ED%99%94%EB%9F%89-%EB%B6%84%EC%84%9D/


스터디 원본 주소입니다!!!





데이터 전처리 시작 전 데이터 타입을 한번 확인해봤습니다!






중국집과 같이 전처리를 하겠습니다.




null 값을 지우고 agewday 변수를 그룹화하여 콜량의 합계를 보았습니다.




상위 순위는 밑에서 한번에 보여 드리겠습니다!


이번에는 지역별로 그룹화 한 것의 연령대와 콜량을 보겠습니다!




자 상위 순위를 정렬해보았습니다.



일별로 묶은 곳으로 보면 40대 토, 일 이 가장 콜량이 많았고


지역별로는 강서구동작구가 가장 높은 콜량을 보였습니다.





추후 구 별 집값, 소득 평균치와 한번 비교해보면 좋은 인사이트를 도출할 수 있을 것 같다는 생각이 듭니다!!


.

.

.

.

.

스터디는 여기서 끝이지만!!


개인적으로 궁금해서 진행해 본 상관분석 입니다!!


틀릴 부분이 있을테니


댓글로 피드백 부탁드립니다!!!

.

.

.

.


그럼 시작하겠습니다!


첫 번째는 연령대, 요일 두 가지를 그룹화 하여 통화건수를 비교해 보고 싶었습니다!!


우선 전처리 부터 진행하겠습니다!!




서로 변수명이 다르니 변수명을 통일해 줍니다!!!


그리고 나서 각각 상위 5개를 추출해보았습니다!!!



데이터를 합치기 전 동일한 열로 정렬되어 있는지 확인을 해보기위해 하위 5개를 추출해보았습니다!!



결과를 보니 데이터를 합쳐서 진행해도 괜찮다고 판단 되어 데이터를 합쳐보았습니다!!




연령별, 요일별 치킨, 중국집, 피자 콜량을 하나의 데이터 셋으로 만들었습니다!


이것을 토대로 그림을 그려보았습니다.



그림이 3가지라 보기가 좀 힘들었습니다.


그렇다고 4x4로하면 너무 작아서 보기 힘들었네요 ㅠㅠ


이럴 때 해결방법을 알고 계시는 분 말씀해주세요!! ㅎㅎㅎ댓글로!!!



우선 하던 것은 계속해야하니!!


데이터들을 콜량들만 추출하여 상관분석을 돌려보겠습니다!!




그 결과 다들 주문량이기에 상관관계는 있다고 나와 있을것이라 생각했습니다.



산점도를 보시면 피자와 치킨의 그래프는 거의 동일하다고 보일 정도입니다.


왜 이렇게 나오는 걸까요? 제 생각에는 요일 별로 많이 팔리는 날이 조금 씩 다르다 보니 이렇게 나오는 것 같습니다!!


자 그럼 요일 별로 누가 더 많이 팔렸나 볼까요?





자 요일별로 그룹화 하였고


데이터를 합쳐서 보니까!!



치킨은 금, 토 


중국집은 수, 목


피자는 토, 일


이렇게 가장 많이 팔렸습니다!!


개인적인 견해로는 치킨은 보통 다음 날 쉬는 날 저녁에 많이 먹기에 금, 토 주문량이 많고


피자는 주말이긴 하나 일요일이 가장 많은 이유는 보통 월요일 출근이 힘들어 전날인 일요일은 집에서 쉬고자하는 


사람들이 많기에 일요일에 주문량이 가장 많다고 생각합니다!!


만약 이게 시간별로 데이터가 세분화 되어 있다면!!


더 세밀하게 확인해 볼 수 있겠지만 ㅠㅠ 아쉽네요 그 점이



자 다음은 연령대 별로 해보겠습니다!!




예상했듯이 10대와 60대 가 가장 주문량이 적고 40대가 가장 많았습니다!!!


하지만!!! 치킨, 중국집은 30대가 그 다음을 이었지만 !!


피자는 20대가 그 뒤를 이었습니다!!


흠...20대는 다른 것들 보다 피자의 주문량이 더 많군요...


왜 그런 것 일까요?


저도 20대 이지만....이유를....잘...ㅎㅎ 함께 고민해보죠 :)




상관분석을 돌려보니!!


역시 치킨과 피자의 상관성이 가장 높게 나왔습니다!



자! 마지막으로...일 별로 확인해보겠습니다!!



중국집은 1월 1일 새해 부터 시켜드시는 분들은 없었나 봅니다! ㅎㅎ


참고로 저는 먹으려 했는데 문이 연 곳이 없었답니다 ㅎㅎ


그리고 치킨과 피자는 1월 28일 월요일에!! 주문량이 제일 적었네요 ㅎㅎ


역시 월요일!!


자 그럼 가장 많이 팔린 곳을 보겠습니다!!



여기서는 조금 신기한 점을 볼 수 있었습니다!!



우선 치킨!!


치킨은 특별한 점 없이 금, 토 가 가장 많이 팔렸네요!!


그 다음 중국집!!


이 부분은 신기한게 토, 일 가 가장 많이 팔렸습니다!!


26일 토, 27일 일 이 주말에는 무엇이 있었길래 중국집에서 1월달 중 가장 주문량이 많았을 까요? 



피자의 가장 판매가 많았던 것은 모두다 일요일 이었습니다!!


데이터가 굉장히 신기하게 나왔습니다.


분명 숨은 메시지가 있을 텐데...좀 더 고민을 해봐야겠습니다!!


자 일 별로 통합하여 상관분석을 해보니!!




역시 피자와 치킨의 상관 관계가 가장 높네요!!




자~ 제가 해볼 수 있는 부분은 거의 해 본 것 같네요 ㅎㅎ


(사실 좀 더 노가다(?) 해서 그룹화를 다르게 해서 메시지를 찾아볼까 했지만 여기까지가....제....최..선 ㅠㅠ 입니다 ㅠㅠ)




제 개인적인 생각은 이렇습니다!



치킨, 피자는 주말에 가족단위로 시켜먹는 음식이라 생각됩니다.


또한 주중에 지친 사람들의 주말에 보상 심리로 시키는 배달 음식이기도 하죠!!


주말에 보상 심리로 중국집을 드시는 분들은 적을 것 같습니다!!


그리고, 주중에 주문해서 먹는 피자나 치킨은 조금 무거운 느낌이 개인적으로는 들어서


저도 주중에는 잘 시켜먹지 않게 되는 것 같습니다!! ㅎㅎ


좀 더 다양한 관점으로 데이터를 바라봐야 할 것 같습니다!!


.

.

.

.


오늘의 스터디는 여기까지 입니다!!


이상 읽어주셔서 감사합니다!!


피드백은 댓글에 남겨주세요!!







---------------------------------------------------------------------------------------------------------------------------------------------------------


여기 부터는 코드 원본 입니다!!!




#과제


rm(list=ls())


#치킨


a<-read.csv("CALL_CHICKEN_01MONTH_nn.csv",header=TRUE,encoding = "utf-8")

#이상하게 불러와진 것을 해결해야한다...ㅠㅠ


str(a)


aa<-a[,-10] #고유번호 csv 파일 자체에서 부여했기에 삭제!


head(aa)


dim(aa)

#총 29850개 행인 데이터


summary(aa)

#일수는 한달, 서울, 치킨, 구 및 읍면동, 통화건수, 성별, 연령대, 요일


summary(aa) #요일과 기준일의 이상함을 느낌

str(aa)


#int 와 factor의 정렬기준은?


aa$기준일<-as.character(aa$기준일)


#as.POSIXct(z, origin = "1960-01-01")                # local


aa$기준일<-as.POSIXct(aa$기준일,format="%Y%m%d")


aa$요일<-factor(aa$요일,levels=c("월","화","수","목","금","토","일"))

str(aa)

summary(aa)


sum(is.na(aa)) #NA 값 있는지 확인


aggregate(aa$통화건수, by=list(aa$연령대), FUN=sum)


aggregate(aa$통화건수, by=list(aa$요일), FUN=sum)


library(dplyr)


dbd<-aa %>% 

  group_by(요일) %>% 

  summarise(통화건수=sum(통화건수)) %>% as.data.frame()

dbd


dbdy<-aa %>% 

  group_by(연령대, 요일) %>% 

  summarise(통화건수=sum(통화건수)) %>% as.data.frame()

dbdy


dbdy2<-aa %>% 

  group_by(요일, 연령대) %>% 

  summarise(통화건수=sum(통화건수)) %>% as.data.frame()

dbdy2


dbdy %>% arrange(통화건수)



#중국집


bb<-read.csv("CALL_CFOOD_01MONTH.csv",header=TRUE,encoding = "utf-8")


str(bb)

head(bb)


colnames(bb) <- c("date", "wday", "gender", "age", 

                             "city", "county", "town", "type", "call")



# 날짜 데이터 형 변환

bb$date <- as.character(bb$date)

bb$date <- as.POSIXct(bb$date, format = "%Y%m%d")


str(bb)

head(bb)


bb$wday <- factor(bb$wday,

                  levels = c("월", "화", "수","목","금","토","일"))

 

head(bb)

dim(bb)

#총 28406개 행인 데이터

summary(bb)


sum(is.na(bb))


library(dplyr)


bb_data_by_years_days <- bb %>%

  group_by(age,wday) %>%

  summarize(call = sum(call)) %>% as.data.frame() 


bb_data_by_years_days


bb_data_by_years_days %>% arrange(call)



#pizza 


p<-read.csv("CALL_PIZZA_01MONTH.csv",header=TRUE,encoding = "utf-8")

str(p)

head(p)


colnames(p) <- c("date", "wday", "gender", "age", "city", "county", "town", "call")

type <- rep("피자",nrow(p))


p <- cbind(p[,1:7],type, call = p[,8])

str(p)

head(p)


p$date <- as.character(p$date)

p$date <- as.POSIXct(p$date, format = "%Y%m%d")


p$wday <- factor(p$wday,

                 levels = c("월", "화", "수","목","금","토","일"))


sum(is.na(p))


p_data_by_years_days <- p %>%

  group_by(age,wday) %>%

  summarize(call = sum(call)) %>% as.data.frame()


p_data_by_county <- p %>%

  group_by(county) %>%

  summarize(call = sum(call)) %>% as.data.frame()

qwe<-p_data_by_years_days %>% arrange(call)

rrr<-p_data_by_county %>% arrange(call)


tail(qwe)

tail(rrr)



#상관관계가 있을까?

#연령대,요일 별 수치로 상관관계 분석해봄


a_data_by_years_days<-aa %>% 

  group_by(연령대, 요일) %>% 

  summarise(통화건수=sum(통화건수)) %>% as.data.frame()


bb_data_by_years_days <- bb %>%

  group_by(age,wday) %>%

  summarize(call = sum(call)) %>% as.data.frame() 


p_data_by_county <- p %>%

  group_by(age,wday) %>%

  summarize(call = sum(call)) %>% as.data.frame()


Chicken=a_data_by_years_days

Chinafood=bb_data_by_years_days

Pizza=p_data_by_years_days


tail(Chicken)

tail(Chinafood)

tail(Pizza)


str(Chicken)

str(Chinafood)

str(Pizza)


colnames(Chicken) <- c("age","wday", "call")

head(Chicken)

head(Chinafood)

head(Pizza)


colnames(Chicken) <- c("age","wday", "chicken_call")

colnames(Chinafood) <- c("age","wday", "chinafood_call")

colnames(Pizza) <- c("age","wday", "pizza_call")


Chicken[,"chinafood_call"]=Chinafood$chinafood_call

Chicken[,"pizza_call"]=Pizza$pizza_call


data=Chicken

head(data)


par(mfrow=c(1,3))

plot(data$chicken_call)

plot(data$chinafood_call)

plot(data$pizza_call)


?cor


data_sample<-data[,c(3,4,5)]

head(data_sample)

library(PerformanceAnalytics)

chart.Correlation(data_sample, histogram = T, pch=3)


#요일별로 따로 봐보자

a_day<-aa %>% 

  group_by(요일) %>% 

  summarise(통화건수=sum(통화건수)) %>% as.data.frame()


b_day <- bb %>%

  group_by(wday) %>%

  summarize(call = sum(call)) %>% as.data.frame() 


c_day <- p %>%

  group_by(wday) %>%

  summarize(call = sum(call)) %>% as.data.frame()


a_day


colnames(a_day) <- c("wday", "chicken_call")

colnames(b_day) <- c("wday", "chinafood_call")

colnames(c_day) <- c("wday", "pizza_call")


day_asc_chicken<-a_day %>% arrange(chicken_call)

day_asc_chinafood<-b_day %>% arrange(chinafood_call)

day_asc_pizza<-c_day %>% arrange(pizza_call)

day_asc_chicken

day_asc_chinafood

day_asc_pizza



a_day[,"chinafood_call"]=b_day$chinafood_call

a_day[,"pizza_call"]=c_day$pizza_call

a_day


data_wday_sample<-a_day[,c(2,3,4)]


chart.Correlation(data_wday_sample, histogram = T, pch=3)



#연령대 별


a_age<-aa %>% 

  group_by(연령대) %>% 

  summarise(통화건수=sum(통화건수)) %>% as.data.frame()


b_age <- bb %>%

  group_by(age) %>%

  summarize(call = sum(call)) %>% as.data.frame() 


c_age <- p %>%

  group_by(age) %>%

  summarize(call = sum(call)) %>% as.data.frame()


colnames(a_age) <- c("age", "chicken_call")

colnames(b_age) <- c("age", "chinafood_call")

colnames(c_age) <- c("age", "pizza_call")


age_asc_chicken<-a_age %>% arrange(chicken_call)

age_asc_chinafood<-b_age %>% arrange(chinafood_call)

age_asc_pizza<-c_age %>% arrange(pizza_call)

age_asc_chicken

age_asc_chinafood

age_asc_pizza


a_age[,"chinafood_call"]=b_age$chinafood_call

a_age[,"pizza_call"]=c_age$pizza_call

a_age


data_age_sample<-a_age[,c(2,3,4)]


chart.Correlation(data_age_sample, histogram = T, pch=3)



#일별


a_date<-aa %>% 

  group_by(기준일) %>% 

  summarise(통화건수=sum(통화건수)) %>% as.data.frame()


b_date <- bb %>% 

  group_by(date) %>%

  summarize(call = sum(call)) %>% as.data.frame() 


c_date <- p %>%

  group_by(date) %>%

  summarize(call = sum(call)) %>% as.data.frame()


colnames(a_date) <- c("date", "chicken_call")

colnames(b_date) <- c("date", "chinafood_call")

colnames(c_date) <- c("date", "pizza_call")


date_asc_chicken<-a_date %>% arrange(chicken_call)

date_asc_chinafood<-b_date %>% arrange(chinafood_call)

date_asc_pizza<-c_date %>% arrange(pizza_call)

head(date_asc_chicken)

head(date_asc_chinafood)

head(date_asc_pizza)


tail(date_asc_chicken)

tail(date_asc_chinafood)

tail(date_asc_pizza)



a_date[,"chinafood_call"]=b_date$chinafood_call

a_date[,"pizza_call"]=c_date$pizza_call

a_date


data_date_sample<-a_date[,c(2,3,4)]


chart.Correlation(data_age_sample, histogram = T, pch=3)




728x90
반응형