[ 복습 ]
1. 데이터 처리에서 기억해야할 ... 잘틀리는 부분 정리
2. 기본적인 그래프 작성 구문 정리
[ retail ] ... 새로운 변수의 추가 생성
- 변수목록 도출
- 변수 생성
[탐색적 분석 EDA ]
개념, 사례 ... retail 예제에 적용
[Business Understanding]
====>>> "여름에 어떤 고객에 집중할까?"
* 조단위 진행
- 변수목록 도출 (5개 신규 )
- 변수생성 (2개 이상)
- 탐색적 데이터 분석 --> 그래프 2장
- BU 문서화 (목표, 상황, 계획) 각 1page ppt 16 point
#==============================
복습 1. 데이터 처리에서 기억해야할 ... 잘틀리는 부분 정리
read.csv(“crashes.csv”)
read.csv(“roads.csv”)
df1 <- crashes[ quantile(crashes$N_Crashes, 0.5)<crashes$N_Crashes, ]
df1 <- crashes[ which(quantile(crashes$N_Crashes, 0.5)<crashes$N_Crashes) , ]
df2 <- crashes[, c(1:2)]
df2 <- crashes[, c(1:2, 4)]
factor 를 character로 취급하고 계산하고 있었으나, 값이 다르게 나옴
** as.character() 로 먼저 변환 후 처리
특정 컬럼을 지정해서 그 컬럼의 명칭을 변경하기
특정컬럼 지정 – 순서로 지정
names(df2[3])
names(df2[“Volume”])
특정컬럼 지정 – 컬럼이름으로 지정
names(df2[c("Volume", "Year")])
이름변경
names(df2)[3] <- "Volume1"
names(df7)[names(df7)=="Road"] <- "road"
집계 – aggregate()
df3 <- aggregate(crashes$Volume, by=list(crashes$Road), FUN=sum)
names(df3) <- c(“Road”, “Volume”)
[외우기]
aggregate by list ===> ABL
merge by c() ===> MBC
df301 <- aggregate(crashes$Volume, by=list(crashes$Road), FUN=mean)
*** FUN 에서 sum, mean, max, min 활용가능
*** FUN= 이라는 표현은 생략 가능
두 테이블 결합
df4<- merge(crashes, roads, by=c(“Road”))
디폴트는 Inner Join(교집합)
df5<- merge(crashes, roads, by=c("Road"), all.x=FALSE, all.y=TRUE)
all.x=FALSE, all.y=TRUE 옵션 설정으로 방식 변경 가능
빈칸 처리 -- NA 확인 후 값 변경
df6<-aggregate(crashes$N_Crashes, by=list(crashes$Road), mean)
df7 <- merge(roads, df6, by=c("Road"), all.x=TRUE)
is.na(df7$mean_Crashes)
df7$is_crashinfo <- 0
df7$is_crashinfo <- ifelse( !is.na(df7$mean_Crashes),1, df7$is_crashinfo)
정렬 :: - 는 내림차순
df8 <- df7[order(-df7$is_crashinfo),]
자주 사용하는 그래프 정리
plot(df7$Length, main=”length of road”)
plot(df7$Length, type=”b”, col=”grey”)
컬러는 “red”, “grey”, “blue”, “green”
선그래프는 l(line), 점과 선 모두는 b(both)
lines(df7$Length+2, type="b", col="red")
내림차순 정렬된 분포 생성
plot(df7$Length[order(- df7$Length)], main="length of road")
plot(df7$Length,df7$mean_Crashes)
abline(lm(df7$mean_Crashes~df7$Length), col="red")
단순선형회귀를 통해서 식을 구함
Plot의 두번째 컬럼이 Y 자리에
카테고리별 단순 크기 시각적 비교에 활용
dotchart(roads$Length,labels=roads$Road)
분포를 구간별로 비교
boxplot(crashes$Volume~crashes$Year,data=crashes)
점이 많은 경우 밀집된 영역이 구분되지 않는 문제를 피하기 위해 열지도 형식의 플롯 작성
require(gplots)
df8 <- df7[!is.na(df7$mean_Crashes), ]
NA가 포함되면 오류 발생, NA 미리 처리 필요
ci2d(df8$Length,df8$mean_Crashes)
또 다른 밀집도 분포 확인용 그래프
install.packages("hdrcde")
require(hdrcde)
hdr.boxplot.2d(crashes$N_Crashes, crashes$Volume)
# 밀집도 등고선 구간 지정
hdr.boxplot.2d(crashes$N_Crashes, crashes$Volume, prob = c(50, 75, 90), main="crashes against traffic volume by road")
# 회귀선 추가
abline(lm(crashes$Volume~crashes$N_Crashes), col="red")
후보변수 목록 도출 연습 ::
names(q70)
"amt2003" ~ "amt_sale" ,
"ndays", "maxdsale"
.... 그리고?
어느 상품군을 구매했는가?
온라인, 오프라인 다이용하는가?
구매간격이 짧아지고 있나?
마지막으로 구매한지 얼마나 지났는가?
tr01$d_datea <- as.Date((tr01$d_date)) df73 <- sqldf('select customer_id, max(d_datea) as maxddate from tr01 where year="2002" group by customer_id ') df73$maxddate <- as.Date((df73$maxddate)) df73$DaysfromLastP <- as.Date("2002-12-31") - df73$maxddate q71 <- merge(q70, df73[,c(1,3)], by=c("customer_id"), all.x=TRUE) )
얼마나 많은 상품군을 샀나?
# 몇개 클래스를 구매했나?
q72 <- sqldf('select distinct customer_id, sk_item_id
from tr01 where year="2002" ')
q73 <- sqldf('select a.*, b.sk_class_id
from tr01 as a left join sku01 as b
on a.sk_item_id=b.sk_item_id ')
q74 <- sqldf('select customer_id, count(distinct sk_class_id) as nclass
from q73
group by customer_id')
q75 <- merge(q71, q74, by=c("customer_id"), all.x=TRUE)
nrow(q75[is.na(q75$nclass),])
t1 <- ctree(q75$amt2003~q75$ndays+q75$amt_sale+q75$maxdsale + q75$DaysfromLastP
+q75$nclass, data=q75, controls = ctree_control(maxdepth = 3, mincriterion = 0.95,
minsplit = 50) )
plot(t1)
# 클래스별 구매고객수와 구매금액
q80 <- sqldf('select b.sk_class_id, b.class_name,
count(distinct a.customer_id) as ncust,
sum(a.t_item_amt_sale) as sumamt
from tr01 as a left join sku01 as b
on a.sk_item_id=b.sk_item_id
where a.year="2002"
group by b.sk_class_id' )
q81 <- q80[!is.na(q80$class_name),]
plot(q81$ncust, q81$sumamt)
'R 데이터 분석' 카테고리의 다른 글
retail :: 예측모델링 data prep + tree model (0) | 2015.07.07 |
---|---|
:: retail data preparation and EDA 연습 과제 (0) | 2015.07.06 |
retail example (0) | 2015.07.02 |
경기도 교통 데이터 추가[Dataset, 작업과제] (0) | 2015.06.30 |
0630 ... PART 3 (0) | 2015.06.30 |