r 크롤링 및 워드클라우드

22
Boo, Hyun - Kyung [email protected] R : Crawling & Analysis 데이터 과학세미나 발표 자료

Upload: hyunkyung-boo

Post on 13-Apr-2017

46 views

Category:

Data & Analytics


2 download

TRANSCRIPT

Page 1: R 크롤링 및 워드클라우드

Boo, Hyun - [email protected]

R : Crawling & Analysis

데이터 과학세미나 발표 자료

Page 2: R 크롤링 및 워드클라우드

- Check Source code

- Crawling in R

- WordCloud in R

** code: https://github.com/boohk/R -> folder : DSS_1703223

INDEX

Page 3: R 크롤링 및 워드클라우드

Before going

Page 4: R 크롤링 및 워드클라우드

* 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

Page 5: R 크롤링 및 워드클라우드

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') *인코딩은 사이트에 따라 다름

Page 6: R 크롤링 및 워드클라우드

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]

Page 7: R 크롤링 및 워드클라우드

1. Check Source Code

2) 필요한 부분 추출 (마우스 오른쪽 클릭 -> 페이지 소스 보기)

- title = line[tag01] 결과

- title = line[tag02] 결과

Page 8: R 크롤링 및 워드클라우드

1. Check Source Code

2) 필요한 부분 추출 (마우스 오른쪽 클릭 -> 페이지 소스 보기)

Page 9: R 크롤링 및 워드클라우드

1. Check Source Code

2) 필요한 부분 추출 (마우스 오른쪽 클릭 -> 불필요한 부분 제거)

-title = gsub('<.*?>','',title) / title = gsub('[[:punct:]|[:digit:]]','',title)-date = gsub('<.*?>','',date)

Page 10: R 크롤링 및 워드클라우드

1. Check Source Code

2) 필요한 부분 추출 -> 공백 제거

title = str_trim(title)date = str_trim(date)

Page 11: R 크롤링 및 워드클라우드

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')

Page 12: R 크롤링 및 워드클라우드

2. Crawling in R* [5] This Flowchart shows the R loop structures :

Page 13: R 크롤링 및 워드클라우드

2. Crawling in R* For statement in R

Page 14: 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')

문자열 추출

과정

Page 15: R 크롤링 및 워드클라우드

3. WordCloud IN R네이버 + 다음 라라랜드 리뷰 데이터를 이용해 워드클라우드를 그려보자.

* review_mix.txt 파일 참고

Page 16: R 크롤링 및 워드클라우드

3. WordCloud IN R

** library(‘KoNLP’) : KAIST 품사 태그셋 [7]

사용 패키지 : rJava & KoNLP & wordcloud & RColorBrewer

Page 17: R 크롤링 및 워드클라우드

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

Page 18: R 크롤링 및 워드클라우드

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("&quot;|&#39;|&#;","",ManNouns) #&quot; / &#39; / &#; 제외ManNouns<-gsub("&lt|&gt","",ManNouns) # &lt / &gt제외ManNouns<-gsub("영화","",ManNouns) #영화 제외ManNouns<-gsub("네이버+.*?","",ManNouns) #네이버가 붙은 모든 말 제외

#텍스트 저장write(ManNouns,"manNoun_review_mix.txt")

Page 19: R 크롤링 및 워드클라우드

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")

완성된 워드클라우드

Page 20: R 크롤링 및 워드클라우드

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

Page 21: R 크롤링 및 워드클라우드
Page 22: R 크롤링 및 워드클라우드

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