본문 바로가기
R

R - 그래프 살펴보기(텍스트 마이닝)

by d22pinsights 2024. 7. 29.

참고 : 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에 지정하면 워드 클라우드의 색도 변경할 수 있다~

 

오늘 포스팅도 그럼 여기까지~