>RE::VISION CRM

R 데이터 분석

경기도 교통 데이터 추가[Dataset, 작업과제]

YONG_X 2015. 6. 30. 12:59



[2] 경기도 교통데이터 준비 (경기도교통정보센터) - 교통DB

 -- 분리된 데이터 셋을 하나로 통합
 -- 구단위 데이터와 시군단위 데이터 분리 -- 별도 데이터 셋으로

 -- 일자형식 처리 연습 
 -- 지역별이용객수 분석
 -- 지역(시군/구) 기본 특성 -- 인구통계, 면적 등 수집하여 준비
   --- 시별 인구통계 데이터셋 활용 결합된 통계
        (시간대별 최대통행량 등) 생성
 
--- 전년 동기간 대비 지역별 비교 (주중, 주말, 상반 하반기)

 분석:: 교통문제가 가장 심각한 지역은 어디인가?

TransitBusPass_주말(11.09-11.12).xls


TransitBusPass_주말(12.01-12.06).xls


TransitBusPass_주말(12.07-12.12).xls


TransitBusPass_평일(11.09-11.12).xls


TransitBusPass_평일(12.01-12.06).xls



==> 아래 >>


TransitBusPass_평일(12.07-12.12).xls



[작업과정 :: 1] 데이터 준비 (통합)

교통데이터 통합
===========================
엑셀파일 전처리 
1. 파일명 축약
2. 괄호 바꾸기
3. 쉼표 바꾸기
4. 숫자 셀서식을 숫자로
5. 연도구분 행삭제 


TBP_wd11B<- read.xlsx("TBP_평일11091112.xls",1)
TBP_wd12A<- read.xlsx("TBP_평일12011206.xls",1)
TBP_wd12B<- read.xlsx("TBP_평일12071212.xls",1)
TBP_we11B<- read.xlsx("TBP_주말11091112.xls",1)
TBP_we12A<- read.xlsx("TBP_주말12011206.xls",1)
TBP_we12B<- read.xlsx("TBP_주말12071212.xls",1)

# 엑셀은 포기....(TT)

TBP_wd11B<- read.csv("TBP_평일11091112.csv")
TBP_wd12A<- read.csv("TBP_평일12011206.csv")
TBP_wd12B<- read.csv("TBP_평일12071212.csv")
TBP_we11B<- read.csv("TBP_주말11091112.csv")
TBP_we12A<- read.csv("TBP_주말12011206.csv")
TBP_we12B<- read.csv("TBP_주말12071212.csv")

TBP_wd11B$year <- "2011"
TBP_wd12A$year <- "2012"
TBP_wd12B$year <- "2012"
TBP_we11B$year <- "2011"
TBP_we12A$year <- "2012"
TBP_we12B$year <- "2012"

TBP_00 <- rbind(TBP_wd11B, TBP_wd12A, TBP_wd12B, TBP_we11B,TBP_we12A, 

TBP_we12B)


TBP_00 <- TBP_00[TBP_00$시간 != "일합계" & TBP_00$시간 != "12시간",] 
TBP_00$지역 <- gsub("경기도 ", "", TBP_00$지역)

TBP_00$is_sigun <- ifelse(substr(as.character(TBP_00$지역), nchar

(as.character(TBP_00$지역)), nchar(as.character(TBP_00$지역)))=="구",0, 1)

#--------------------------
# 인구 읽어 들이기 
ggp_2012 <- read.csv("2012경기인구.csv")
ggp_2011 <- read.csv("2011경기인구.csv")
gg_size <- read.csv("sigunku_scale.csv")

head(ggsize ,3)

gg_size <- gg_size[gg_size$시군구명 != "합계" ,] 


