자료의 빈도를 시각적으로 나타내는 시각화 방법 중 하나


목차

  1. 워드클라우드를 그릴 수 있는 환경 구축
  2. 워드클라우드를 그릴 자료가져오기
  3. 시각화

example 1) 미세먼지 워드클라우드 그리기

example 2) 피자에땅 많은 지역 워드클라우드 그리기


1. 워드클라우드를 그릴 수 있는 환경 구축

사용된 패키지

워드클라우드를 그리기 위해 wordcloud2, RColorBrewer 패키지

명사추출을 위해 KoNLP 패키지

library(KoNLP)
library(wordcloud)
library(wordcloud2)
library(RColorBrewer)

혹시 KoNLP 패키지가 되지 않는다면?

Java다운로드

I accept all cookies 클릭


2. 워드클라우드를 그릴 자료가져오기

미세먼지 기사자료 다운로드

미세먼지 기사


3. 시각화

example 1) 미세먼지 워드클라우드 그리기


명사 추출을 위한 명사 사전불러오기

useSejongDic()
## Backup was just finished!
## 370957 words dictionary was built.

다운받은 자료를 불러와 명사 추출

setwd('C:/Users/cj/Desktop/')
data1=readLines("미세먼지 기사.txt")
data2=sapply(data1,extractNoun,USE.NAMES=F)

추출한 명사 30개 보기

head(unlist(data2),30)
##  [1] "특약"   "등"     "가입"   "호흡기" "질환"   "시"     "보험금"
##  [8] "지"     "급"     "기존"   "보험"   "보장"   "가능"   "해"    
## [15] "재탕"   "불과"   "지적"   "도"     ""       "오늘"   "미세"  
## [22] "먼지"   "날"     "이젠"   "1"      "년"     "지속"   "거예요"
## [29] "대책"   "이"

빈도수가 높은 단어 20개 출력

wordcount=table(unlist(data2))
head(sort(wordcount,decreasing=T),20)
## 
##   질환          먼지   미세   보험     등     한 호흡기   상품     월 
##     60     47     36     36     35     33     26     25     24     21 
##     성     원   발생   보장     것   사고   감염   농도     년   비중 
##     19     16     15     15     13     13     12     12     11     11

워드클라우드 생성

wordcloud(names(wordcount),freq=wordcount,scale=c(10,1),min.freq=5,
random.order=F,random.color=T,colors=brewer.pal(12,"Set2"))


인터넷자료를 이용한 워드클라우드

example 2) 피자에땅 많은 지역 워드클라우드 그리기

[피자에땅]http://www.pizzaetang.com/findUs/findUs.asp?cPage=50&sAct=&sido=&gugun=&seeText=&branch_id=

if (!require("XML")) install.packages("XML")
if (!require("stringr")) install.packages("stringr")

a<-'http://www.pizzaetang.com/findUs/findUs.asp?cPage='
b<-'&sAct=&sido=&gugun=&seeText=&branch_id='
alldata<-data.frame(store=NULL,add=NULL)
for(i in 1:50){
  url<-paste(a,i,b)
  line<-readLines(url,encoding="UTF-8")

  add<- line[which(str_detect(line,"t_gray"))[-1]]
  (add<- gsub("\t| ", "", add))
  (add<- gsub("<.+?>", "", add))
  (store<-line[which(str_detect(line,"t_gray"))-1][-1])
  (store<- gsub("\t|/|\\d+\\-+|\\d+", "",store))
  (store<- gsub("<.+?>|--", "",store))
  alldata<-rbind(alldata,data.frame(store,add,stringsAsFactors=F))}
rownames(alldata)<-NULL

head(alldata,10)
##         store                              add
## 1      신정점           서울양천구신정동954-13
## 2  속초교동점 강원속초시교동수복로53,1층748-18
## 3  [휴]방이점 서울송파구방이동오금로19길10,1층
## 4  [휴]사당점          서울동작구사당동1001-17
## 5      삼척점           강원삼척시남양동329-13
## 6      안양점    경기안양시만안구안양5동710-13
## 7      의왕점 경기안양시동안구호계동갈산로39-1
## 8      잠실점      서울송파구석촌동2-5은주빌딩
## 9      천곡점           강원동해시천곡동1045-3
## 10     평촌점     경기안양시동안구호계동1072-1
alldata$`지역`<-substr(alldata[,2],1,2)

freq<-table(alldata[,3])
wordcloud2(freq,col='random-light',size=0.7,backgroundColor = 'black',shape='star')