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")
str(raw)
## 'data.frame':    85890 obs. of  9 variables:
##  $ 조사지점명: Factor w/ 1203 levels "(이불가게)피가로",..: 705 705 705 705 705 705 705 705 705 705 ...
##  $ 구코드    : int  11010 11010 11010 11010 11010 11010 11010 11010 11010 11010 ...
##  $ 동코드    : int  1101055 1101055 1101055 1101055 1101055 1101055 1101055 1101055 1101055 1101055 ...
##  $ X좌표     : num  196424 196424 196424 196424 196424 ...
##  $ Y좌표     : num  455512 455512 455512 455512 455512 ...
##  $ 조사요일  : Factor w/ 6 levels "금","목","수",..: 5 4 4 1 6 1 3 4 4 6 ...
##  $ 시간대    : Factor w/ 14 levels "07시-08시","08시-09시",..: 1 7 10 1 2 5 3 5 8 14 ...
##  $ 유동인구수: int  51 27 30 21 63 36 36 30 18 114 ...
##  $ 년도      : int  2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 ...
names(raw)
## [1] "조사지점명" "구코드"     "동코드"     "X좌표"      "Y좌표"     
## [6] "조사요일"   "시간대"     "유동인구수" "년도"
head(raw)
##                조사지점명 구코드  동코드  X좌표    Y좌표 조사요일
## 1 신흥모피명품전문크리닝.  11010 1101055 196424 455511.5       토
## 2 신흥모피명품전문크리닝.  11010 1101055 196424 455511.5       월
## 3 신흥모피명품전문크리닝.  11010 1101055 196424 455511.5       월
## 4 신흥모피명품전문크리닝.  11010 1101055 196424 455511.5       금
## 5 신흥모피명품전문크리닝.  11010 1101055 196424 455511.5       화
## 6 신흥모피명품전문크리닝.  11010 1101055 196424 455511.5       금
##      시간대 유동인구수 년도
## 1 07시-08시         51 2015
## 2 13시-14시         27 2015
## 3 16시-17시         30 2015
## 4 07시-08시         21 2015
## 5 08시-09시         63 2015
## 6 11시-12시         36 2015
#최종목표!! 서울지도에서 시간대별로 유동인구수가 변하는 영상을 만들고 싶다. 인구수 그라데이션으로 표현하기!
#누가벌써 했네? 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()

  admin <- readxl::read_xls("adm_code.xls")
  #다른 파일을 불러왔다. 여긴 종로구가 11010이다. 행정동. 근데 생각해보니까. 그냥 이름으로 merge해도 되잖아?
  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" = "읍면동코드"))
  #구, 동이름 합쳤다
  
  #지금 필요한 것 만 뽑자
  dplyr::select(raw_gu, spot, gu, dong, day, movpop, start, 시군구명칭, 읍면동명칭) -> seoul_mov
  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 종로구   부암동
  seoul_2 <- readxl::read_xlsx("seoul_20190701.xlsx")
  head(seoul_2)
## # A tibble: 6 x 6
##   행정동코드 시도명     시군구명 읍면동명   생성일자 말소일자
##   <chr>      <chr>      <chr>    <chr>      <chr>    <lgl>   
## 1 1100000000 서울특별시 <NA>     <NA>       19880423 NA      
## 2 1111000000 서울특별시 종로구   <NA>       19880423 NA      
## 3 1111051500 서울특별시 종로구   청운효자동 20081101 NA      
## 4 1111053000 서울특별시 종로구   사직동     19880423 NA      
## 5 1111054000 서울특별시 종로구   삼청동     19880423 NA      
## 6 1111055000 서울특별시 종로구   부암동     19880423 NA
  #자, 여기는 법정동이네

  seoul_mov_2 <- inner_join(seoul_mov, seoul_2, by =c("dongname" = "읍면동명"))
  seoul_mov_3 <- seoul_mov_2 %>% select(spot, day, movpop, start, guname, dongname, 행정동코드)  
  head(seoul_mov_3)
