어제에 이어서 오늘도 프로젝트에 사용할 데이터 분석 자료를 올리려고 한다.
2018/04/26 - [프로젝트] - [프로젝트 데이터 분석] 상권분석을 위한 서울시 골목상권 프로파일링 정보(상권배후지-추정매출) in R - MongoDB
이 자료는 최종적으로 더 나은 매개변수를 선택하여 머신러닝을 하는데 도움을 줄 자료이다.
현재 집에는 데이터가 없으므로 코드만 올리도록 하겠다.
20180427 금일 실제 데이터가 나오는 것, 시각화가 되는 것을 확인했다.
.R 자료도 첨부한다.
=============================== R ===============================
##산점도를 이용하여 sales 데이터를 분석
##MongoDB_R_Commection.R 에서 만들어진 자료를 사용.
##데이터 정제
#데이터 정제를 위한 라이브러리 등록
library("dplyr")
#데이터가 0, 음수면 잘못된 값이기 때문에 그런 값들을 없애준다.
#없애기 전 데이터
dim(df) #29970 84
df_filter_age <- df %>% filter(!(AGRDE_10_SELNG_AMT <= 0) ) %>%
filter(!(AGRDE_20_SELNG_AMT <= 0)) %>% filter(!(AGRDE_30_SELNG_AMT <= 0)) %>%
filter(!(AGRDE_40_SELNG_AMT <= 0)) %>% filter(!(AGRDE_50_SELNG_AMT <= 0)) %>%
filter(!(AGRDE_60_ABOVE_SELNG_AMT <= 0))%>% filter(!(THSMON_SELNG_AMT <= 0))
dim(df_filter_age) #22852 84
#반응형 그래프를 그리기 위해 라이브러리 등록
library("ggplot2")
library("plotly")
# x축을 매출금액 으로 잡고 이것에 대한 변화량을
# y1 = 연령대 금액
# y2 = 시간대 금액
# y3 = 요일 금액
# 위와 같이 설정하여 분석한다.
#THSMON_SELNG_AMT: 당월_매출_금액
#1.###########################매출금액과 연령대 별 매출 금액의 관계
# AGRDE_10_SELNG_AMT: 연령대_10_매출_금액
# AGRDE_20_SELNG_AMT: 연령대_20_매출_금액
# AGRDE_30_SELNG_AMT: 연령대_30_매출_금액
# AGRDE_40_SELNG_AMT: 연령대_40_매출_금액
# AGRDE_50_SELNG_AMT: 연령대_50_매출_금액
# AGRDE_60_ABOVE_SELNG_AMT: 연령대_60_이상_매출_금액
#그래프 그리기
age_10 <- ggplot(df_filter_age, aes(x = THSMON_SELNG_AMT, AGRDE_10_SELNG_AMT)) + geom_point()
age_10
#데이터 확인 결과 점들이 앞부분에 몰려있어 제대로 된 데이터 분석이 어려워 상용로그를 취해 데이터 분포를 줄인다.
age_10 <- ggplot(df_filter_age, aes(x = log10(THSMON_SELNG_AMT), log10(AGRDE_10_SELNG_AMT))) + geom_point()
age_20 <- ggplot(df_filter_age, aes(x = log10(THSMON_SELNG_AMT), log10(AGRDE_20_SELNG_AMT))) + geom_point()
age_30 <- ggplot(df_filter_age, aes(x = log10(THSMON_SELNG_AMT), log10(AGRDE_30_SELNG_AMT))) + geom_point()
age_40 <- ggplot(df_filter_age, aes(x = log10(THSMON_SELNG_AMT), log10(AGRDE_40_SELNG_AMT))) + geom_point()
age_50 <- ggplot(df_filter_age, aes(x = log10(THSMON_SELNG_AMT), log10(AGRDE_50_SELNG_AMT))) + geom_point()
above_age_60 <- ggplot(df_filter_age, aes(x = log10(THSMON_SELNG_AMT), log10(AGRDE_60_ABOVE_SELNG_AMT))) + geom_point()
#각 그래프를 출력해본다.
age_10
age_20
age_30
age_40
age_50
above_age_60
##모든 그래프가 양적상관관계를 가지고 있다.
#어떤 회귀분석 모델을 사용할지 결정을 하기 위해 상관관계분석을 해본다.
df_amt_by_age <- df_filter_age %>% select(THSMON_SELNG_AMT, AGRDE_10_SELNG_AMT, AGRDE_20_SELNG_AMT, AGRDE_30_SELNG_AMT, AGRDE_40_SELNG_AMT, AGRDE_50_SELNG_AMT, AGRDE_60_ABOVE_SELNG_AMT)
df_amt_by_age_cor <- cor(df_amt_by_age)
#데이터를 출력해본다.
df_amt_by_age_cor
corrplot(df_amt_by_age_cor)
##0.5이상의 강한 상관관계가 나오므로 선형회귀분석을 이용하여도 충분한 자료를 얻을 수 있다고 판단.
#각 그래프에 선형회귀 분석을 한다.
age_10_lm <- age_10 + geom_smooth(method="lm")
age_20_lm <- age_20 + geom_smooth(method="lm")
age_30_lm <- age_30 + geom_smooth(method="lm")
age_40_lm <- age_40 + geom_smooth(method="lm")
age_50_lm <- age_50 + geom_smooth(method="lm")
above_age_60_lm <- above_age_60 + geom_smooth(method="lm")
#그래프를 출력해본다.
age_10_lm
age_20_lm
age_30_lm
age_40_lm
age_50_lm
above_age_60_lm
#선형회귀분석 summary를 얻기 위한 객체를 만든다.
age_10_lm_summ <- lm( log10(AGRDE_10_SELNG_AMT) ~ log10(THSMON_SELNG_AMT), data = df_filter)
age_20_lm_summ <- lm( log10(AGRDE_20_SELNG_AMT) ~ log10(THSMON_SELNG_AMT), data = df_filter)
age_30_lm_summ <- lm( log10(AGRDE_30_SELNG_AMT) ~ log10(THSMON_SELNG_AMT), data = df_filter)
age_40_lm_summ <- lm( log10(AGRDE_40_SELNG_AMT) ~ log10(THSMON_SELNG_AMT), data = df_filter)
age_50_lm_summ <- lm( log10(AGRDE_50_SELNG_AMT) ~ log10(THSMON_SELNG_AMT), data = df_filter)
above_age_60_lm_summ <- lm( log10(AGRDE_60_ABOVE_SELNG_AMT) ~ log10(THSMON_SELNG_AMT), data = df_filter)
#각각의 summary를 확인
summary(age_10_lm_summ)
summary(age_20_lm_summ)
summary(age_30_lm_summ)
summary(age_40_lm_summ)
summary(age_50_lm_summ)
summary(above_age_60_lm_summ)
#2.###########################매출금액과 시간대 별 매출 금액의 관계
# TMZON_00_06_SELNG_AMT: 시간대_00~06_매출_금액
# TMZON_06_11_SELNG_AMT: 시간대_06~11_매출_금액
# TMZON_11_14_SELNG_AMT: 시간대_11~14_매출_금액
# TMZON_14_17_SELNG_AMT: 시간대_14~17_매출_금액
# TMZON_17_21_SELNG_AMT: 시간대_17~21_매출_금액
# TMZON_21_24_SELNG_AMT: 시간대_21~24_매출_금액
#데이터 정제
dim(df) #29970 84
df_filter_time <- df %>% filter(!(TMZON_00_06_SELNG_AMT <= 0) ) %>%
filter(!(TMZON_06_11_SELNG_AMT <= 0)) %>% filter(!(TMZON_11_14_SELNG_AMT <= 0)) %>%
filter(!(TMZON_14_17_SELNG_AMT <= 0)) %>% filter(!(TMZON_17_21_SELNG_AMT <= 0)) %>%
filter(!(TMZON_21_24_SELNG_AMT <= 0))%>% filter(!(THSMON_SELNG_AMT <= 0))
dim(df_filter_time) #15371 84
#그래프 그리기
time_00_06 <- ggplot(df_filter_time, aes(x = THSMON_SELNG_AMT, TMZON_00_06_SELNG_AMT)) + geom_point()
time_00_06
#데이터 확인 결과 점들이 앞부분에 몰려있어 제대로 된 데이터 분석이 어려워 상용로그를 취해 데이터 분포를 줄인다.
time_00_06 <- ggplot(df_filter_time, aes(x = log10(THSMON_SELNG_AMT), log10(TMZON_00_06_SELNG_AMT))) + geom_point()
time_06_11 <- ggplot(df_filter_time, aes(x = log10(THSMON_SELNG_AMT), log10(TMZON_06_11_SELNG_AMT))) + geom_point()
time_11_14 <- ggplot(df_filter_time, aes(x = log10(THSMON_SELNG_AMT), log10(TMZON_11_14_SELNG_AMT))) + geom_point()
time_14_17 <- ggplot(df_filter_time, aes(x = log10(THSMON_SELNG_AMT), log10(TMZON_14_17_SELNG_AMT))) + geom_point()
time_17_21 <- ggplot(df_filter_time, aes(x = log10(THSMON_SELNG_AMT), log10(TMZON_17_21_SELNG_AMT))) + geom_point()
time_21_24 <- ggplot(df_filter_time, aes(x = log10(THSMON_SELNG_AMT), log10(TMZON_21_24_SELNG_AMT))) + geom_point()
#각 그래프를 출력해본다.
time_00_06
time_06_11
time_11_14
time_14_17
time_17_21
time_21_24
##모든 그래프가 양적상관관계를 가지고 있다.
#어떤 회귀분석 모델을 사용할지 결정을 하기 위해 상관관계분석을 해본다.
df_amt_by_time <- df_filter_time %>% select(THSMON_SELNG_AMT, TMZON_00_06_SELNG_AMT, TMZON_06_11_SELNG_AMT, TMZON_11_14_SELNG_AMT, TMZON_14_17_SELNG_AMT, TMZON_17_21_SELNG_AMT, TMZON_21_24_SELNG_AMT)
df_amt_by_time_cor <- cor(df_amt_by_time)
#데이터를 출력해본다.
df_amt_by_time_cor
corrplot(df_amt_by_time_cor)
##0.5이상의 강한 상관관계가 나오므로 선형회귀분석을 이용하여도 충분한 자료를 얻을 수 있다고 판단.
#각 그래프에 선형회귀 분석을 한다.
time_00_06_lm <- time_00_06 + geom_smooth(method = "lm")
time_06_11_lm <- time_06_11 + geom_smooth(method = "lm")
time_11_14_lm <- time_11_14 + geom_smooth(method = "lm")
time_14_17_lm <- time_14_17 + geom_smooth(method = "lm")
time_17_21_lm <- time_17_21 + geom_smooth(method = "lm")
time_21_24_lm <- time_21_24 + geom_smooth(method = "lm")
#그래프를 출력해본다
time_00_06_lm
time_06_11_lm
time_11_14_lm
time_14_17_lm
time_17_21_lm
time_21_24_lm
#선형회귀분석 summary를 얻기 위한 객체를 만든다.
time_00_06_lm_summ <- lm( log10(TMZON_00_06_SELNG_AMT) ~ log10(THSMON_SELNG_AMT), data = df_filter_time)
time_06_11_lm_summ <- lm( log10(TMZON_06_11_SELNG_AMT) ~ log10(THSMON_SELNG_AMT), data = df_filter_time)
time_11_14_lm_summ <- lm( log10(TMZON_11_14_SELNG_AMT) ~ log10(THSMON_SELNG_AMT), data = df_filter_time)
time_14_17_lm_summ <- lm( log10(TMZON_14_17_SELNG_AMT) ~ log10(THSMON_SELNG_AMT), data = df_filter_time)
time_17_21_lm_summ <- lm( log10(TMZON_17_21_SELNG_AMT) ~ log10(THSMON_SELNG_AMT), data = df_filter_time)
time_21_24_lm_summ <- lm( log10(TMZON_21_24_SELNG_AMT) ~ log10(THSMON_SELNG_AMT), data = df_filter_time)
#각각의 summary를 확인
summary(time_00_06_lm_summ)
summary(time_06_11_lm_summ)
summary(time_11_14_lm_summ)
summary(time_14_17_lm_summ)
summary(time_17_21_lm_summ)
summary(time_21_24_lm_summ)
#3.###########################매출금액과 요일 별 매출 금액의 관계
# MON_SELNG_AMT: 월요일_매출_금액
# TUES_SELNG_AMT: 화요일_매출_금액
# WED_SELNG_AMT: 수요일_매출_금액
# THUR_SELNG_AMT: 목요일_매출_금액
# FRI_SELNG_AMT: 금요일_매출_금액
# SAT_SELNG_AMT: 토요일_매출_금액
# SUN_SELNG_AMT: 일요일_매출_금액
#데이터 정제
dim(df) #29970 84
df_filter_day <- df %>% filter(!(MON_SELNG_AMT <= 0) ) %>%
filter(!(TUES_SELNG_AMT <= 0)) %>% filter(!(WED_SELNG_AMT <= 0)) %>%
filter(!(THUR_SELNG_AMT <= 0)) %>% filter(!(FRI_SELNG_AMT <= 0)) %>%
filter(!(SAT_SELNG_AMT <= 0)) %>% filter(!(SUN_SELNG_AMT <= 0)) %>%
filter(!(THSMON_SELNG_AMT <= 0))
dim(df_filter_day) #25751 84
#그래프 그리기
mon <- ggplot(df_filter_day, aes(x = THSMON_SELNG_AMT, MON_SELNG_AMT)) + geom_point()
mon
#데이터 확인 결과 점들이 앞부분에 몰려있어 제대로 된 데이터 분석이 어려워 상용로그를 취해 데이터 분포를 줄인다.
mon <- ggplot(df_filter_day, aes(x = log10(THSMON_SELNG_AMT), log10(MON_SELNG_AMT))) + geom_point()
tues <- ggplot(df_filter_day, aes(x = log10(THSMON_SELNG_AMT), log10(TUES_SELNG_AMT))) + geom_point()
wed <- ggplot(df_filter_day, aes(x = log10(THSMON_SELNG_AMT), log10(WED_SELNG_AMT))) + geom_point()
thur <- ggplot(df_filter_day, aes(x = log10(THSMON_SELNG_AMT), log10(THUR_SELNG_AMT))) + geom_point()
fri <- ggplot(df_filter_day, aes(x = log10(THSMON_SELNG_AMT), log10(FRI_SELNG_AMT))) + geom_point()
sat <- ggplot(df_filter_day, aes(x = log10(THSMON_SELNG_AMT), log10(SAT_SELNG_AMT))) + geom_point()
sun <- ggplot(df_filter_day, aes(x = log10(THSMON_SELNG_AMT), log10(SUN_SELNG_AMT))) + geom_point()
#각 그래프를 출력해본다.
mon
tues
wed
thur
fri
sat
sun
##모든 그래프가 양적상관관계를 가지고 있다.
#상관관계분석을 해본다.
df_amt_by_day <- df_filter_day %>% select(THSMON_SELNG_AMT, MON_SELNG_AMT, TUES_SELNG_AMT, WED_SELNG_AMT, THUR_SELNG_AMT, FRI_SELNG_AMT, SAT_SELNG_AMT, SUN_SELNG_AMT)
df_amt_by_day_cor <- cor(df_amt_by_day)
#데이터를 출력해본다.
df_amt_by_day_cor
corrplot(df_amt_by_day_cor)
##사실상 모두 0.8이상의 아주 강한 상관관계가 있어 의미없는 데이터라고 판단된다
##주중보다 주말이 더 상관관계가 높다는 것은 이미 앞에서 밝힌 바 있다.
##이하 그냥 해보는 것
#각 그래프에 선형회귀 분석을 한다.
mon_lm <- mon + geom_smooth(method = "lm")
tues_lm <- tues + geom_smooth(method = "lm")
wed_lm <- wed + geom_smooth(method = "lm")
thur_lm <- thur + geom_smooth(method = "lm")
fri_lm <- fri + geom_smooth(method = "lm")
sat_lm <- sat + geom_smooth(method = "lm")
sun_lm <- sun + geom_smooth(method = "lm")
#그래프를 출력해본다
mon_lm
tues_lm
wed_lm
thur_lm
fri_lm
sat_lm
sun_lm
#선형회귀분석 summary를 얻기 위한 객체를 만든다.
mon_lm_summ <- lm( log10(MON_SELNG_AMT) ~ log10(THSMON_SELNG_AMT), data = df_filter_day)
tues_lm_summ <- lm( log10(TUES_SELNG_AMT) ~ log10(THSMON_SELNG_AMT), data = df_filter_day)
wed_lm_summ <- lm( log10(WED_SELNG_AMT) ~ log10(THSMON_SELNG_AMT), data = df_filter_day)
thur_lm_summ <- lm( log10(THUR_SELNG_AMT) ~ log10(THSMON_SELNG_AMT), data = df_filter_day)
fri_lm_summ <- lm( log10(FRI_SELNG_AMT) ~ log10(THSMON_SELNG_AMT), data = df_filter_day)
sat_lm_summ <- lm( log10(SAT_SELNG_AMT) ~ log10(THSMON_SELNG_AMT), data = df_filter_day)
sun_lm_summ <- lm( log10(SUN_SELNG_AMT) ~ log10(THSMON_SELNG_AMT), data = df_filter_day)
#각각의 summary를 확인
summary(mon_lm_summ)
summary(tues_lm_summ)
summary(wed_lm_summ)
summary(thur_lm_summ)
summary(fri_lm_summ)
summary(sat_lm_summ)
summary(sun_lm_summ)
=============================== R ===============================
오늘 분석 자료도 큰 의미가 있는 자료는 아니었다.
상식적으로 상관관계가 높을 것이라 예상되기 때문이다.
다만 실제 확인하는 것과 직감적으로 아는 것은 차이가 있기에 의미가 있었다고 할 수 있다.
그리고 오늘의 자료는 내일 두 자료를 join시키는데 이용할 것이기 때문에 데이터 확인을 위해 꼭 필요한 작업이었다.
내일은 더 나은 분석과 웹 프로그래밍을 할 수 있기를 바란다.
'프로젝트' 카테고리의 다른 글
[프로젝트 데이터 분석] 매출액과 아파트 면적, 가격, 기타 아파트 자료와의 상관관계 분석 및 시각화(상권배후지-추정매출) in R - MongoDB (0) | 2018.04.28 |
---|---|
[Error] 데이터를 정제하지 않아 생기는 에러 (0) | 2018.04.27 |
[프로젝트 데이터 분석] 상권분석을 위한 서울시 골목상권 프로파일링 정보(상권배후지-추정매출) in R - MongoDB (0) | 2018.04.26 |
[Error] 미사용 서블릿을 load-on-startup에 올려놓았을 때 생기는 에러 및 해결 (0) | 2018.04.20 |
[Error]ClassNotFoundException 에러 및 해결 (0) | 2018.04.20 |