캐글 자전거 수요 예측 분석
#작업하고자하는 디렉토리 설정
setwd("/users/Brandon/Dropbox/Kaggle/Bike Sharing/")
#작업하고자하는 데이터 불러와서 변수에 저장
train <- class="go" color="#888888" font="" read.csv="(" train.csv="">test <- read.csv="" span="" test.csv="">
->->
#str(오브젝트 명) 오브젝트 요약 출력, 데이터 개수, 항목 개수,항목 명,형식, 예시 등
str(train)
'data.frame': 10886 obs. of 12 variables:
$ datetime : Factor w/ 10886 levels "2011-01-01 00:00:00",..: 1 2 3 4 5 6 7 8 9 10 ...
$ season : int 1 1 1 1 1 1 1 1 1 1 ...
$ holiday : int 0 0 0 0 0 0 0 0 0 0 ...
$ workingday: int 0 0 0 0 0 0 0 0 0 0 ...
$ weather : int 1 1 1 1 1 2 1 1 1 1 ...
$ temp : num 9.84 9.02 9.02 9.84 9.84 ...
$ atemp : num 14.4 13.6 13.6 14.4 14.4 ...
$ humidity : int 81 80 80 75 75 75 80 86 75 76 ...
$ windspeed : num 0 0 0 0 0 ...
$ casual : int 3 8 5 3 0 0 2 1 1 8 ...
$ registered: int 13 32 27 10 1 1 0 2 7 6 ...
$ count : int 16 40 32 13 1 1 2 3 8 14 ...
#factor은 무엇인가?
gender <- c="" p="">summary(gender) Min 1st Qu. Median Mean 3rd Qu. Max. 1.0 1.0 2.0 1.6 2.0 2.0 gender <- factor="" gender="" p="">gender [1] 1 1 2 2 1 2 2 2 1 2 Levels : 1 2 1과 2가 무엇을 의미하는지 파악이 불가능하기 때문에, 이름을 가지는 Label 을 구성해보자 gender <- c="" p="">gender <- factor="" female="" gender="" levels="c(1,2),labels=c(" male="" p="">gender [1] male male female female male female female female male female Levels : male female->->->->
출처 : http://sosal.tistory.com/708
#train 데이터를 factorize한다. train_factor <- span="" train=""> train_factor$weather <- factor="" span="" train="" weather=""> train_factor$holiday <- factor="" holiday="" span="" train=""> train_factor$workingday <- factor="" span="" train="" workingday=""> train_factor$season <- factor="" season="" span="" train="">->->->->->
write.csv는 무엇인가?
#test 데이터 또한 factorize한다. test_factor <- span="" test=""> test_factor$weather <- factor="" span="" test="" weather=""> test_factor$holiday <- factor="" holiday="" span="" test=""> test_factor$workingday <- factor="" span="" test="" workingday=""> test_factor$season <- factor="" season="" span="" test="">->->->->->
#datetime열을 추가한다. train_factor$time <- datetime="" span="" substring="" train=""> test_factor$time <- datetime="" span="" substring="" test="">->->
#substring은 무엇인가?말 그대로 원하는 특정 부분을 자르는 함수이다.기본 사용 방법:
저장 될 변수 <- pre="" substr="">위와 예를 들면,substring(test$datetime,12,20)
2011-01-20 00:00:00 중에 12번째인 0부터 20번째인 0까지 00:00:00임.
#time열을 factorize한다.
train_factor$day <- as.date="" datetime="" span="" train_factor="" weekdays="">->
train_factor$day <- as.factor="" day="" span="" train_factor="">->
test_factor$day <- as.date="" datetime="" span="" test_factor="" weekdays="">->
test_factor$day <- as.factor="" day="" span="" test_factor="">->
#weekdays(),as.Date와 as.factor()는 무엇인가?
x <- as.date="" pre="">weekdays(x)[1] "Friday"as.factor(type)은 type을 요인변수로 만드는 명령어
#데이터 부분별로 함수를 적용해서 통계량을 구하는 함수
aggregate(train_factor[,"count"],list(train_factor$day),mean) Group.1 x 1 Friday 197.8443 2 Monday 190.3907 3 Saturday 196.6654 4 Sunday 180.8398 5 Thursday 197.2962 6 Tuesday 189.7238 7 Wednesday 188.4113
#aggregate()는 무엇인가?
데이터 부분별로 함수를 적용해서 통계량을 구하는 함수
aggregation(x,by,FUN)x : 대상 자료 객체by : 그룹화할 리스트FUN : 적용할 함수->#Sunday 변수 생성 train_factor$sunday[train_factor$day == "Sunday"] <- span=""> train_factor$sunday[train_factor$day != "1"] <- span=""> test_factor$sunday[test_factor$day == "Sunday"] <- span=""> test_factor$sunday[test_factor$day != "1"] <- span=""> #Sunday 변수 factorize한다 train_factor$sunday <- as.factor="" span="" sunday="" train_factor=""> test_factor$sunday <- as.factor="" span="" sunday="" test_factor="">->->->->->->
#hour에 time에서 1부터 2까지를 잘라 대입한다. train_factor$hour<- as.numeric="" span="" substr="" time="" train_factor=""> test_factor$hour<- as.numeric="" span="" substr="" test_factor="" time=""> #daypart에 4를 대입한다. train_factor$daypart <- span=""> test_factor$daypart <- span=""> #hour가 3보다 크고 10보다 작으면 daypart에 1을 대입 train_factor$daypart[(train_factor$hour < 10) & (train_factor$hour > 3)] <- 1="" span=""> test_factor$daypart[(test_factor$hour < 10) & (test_factor$hour > 3)] <- 1="" span=""> #hour가 9보다 크고 16보다 작으면 daypart에 2를 대입 train_factor$daypart[(train_factor$hour < 16) & (train_factor$hour > 9)] <- 2="" span=""> test_factor$daypart[(test_factor$hour < 16) & (test_factor$hour > 9)] <- 2="" span=""> #hour가 15보다 크고 22보다 작으면 daypart에 3를 대입 train_factor$daypart[(train_factor$hour < 22) & (train_factor$hour > 15)] <- 3="" span=""> test_factor$daypart[(test_factor$hour < 22) & (test_factor$hour > 15)] <- 3="" span=""> #daypart를 factorize한다. train_factor$daypart <- as.factor="" daypart="" span="" train_factor=""> test_factor$daypart <- as.factor="" daypart="" span="" test_factor=""> #numeric이였던 hour을 다시 factor로 바꾼다. train_factor$hour <- as.factor="" hour="" span="" train_factor=""> test_factor$hour <- as.factor="" hour="" span="" test_factor="">->->->->->->->->->->->->->->
->#ctree를 쓰기 위해 party 패키지를 설치
install.packages('party') library('party') ?ctree Description Recursive partitioning for continuous, censored, ordered, nominal and multivariate response variables in a conditional inference framework. Usage ctree(formula, data, subset = NULL, weights = NULL, controls = ctree_control(), xtrafo = ptrafo, ytrafo = ptrafo, scores = NULL)
formula <- atemp="" count="" daypart="" holiday="" hour="" humidity="" season="" span="" sunday="" temp="" weather="" workingday="">->
#데이터 모델을 만듦 fit.ctree <- ctree="" data="train_factor)</span" formula="">->
#데이터 모델 실행fit.ctree#데이터 모델으로 테스트 데이터를 실행 predict.ctree <- fit.ctree="" predict="" span="" test_factor=""> #예측 결과를 데이터 프레임으로 만듦 submit.ctree <- count="predict.ctree)</span" data.frame="" datetime="test$datetime,"> #새로운 .csv를 씀 write.csv(submit.ctree, file="submit_ctree_v1.csv",row.names=FALSE->->
write.csv(submit.ctree, file="submit_ctree_v1.csv",row.names=FALSE)
submit.ctree 데이터 프레임을 submit_ctree_v1.csv로 저장한다.
다음에 party 패키지에서 ctree 함수에 대해 다음에 더 자세히 알아보도록 해야겠다.
출처 : http://brandonharris.io/kaggle-bike-sharing/
댓글
댓글 쓰기