목차
미세먼지 자료를 설치하기 위해 패키지 다운로드
미세먼지 사이트에서 미세먼지 자료 생성 및 지도 자료와 합치기
미세먼지 지도 그림 그리기
(4. 크롤링을 통해 실시간 지도 그림 그리기)
누군가의 코드 보관함
#지도를 그릴 때 필요한 패키지
if(!require('leaflet.extras'))install.packages('leaflet.extras');library('leaflet.extras')
if(!require('leaflet'))install.packages('leaflet');library('leaflet')
if(!require('classInt'))install.packages('classInt');library('classInt')
if(!require('maps'))install.packages('maps');library('maps')
if(!require('rgdal'))install.packages('rgdal');library('rgdal')
if(!require('xml2'))install.packages('xml2');library('xml2')
if(!require('XML'))install.packages('XML');library('XML')
if(!require('maptools'))install.packages('maptools');library('maptools')
#미세먼지를 크롤링 할 때 필요한 패키지
if(!require('RSelenium'))install.packages('RSelenium');library('RSelenium')
\
\
\
setwd(choose.dir())
#C:/Users/OWNER/Desktop/
data=read.csv('통합 문서1.csv')
colnames(data)=c('',colnames(data)[-ncol(data)])
data=t(data)
data=data[-1,]
data=data.frame(area=rownames(data),HourMean=data[,1],stringsAsFactors = F)
rownames(data)=NULL
data$area=as.character(data$area)
data$HourMean=as.numeric(data$HourMean)
data
## area HourMean
## 1 서울 15
## 2 부산 32
## 3 대구 27
## 4 인천 16
## 5 광주 13
## 6 대전 23
## 7 울산 25
## 8 경기 16
## 9 강원 18
## 10 충북 23
## 11 충남 19
## 12 전북 14
## 13 전남 10
## 14 세종 31
## 15 경북 29
## 16 경남 29
## 17 제주 7
setwd(choose.dir())
#C:/shp/CTPRVN_201703
map=readOGR('TL_SCCO_CTPRVN.shp',stringsAsFactors = F,verbose=FALSE)
map@data
## CTPRVN_CD CTP_ENG_NM CTP_KOR_NM
## 0 11 Seoul 서울특별시
## 1 26 Busan 부산광역시
## 2 27 Daegu 대구광역시
## 3 28 Incheon 인천광역시
## 4 29 Gwangju 광주광역시
## 5 30 Daejeon 대전광역시
## 6 31 Ulsan 울산광역시
## 7 36 Sejong-si 세종특별자치시
## 8 41 Gyeonggi-do 경기도
## 9 42 Gangwon-do 강원도
## 10 43 Chungcheongbuk-do 충청북도
## 11 44 Chungcheongnam-do 충청남도
## 12 45 Jeollabuk-do 전라북도
## 13 46 Jellanam-do 전라남도
## 14 47 Gyeongsangbuk-do 경상북도
## 15 48 Gyeongsangnam-do 경상남도
## 16 50 Jeju-do 제주특별자치도
map@data$CTP_KOR_NM<-c('서울','부산','대구','인천','광주','대전','울산','세종','경기','강원','충북','충남','전북','전남','경북','경남','제주')
map=spTransform(map,"+init=epsg:4326")
map=spTransform(map,CRS("+proj=longlat +ellps=GRS80"))
자료를 합치기 전과 후를 차이 비교해보자
map@data
## CTPRVN_CD CTP_ENG_NM CTP_KOR_NM
## 0 11 Seoul 서울
## 1 26 Busan 부산
## 2 27 Daegu 대구
## 3 28 Incheon 인천
## 4 29 Gwangju 광주
## 5 30 Daejeon 대전
## 6 31 Ulsan 울산
## 7 36 Sejong-si 세종
## 8 41 Gyeonggi-do 경기
## 9 42 Gangwon-do 강원
## 10 43 Chungcheongbuk-do 충북
## 11 44 Chungcheongnam-do 충남
## 12 45 Jeollabuk-do 전북
## 13 46 Jellanam-do 전남
## 14 47 Gyeongsangbuk-do 경북
## 15 48 Gyeongsangnam-do 경남
## 16 50 Jeju-do 제주
map@data=merge(map@data,data,by.x='CTP_KOR_NM',by.y='area',all=T)
map@data=map@data[order(map@data$CTPRVN_CD),]
map@data
## CTP_KOR_NM CTPRVN_CD CTP_ENG_NM HourMean
## 9 서울 11 Seoul 15
## 8 부산 26 Busan 32
## 6 대구 27 Daegu 27
## 12 인천 28 Incheon 16
## 5 광주 29 Gwangju 13
## 7 대전 30 Daejeon 23
## 11 울산 31 Ulsan 25
## 10 세종 36 Sejong-si 31
## 2 경기 41 Gyeonggi-do 16
## 1 강원 42 Gangwon-do 18
## 17 충북 43 Chungcheongbuk-do 23
## 16 충남 44 Chungcheongnam-do 19
## 14 전북 45 Jeollabuk-do 14
## 13 전남 46 Jellanam-do 10
## 4 경북 47 Gyeongsangbuk-do 29
## 3 경남 48 Gyeongsangnam-do 29
## 15 제주 50 Jeju-do 7
leaflet()%>%addTiles()
map2=leaflet()%>%addTiles()%>%addDrawToolbar(editOptions=editToolbarOptions(selectedPathOptions=selectedPathOptions()))
map2
p <- colorBin("YlOrRd", domain = map@data$HourMean, bins = 7)
map3=map2%>%addPolygons(data=map,color = ~p(HourMean),stroke=F, smoothFactor = 0.1,fillOpacity = .5)%>%
addLegend(data=map,pal=p,values=~HourMean,position = 'bottomright',title = date())
# map3
웹에서 데이터를 가져오는 코드
설치자료를 다운받는다.
관리자권한으로 명령프롬프트(cmd)를 실행한다.(반드시 관리자 권한으로 할 것)
명령프롬프트의 붙여넣기 : shift+insert (안될 수도 있음..안되면 .. 적으세요)
위 그림과 같이 되었다면 크롤링을 해보자.
*만약 실행시 인터넷 창이 떴다 닫힌다면 크롬드라이버의 버전이 맞지 않으므로
https://sites.google.com/a/chromium.org/chromedriver/ 에서 자신에게 맞는 크롬 버전을 다운받자.
chrome://settings/help 을 클릭하면 크롬 버전을 확인 할 수 있다.
다운로드 클릭
# remDr<-remoteDriver(port=4446L,browser='chrome')
# remDr$open(silent = T)
if(!require(rstudioapi))install.packages('rstudioapi');library(rstudioapi)
## Loading required package: rstudioapi
# myTerm <- rstudioapi::terminalCreate()
# if (!rstudioapi::terminalRunning(myTerm)) {
# rstudioapi::terminalActivate(myTerm, show = FALSE)
# while (!rstudioapi::terminalRunning(myTerm)) {
# Sys.sleep(0.1)
# }
# }
# rstudioapi::terminalSend(myTerm, "cd c:/selenium \n")
# rstudioapi::terminalSend(myTerm, 'java -Dwebdriver.gecko.driver="geckodriver.exe" -jar selenium-server-standalone-3.9.1.jar -port 4446\n ')
#
# remDr<-remoteDriver(port=4446L,browser='chrome')
# remDr$open(silent = T)
#
# ### 인터넷 주소로 이동 한 후 표를 data에다가 가져오는 코드
#
# url='https://www.airkorea.or.kr/web/sidoQualityCompare?itemCode=10007&pMENU_NO=101'
# remDr$navigate(url)
# source=remDr$getPageSource()[[1]]
# data=XML::readHTMLTable(source,stringsAsFactors = FALSE)[[1]]
# data
# map3
# terminalKill(myTerm)
# remDr$close()