R을 활용한 텍스트마이닝
OverView
회사에서 텍스트마이닝을 하고 있다.
물론 노가다가 99.999%이긴 하다.
텍스트마이닝을 R로 한번 시도해보자 란 생각을 했다.
어떤 것으로 해볼까 찾다가 트위터로 텍스트마이닝이라는 내용을 보게 된다.
어? 트위터로 분석을 할 수 있었어????? 진짜 빅데이터네????
그러자 바로 떠오르는 건.. 방탄소년단...
내가 좋아하는 가수... 후훗... 방탄소년단 트위터 분석을 해봐야겠단 생각이 들었다.
요새 방탄소년단 트위터엔 어떤 내용이 있을까? 궁금궁금......
아우...... 보기만 해도 흐뭇하구만....ㅋㅋㅋ
Process
1. 트위터 디벨로퍼에서 API키를 생성한다.
1) https://developer.twitter.com/en/apply-for-access -> Standards APIs 에서 Apply for a developer account 에서 계정을 생성한다.
(단, 트위터의 계정이 있어야 하고 핸드폰 번호를 등록한 상태여야 한다)
2) API 키를 발급 받는다. consumer_key, consumer_secret, access_token, access_secret
2. 트위터 API 와 R을 연동한다.
1) R에서 TwitterR, ROAuth Package를 로드한다.
2) API 관련 Key들로 객체 생성한다.
# create object <- twitterOAuth.r 로 저장
consumer_key <-"____________"
consumer_secret <-"____________"
access_token <-"____________"
access_secret<-"____________"
setup_twitter_oauth(consumer_key, consumer_secret, access_token, access_secret)
3) API 키를 로드한다.
source("twitterOAuth.r")
4) 관련 데이터를 추출한다.
hp_tweets <-searchTwitter("@BTS", lang = 'ko', n=1000) #원문추출
hp_tweets.text<-strip_retweets(hp_tweets) # 리트윗 제거
hp_tweets_df <- twListToDF(hp_tweets.text) #트윗 내용을 분석 가능한 데이터프레임으로 변환.
코드
rm(list=ls())
library(twitteR)
library(ROAuth)
source("twitterOAuth.r")
library("KoNLP")
library("rJava")
library("plyr")
library("RColorBrewer")
library("wordcloud")
tweets <-searchTwitter("@BTS", lang = 'ko', n=1000)
no_retweets<-strip_retweets(tweets)
no_retweets_df <- twListToDF(no_retweets)
head(no_retweets_df,20)
names(no_retweets_df)
tweet.text <- no_retweets_df$text
head(tweet.text)
tweet.text1 <-gsub("/n","",tweet.text)
tweet.text1 <-gsub("/r","",tweet.text1)
tweet.text1 <-gsub("https://","",tweet.text1)
tweet.text1 <-gsub("@","",tweet.text1)
head(tweet.text1)
useSejongDic()
tweet.noun <- Map(extractNoun,tweet.text1)
head(tweet.noun)
tweet.word<-unlist(tweet.noun, use.names = F)
head(tweet.word)
# tweet.word1<-Filter(function(x){nchar(x)>1},tweet.word)
# head(tweet.word1,20)
tweet.count<-table(tweet.word)
tweet.count1 <- tweet.count[tweet.count>10]
head(sort(tweet.count1,decreasing=T),20)
wordcloud(names(tweet.count1),freq=tweet.count1, scale=c(10,0.5), min.freq = 10, random.order = FALSE, colors = brewer.pal(20,"Dark2"))