##                      spot day movpop start guname dongname 행정동코드
## 1 신흥모피명품전문크리닝.  토     51     7 종로구   부암동 1111055000
## 2 신흥모피명품전문크리닝.  월     27    13 종로구   부암동 1111055000
## 3 신흥모피명품전문크리닝.  월     30    16 종로구   부암동 1111055000
## 4 신흥모피명품전문크리닝.  금     21     7 종로구   부암동 1111055000
## 5 신흥모피명품전문크리닝.  화     63     8 종로구   부암동 1111055000
## 6 신흥모피명품전문크리닝.  금     36    11 종로구   부암동 1111055000
#shape파일을 가져오는 방법이 여러가지가 있는데, 
  #먼저 shapefile
  
korea_emd_ras <- shapefile("TL_SCCO_EMD.shp")
  fort_korea_emd_ras <- fortify(korea_emd_ras, region = "EMD_CD") 
    #region을 정해주면, 아래와 같은 에러가 날 수 있음, 그렇다면 https://coding-law.tistory.com/30 를 참고하자.
    #Error in maptools::unionSpatialPolygons(cp, attr[, region]) : isTRUE(gpclibPermitStatus()) is not TRU

      head(fort_korea_emd_ras) #long, lat인 좌표값은 보인다.
##       long     lat order  hole piece       id      group
## 1 953700.0 1954605     1 FALSE     1 11110101 11110101.1
## 2 953693.9 1954591     2 FALSE     1 11110101 11110101.1
## 3 953690.8 1954583     3 FALSE     1 11110101 11110101.1
## 4 953689.6 1954577     4 FALSE     1 11110101 11110101.1
## 5 953687.9 1954569     5 FALSE     1 11110101 11110101.1
## 6 953682.3 1954556     6 FALSE     1 11110101 11110101.1
    fort_korea_emd_ras %>% filter(id == "11110101") %>% 
      ggplot(aes(x=long, y=lat, group=group)) + geom_polygon(fill='white', color='black') + coord_fixed()

    #다행히도, dplyr랑 ggplot, geom_polygon을 쓰면 그림이 그려진다. 
#자, 이제 동코드와 유동인구를 가진 seoul_mov_3와 fortify된 읍면동 지도를 merge해보자.

seoul_mov_3$id <- str_sub(seoul_mov_3$행정동코드, 1,8)

head(seoul_mov_3) #11110550 00
##                      spot day movpop start guname dongname 행정동코드
## 1 신흥모피명품전문크리닝.  토     51     7 종로구   부암동 1111055000
## 2 신흥모피명품전문크리닝.  월     27    13 종로구   부암동 1111055000
## 3 신흥모피명품전문크리닝.  월     30    16 종로구   부암동 1111055000
## 4 신흥모피명품전문크리닝.  금     21     7 종로구   부암동 1111055000
## 5 신흥모피명품전문크리닝.  화     63     8 종로구   부암동 1111055000
## 6 신흥모피명품전문크리닝.  금     36    11 종로구   부암동 1111055000
##         id
## 1 11110550
## 2 11110550
## 3 11110550
## 4 11110550
## 5 11110550
## 6 11110550
seoul_mov_3 %>% filter(id == "11110101") %>% head
## [1] spot       day        movpop     start      guname     dongname  
## [7] 행정동코드 id        
## <0 rows> (or 0-length row.names)
head(fort_korea_emd_ras) #11110101 8자리
##       long     lat order  hole piece       id      group
## 1 953700.0 1954605     1 FALSE     1 11110101 11110101.1
## 2 953693.9 1954591     2 FALSE     1 11110101 11110101.1
## 3 953690.8 1954583     3 FALSE     1 11110101 11110101.1
## 4 953689.6 1954577     4 FALSE     1 11110101 11110101.1
## 5 953687.9 1954569     5 FALSE     1 11110101 11110101.1
## 6 953682.3 1954556     6 FALSE     1 11110101 11110101.1
# View(fort_korea_emd_ras)
# View(seoul_mov_3)


seoul_mov_map <- merge(seoul_mov_3, fort_korea_emd_ras, by = "id")
head(seoul_mov_map)
##  [1] id         spot       day        movpop     start      guname    
##  [7] dongname   행정동코드 long       lat        order      hole      
## [13] piece      group     
## <0 rows> (or 0-length row.names)
#엇, 잠깐, 왜 겹치는게 없니?
#merge 하기전에 다시 봐야겠다.