본문 바로가기

My Work/Data Literacy

R 공부 (7편) - 쉽게 배우는 R 데이터 분석

문자로 된 데이터에서 가치 있는 정보를 얻어 내는 분석 기법을 '텍스트 마이닝'이라고 한다. 텍스트 마이닝을 하기 전에는 '형태소 분석'을 하는데, '형태소 분석' 이란 문장을 구성하는 어절들이 어떤 품사로 되어 있는지 파악하는 것이다. 따라서, '형태소 분석' 으로 어절들을의 품사를 파악하고 품사의 단어들을 추출한 다음 얼마나 많이 등장했는지를 확인할 수 있다. 

 

먼저, 필요한 패키지들을 설치 및 확인한다. 그 다음 extractNoun() 함수를 사용해서 명사를 추출한다. 

# 필요한 라이브러리 설치 및 로드
install.packages("multilinguer")
library(multilinguer)
install_jdk()

# KoNLP의 의존성 패키지 설치
install.packages(c("stringr", "hash", "tau", "Sejong", "RSQLite", "devtools"), type = 'binary')

# koNLP 패키지 설치
install.packages("remotes")
remotes::install_github("haven-jeon/KoNLP", upgrade = 'never', INSTALL_opts = c("--no-multiarch"))
install.packages("KoNLP", dependencies = TRUE)
library(KoNLP)

# 사용할 사전 설정
useNIADic()

# 텍스트 파일 읽기
txt <- readLines("(저장위치)/hiphop.txt")

# 텍스트 데이터 확인
head(txt)

# 문자 처리 패키지
library(stringr)

# 특수문자 제거
txt <- str_replace_all(txt, "\\W", " ")

# 명사 추출 예시
sentence <- "대한민국의 영토는 한반도와 그 부속도서로 한다"
nouns <- extractNoun(sentence)
print(nouns)

# 출력값
[1] "대한민국" "영토"     "한반도"   "부속도서" "한"

 

 

명사가 정확하게 추출되었다면 빈도표를 테이블 형태로 만들고 자주 사용된 단어를 빈도표로 만들겠다. 

nouns <- extractNoun(txt)

# 추출한 명사 list를 문자열 벡터로 변환, 단어별 빈도표 생성
wordcount <- table(unlist(nouns))

# 데이터 프레임으로 변환
df_word <- as.data.frame(wordcount, stringsAsFactors = F)

# 변수명 수정
df_word <- rename(df_word,
                  word = Var1,
                  freq = Freq)

# 두 글자 이상 단어 추출
df_word <- filter(df_word, nchar(word) >= 2)

top_20 <- df_word |>
  arrange(desc(freq)) |>
  head(20)

top_20

# 출력값
word freq
1   you   89
2    my   86
3   YAH   80
4    on   76
5  하나   75
6  오늘   51
7   and   49
8  사랑   49
9  like   48
10 우리   48
11  the   43
12 시간   39
13 love   38
14   to   38
15   we   36
16   it   33
17   em   32
18  not   32
19 역사   31
20 flex   30

 

 

다음에는 wordcloud 패키지를 설치하고 8개 색상으로 워드 클라우드를 구현하겠다. 

# 패키지 설치
install.packages("wordcloud")

# 패키지 로드
library(wordcloud)
library(RColorBrewer)

pal <- brewer.pal(8,"Dark2")  # Dark2 색상 목록에서 8개 색상 추출

set.seed(1234)
wordcloud(words = df_word$word,  # 단어
          freq = df_word$freq,   # 빈도
          min.freq = 2,          # 최소 단어 빈도
          max.words = 200,       # 표현 단어 수
          random.order = F,      # 고빈도 단어 중앙 배치
          rot.per = .1,          # 회전 단어 비율
          scale = c(4, 0.3),     # 단어 크기 범위
          colors = pal)          # 색깔 목록

워드 클라우드

 

 

이렇게 글자의 크기, 색상을 통해 직관적으로 어떤 단어가 많이 사용되었는지 확인할 수 있다.