>RE::VISION CRM

R 데이터 분석

[R 워드클라우드 연습] 트위터 데이터로 워드클라우드 만들기

YONG_X 2013. 2. 14. 20:52

[R 워드클라우드 연습]

트위터 데이터로 워드클라우드 만들기

 

# 트위터로부터 데이터를 추출해서 대중들의 생각을 읽는 것

# 통상 [ Social 분석 ]이라고 불리는 것을 R 함수 사용해서 연습

 

# 환경설정이 본격적인 작업보다 월등히 에러가 자주 나오는 부분. 환경설정, 적절한 패키지 설치 중요

# rJAVA 설치되어 있지 않으면 에러 발생
# 오라클 자바 다운로드 페이지  : 
http://www.java.com/en/download/manual.jsp


install.packages("rJava")
install.packages("KoNLP")

 

# Rcpp는 wordcloud와 dependency 있어 버젼이 맞아야함
# Rcpp는 R 버젼과 맞아야함 - 에러시 최신버젼 업데이트 필요
# R 업데이트 :
http://cran.r-project.org/bin/windows/base/old/2.15.1/ 
install.packages("Rcpp")
install.packages("wordcloud")
install.packages("plyr")
install.packages("twitteR")
install.packages("tm")


# 컬러 설정을 위한 팔레트 패키지 설치
install.packages("RColorBrewer")

 

# 설치되어 있는 패키지를 로딩
library(rJava)
library(KoNLP)
library(wordcloud)
library(plyr)
library(twitteR)
library(tm)
library(RColorBrewer)


# 키워드 지정시 한글인식을 위해 utf8로 변환
# 이 함수를 적용하지 않으면 한글키워드 제대로 인식 못함

# malformed~~~ JSON  이라는 에러도 자주 발생

# 여기서는 2013년 2월 14일 의원직 상실로 화제가 된 노회찬 을 키워드로 지정
keyword <- enc2utf8("#노회찬")

 

# 트위터에서 키워드로 검색

# 지역을 지리적 위치로 지정할 수도 있고, 언어를 지정할 수도 있음

# 한국내의 트위터 내용만 보려면 lang 지정 필수

# 이 옵션을 사용하지 않으면 전세계 이야기가 나옴

# 일자를 since와 until 로 지정할 수 있으나 어차피 최대 7일분 추출됨


# result <- searchTwitter(keyword, 
# geocode='35.874,128.246,400km', lang="ko",n=1000)
# result <- searchTwitter(keyword,  lang="ko",n=1000)
# result <- searchTwitter(keyword,lang="ko",
# since='2013-02-08',  n=1000)
result <- searchTwitter(keyword, ,lang="ko", n=1000)

 

# 결과 중에서 텍스트에 해당하는 부분만 추출
result.df <- twListToDF(result)
result.text <- result.df$text

 

# 불필요한 문자를 제거. 일차적으로 워드클라우드를 생성해 본 결과를 보면 불필요해 보이는

# 단어들이 많이 나타날 것이므로 한번 더 걸러주는 수정 작업이 바람직함

# 특수문자나 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ TTTTTTTTTTTT 같은 내용도 흔하므로 적절한 대응 필요

# 단, 미리 모든 것을 지정해 두기는 곤란하므로 필요에 따라 대응
result.text <- gsub("\n", "", result.text)
result.text <- gsub("\r", "", result.text)
result.text <- gsub("RT", "", result.text)
result.text <- gsub("http", "", result.text)
result.text <- gsub("CO", "", result.text)
result.text <- gsub("co", "", result.text)
result.text <- gsub("ㅋㅋ", "", result.text)
result.text <- gsub("ㅋㅋㅋ", "", result.text)
result.text <- gsub("ㅋㅋㅋㅋ", "", result.text)
result.text <- gsub("ㅠㅠ", "", result.text)



    [  info:: 데이터사이언티스트의 현재와 미래 컨퍼런스 2014년 10월 8일 ]

     http://www.itdaily.kr/news/articleView.html?idxno=55924



# 문자 분리
result_nouns <- Map(extractNoun, result.text)

 

# 쓸모없는 문자들을 제거. 특히 영문자의 경우 tm의  stopwords를 활용
result_wordsvec <- unlist(result_nouns, use.name=F)
result_wordsvec <- result_wordsvec[-which(result_wordsvec %in% stopwords("english"))]
result_wordsvec <- gsub("[[:punct:]]","", result_wordsvec)
result_wordsvec <- Filter(function(x){nchar(x)>=2}, result_wordsvec)

 

# 문자 카운팅
result_wordcount <- table(result_wordsvec)

# 컬러 세팅
pal <- brewer.pal(12,"Paired")

 

# 폰트 세팅. 띄어쓰기나 대소문자에 민감하다는 점에 주의
# 맑은고딕 : windowsFonts(malgun=windowsFont("맑은 고딕"))
# 나눔고딕 : windowsFonts(malgun=windowsFont("나눔고딕"))
windowsFonts(malgun=windowsFont("Arial"))

 

# 그리기 - min.freq를 너무 크게 설정하면 남겨지는 단어가 대폭 줄어들게 됨. 조절 필요 
wordcloud(names(result_wordcount), freq=result_wordcount,

scale=c(4,0.5), min.freq=3, random.order=F, rot.per=.1,

colors=pal, family="malgun")
 

 

 

 

 

# 한국어로 한정하지 않은 상태에서 다른 키워드를 사용해서 만들어 보면

# CRM ... Social 이 주된 관심사인 모양

# data mining ... 여기서도 Social이란 키워드가 나오기는 하지만 ...

# 데이터 마이닝에는 데이터가 더 중요하고 그리고 마이닝인 모양

# 역시 박사들이 대학에서 하는 일인지 모르겠음. Business, Value 같은 단어들은 연결이 안되는 듯

 

 

# 한국어 tweet 만으로는 CRM이나 data mining은 워드클라우드를 만들기 어려울 정도로

# 인기 별로 없는 단어

# CRM이 data mining 보다는 보편적인 단어

 

 

*** 단, 결정적 주의사항:: 

개방형 SNS트위터는 의사결정에 충분한 정도의 정보를 보여주기 어려운 상황으로

가고 있음... 

http://blog.daum.net/revisioncrm/250