SW/R

R : 워드클라우드-wordcloud ( 개념 및 예제 )

얇은생각 2019. 2. 1. 07:30
반응형

텍스트 마이닝

텍스트 마이닝은 비정형 텍스트에서 의미 있는 정보를 추론하는 기술을 의미합니다. 단어를 분류하거나 문법적 구조를 분석합니다. 이러한 자연 언어 처리 기반의 기술입니다. 문서들을 분류하고 문서들을 군집화합니다. 그리고 정보를 추출하고 문서를 요약할 때 주로 활용합니다. 문서내에서 자주 활용되는 단어일 수록 폰트의 크기를 크게 배치하여 강조합니다. 아래 그림을 참고하세요.



필요한 패키지는 총 3가지입니다. wordcloud, KoNLP, RColorBrewer를 설치해주세요. wordcloud는 워드클라우드를 작성할 때 활용합니다. 또 KoNLP는 한국어를 처리할 때 사용합니다. 마지막으로 RColorBrewer는 단어의 색을 처리할 때 사용합니다.



KoNLP 오류 해결


먼저 java se를 다운로드 합니다. 구글에 표시된 곳을 눌러 해당 사이트로 이동합니다.





동의 후에 본인 운영체제에 맞추어 다운로드 후 설치를 진행해주세요.





설치를 하시면 다음과 같은 경로에 확인할 수 있습니다. 아래와 같은 명령어를 입력합니다. R에 환경변수 값을 설정해 패키지를 활용할 수 있습니다. 버전이 다를 시 버전을 맞춰 주세요.


Sys.setenv(JAVA_HOME='C:/Program Files /Java/jre1.8.0_201')




대통령 연설문 분석

인터넷에서 노무현, 이명박, 박근혜 대통령의 연설문을 검색합니다. 취임사 내용 전체를 마우스로 선택하여 복사합니다. 그리고 “취임사_노무현.txt”과 같은 형태로 저장해주세요.


Sys.setenv(JAVA_HOME='C:/Program Files /Java/jre1.8.0_201')
library(KoNLP) # 라이브러리 등록
library(wordcloud) # 라이브러리 등록
library(RColorBrewer) # 라이브러리 등록

#useSejongDic() # 세종 한글사전 로딩
buildDictionary(ext_dic = "woorimalsam") # 사전 로딩
pal2 <- brewer.pal(8, "Dark2") # 팔레트 생성
text <- readLines(file.choose()) # 파일읽기
noun <- sapply(text,extractNoun, USE.NAMES=F) # 단어 집합
noun


데이터

환경 변수를 등록하고 라이브러리를 등록합니다. 그 다음 사전을 로딩합니다. 다음으로 이전에 저장해둔 취임사를 로딩합니다. 그 후 파일을 잘읽어오면 결과가 위처럼 나옵니다.





noun2 <- unlist(noun) # 명사를 합쳐 색출
wordcount <- table(noun2) # 단어 출현 수 계산
temp <- sort(wordcount, decreasing=T)[1:10] # 단어 정렬
temp # 확인

temp <- temp[-1] # 공백단어 제거
barplot(temp, las = 2, names.arg = names(temp), # 그래프 출력
col ="lightblue", main ="Most frequent words", # 축, 제목 입력
ylab = "Word frequencies") # 축 입력


워드클라우드


명사들을 합쳐 색출을 합니다. 그리고 각 명사들의 출현된 수를 카운트합니다. 그 다음 정렬을 해줍니다. 공백 단어들은 제거해주고 나머지 값들을 그래프로 표현하면 위 처럼 나타납니다.





wordcloud(names(wordcount), # 단어들
freq=wordcount, # 단어들의 빈도
scale=c(6,0.7), # 단어의 폰트 크기
min.freq=3, # 단어의 최소빈도
random.order=F, # 단어의 출력위치
rot.per=.1, # 90도회전 단어 비율
colors=pal2) # 단어색

워드클라우드


이제 그 값들을 통해 워드 클라우드로 표현해봅니다. 그 결과는 위와 같습니다. 뭔가 되게 아쉽지 않나요? 그림에 불필요한 단어도 있습니다. 또한 사전에 없는 단어는 빠져있습니다. 이러한 값들을 조정해주어야 합니다. 아래 옵션들을 활용해 봅시다.


wordcloud 옵션

Parameter

 설명(explanation)

 word

 단어(Word)

 freq

 단어들의 빈도(frequency of words)

 size

 가장빈도가 큰 단어와 빈도가 가장 작은 단어 폰트 사이의 크기 차이(Size difference between the word with the largest frequency and the word font with the smallest frequency.)

 min.freq

 출력될 단어의 최소 빈도(Minimum frequency of words to be printed)

 max.word

 출력될 단어들의 최대개수(Maximum number of words to be printed)

 random.order


 TRUE 이면 램덤으로 단어출력, FALSE 이면 빈도수가 큰 단어일수록 중앙에 배치(Print words with TRUE-beneath rammed, and center for words with greater frequency behind FALSE)

 random.color

 TRUE 이면 단어색은 랜덤순으로 정해지고, FALSE이면 빈도순으로 정해짐(The color of words behind TRUE is set in random order, and if FALSE is, they are set in frequency order.)

 rot.per

 90도로 회전된 각도로 출력되는 단어의 비율(The percentage of words that are output at a rotated angle of 90 degrees.)

 colors

 가장 작은 빈도부터 큰 빈도까지의 단어색(Word color from smallest frequency to largest frequency)



# 빈도수 높은데 워드클라우드에 없으면 사용자 사전에 추가
buildDictionary(ext_dic = "woorimalsam", # 기존 사전
user_dic=data.frame("정치", "ncn"), # 없는 단어
replace_usr_dic = T) # 추가하기

noun <- sapply(text,extractNoun, USE.NAMES=F) # 다시 추출하기
noun2 <- unlist(noun) # 색출한 명사를 모으기

# 무의미 단어 제거
noun2 <- noun2[nchar(noun2)>1] # 1글자짜리 삭제
noun2 <- gsub("국민","", noun2) # 국민 삭제
noun2 <- gsub("여러분","", noun2) # 여러분 삭제
wordcount <- table(noun2) # 출현 단어 카운트
wordcloud(names(wordcount), # 워드클라우드
freq=wordcount, # 빈도
scale=c(3,0.3), # 글자 크기
min.freq=3, # 출력될 단어 최소 빈도
random.order=F, # 빈도가 클수록 중앙에 배치
rot.per=.1, # 90도 회전된 단어 확률
colors=pal2) # 빈도마다 단어색


데이터


아래 옵션들을 통해 의미 없는 단어들은 제외하였습니다. 또 필요한 단어들은 추가하였습니다. 따라서 다양한 옵션들을 활용해 유의미한 결과를 얻을 수 있었습니다. 연설문 뿐만 아니라 다른 글로도 충분히 가능합니다. 한번씩 실습해보세요.

반응형