library(ggmap)
## Warning: package 'ggmap' was built under R version 3.6.3
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 3.6.3
## Google's Terms of Service: https://cloud.google.com/maps-platform/terms/.
## Please cite ggmap if you use it! See citation("ggmap") for details.
library(ggplot2)
library(raster)
## Warning: package 'raster' was built under R version 3.6.3
## Loading required package: sp
library(rgeos)
## Warning: package 'rgeos' was built under R version 3.6.3
## rgeos version: 0.5-2, (SVN revision 621)
## GEOS runtime version: 3.6.1-CAPI-1.10.1
## Linking to sp version: 1.4-1
## Polygon checking: TRUE
library(maptools)
## Warning: package 'maptools' was built under R version 3.6.3
## Checking rgeos availability: TRUE
library(dplyr)
## Warning: package 'dplyr' was built under R version 3.6.1
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:rgeos':
##
## intersect, setdiff, union
## The following objects are masked from 'package:raster':
##
## intersect, select, union
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggthemes)
## Warning: package 'ggthemes' was built under R version 3.6.2
library(stringr)
getwd()
## [1] "C:/Users/taetaetae/Documents/R/NEW_Kaggle/8th_movpop/movpop"
raw <- read.csv("data13_.csv")
#최종목표!! 서울지도에서 시간대별로 유동인구수가 변하는 영상을 만들고 싶다. 인구수 그라데이션으로 표현하기!
#누가벌써 했네? https://story.pxd.co.kr/1408
#근데 변수명들이 마음에 안든다.
names(raw) <- c("spot",
"gu",
"dong",
"x_point",
"y_point",
"day",
"time",
"movpop",
"year")
#하나씩 하자! 잠깐, dplyr로 수요일 오전 11시에 가장 유동인구수가 많은 구를 알아보자
raw %>%
filter(time == "11시-12시") %>%
group_by(gu) %>%
summarise(movpopsum = sum(movpop)) %>%
arrange(desc(movpopsum)) -> wed_11
#그림도 그려보자.
options(scipen = 100) #이거안하면 그래프에서 지수표기법으로 나옴 안예쁨
wed_11 %>%
ggplot(aes(x = gu, y = movpopsum)) +
geom_histogram(stat = "identity", fill = "lightblue") +
labs(title = "wed_11am", x = "gu", y = "movpopsum") +
theme_economist() +
coord_flip()
## Warning: Ignoring unknown parameters: binwidth, bins, pad
## Warning: Removed 1 rows containing missing values (position_stack).

#아, 이거 시간데이터도 있으니까 line 써서도 그려보자, time이 factor네, 하긴 어차피 시간대니까 그냥
# 그럼 구별로, 시간대에 따라 유동인구가 변화하는걸 line으로 그려보자
#(str_extract_all(raw$time, "\\d{2}")) 숫자만 뽑기
raw$start <- as.numeric(substr(raw$time, 1, 2)) #숫자만 뽑기 2
#raw$end <- as.character.POSIXt(substr(raw$time, 5, 6))
#어차피 1시간씩인데, 그냥 할걸 그랬나
raw %>% group_by(gu, start) %>% summarise(summov = sum(movpop)) -> raw_gu_time
raw_gu_time$gu <- as.factor(raw_gu_time$gu)
raw_gu_time %>% ggplot(aes(x = start, y = summov, group = gu, color = gu)) +
geom_line()

