티스토리 뷰

[업데이트 2016.12.16 2:39]

 

한글 데이터에 대해 분석 시에는 KoNLP 라이브러리를 사용하여 분석합니다. 기본적으로 txt 파일을 통해 데이터를 읽어온 후, koNLP 라이브러리의 함수를 이용해서 한글 명사만 추출하도록 합니다. (sapply 함수)

 

그리고 filter, gsub을 통해 삭제하길 원하는 숫자, 특수문자 등을 지정하여 제거 합니다. 그리고 wordcloud 라이브러리를 이용하여 한글 wordcloud를 표시합니다.

추가로 Bar chart로도 표시를 해보았습니다. (주석 참고)

 
# Install wordcloud package and related packages.
#install.packages('KoNLP') # For Korean
#install.packages('SnowballC')
#install.packages('wordcloud')
#install.packages('RColorBrewer')
#install.packages('plyr') 
#install.packages('stringr')
#install.packages('ggplot2')
library(KoNLP)
library(SnowballC)
library(RColorBrewer)
library(wordcloud)  
library(plyr) 
library(stringr)
library(ggplot2)
# Use Korean dictionary.
useSejongDic()

# Register nouns
mergeUserDic(data.frame("홍길동", "ncn"))
mergeUserDic(data.frame("김철수", "ncn"))
mergeUserDic(data.frame("박영희", "ncn"))

# Read text data from text file.
parsed <- readLines("KakaoTalk_20161216_0049_20_276_group.txt", encoding="UTF-8")

# Apply extract Noun. 
parsed <- sapply(parsed,extractNoun,USE.NAMES = F)

# Unlist and apply filter. Allow only above 2 lengths. 
parsed <- unlist(parsed)
parsed <- Filter(function(x) {nchar(x) >= 2}, parsed)

# Replace specific strings
parsed <- str_replace_all(parsed,"[^[:alpha:]]","")
parsed <- str_replace_all(parsed,"[A-Za-z0-9]","")
parsed <- gsub("음성메세지", "", parsed)
parsed <- gsub("이모티콘", "", parsed)
parsed <- gsub("월요일", "", parsed)
parsed <- gsub("전도사", "", parsed)
parsed <- gsub("화요일", "", parsed)
parsed <- gsub("수요일", "", parsed)
parsed <- gsub("목요일", "", parsed)
parsed <- gsub("금요일", "", parsed)
parsed <- gsub("토요일", "", parsed)
parsed <- gsub("일요일", "", parsed)
parsed <- gsub("날짜", "", parsed)
parsed <- gsub("저장한", "", parsed)
parsed <- gsub("동영상", "", parsed)
parsed <- gsub("사진", "", parsed)
parsed <- gsub("오전", "", parsed)
parsed <- gsub("오후", "", parsed)
parsed <- gsub("누나", "", parsed)
parsed <- gsub("님", "", parsed)
parsed <- gsub("년", "", parsed)          
parsed <- gsub("월", "", parsed)   
parsed <- gsub("일", "", parsed) 
parsed <- gsub("ㅋ", "", parsed)
parsed <- gsub("ㅎ", "", parsed)
parsed <- gsub("ㅇ", "", parsed)
parsed <- gsub("ㅠ", "", parsed)
parsed <- gsub("ㅜ", "", parsed)
parsed <- gsub("아멘", " 아멘", parsed)
# Write parsed string as unlist and read table from the temporary file.
write(unlist(parsed), "kr_cloud_kakao.txt")
text_table <- read.table("kr_cloud_kakao.txt")

# Create table data with word count
word_Count <- table(text_table)

# Create data.frame from table data.
terms <- data.frame(word_Count)

# Change column name.
names(terms) <- c("word", "freq") 

# Sort the matrix data according to rowsums as desc order.
terms <- arrange(terms, desc(freq))

# Extract N items from head top N.
#topN <- head(terms, 200)

# Set a random seed.
set.seed(1)

# Display a wordcloud.
#windowsFonts(myfont=windowsFont("맑은 고딕"))
wordcloud(words=terms$word, freq=terms$freq, min.freq = 0.32, max.words = 400, random.order = FALSE, rot.per = 0.25,colors=brewer.pal(8, "Dark2"), family="AppleGothic")
#wordcloud(words=terms$word, freq=terms$freq, min.freq = 0.32, max.words = 400, random.order = FALSE, rot.per = 0.25,colors=brewer.pal(8, "Dark2"), family="myfont")

# Display a bar chart
#terms2 <- arrange(terms, desc(freq))
#top10 <- head(terms2, 50)
#ggplot(data=top10, aes(x=reorder(word,freq), y=freq, group=1, fill=word)) + geom_bar(stat="identity", aes(fill=word), position=position_dodge(), colour="black")  + theme(legend.position="right", legend.direction="vertical") + coord_flip() + geom_text(data=top10, aes(label=top10$freq), position=position_identity(), vjust=0.5, hjust=-0.2)

 

<Word Cloud 결과>


<GitHub>

https://github.com/asyncbridge/analytics/blob/master/R/R_WordCloud_KRTextData.R


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함