캐글 자전거 수요 예측 분석

#작업하고자하는 디렉토리 설정
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="">
#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는 무엇인가?
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/

댓글

이 블로그의 인기 게시물

윈도우 설치에서 파티션 설정 오류(NTFS)

[exploit writing] 1_스택 기반 오버플로우 (1) First

하둡 설치 오류 정리