#position 도 ggplot에서 다뤄야하는데,,,? dodge같은.
#scale(limit, breaks, expand, labels), labs
admin <- readxl::read_xls("adm_code.xls")
#종로구가 11010이다. 행정동. 이제 raw에 이름을 붙여주자
View(admin)
admin_gu <- admin[,-c(1:2)] #필요없는 부분은 빼고
raw$gu <- as.character(raw$gu)
raw$dong <- as.character(raw$dong)
raw_gu <- inner_join(raw, admin_gu, by = c("dong" = "읍면동코드"))
#코드 기준으로, 동이름 합쳤다
admin_gu %>% filter(읍면동명칭 == "부암동") #1101055 부암동이란다
## # A tibble: 1 x 4
## 시군구코드 시군구명칭 읍면동코드 읍면동명칭
## <chr> <chr> <chr> <chr>
## 1 11010 종로구 1101055 부암동
View(admin_gu %>% head)
#지금 필요한 것 만 뽑자
seoul_mov <- dplyr::select(raw_gu, spot, gu, dong, day, movpop, start, 시군구명칭, 읍면동명칭)
names(seoul_mov) <- c("spot",
"gu",
"dong",
"day",
"movpop",
"start",
"guname",
"dongname")
#seoul_mov는 이제 동이름이 있습니다. 이제 할 일은 동이름을 기준으로 기존의 또 다시 법정동 코드 파일이랑 합쳐서,
#유동인구 + 동이름 + 법정동 코드가 있어야겠죠. 뒤에 나올 shape파일들은 죄다 법정동 기준이라서 그 때 합치려면!
head(seoul_mov) #신흥모피는 종로구 부암동에 있구나!?
## spot gu dong day movpop start guname dongname
## 1 신흥모피명품전문크리닝. 11010 1101055 토 51 7 종로구 부암동
## 2 신흥모피명품전문크리닝. 11010 1101055 월 27 13 종로구 부암동
## 3 신흥모피명품전문크리닝. 11010 1101055 월 30 16 종로구 부암동
## 4 신흥모피명품전문크리닝. 11010 1101055 금 21 7 종로구 부암동
## 5 신흥모피명품전문크리닝. 11010 1101055 화 63 8 종로구 부암동
## 6 신흥모피명품전문크리닝. 11010 1101055 금 36 11 종로구 부암동
#법정동 코드는 11자리 1101055 -> 부암동. 7자리 숫자
#행정동 코드는 10자리 11110 550 00 부암동 뒤에 8자리 1111055000까지만 잘라도 되지 않을까.
#청운효자동은 11 서울 11110 종로구 51500 청윤효자동
#청운효자동(淸雲孝子洞)은 서울특별시 종로구의 행정동이다. 청운동과 효자동의 이름을 따서
#2008년 11월 1일 청운효자동으로 되었으며, 법정동은 세종로, 청운동, 효자동, 신교동, 궁정동, 옥인동, 통인동,
#창성동, 누상동, 누하동이다.
#https://m.blog.naver.com/PostView.nhn?blogId=s9soft&logNo=221575427247&proxyReferer=https:%2F%2Fwww.google.com%2F
seoul_bub <- readxl::read_xlsx("bubjung_20190701.xlsx")
seoul_bub <- seoul_bub %>% filter(시도명 == "서울특별시")
seoul_mov_bub <- inner_join(seoul_mov, seoul_bub, by = c("dongname" = "읍면동명"))
seoul_mov_bub_2 <- seoul_mov_bub %>% select(spot, day, movpop, start, guname, dongname, 법정동코드)
seoul_mov_bub_2$법정동코드 <- as.character(substr(seoul_mov_bub_2$법정동코드, 1, 8))
#shape파일을 가져오는 방법이 여러가지가 있는데, 난 shapefile로 하련다. 다른 것들은 하다가 에러난것도 있고,,,
korea_emd <- shapefile("TL_SCCO_EMD.shp")
fort_korea_emd <- fortify(korea_emd, region = "EMD_CD")
#region을 정해주면, 아래와 같은 에러가 날 수 있음, 그렇다면 https://coding-law.tistory.com/30 를 참고하자.
#자, 이제 동코드와 유동인구를 가진 seoul_mov_bub_2와 fortify된 읍면동 지도를 merge해보자.
seoul_mov_map <- inner_join(seoul_mov_bub_2, fort_korea_emd, by = c("법정동코드" = "id"))
#토요일에 유동인구 50인 동네를 그려라.
seoul_mov_map %>% filter(movpop > 50 & day == "토") %>%
ggplot(aes(x=long, y=lat, group=group)) + geom_polygon(fill='white', color='black') + coord_fixed()

#