install.packages(“rattle”)
install.packages(“RColorBrewer”)
install.packages(“rpart.plot”)

#######################################
#1. 데이터 구성
#######################################
library(rattle)
library(RColorBrewer)
library(rpart.plot)

#일정한 Random 값을 갖도록한다. (언제 실행해도 1426 이라면 같은 Random 값)
set.seed(1426)

#R 에 내장된 샘플 CSV weather 를 읽어 온다
data(weather)

#weather 데이터를 ds 에 담는다.
ds <- get(“weather”)

# 제외할 컬럼 “Date” “Location” “RISK_MM”
id <- c(“Date”, “Location”)
risk <- “RISK_MM”
ignore <- c(id, if (exists(“risk”)) risk )

# vars : RainTommmorw 포함, 제외 컬럼은 제거
(vars <- setdiff(names(ds), ignore)) #B에는 없고 A 에만 있는 값만 리턴

# vars : RainTommmorw 제거
target <- “RainTomorrow”
inputs <- setdiff(vars, target)

# 원본 데이터의 Row 수 366
(nobs <- nrow(ds))

#intersect : 두 데이터가 공통적으로 가지고 있는 데이터만 리턴
#inputs : RainTomorrow 를 제외한 컬럼 리스트
#names(ds) : 데이터의 전체 컬럼 리스트
#vars : RainTomorrow 를 포함하고 제외항목을 뺀 리스트
#ds[vars] : vars 컬럼과 일치하는 데이터 셋
#apply : apply(M, 1, min)
# – M : 데이터
# – 1 : 열 , 2 : 행
# – 처리할 함수 : min 최소, max 최대, mean 평균
#sapply : apply 와 비슷함. 행으로 리턴
#lapply : apply 와 비슷함. 열로 리턴
#names(ds)[which(sapply(ds[vars], is.numeric))] : 값이 숫자인 컬럼만 리턴
(numerics <- intersect(inputs, names(ds)[which(sapply(ds[vars], is.numeric))]))

#데이터가 Fator (Char 포함) / RainTomorrow 제외
(categorics <- intersect(inputs, names(ds)[which(sapply(ds[vars], is.factor))]))

#RainTomorrow ~ . 이라고 formula 생성 / 막다른 변수 같은거 넣어서도 만들 수 있음
(form <- formula(paste(target, “~ .”)))

## nobs(366) 안에서 366*0.7 만큰의 Rnadom 값을 생성
length(train <- sample(nobs, 0.7*nobs))
length(test <- setdiff(seq_len(nobs), train))

## 내일 비가 올 것이냐, 그 확률 두가지 데이터를 뽑았다.
actual <- ds[test, target]
risks <- ds[test, risk]
#######################################
#2. 데이터 확인
#######################################
dim(ds)
names(ds)
head(ds)
tail(ds)
str(ds)
summary(ds)
######################################
#3. Decision Tree 생성
######################################
#rpart 메서드 사용 도움말
str(rpart)

#
model <- rpart(formula=form, data=ds[train, vars])

print(model)
summary(model)
plotcp(model)

# Plot Type 1
plot(model, uniform=TRUE)
text(model)

# Plot Type 2
plot(model, uniform=TRUE)
text(model, use.n=TRUE, all=TRUE, cex=.8)

# Plot Type 3
fancyRpartPlot(model)

# Plot Type 4
prp(model)

# Plot Type 5
prp(model, type=2, extra=104, nn=TRUE, fallen.leaves=TRUE,
faclen=0, varlen=0, shadow.col=”grey”, branch.lty=3)

# Plot Type 6
col <- c(“#FD8D3C”, “#FD8D3C”, “#FD8D3C”, “#BCBDDC”,
“#FDD0A2”, “#FD8D3C”, “#BCBDDC”)
prp(model, type=2, extra=104, nn=TRUE, fallen.leaves=TRUE,
faclen=0, varlen=0, shadow.col=”grey”, branch.lty=3, box.col=col)

# Plot Type 7
prp(model, type=1)
prp(model, type=2)
prp(model, type=3)
prp(model, type=4)

#
install.packages(“partykit”, repos=”http://R-Forge.R-project.org“)
library(partykit)
plot(as.party(model))