>RE::VISION CRM

R 데이터 분석

0713 백업

YONG_X 2015. 7. 13. 17:20

#-----------

[ 차주강의 주제 ] ==========

시계열 예측 - ARIMA Vs. RF
--------------------[data]----------------------

http://www.statmethods.net/advstats/timeseries.html
http://robjhyndman.com/forecasting/data/
http://robjhyndman.com/software/forecast/


군집화 - k-means

Graph 복습 + labeling

GeoMapping
http://visualize.tistory.com/57 전희원 ggmap 활용 네이버지도위에그림 )


기술환경 - 툴, 기술, 언어, 적용사례, 대량데이터, 비정형데이터
  (특허 분석, 부동산 분석 )

자라섬 or CCTV[수원시] :: 분석 미니 프로젝트 - 3인1조 (1.5일)
--[부동산실거래가 + 건축물대장]

개인별 객관식 시험


[ 연기 대상] ==========

예측모델링 고급 기법 - SVM, GLM logistic

통계분석 기초 - t테스트, F테스트, ANOVA


추천 ::
[ Collaborative Filtering with R : Salem Marafi ]
[ http://www.r-bloggers.com/testing-recommender-systems-in-r/ ]

#-----------------

ggapt06<- read.csv('gg201506매매아파트.csv')


require(RgoogleMaps)
#------------------------
# 예지관 :: , 127.036120
# 돈까쓰 :: 37.300944, 127.036311
# 커피 :: 37.300546, 127.037066

dlat <- c(37.300906, 37.300944, 37.300546 )
dlong <- c(127.036120, 127.036311, 127.037066 )
dlab <- c("교육장", "식당", "휴식처편의점")
dcol <- c("red", "blue", "grey")
dsize <- c(2,1,0.5 )

map_info <- data.frame(dlat, dlong, dlab, dcol, dsize)
names(map_info) <- c( "latitude", "longitude", "label", "color", "pointsize")

#---------------
map.center <- c(37.300485,127.035833)
zoom.level <-17

mymap <- GetMap(center = map.center, zoom = zoom.level, maptype = "roadmap",

format = "png32")

# 점마다의 중요도와 의미에 따라 색상과 크기 조절 가능 (df에 미리 저장해 사용

)

PlotOnStaticMap(mymap, lat = map_info$latitude, lon =map_info$longitude, 

destfile = "mymap.point.png", cex = map_info$pointsize, pch =19,

col=map_info$color)

TextOnStaticMap(mymap, lat = map_info$latitude, lon = map_info$longitude,

labels=paste(map_info$label,as.character(map_info$pointsize)), cex=0.8, col =

'blue')

#----------------------


map.center <- c(37.265, 127.0823)

#------------------------
# 예지관 :: , 127.036120
# 돈까쓰 :: 37.300944, 127.036311
# 커피 :: 37.300546, 127.037066

dlat <- c(37.300906, 37.300944, 37.300546 )
dlong <- c(127.036120, 127.036311, 127.037066 )
dlab <- c("교육장", "식당", "휴식처편의점")
dcol <- c("red", "blue", "grey")
dsize <- c(2,1,0.5 )

map_info <- data.frame(dlat, dlong, dlab, dcol, dsize)
names(map_info) <- c( "latitude", "longitude", "label", "color", "pointsize")

#---------------
map.center <- c(37.300485,127.035833)
zoom.level <-17

mymap <- GetMap(center = map.center, zoom = zoom.level, maptype = "roadmap",

format = "png32")

# 점마다의 중요도와 의미에 따라 색상과 크기 조절 가능 (df에 미리 저장해 사용

)

PlotOnStaticMap(mymap, lat = map_info$latitude, lon = map_info$longitude, 

destfile = "mymap.point.png", cex = map_info$pointsize, pch =19,

col=map_info$color)

TextOnStaticMap(mymap, lat = map_info$latitude, lon = map_info$longitude,

labels=paste(map_info$label,as.character(map_info$pointsize)), cex=0.8, col =

'blue')

#----------------------


mydata <- c(1, 1, 1, 1,   1, 1, 1, 1,   1, 1, 1, 3,   1, 1, 1, 1)
gadm$mydata <- as.factor(mydata)

