우분투에서 R로 Selenium 사용하기(도커 사용)
우분투에 도커 설치
sudo curl -fsSL https://get.docker.com/ | sudo sh
docker pull selenium/standalone-chrome
도커에서 셀레늄을 4444~4445 port 열기
sudo docker run -p 4445:4444 selenium/standalone-chrome
이제 R-studio 서버에 접속
library(RSelenium)
library(stringr)
remDr<-remoteDriver(port=4445L,browserName='chrome')
remDr$open()
name=c('대구대','영남대','계명대')
geo_code=function(name,n=3){
url='https://www.google.com/maps'
remDr$navigate(url)
search=NULL
while(length(search)==0){
assign('search',remDr$findElement(using='css selector',value='input#searchboxinput.tactile-searchbox-input'))
}
data=NULL
for(i in 1:length(name)){
search$clearElement()
search$sendKeysToElement(list(name[i],key='enter'))
Sys.sleep(n)
lonlat=as.numeric(str_split(substr(remDr$getCurrentUrl()[[1]],
regexpr('@',remDr$getCurrentUrl()[[1]])+1,regexpr(',[0-9]+z',remDr$getCurrentUrl()[[1]])-1),',')[[1]])
data=rbind(data,data.frame(name=name[i],lat=lonlat[1],lon=lonlat[2]))
}
return(data)
}
a=geo_code(name)
remDr$close()
끗!
'R > Rstudio Server' 카테고리의 다른 글
rstudio server 관리 및 설정 (0) | 2020.01.24 |
---|---|
R 패키지 설치가 안될 때(RCurl, devtools, rvest) 및 Rstudio 서버 사용자 추가 (0) | 2019.03.15 |
ubuntu18.04 r-studio server setup (0) | 2019.03.15 |
이미지 벡터화해서 저장하기
png('파일이름.png',type='cairo', antialias = "subpixel",res=t, family = "malgun",width=5*t,height=5*t)
width 와 height로 해상도 조절
type에 cairo를 주면 이미지가 벡터화 된다.
'R' 카테고리의 다른 글
leaflet 지도그리기 (0) | 2019.04.09 |
---|---|
객체지향언어란 (0) | 2019.04.08 |
정규표현식(R) (3) | 2019.03.19 |
R 기본 플롯 사용하기 (0) | 2019.03.19 |
R 개인 패키지만들기에서 간단한 사용법 까지(git을 활용) (0) | 2019.03.16 |
크롤링을 활용한 미세먼지 실시간 시각화하기
library(RSelenium)
list.of.packages <- c('classInt','rgdal',"xml2","XML","leaflet","leaflet.extras","classInt",'rjson','rgdal','protolite','sp','maps','maptools')
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages, dependencies = TRUE)
map <- readOGR( "skorea_municipalities_geo_simple.json")
port1=4568L
remDr<-rsDriver(port=port1)
remDr$open()
url='https://www.airkorea.or.kr/web/sidoCompare?itemCode=10008&pMENU_NO=102'
remDr$navigate(url)
remDr$screenshot(display = T)
source=remDr$getPageSource()[[1]]
data=XML::readHTMLTable(source,stringsAsFactors = FALSE)[[1]]
remDr$close()
head(data)
rownames(data)<-data[,1]
data=data[,-1]
data=t(data)
data=data.frame(area=rownames(data),HourMean=data[,1])
rownames(data)=NULL
data$area=as.character(data$area)
data$HourMean=as.numeric(data$HourMean)
setwd('/home/ducj/data/data/shpfile/shp/CTPRVN_201703')
map=readOGR('TL_SCCO_CTPRVN.shp',encoding = 'euc-kr',stringsAsFactors = F)
map@data$CTP_KOR_NM<-c('서울','부산','대구','인천','광주','대전','울산','세종','경기','강원','충북','충남','전북','전남','경북','경남','제주')
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),]
plot(map,col=map@data$HourMean)
map=spTransform(map,"+init=epsg:4326")
map=spTransform(map,CRS("+proj=longlat +ellps=GRS80"))
#addDrawToolbar는 선 다각형 사각형을 바로 지도에 나타낼 수 있게 해준다.
map2=leaflet() %>%
addTiles() %>%
addDrawToolbar(
editOptions=editToolbarOptions(selectedPathOptions=selectedPathOptions())
)
p <- colorBin("YlOrRd", domain = map@data$HourMean, bins = classIntervals(map@data$HourMean, 7)$brks)
map2%>%
addPolygons(data=map,color = ~p(HourMean),stroke=F, smoothFactor = 0.2,fillOpacity = .5)%>%
addLegend(data=map,pal=p,values=~HourMean,position = 'bottomright',title = date())
'R > crawling' 카테고리의 다른 글
네이버 실시간 검색어 크롤링하기 (0) | 2019.07.04 |
---|---|
기상청 자료 다운로드 (0) | 2019.05.22 |
XML package를 활용한 정적 크롤링 (0) | 2019.04.15 |
PlotGoogleMaps 사용해 AWS, ASOS 위치 나타내기 (0) | 2019.04.11 |
RSelenium을 활용하여 위경도 가져오기 (0) | 2019.03.21 |
RSelenium을 활용하여 위경도 가져오기
RSelenium 사용하기
예전엔 따로 다운로드 받지 않아도 패키지만 설치해서 크롤링이 가능했는데 크롬버전 업그레이드 때문인지 cmd로 chromeDriver를 열어주는 방법을 사용해야 된다.
목차
1. 필요 파일 다운로드
2. 크롤링 환경 만들기
3. R에서 크롤링 시작하기
1.필요파일 다운로드
우선 cmd로 chrome Driver를 열어주는 방법을 알아보자.
아래 3개의 파일을 같은 경로에 다운로드 받자.
아래와 같이 selenium-server와 geckodriver, chromedriver 3개를 설치해주면 된다.
다운로드 받은 파일을 한 경로에 옮긴다.
위에서 보시다 시피 나의 경로는 C:\selenium이다.
2. 크롤링 환경 만들기
관리자권한으로 명령프롬프트를 실행한다.
아래의 명령어를 입력한다.
참고로 명령프롬프트의 붙여넣기는 shift + insert 이다.
cd c:\selenium
java -Dwebdriver.gecko.driver="geckodriver.exe" -jar selenium-server-standalone-3.9.1.jar -port 4445
port 는 자기 자신이 열고싶은 번호를 사용하면 되며 selenium-server-standalone의 버전은 자신의 것과 같게 맞춰주면 된다.
3. R에서 크롤링 시작하기
library(RSelenium)
library(stringr)
remDr <<- remoteDriver(port =4445L,browser='chrome')
name=c('대구대','영남대','계명대')
geo_code=function(name,n=3){
url='https://www.google.com/maps'
remDr$navigate(url)
search=NULL
while(length(search)==0){
assign('search',remDr$findElement(using='css selector',value='input#searchboxinput.tactile-searchbox-input'))
}
data=NULL
for(i in 1:length(name)){
search$clearElement()
search$sendKeysToElement(list(name[i],key='enter'))
Sys.sleep(n)
lonlat=as.numeric(str_split(substr(remDr$getCurrentUrl()[[1]],
regexpr('@',remDr$getCurrentUrl()[[1]])+1,regexpr(',[0-9]+z',remDr$getCurrentUrl()[[1]])-1),',')[[1]])
data=rbind(data,data.frame(name=name[i],lat=lonlat[1],lon=lonlat[2]))
}
return(data)
}
geo_code(name)
remDr$close()
'R > crawling' 카테고리의 다른 글
네이버 실시간 검색어 크롤링하기 (0) | 2019.07.04 |
---|---|
기상청 자료 다운로드 (0) | 2019.05.22 |
XML package를 활용한 정적 크롤링 (0) | 2019.04.15 |
PlotGoogleMaps 사용해 AWS, ASOS 위치 나타내기 (0) | 2019.04.11 |
크롤링을 활용한 미세먼지 실시간 시각화하기 (0) | 2019.03.21 |
정규표현식
library(XML)
line<-readLines(url,encoding=)
str_detect( , ‘특정값’) -특정 값이 있는지 T,F로 출력
strsplit – 구분자 단위로 쪼개기
문자열에서 일치하는 패턴 찾기
str_extract : 첫 패턴만 인식
str_extract_all : 모든 패턴 인식 -> 리스트 출력
[^],[:^ :] : 괄호 안에 ^이 있으면 반대의 의미
ex) [^A-z] : 영어가 아닌 값 추출
\\에 해당하는 경우 대문자이면 반대의 의미
\\w 문자+숫자지만 \\W이면 문자+숫자가 아닌경우
정수 추출 : “\\d”, [0-9], [:digit:]
연결된 대문자 추출‘[A-Z]+’ , [:upper:]
연결된 영어 추출 ‘[A-z]+’ ,[:alpha:]
연결된 소문자 추출’[a-z]+’ , [:lower:]
연결된 소문자 중 길이 제한 : ‘[a-z]{1,4}’
공백 추출 : [:black:], [:space:] <- 두 개가 서로 상이함 \\s
특수문자 추출 : [:punct:]
문자+숫자 추출 : [:alnum:], \\w
공백을 제외한 모든문자 추출 : [:graph:]
공백을 포함한 모든 문자 추출 : [:print:] , .와 같음
str_extract_all(문자열,‘[가-힣]+’) : 한글 단어 추출
str_extract_all(문자열,‘[ㄱ-힣]+’) : 한글 추출 ‘\\p{Hangul}+’도 사용 가능
str_extract_all(문자열,boundary(‘word’)) : 단어 단위로 추출
[0-9ㄱ-힣] 이런식으로 조합해 사용 가능
정량자
* 적어도 0번 매칭
+ 적어도 1번 매칭
? 많아야 한번 매칭
{n} 정확히 n번 매칭
{n,m} n번에서 m번 사이 매칭
ab*cd 이면 a와 cd사이 b 0번이상 가진 값을 추출해준다.
ab*cd 이면 a와 cd사이 b 1번이상 가진 값을 추출해준다.
^문자열 시작위치 매치
$문자열 끝 위치 매치
\\b 단어 양쪽 끝에 빈 문자열이 있으면 추출
\\bda 이면 da로시작하는 단어 중 좌우 하나라도 공백이 있으면 추출
ex)’daa’ ‘a daa ‘a da’
‘dda’는 da로 시작하지 않으므로 추출 안됨
$*+.?[]^{}|()\등을 사용하려면 \을 먼저 적고 사용해야된다
ex) \$
()역참조
gsub(‘ab’, “” ,c(‘ab’,‘ab 1’, ‘ab 3’) -> “” “ 1” “ 3”
gsub('(ab) 1','\\1 34',c('ab','ab 12','ab 3','1','ab1'))
ab를 가진 값 중 ab 1의 1값을 34로 바꾼다.
"ab" "ab 342" "ab 3" "1" "ab1"
str_trim(공백을 제거할 데이터)
pattern
<.+?> or <.*?> <>괄호 안에 문자 제거
(.+?)
“<.*?특정문자” 꺽쇠로 시작하고 특정문자를 포함하는 모든 문자 제거
'R' 카테고리의 다른 글
leaflet 지도그리기 (0) | 2019.04.09 |
---|---|
객체지향언어란 (0) | 2019.04.08 |
이미지 벡터화해서 저장하기 (0) | 2019.03.21 |
R 기본 플롯 사용하기 (0) | 2019.03.19 |
R 개인 패키지만들기에서 간단한 사용법 까지(git을 활용) (0) | 2019.03.16 |
R 기본 플롯 사용하기
기본 플롯 옵션
par()
fig=c(x1, x2, y1, y2) x1에서 x2까지 y1에서 y2까지 그림을 입력
pty=“s”or“m” mar=c(5.1,4.1,4.1,2.1) 그래픽 바깥 여백 new=T는 겹처서 그리기 mfrow=c(행의수,열의수) 한 그
래픽에 여러그래프그리기
split.screen(fig=c(행,열)) 행의 수와 열의수로 쪼갬
split.screen(fig=c(1,2), screen=2) screen에 해당하는 칸을 행과 열의 수로 쪼갬
screen(4) ;hist(cars$dist) screen(4)에 그래픽을 넣음
erase.screen(n=1);
screen(1) close.screen(all=TRUE)
layout(mat =matrix(c(1,1,2,3),nrow=2,byrow=T)) ex)
1 | |
2 | 3 |
모양 그래픽 출력
산점도
plot(x, y, type=,main=\“c\“,sub=,xlab=,xlim=,axes=,bty=,col=,pch=,lty=,lwd=,cex=,bg=,fg=“색깔”)
axes=축의 유무 las=축의 눈금값 방향 fg=축의 색깔,bty=축 종류 o, I, 7, c,u, ]가 존재,mar=1~4순으로 여분 설정 tcl=0.3 : 축이 안쪽을가리키는지
xaxt='n' x축 지우기
pch=점의 종류(1~25), lty= 선의 종류(1~6), lwd=선의 두깨, bg=배경색,cex= 크기
col.xlab, cex.main 등 사용가능
추가 점, 텍스트, 선, 직선
points(x,y,내용)
text(x,y,내용,srt=각도) srt는 텍스트의 회전각도
lines(x,y)
abline(a=,b=,v=,h=) bx+a의 직선을 그음. v는 수직, h는 수평선
arrows(x1,y1,x2,y2,angle=, length=,code=) 시점과 종점을 긋는 직선 긋기 code(0~2)는 직선의 종류 angle은 화살표의 각
사각형(rectangle) 생성
rect(왼쪽밑의x좌표, 왼쪽 밑의 y좌표, 오른쪽위의 x좌표, 오른쪽 위의 y좌표, border=, density=)
border은 테두리선 색깔, density는 사선의 밀도
box()는 테두리
order 자료의 첨자를 정렬 ex)data<-data[order(data[,2]),]
범례(legned)
legend(위치 ,legend=c(“”,“”),fill=1:2, density=)
위치 bottom, left, right ,top, center의 조합 혹은 좌표 사용가능 fill은 채우기색
axis(1에서4 ,at=축의 시작:끝, labels=축의 값, line=, outer=, col.axis=축의 값의 색)
1:4는 아래 왼 위 오른 순 line은 축과 떨어진 거리, outer=T은 맨 바깥 태두리
격자눈금선
grid(); grid(가로의 개수, 세로의 개수)
다각형
polygon(x좌표의 집합, y좌표의 집합)
rug(기준변수, side=1~4중하나, ticksize=) ticksize는 높이 rug는 데이터들을 하나의 좌표축에 표시하는 방법
chull : 가장 바깥쪽 테두리 점에 해당하는 첨자를 구해줌
locator(n,type=“p,l,o 중 하나”) : n개의 좌표를 그래픽에서 찾아줌
identify(x, y, output, pos=T, n=,plot=T,offset=n,atpen=T ,tolerance=n)
: 좌표를 찍으면 거기에 해당하는 output 값을 찾아줌
output은 x나 y값 디폴트는 첨자,pos=T : 포인트 값 반환 offset은 출력되는 숫자와 점사이의 거리
atpen=T 찍은 점에 바로 output값을 줌, tolerance= 인식 거리
곡선
curve(표현식)
히스토그램
hist(단일변수,border=“색깔”)
부분집합
ex) subset(data, var==element1| var!=elment2)
저장
png(filename="plot1.png", width=480, height=480)
postscript(file="plot1.eps", horizontal = FALSE, onefile=FALSE, height=30, width=50)
pdf(file="plot1.pdf")
dev.list() 실행중인 리스트 확인 dev.cur() 활성화 리스트 확인 dev.set(2) 2번 활성화 dev.copy(which=3)
활성화 된 걸 3번에 복사 dev.off() 장치종료
원근법(perspective)
z<-outer(x,y,f) x,y값을 바꿔가며 f에 넣음 image(z) ;contour(z) 등고선
persp(x,y,z,theta=0,phi=0,expand=) 주면좌표계
library(rgl)
plot3d(x,y,z,col=ifelse(z>0.5,1,2))
persp3d(x,y,z,add=T, col="lightblue", aspect=c(1,1,0.5))
aspect는 가로세로비,add=축 여부(F 안됨)
'R' 카테고리의 다른 글
leaflet 지도그리기 (0) | 2019.04.09 |
---|---|
객체지향언어란 (0) | 2019.04.08 |
이미지 벡터화해서 저장하기 (0) | 2019.03.21 |
정규표현식(R) (3) | 2019.03.19 |
R 개인 패키지만들기에서 간단한 사용법 까지(git을 활용) (0) | 2019.03.16 |