require(sqldf)
sqldf('select 월, sum(전체통행전체) as 전체통행합계 from TBP_00
where 지역="수원시" and year="2011"
group by 월')

tmp <- sqldf('select 지역, 월, 전체통행전체 from TBP_00')
tmp <- sqldf('select 지역 from TBP_00')

q01 <- TBP_00[TBP_00$지역 == "수원시" ,] 
q02<- aggregate(q01$전체통행전체, by=list(q01$year, q01$월) , FUN=sum )

names(q02) <- c("year", "dmonth", "traffictot")
# head(ggp_2011)

q02$pop <- ggp_2011[ggp_2011$X=="수원시",2]
q02$trafficperpop <- q02$traffictot/q02$pop

q02 <- q02[order(year, dmonth),]
plot(q02$trafficperpop, type='b', col='red')


[분석연습과제 1] 지역별 1인당 월평균총교통량과 제곱미터당 월평균총교통량을 비교하라.
   교통량은 많고 면적은 작은 곳은?
   어느 지역이 교통이 복잡할까?
   인구수와 교통은 별개의 문제가 아닐까? 
   지나가는 것과 사는 것은 다르지 않은가?

#--------------------
# 지역별 1인당 월평균총교통량과 제곱미터당 월평균총교통량을 비교하라.

# 먼저 2012년 1인당 월평균 교통량 산출

q11 <- TBP_00[TBP_00$is_sigun == 1 ,] 
q12<- aggregate(q11$전체통행전체, by=list(q11$지역, q11$year, q11$월) , FUN=sum )

ggp_2011$year <- "2011"
ggp_2012$year <- "2012"

ggp_00 <- rbind(ggp_2011,ggp_2012)
names(ggp_00)[1] <- "지역"

names(q12) <- c("지역", "year", "월",  "traffictot" )

q13<- aggregate(q12$traffictot, by=list(q12$지역, q12$year) , FUN=mean )
names(q13) <- c("지역", "year",  "traffictot" )

tmp_001 <-ggp_00[,c(1:3,8)]
q14 <- merge(q13, tmp_001, by=c("year", "지역"), all.x = TRUE, all.y = FALSE)

q14$traffperpop <- q14$traffictot/ q14$총인구수 
q15<-q14[q14$year=="2012",]

# 제곱미터당 교통량 산출 --------------------

require(reshape) 
gg_sizem <- melt(gg_size,  id="시군구명" )
gg_sizem <- as.data.frame(gg_sizem)

names(gg_sizem) <- c("지역", "year", "size")
gg_sizem$year <- substr(as.character(gg_sizem$year), 5,8)

q16 <- merge(q15, gg_sizem, by=c("year", "지역"), all.x = TRUE, all.y = FALSE)

q16$traffperkmsqr <- q16$traffictot/ q16$size *1000000

# -------- 플롯 작성 -----------

colflg <- ifelse(q16$총인구수>=500000, "red", "green" )
plot(q16$traffperpop , q16$traffperkmsqr , col=colflg)



[분석연습과제 2] 시간대별로 집중이 다르다면, 1시간 단위로 
   가장 복잡한 지역은 어디인가?

#-------------------
# 시간대별로 집중이 다르다면, 1시간 단위로 
   가장 복잡한 지역은 어디인가? (복잡도는 면적당 통행량으로 전제 )


q31<-TBP_00[TBP_00$is_sigun==1 & TBP_00$year=="2012",]
q32<- aggregate(q31$전체통행전체, by=list(q31$지역, q31$시간) , FUN=mean)

names(q32) <- c("지역","시간","traffic")

# q32$traffic <- as.numeric(q32$traffic)

q32 <- q32[order(q32$시간, -q32$traffic ),]

names(gg_sizem)[1] <- "area"
names(q32)[1] <- "area"

q35 <- merge(q32, gg_sizem[which(gg_sizem$year=="2012"),], by=c("area") , all.x = TRUE, all.y = FALSE)

q35$traffperkmsqr <- q35$traffic / q35$size

names(q35)[2] <- "ctime"

# q36 <- sqldf('select ctime , max(traffperkmsqr) as traffperkmsqr from q35 group by ctime ')

q36a <- aggregate(q35$traffperkmsqr, by=list(q35$ctime), FUN=max)
names(q36a) <- c("ctime", "traffperkmsqr")

q37 <- merge(q36a, q35, by=c("ctime", "traffperkmsqr"), all.x = TRUE, all.y = FALSE)



[분석연습과제 3] 시간대와 인구밀도, 면적 등을 축으로  교통현황을 보여주는 그래프를 작성하라

#-------------------
# 시간대별 그래프


q41<-TBP_00[TBP_00$is_sigun==1 & TBP_00$year=="2012" & TBP_00$일시=="평일" ,]
q41$ntime <- as.numeric(substr(as.character(q41$시간),1,2))

q41$timegrp <- "night"
q41$timegrp <- ifelse( q41$ntime >= 7 & q41$ntime < 9, "mc", q41$timegrp)
q41$timegrp <- ifelse( q41$ntime >= 9 & q41$ntime < 18, "day", q41$timegrp)
q41$timegrp <- ifelse( q41$ntime >= 18 & q41$ntime < 21, "nc", q41$timegrp)

q42 <- aggregate(q41$전체통행전체, by=list(q41$지역, q41$timegrp), FUN=mean)
names(q42) <- c("area", "timegrp", "traffic")

q43 <- merge(q42, gg_sizem[gg_sizem$year=="2012",], by=c("area"), all.x = TRUE, all.y = FALSE)

names(ggp_00)[1]<- "area"
q44 <- merge(q43, ggp_00[ggp_00$year=="2012",], by=c("area"), all.x = TRUE, all.y = FALSE)

q44$color <- ifelse( quantile(q44$traffic,0.8) < q44$traffic ,"red" , "green" )

require(lattice)
xyplot(q44$size ~ q44$총인구수 | q44$timegrp, data=q44, pch=19 , 
fill.color = as.character(q44$color),
panel = function(x,y, fill.color,..., subscripts) {
  fill <- fill.color[subscripts]
  panel.xyplot(x,y, col=fill, ... ) } )

#-----------------------
q45 <- q44
q45$color <- ""

q45[q45$timegrp=="mc",]$color <- ifelse( quantile(q45[q45$timegrp=="mc",]$traffic,0.8) < q45[q45$timegrp=="mc",]$traffic ,"red" , "green" )
q45[q45$timegrp=="nc",]$color <- ifelse( quantile(q45[q45$timegrp=="nc",]$traffic,0.8) < q45[q45$timegrp=="nc",]$traffic ,"red" , "green" )
q45[q45$timegrp=="day",]$color <- ifelse( quantile(q45[q45$timegrp=="day",]$traffic,0.8) < q45[q45$timegrp=="day",]$traffic ,"red" , "green")
q45[q45$timegrp=="night",]$color <- ifelse( quantile(q45[q45$timegrp=="night",]$traffic,0.8) < q45[q45$timegrp=="night",]$traffic ,"red" , "green")

# require(lattice)
xyplot(q45$size ~ q45$총인구수 | q45$timegrp, data=q45, pch=19 , 
fill.color = as.character(q45$color),
panel = function(x,y, fill.color,..., subscripts) {
  fill <- fill.color[subscripts]
  panel.xyplot(x,y, col=fill, ... ) } )




[분석연습과제 4] 소위 베드타운(잠만 자는 곳)이라고 보기에 가장 적합한 곳 순으로 점수화하라.

[분석연습과제 5] 어떤 추가적인 데이터를 더 수집해야하할까? 교통문제를 설명하기 위해서라면?
 



TransitBusPass_주말(12.01-12.06).xls
1.81MB
TransitBusPass_평일(12.07-12.12).xls
1.84MB
TransitBusPass_주말(12.07-12.12).xls
1.82MB
TransitBusPass_평일(11.09-11.12).xls
1.27MB
TransitBusPass_주말(11.09-11.12).xls
0.95MB
TransitBusPass_평일(12.01-12.06).xls
1.85MB

'R 데이터 분석' 카테고리의 다른 글

0702 빅Labor .... 주제  (0) 2015.07.03
retail example  (0) 2015.07.02
0630 ... PART 3   (0) 2015.06.30
0630 파트 2  (0) 2015.06.30
[R and SQL] [0630 ...................]  (0) 2015.06.30