r 크롤링 및 워드클라우드
TRANSCRIPT
- Check Source code
- Crawling in R
- WordCloud in R
** code: https://github.com/boohk/R -> folder : DSS_1703223
INDEX
Before going
* The Comparison of URLS
➔ 네이버 영화 평점 리뷰 http://movie.naver.com/movie/bi/mi/point.nhn?code=134963
➔ 다음 영화 평점 리뷰 http://movie.daum.net/moviedb/grade?movieId=95306&type=netizen&page=1
-> 단순 url로는 찾을 수 없음-> 이때, 프레임 소스 보기 이용
view-source:http://movie.naver.com/movie/bi/mi/pointWriteFor
mList.nhn?code=134963&type=after&isActualPointWriteExecut
e=false&isMileageSubscriptionAlready=false&isMileageSubscript
ionReject=false&page=1
1. Check Source Code : dss_code_1.txt 참고
**************** R/ R Studio / Package : Stringr 설치 필수 *****************
1. 주제 선정 : 특정 첫 페이지의 게시글의 글 제목과 게시 날짜를 크롤링 하기 URL 선정 = 'http://gall.dcinside.com/board/lists/?id=tree&page=1'
2. 문자열 추출하기1) 문자열 전부 읽기
line = readLines(url, encoding = 'UTF-8') *인코딩은 사이트에 따라 다름
1. Check Source Code
2) 필요한 부분 추출 (마우스 오른쪽 클릭 -> 페이지 소스 보기)
tag01 = str_detect(line, '<td class=\"t_subject\"') -> title = line[tag01]tag02 = str_detect(line, ' <td class=\"t_date\"') -> title = line[tag02]
1. Check Source Code
2) 필요한 부분 추출 (마우스 오른쪽 클릭 -> 페이지 소스 보기)
- title = line[tag01] 결과
- title = line[tag02] 결과
1. Check Source Code
2) 필요한 부분 추출 (마우스 오른쪽 클릭 -> 페이지 소스 보기)
1. Check Source Code
2) 필요한 부분 추출 (마우스 오른쪽 클릭 -> 불필요한 부분 제거)
-title = gsub('<.*?>','',title) / title = gsub('[[:punct:]|[:digit:]]','',title)-date = gsub('<.*?>','',date)
1. Check Source Code
2) 필요한 부분 추출 -> 공백 제거
title = str_trim(title)date = str_trim(date)
1. Check Source Code
3. 테이블 만들기temp = cbind(title, date)final_data = data.frame(temp,stringsAsFactors = F)str(final_data) #str(var) : var 구조 확인 함수final_data
● setwd("~/Git repo/R/SourceCode_DSS_170323/Result") => setwd(디렉토리 위치) : 디렉토리 지정 함수
4. 저장write.csv(final_data, 'dss01.csv') / write.table(final_data,'dss01.txt')
2. Crawling in R* [5] This Flowchart shows the R loop structures :
2. Crawling in R* For statement in R
2. Crawling in R : dss_code_2.txt 참고
다중 페이지 크롤링 (반복문 : for문 사용)
final_data = NULL
for(pageNum in 1:10) { url = paste0('http://gall.dcinside.com/board/lists/?id=tree&page=',pageNum) line = readLines(url, encoding = 'UTF-8') tag01 = str_detect(line, '<td class=\"t_subject\"') tag02 = str_detect(line, ' <td class=\"t_date\"') title = line[tag01] date = line[tag02] title = gsub('<.*?>','',title) title = gsub('[[:punct:]|[:digit:]]','',title) date = gsub('<.*?>','',date) title = str_trim(title) date = str_trim(date) temp = cbind(title, date) final_data = rbind(final_data, temp) cat(pageNum,'page complete\n')} final_data = data.frame(final_data,stringsAsFactors = F)
*데이터 저장 시 사용 함수write.csv(final_data, 'dss02.csv')write.table(final_data,'dss02.txt')
문자열 추출
과정
3. WordCloud IN R네이버 + 다음 라라랜드 리뷰 데이터를 이용해 워드클라우드를 그려보자.
* review_mix.txt 파일 참고
3. WordCloud IN R
** library(‘KoNLP’) : KAIST 품사 태그셋 [7]
사용 패키지 : rJava & KoNLP & wordcloud & RColorBrewer
3. WordCloud IN R
#KoNLP에 있는 세종 사전을 사용하기#useSejongDic()
1. .txt 파일 불러오기 & 명사 추출하기txtdata<-readLines("review_mix.txt")txtdata
nouns<-sapply(txtdata,extractNoun,USE.NAMES=F)nouns #list로 변환
rawNouns<-unlist(nouns)write(rawNouns,"rawNoun_review_mix.txt")rawNouns
3.WordCloud IN R
2. 불필요 부분 지우기ManNouns<-rawNouns[nchar(rawNouns)>=2]ManNouns
ManNouns<-gsub("final_data","",ManNouns) #final_data 제외ManNouns<-gsub("\\d+","",ManNouns) #숫자 제외ManNouns<-gsub("\\(","",ManNouns) #)괄호 제외ManNouns<-gsub("\"","",ManNouns) #'' 제외ManNouns<-gsub("<.*?>>","",ManNouns) #'' 제외ManNouns<-gsub(""|'|&#;","",ManNouns) #" / ' / &#; 제외ManNouns<-gsub("<|>","",ManNouns) # < / >제외ManNouns<-gsub("영화","",ManNouns) #영화 제외ManNouns<-gsub("네이버+.*?","",ManNouns) #네이버가 붙은 모든 말 제외
#텍스트 저장write(ManNouns,"manNoun_review_mix.txt")
3. WordCloud IN R
3. 빈도 분석 / 워드 클라우드 / 이미지 저장 *이미지 저장시 에러 방지용 함수 호출 : windows()
# 빈도분석wordfreq<-table(dataforWordCloud)
windows()#워드클라우드 wordcloud(words=names(wordfreq),freq=wordfreq, scale=c(7,0.4),colors=pal,min.freq=8,random.order=F,random.color=T,family="malgun")
#이미지 저장savePlot("review.png",type="png")
완성된 워드클라우드
Reference
[1]http://allaboutmoon.tistory.com/entry/R%EC%97%90%EC%84%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%88%EB%9F%AC%EC%98%A4%EA%B8%B0%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0[2] http://sasbigdata.com/entry/R-Rstudio-subset-dataframe-select-condition-check[3] https://stat.ethz.ch/R-manual/R-devel/library/base/html/readLines.html[4]http://blog.naver.com/PostView.nhn?blogId=dfdf4912&logNo=220630379135&parentCategoryNo=&categoryNo=48&viewDate=&isShowPopularPosts=true&from=search[5] https://www.datacamp.com/community/tutorials/tutorial-on-loops-in-r#gs.AWLRAiA[6] https://cran.r-project.org/web/packages/KoNLP/KoNLP.pdf[7] https://github.com/haven-jeon/KoNLP/blob/master/etcs/KoNLP-API.md[8] https://stat.ethz.ch/R-manual/R-devel/library/base/html/lapply.html[9] http://ugenea.blogspot.kr/2014/11/wordcloud.html
THANK YOU https://boohk.github.io/
PPT https://www.slideshare.net/HyunKyungBooVideo https://youtu.be/0bOy1Hb5-9YSource Code https://github.com/boohk/R
1. clone or download2. Download ZIP