프로그래밍/데이터분석

특정 키워드(중고) 트위터로 워드클라우드 만들기

&+&& 2017. 6. 26. 08:44

  R Studio를 통해서 특정 단어를 언급한 트위터 데이터를 가져오는 내용을 지난 번 글(링크)에서 다뤘었는데요. 이번에는 가져온 데이터를 이용해서 워드클라우드를 만드는 내용을 해보죠. 

  사실 별 거 아닌데 뭔가 분석할 만한 키워드를 찾는 게 조금 시간이 걸렸네요. 광고글이 너무 많이 검색되거나 다 똑같은 트윗들만 있거나 한 경우가 많더라구요.


  검색을 한 키워드는 [중고], 검색한 숫자는 10000개입니다. tweets라는 변수에 10000개가 할당된 거 보이시죠. 이런식으로 데이터가 로딩된 상태라면 분석이 가능합니다.


1. 필요 패키지 설치 : KoNLP, wordcloud

> install.packages("KoNLP")

> install.packages("wordcloud")

- 위 두 문장을 Console 상에서 실행해서 패키지를 설치해 줍니다.

  R Script 상에서는 library(KoNLP) / library(wordcloud)로 로딩을 해주면 됩니다.

- 한글 사전 사용 : useSejongDic()

  rJava 관련 에러가 발생하는 경우도 있는데 이럴 때는 JAVA를 설치하고 JAVA_HOME 설정 등을 확인해야 합니다.


2. 트위터 데이터를 형태별로 분류하고 멘션 부분만 추출

# tweets데이터에서 형태별로 분류하고 멘션 부분만 추출

twitter_df <- twListToDF(tweets)

twitter_text <- twitter.df$text

  결과적으로 멘션 부분만 twitter.text에 저장이 됩니다.


3. 추출된 멘션 중에서 명사만 추출

# twitter_text에서 명사만 추출

twitter_noun <- sapply(twitter_text, extractNoun, USE.NAMES = F)

  워드클라우드를 만들때는 명사만 사용할 것이기 때문에 명사만 따로 추출을 해줍니다. 데이터 양에 따라 시간이 좀 걸릴 수도 있어요.


4. 불필요한 문자 제거 : 한 글자 단어,  특수기호, 영문, 숫자 등 제거

# 두글자 이상 필터링을 위해 unlist 작업하여 저장

twitter_noun2 <- unlist(twitter_noun)


# 두 글자 이상 단어만 저장

twitter_noun2 <- Filter(function(x) {nchar(x) >= 2}, twitter_noun2)


#숫자 제외, 정규식

twitter_noun2 <- gsub("\\d+", "", twitter_noun2)              


# (괄호 제외

twitter_noun2 <- gsub("\\(", "", twitter_noun2)                 


# )괄호 제외

twitter_noun2 <- gsub("\\)", "", twitter_noun2)                 


# @, # 제외

twitter_noun2 <- gsub("\\@", "", twitter_noun2)

twitter_noun2 <- gsub("\\#", "", twitter_noun2)                 


# 영문 제외, 정규식

twitter_noun2 <- gsub("[A-Za-z]", "", twitter_noun2)


# 중고 제외

twitter_noun2 <- gsub("중고", "", twitter_noun2)            


# 15 글자 이상 단어 제외

twitter_noun2 <- gsub("[ㄱ-ㅎ가-힣]{15,}", "", twitter_noun2)

  여기서부터는 내용을 확인해 가면서 분석에 불필요한 내용들을 필터링하는 걸 추가해 줍니다. 검색 키워드인 [중고]라는 단어도 제외해 줍니다. 어떤 데이터를 가져왔느냐에 따라서 위 내용은 많은 부분이 달라질 수도 있습니다.


5. 단어별 출현 빈도 확인

# 단어별 count 확인

wordcount <- table(twitter_noun2)

wordcount



6. 워드클라우드 설정 및 출력

#컬러 출력 라이브러리 로딩

library(RColorBrewer)


# 글자 색깔 지정

palete <- brewer.pal(9, "Set1")


# 워드클라우드 출력

wordcloud(names(wordcount), freq=wordcount, scale=c(5,1), rot.per = 0.1, min.freq=10,random.order=F, color=T, colors=palete)

  지난번에 만들었던 워드클라우드보다 텍스트가 더 많기 때문에 min.freq=10으로 설정했습니다.

  뭔가 PC 환경이 바뀐 건지 제대로 실행이 되지 않는 느낌이 드는데, 어쨌든 결과는 위와 같이 나왔네요. 근데 문자열 깨지는 부분 / 뒤집힌 부분은 뭣때문에 나오는 건지 확인을 한 번 해봐야 되겠네요. 실제로 사용하려면 추가적인 데이터 전처리가 필요할 것 같네요. 

  근데 제 예상과는 다르게 학원이 가장 많이 언급된 단어인데 흠, 이건 학원 수강권중고거래가 활발하다고 봐야하는 건지.