:: retail data preparation and EDA 연습 과제
================
[1] subclass중 구매고객수가 가장 많은 것은?
[2] 재구매주기가 가장 짧은 class는 무엇인가?
[3] class별 1일 100불 이상 구매건이 가장 많은 것은?
[4] 온라인에서 구매가 가장 많은 dept는?
[5] 주말의 일평균 구매가 주중보다 많은 item은?
[6] 구매고객수가 많은 요일은 언제인가?
[7] 월말과 월초에 구매가 집중되는 현상이 있는가?
[8] 월별 구매고객수의 편차가 가장 큰 class는?
[9] 온라인과 오프라인 구매 금액 합계를 월별로 구하라
#-----------
[10] 구매고객수가 가장 많은 3개 dept에 대하여 분기별 50불이상 구매 고객수를 산출하라
[11] 1회구매에서 수량이 가장 많은 class는?
[12] 1개월에 1000불 이상 구매한 다음달에 구매액이 평균보다 낮아지는 현상이 있는가?
[13] 구매건수 상위 10% 고객과 20% 고객이 가장 많이 구매하는 상품리스트 Top 5는?
[14] 금액이 많은 고객 10%와 구매 빈도가 높은 고객 10%간에는 어떤 특성 차이가 있는가?
#------------
:: retail data preparation and EDA 연습 과제
================
[1] subclass중 구매고객수가 가장 많은 것은?
[2] 재구매주기가 가장 짧은 class는 무엇인가?
[3] class별 1일 100불 이상 구매건이 가장 많은 것은?
[4] 온라인에서 구매가 가장 많은 dept는?
[5] 주말의 일평균 구매가 주중보다 많은 item은?
[6] 구매고객수가 많은 요일은 언제인가?
[7] 월말과 월초에 구매가 집중되는 현상이 있는가?
[8] 월별 구매고객수의 편차가 가장 큰 class는?
[9] 온라인과 오프라인 구매 금액 합계를 월별로 구하라
#-----------
[10] 구매고객수가 가장 많은 3개 dept에 대하여 분기별 50불
이상 구매 고객수를 산출하라
[11] 1회구매에서 수량이 가장 많은 class는?
[12] 1개월에 1000불 이상 구매한 다음달에 구매액이 평균보
다 낮아지는 현상이 있는가?
[13] 구매건수 상위 10% 고객과 20% 고객이 가장 많이 구매하
는 상품리스트 Top 5는?
[14] 금액이 많은 고객 10%와 구매 빈도가 높은 고객 10%간에
는 어떤 특성 차이가 있는가?
[ day of week in R ]
http://stackoverflow.com/questions/921613
8/find-the-day-of-a-week-in-r
#=====================================
=====
tr01 <- read.csv("tb_tr01.csv")
sku01 <- read.csv("sku_mast01.csv")
require(sqldf)
[1] subclass중 구매고객수가 가장 많은 것은?
q11 <- sqldf('select count(distinct a.customer_id) as ncust,
b.sk_subclass_id, b.subclass_name
from tr01 as a left join sku01 as b
on a.sk_item_id = b.sk_item_id
group by b.sk_subclass_id')
q11[order(q11$ncust),]
df01 <- tail(q11[order(q11$ncust),], 5 )
plot(q11[-order(q11$ncust),"ncust"])
# LEFT JOIN만 먼저 실시
q12 <- sqldf('select a.*, b.sk_subclass_id,
b.subclass_name
from tr01 as a left join sku01 as b
on a.sk_item_id = b.sk_item_id')
# GROUP BY를 이어서 실시
q13 <- sqldf('select sk_subclass_id,
subclass_name,
count(distinct customer_id) as ncust
from q12
group by sk_subclass_id ')
is.na(head(q13$subclass_name) )
#===========
head(sku01$sk_subclass_id[order(sku01$sk_subclass_id)],3)
tail(sku01$sk_subclass_id[order(sku01$sk_subclass_id)],3)
[2] 재구매주기가 가장 짧은 class는 무엇인가?
[ 5704908 ]번 고객의 구매주기는?
1. [ 5704908 ] 번의 tr만 추출
q21 <-sqldf('select * from tr01
where customer_id=5704908')
nrow(q21)
tr01$d_date <- as.Date(as.POSIXct(tr01$d_date,
origin='1960-01-01',tz="UTC"))
2. 구매한 날짜의 리스트만 추출
q22 <- sqldf('select distinct d_date
from q21 order by d_date')
q23 <- sqldf('select customer_id,
count(distinct d_date) as ndays
from tr01
group by customer_id')
head(q23[order(-q23$ndays),],2)
q24 <- sqldf('select max(d_date) as maxddate,
min(d_date) as minddate
from q22')
q24$dateasd <- as.Date(q24$maxddate, origin='1960-01-
01')
# 날짜 타입변경 check!
#----------------------
[ 5704908 ]번 고객의 구매주기는?
(q22$d_date[nrow(q22)] - q22$d_date[1] )/(nrow(q22) -1 )
# 전체고객의 구매주기를 고객별로
q25 <- sqldf('select distinct customer_id, d_date
from tr01
group by customer_id, d_date
order by customer_id, d_date ')
q25 <- sqldf('select distinct customer_id, d_date
from tr01
order by customer_id, d_date ')
q25$d_date <- as.character(q25$d_date)
q26 <- sqldf('select customer_id,
min(d_date) as minddate,
max(d_date) as maxddate,
count(distinct d_date) as ndays
from q25
group by customer_id ')
q26$minddate <- as.Date(q26$minddate)
q26$maxddate <- as.Date(q26$maxddate)
q26$datediff <- as.numeric(q26$maxddate -
q26$minddate)
q26$avg_rpcycle <- ifelse( q26$ndays>1, q26$datediff /
(q26$ndays-1), NA)
plot(sort(q26$avg_rpcycle))
# 고객단위가 아니라, Class 별로 계산해야하므로
# sk_class_id, customer_id, d_date
q31 <- sqldf('select a.customer_id, a.d_date,
b.sk_class_id
from tr01 as a left join sku01 as b
on a.sk_item_id=b.sk_item_id ')
q31$d_date <- as.character(q31$d_date)
q32 <- sqldf('select sk_class_id, customer_id,
min(d_date) as minddate,
max(d_date) as maxddate,
count(distinct d_date) as ndays
from q31
group by sk_class_id, customer_id
order by sk_class_id, customer_id
')
q32$minddate <- as.Date(q32$minddate)
q32$maxddate <- as.Date(q32$maxddate)
q32$datediff <- as.numeric(q32$maxddate -
q32$minddate)
q32$avg_rpcycle <- ifelse( q32$ndays>1, q32$datediff /
(q32$ndays-1), NA)
q32 <- q32[order( - c(q32$sk_class_id, q32$avg_rpcycle) ),]
tail(q32$avg_rpcycle,10)
nrow( q32[is.na(q32$avg_rpcycle),])
q33 <- sqldf('select sk_class_id, avg(avg_rpcycle) as
avg_rpcycle
from q32
where avg_rpcycle is not null
group by sk_class_id ')
plot(sort(q33$avg_rpcycle))
[4] 온라인에서 구매가 가장 많은 dept는?
q41 <- sqldf('select b.sk_department_id,
b.department_name,
count(distinct a.sk_transaction_id) as ntrx,
avg(t_item_amt_sale) as avg_amt
from tr01 as a left join sku01 as b
on a.sk_item_id=b.sk_item_id
where a.channel_id=on"
group by b.sk_department_id ')
q42 <- head(q41[order(-q41$ntrx),], 10)
require(lubridate)
weekdays(Sys.Date())
plot(q42$ntrx, q42$avg_amt)
text(q42$ntrx, q42$avg_amt, q42$department_name, adj
= c( 0, 1 ), col="blue) )
[5] 주말의 일평균 구매가 주중보다 많은 item은?
require(lubridate)
tr01$wday <- weekdays(tr01$d_date)
tr01$is_wend <-ifelse(tr01$wday=="토요일" |
tr01$wday=="일요일", "weekend", "weekday")
q51 <- sqldf('select sk_item_id,
is_wend,
count(distinct d_date) as ndays
from tr01
group by sk_item_id, is_wend
order by sk_item_id, is_wend ')
q52 <- sqldf('select distinct sk_item_id
from tr01')
q53 <- sqldf('select a.*, b.ndays as ndays_wd
from q52 as a left join (select * from q51
where is_wend = "weekday") as b
on a.sk_item_id=b.sk_item_id ')
q54 <- sqldf('select a.*, b.ndays as ndays_wend
from q53 as a left join (select * from q51
where is_wend = "weekend") as b
on a.sk_item_id=b.sk_item_id ')
q55 <- q54
# 주중일평균건수
q55$ndays_wda <- q55$ndays_wd/5
# 주말일평균건수
q55$ndays_wenda <- q55$ndays_wend/2
# 주말대비주중 비율 = 주말 / 주중
q55$ndays_rdaynend <- q55$ndays_wenda/
q55$ndays_wda
q56<- tail(head(q55[order(- q55$ndays_rdaynend),],200),6)
# q56<- head(tail(q55[order(-
q55$ndays_rdaynend),],200),6)
q57 <- sqldf('select a.sk_item_id, b.sku_description,
a.ndays_rdaynend
from q56 as a left join sku01 as b
on a.sk_item_id=b.sk_item_id' )
'R 데이터 분석' 카테고리의 다른 글
predictive modeling :: algorithms and interpretation (0) | 2015.07.08 |
---|---|
retail :: 예측모델링 data prep + tree model (0) | 2015.07.07 |
0702 빅Labor .... 주제 (0) | 2015.07.03 |
retail example (0) | 2015.07.02 |
경기도 교통 데이터 추가[Dataset, 작업과제] (0) | 2015.06.30 |