# 컬러 선택
col = rainbow(length(levels(gadm$mydata)))
spplot(gadm, "mydata", col.regions=col, main="Provinces Yong  Visits")

#------------------

require(sp)

print(load("KOR_adm2.RData"))

# gadm is a large scale polygonal data frame with 229 elements
# south Korea 전체 데이터 셋에서 경기도만으로 범위 한정
gadm_gg <- subset(gadm, NAME_1=='Gyeonggi-do' )

ranindex_value <- c(rep(c(3:7),6),1) # 31번 타이핑이 싫어서 기본을 3으로
ranindex_value[24] <- 7 # 24번째인 수원만 지정해서 값 변경
gadm_gg$ranindexvar <- as.factor(ranindex_value)

# 컬러 선택 -- 레인보우 또는 블루퍼플

library(RColorBrewer)
col <- brewer.pal(8, "Reds")
spplot(gadm_gg, "ranindexvar", col.regions=col, main="Where I am in GG" )

# spplot(gadm_gg, "ranindexvar")


#-----------[실거래 데이터 집계]------
# head(substr(unique(ggapt06$시군구),1,8))
ggapt06$areagrp <- substr(ggapt06$시군구 ,6,8)

require(sqldf)

u1 <- sqldf(' select areagrp,
count(*) as cnttrx
from ggapt06
group by areagrp ')
plot(sort(u1$cnttrx, decreasing=TRUE ) )

#  gadm에서의 지역 순서를 기록한 df 생성
gadmseq <- c(1:31)
gadmn2 <- gadm_gg$NAME_2
dfgadmseq <- data.frame(gadmseq, gadmn2 )

u1$gadmareagrpn <- c(6,  8, 11, 13, 12, 10, 9, 7, 17,  5,  4,  22,  24, 23,

1,  2,  3, 27,  28, 29,  30, 18, 31, 26, 25,  16,   19,  21, 20,  14, 15 )

u2 <- sqldf('select a.*, b.*
from dfgadmseq as a left join u1 as b
on a.gadmseq=b.gadmareagrpn ')


# 재사용을 위해 경기 지역 그룹명은 저장
# write.csv(u2, "gadmN2_seq.csv")

require(sp)

print(load("KOR_adm2.RData"))

# gadm is a large scale polygonal data frame with 229 elements
# south Korea 전체 데이터 셋에서 경기도만으로 범위 한정
gadm_gg <- subset(gadm, NAME_1=='Gyeonggi-do' )

ranindex_value <- as.integer((u2$cnttrx * 7 / max(u2$cnttrx)) +1)
gadm_gg$ranindexvar <- as.factor(ranindex_value)

# 컬러 선택 -- 레인보우 또는 블루퍼플

library(RColorBrewer)
col <- brewer.pal(8, "Reds")
spplot(gadm_gg, "ranindexvar", col.regions=col, main="Where I am in GG" )

#-------[ 거래금액 평균 산출] ----------

u3 <- sqldf(' select areagrp,
avg(거래금액만원) as avgsellamt,
median(거래금액만원) as mdnsellamt
from ggapt06
group by areagrp ')


u4 <- sqldf('select a.*, b.*
from u2 as a left join u3 as b
on a.areagrp=b.areagrp ')

ranindex_value <- as.integer((u4$avgsellamt * 7 / max(u4$avgsellamt)) +1)
ranindex_value <- as.integer((u4$mdnsellamt * 7 / max(u4$mdnsellamt)) +1)
gadm_gg$ranindexvar <- as.factor(ranindex_value)

# 컬러 선택 -- 레인보우 또는 블루퍼플

library(RColorBrewer)
col <- brewer.pal(8, "Reds")
spplot(gadm_gg, "ranindexvar", col.regions=col, main="경기도 지역별 아파트 매

매가 - 중위수(2015년6월)" )


# plot(u4$avgsellamt, cex= ((u4$avgsellamt / max(u4$avgsellamt)) + 0.5 ) )

 

#-------[ m2당 거래금액 평균 산출] ----------

u5 <- sqldf(' select areagrp,
avg(거래금액만원/전용면적m2) as avgm2sellamt
from ggapt06
group by areagrp ')


u6 <- sqldf('select a.*, b.*
from u2 as a left join u5 as b
on a.areagrp=b.areagrp ')

ranindex_value <- as.integer((u6$avgm2sellamt * 7 / max(u6$avgm2sellamt)) +1)
gadm_gg$ranindexvar <- as.factor(ranindex_value)

# 컬러 선택 -- 레인보우 또는 블루퍼플

library(RColorBrewer)
col <- brewer.pal(8, "Reds")
spplot(gadm_gg, "ranindexvar", col.regions=col, main="경기도 지역별 아파트 평

당매매가 - 평균(2015년6월)" )

#---------------------

library(latticeExtra)

col <- brewer.pal(8, "BuPu")

# 패널함수 활용

 

sp.label <- function(x, label) {list("sp.text", coordinates(x), gadm_gg

$NAME_2)}
NUMB.sp.label <- function(x) {sp.label(x, as.vector(x@data$NUMB))}
make.NUMB.sp.label <- function(x) {do.call("list", NUMB.sp.label(x))}

tps <- list(fontsize=list(text=10), fontcolor=list(text="red"))
trellis.par.set(tps)


spplot(gadm_gg, "ranindexvar", col.regions=col, main="APT 매매가", sp.layout

= make.NUMB.sp.label(gadm_gg))

#-------[지역명 라벨 대신에 수치를 표시 ]--------------

gadm_gg$n3[1:20] <- "UP"
gadm_gg$n3[21:31] <- "Down"

sp.label <- function(x, label) {list("sp.text", coordinates(x), gadm_gg$n3)}
NUMB.sp.label <- function(x) {sp.label(x, as.vector(x@data$NUMB))}
make.NUMB.sp.label <- function(x) {do.call("list", NUMB.sp.label(x))}

tps <- list(fontsize=list(text=10), fontcolor=list(text="red"))
trellis.par.set(tps)


spplot(gadm_gg, "ranindexvar", col.regions=col, main="APT 매매가", sp.layout

= make.NUMB.sp.label(gadm_gg))

#-----------[아파트값 트리 생성 ] -------------

require(party)
ggapt06$areagrp<- as.factor(ggapt06$areagrp)

ct1 <- ctree( 거래금액만원 ~ areagrp+ 전용면적m2 + 층 + 건축년도 ,

data=ggapt06, control=ctree_control(minsplit = 50, maxdepth = 4, minbucket =

20) )
plot(ct1)

ggapt06$predprice <- predict(ct1, data=ggapt06)

# 예측값 대비 실제 거래금액 비율 생성
ggapt06$rpa_price1 <- ggapt06$거래금액만원 / ggapt06$predprice1

 

u7 <- sqldf(' select areagrp,
median(rpa_price1) as mdn_rpa_price1
from ggapt06
group by areagrp ')


u8 <- sqldf('select a.*, b.*
from u2 as a left join u7 as b
on a.areagrp=b.areagrp ')

ranindex_value <- as.integer((u8$mdn_rpa_price1 * 7 / max(u8$mdn_rpa_price1))

+1)
gadm_gg$ranindexvar <- as.factor(ranindex_value)

# 컬러 선택 -- 레인보우 또는 블루퍼플

library(RColorBrewer)
col <- brewer.pal(8, "Reds")
spplot(gadm_gg, "ranindexvar", col.regions=col, main="경기도 지역별 예상가대

비 거래가 비율 - 중위수(2015년6월)" )


rf1 <- randomForest( 거래금액만원 ~ areagrp+ 전용면적m2 + 층 + 건축년도 ,

data=ggapt06, importance=TRUE, do.trace=100, ntree=200)

plot(rf1, log="y")
varImpPlot(rf1)

ggapt06$predprice1 <- predict(rf1, data=ggapt06)

 


#-===================[ Time Series Forecasting] ================

myvector <- c(rep(c(1:12), 6))

beer <- read.csv("beer2.csv", header=FALSE)
myts <- ts(beer$V1, start=c(1991, 1), end=c(1995, 8), frequency=12)
plot(myts)