참고 : Do it! 쉽게 배우는 R 데이터분석
텍스트 마이닝
- 문자로 된 데이터에서 가치 있는 정보를 얻어 내는 분석 기법
- 텍스트 마이닝을 통해 어떤 단어가 얼마나 많이 등장했는지 확인 가능
KoNLP 패키지 설치
한글 텍스트의 형태소를 분석하기 위해서는 KoNLP라는 패키지를 설치해줘야한다
# KoNLP
install.packages("multilinguer")
library(multilinguer)
# JDK
install_jdk()
# 관련패키지
install.packages(c("stringr","hash","tau","Sejong","RSQLite","devtools",type="binary"))
# KoNLP
install.packages("remotes")
library(remotes)
remotes::install_github("haven-jeon/KoNLP",
upgrade = "never",
INSTALL_opts = c("--no-multiarch"),
force = TRUE)
library(KoNLP)
KoNLP 패키지는 자바와 rJava 패키지가 설치되어 있어야 하기 때문에 multilinguer 패키지를 설치
관련 패키지가 있어야 KoNLP 패키지를 사용할 수 있기 때문에, 관련 패키지들도 설치
remotes패키지의 install_github()를 사용해 깃허브에 있는 KoNLP 패키지를 설치한 다음 로드하면 설치 준비끝
형태소 사전 설정하기
텍스트 마이닝을 할 때 가장 먼저 하는 작업은
어떤 품사로 되어있는지 파악하기 위해 형태소 분석을 해야한다
KoNLP 패키지가 사용하는 NIA 사전은 120만여 개 단어로 구성되어 있고, 이를 사용하기 위해 useNIADic() 실행
useNIADic()
데이터 준비하기
깃 허브에서 hiphop.txt 파일을 다운로드
hiphop.txt 파일에는 멜론 차트 랩/힙합 부문 상위 50 곡의 가사가 들어있다
txt <- readLines("./data/hiphop.txt")
txt
head(txt,5)를 통해 5개만 보면, 노래 가사로 구성되어있음을 볼 수 있다
특수 문자 제거하기
이모티콘이나 특수문자가 포함되어있으면 오류가 발생할 수 있기 때문에 특수문자를 빈칸으로 바꿔준다
# 특수 문자를 blank 로 변경
library(stringr)
txt <- str_replace_all(txt, "\\W", " ")
head(txt,5)
가장 많이 사용된 단어 알아보기
어떤 단어가 많이 사용됐는지 알아보기 위해, extractNoun()을 통해 명사를 추출합니다
# 명사 추출
noun <- extractNoun(txt)
noun
# 리스트 형태 풀어주기
wordcount <- table(unlist(noun))
str(wordcount)
# 데이터프레임 구조로 변경
word_df <- as.data.frame(wordcount, stringsAsFactors = F)
str(word_df)
# 변수 이름 변경
library(tidyverse)
word_df <- rename(word_df,
word = Var1,
freq = Freq)
head(word_df)
이렇게 한글자로 된 단어가 많기 때문에, 두 글자 이상으로 된 단어만 추출해보자
# 2글자 이상의 단어 추출
word_df <- word_df %>%
filter(nchar(word) >= 2)
# 상위 20 단어 추출
top20 <- word_df %>%
arrange(desc(freq)) %>%
head(20)
top20
아무래도 힙합가사여서 그런지, my, you, Yah~ 같은 영어가 많이 보이는 걸 볼 수 있다.
워드 클라우드 만들기
워드 클라우드는 이름에서 알 수 있듯이, 단어의 빈도를 구름 모양으로 표현한 그래프이다
글자의 크기와 색깔을 통해 단어의 빈도를 한눈에 파악할 수 있다
먼저 패키지 설치
# 워드 클라우드
install.packages("wordcloud")
library(wordcloud)
# 색상 설정
library(RColorBrewer)
pal <- brewer.pal(8, "Dark2")
# 난수 고정
set.seed(1)
wordcloud()는 실행할 때마다 매번 다른 모양의 워드 클라우드를 만들기 때문에 set.seed를 통해 난수를 고정해준다
아까 만든 힙합 가사를 통해 워드 클라우드를 만들어보자
wordcloud(words = word_df$word, #단어
freq = word_df$freq, #단어 빈도
min.freq = 2, #최소 빈도
max.words = 200, #최대 단어 개수
random.order = F,
rot.per = 0.1, #rotation되어있는게 전체 단어의 10프로
scale = c(3, 0.3), #시행착오 겪으면서 내가 보기 이쁜 scale로 바꾸기
colors = pal)
#
많이 사용된 단어 일수록 글자가 크고 가운데에 배치된다
RColorBrewer
위에서 불러온 library(RColorBrewer)에 대해 조금 더 알아보자
# library(RColorBrewer)
display.brewer.all()
display.brewer.all()이란 코드를 통해 지원하는 색상을 알 수 있다
brewer.pal(색의 수, 팔레트 이름)
원하는 팔레트의 이름과 몇가지 색을 가져올 것인지 지정할 수 있다.
# 색을 가져올 땐 brewer.pal 사용
pal <- brewer.pal(8,"Set3") # 색상변경!
그렇게 고른 색을 pal에 지정하면 워드 클라우드의 색도 변경할 수 있다~
오늘 포스팅도 그럼 여기까지~
'R' 카테고리의 다른 글
R - 지도시각화(kormaps2014) : 대한민국 시도별 인구, 결핵 환자 수 단계 구분도 (0) | 2024.07.31 |
---|---|
R - 지도시각화(ggiraphExtra) : 미국 주 별 강력 범죄율 (0) | 2024.07.30 |
R - 그래프 살펴보기(ggplot2 - 선그래프, 상자그림) (1) | 2024.07.27 |
R - 그래프 살펴보기(ggplot2 - 산점도, 막대그래프) (2) | 2024.07.13 |
R - 데이터 정체 [결측치, 이상치] (0) | 2024.07.12 |