R 단어 빈도 분석 : 무엇을 강조했을까?

R 단어 빈도 분석에 대해 알아보도록 하겠습니다. R은 텍스트 마이닝에 대한 유용한 라이브러리를 제공합니다. 단어의 빈도수를 확인하여 문장내에서 어떤 비중을 차지하고 있는지 확인해보도록 하겠습니다.

1.텍스트 전처리

  • 데이타 읽기
# 라이브러리 설치
install.package(”stringr”)

# 라이브러리 로딩
library(stringr) 

raw_moon <- readLines("data/km-theking", encoding = "UTF-8")
head(raw_moon)

txt <- "치킨은!! 맛있다. xyz 정말 맛있다!@#"
txt

str_replace_all(string = txt, pattern = "[^가-힣]", replacement = " ")
  • 불필요한 문자 제거하기
    • str_replace_all()
      • string : 처리할 텍스트
      • pattern : 규칙 → 예> “[^가-힣]” : 한글 제외
      • replacement : 바꿀 문자 → 예> “ “ : 공백
# 라이브러리 설치
install.package(”stringr”)

# 라이브러리 로딩
library(stringr) 

raw_moon <- readLines("data/km-theking", encoding = "UTF-8")
head(raw_moon)

txt <- "치킨은!! 맛있다. xyz 정말 맛있다!@#"
txt

moon <- raw_moon %>% str_replace_all(pattern = "[^가-힣]", replacement = " ")

  • 연속된 공백 제거하기
    • str_squish()
    • 연속된 공백은 제거되고 하나의 공백만 남음.
moon <- moon %>% str_squish()
  • tibble 구조로 바꾸기
    • as_tibble()
library(dplyr)
moon <- as_tibble(moon)
  • 전처리 작업 한 번에 하기
moon <- raw_moon %>%
 str_replace_all("[^가-힣]", " ") %>%  # 한글만 남기기
 str_squish() %>%                      # 연속된 공백 제거
 as_tibble()                           # tibble로 변환

2. 토큰화하기

  • tidytext – unnest_tokens()
    • “sentences”
    • “words”
    • “characters”
install.packages("tidytext")
library(tidytext)

# 문장 기준 토큰화
text %>%
  unnest_tokens(input = value,        # 토큰화할 텍스트
                output = word,        # 출력 변수명
                token = "sentences")  # 문장 기준

# 띄어쓰기 기준 토큰화
text %>%
  unnest_tokens(input = value,
                output = word,
                token = "words")      # 띄어쓰기 기준

# 문자 기준 토큰화
text %>%
  unnest_tokens(input = value,
                output = word,
                token = "characters")  # 문자 기준
  • 토큰화하기
text %>%
  unnest_tokens(input = value,
                output = word,
                token = "words")      # 띄어쓰기 기준

3. R 단어 빈도 분석하기

  • 단어 빈도 구하기 – count()
word_space <- word_space %>%
 count(word, sort = T)

word_space
  • 한 글자로 된 단어 제거하기 – filter(str_count())
str_count("배")
str_count("사과")
# 두 글자 이상만 남기기
word_space <- word_space %>%
 count(word, sort = T) %>%
 filter(str_count(word) > 1)
  • 자주 사용된 단어 추출하기
top20 <- word_space %>%
 head(20)

top20
  • 막대 그래프 만들기 – geom_col()
install.packages("ggplot2")
library(ggplot2)

ggplot(top20, aes(x = reorder(word, n), y = n)) +  # 단어 빈도순 정렬
 geom_col() +
 coord_flip()
  • macOS에서 R 그래프에서 한글 표현하기
theme_set(theme_gray(base_family="AppleGothic"))
  • 그래프 다듬기
ggplot(top20, aes(x = reorder(word, n), y = n)) +
 geom_col() +
 coord_flip() +
 geom_text(aes(label = n), hjust = -0.3) +            # 막대 밖 빈도 표시
  
 labs(title = "문재인 대통령 출마 연설문 단어 빈도",  # 그래프 제목
      x = NULL, y = NULL) +                           # 축 이름 삭제
  
 theme(title = element_text(size = 12))               # 제목 크기
  • 워드 클라우드 만들기 – geom_text_wordcloud()
install.packages("ggwordcloud")
library(ggwordcloud)

ggplot(word_space, aes(label = word, size = n)) +
 geom_text_wordcloud(seed = 1234) +     
 scale_radius(limits = c(3, NA),     # 최소, 최대 단어 빈도
              range = c(3, 30))      # 최소, 최대 글자 크기
  • 그래프 다듬기
ggplot(word_space, 
       aes(label = word, 
           size = n, 
           col = n)) +                     # 빈도에 따라 색깔 표현
 geom_text_wordcloud(seed = 1234) +  
 scale_radius(limits = c(3, NA),
              range = c(3, 30)) +
 scale_color_gradient(low = "#66aaf2",     # 최소 빈도 색깔
                      high = "#004EA1") +  # 최고 빈도 색깔
 theme_minimal()                           # 배경 없는 테마 적용

A Word Cloud Geom for ggplot2

  • 그래프 폰트 바꾸기
install.packages("showtext")
library(showtext)
font_add_google(name = "Nanum Gothic", family = "nanumgothic")
showtext_auto()
  • 그래프에 폰트 지정하기
ggplot(word_space,
       aes(label = word,
           size = n,
           col = n)) +
  geom_text_wordcloud(seed = 1234,
                      family = "nanumgothic") +  # 폰트 적용
  scale_radius(limits = c(3, NA),
               range = c(3, 30)) +
  scale_color_gradient(low = "#66aaf2",
                       high = "#004EA1") +
  theme_minimal()
  • 검은 고딕으로 바꾸기
font_add_google(name = "Black Han Sans", family = "blackhansans")
showtext_auto()

ggplot(word_space,
       aes(label = word,
           size = n,
           col = n)) +
  geom_text_wordcloud(seed = 1234,
                      family = "blackhansans") +  # 폰트 적용
  scale_radius(limits = c(3, NA),
               range = c(3, 30)) +
  scale_color_gradient(low = "#66aaf2",
                       high = "#004EA1") +
  theme_minimal()
  • ggplot2 패키지로 만든 그래프의 폰트 바꾸기
font_add_google(name = "Gamja Flower", family = "gamjaflower")
showtext_auto()

ggplot(top20, aes(x = reorder(word, n), y = n)) +
  geom_col() +
  coord_flip() +
  geom_text(aes(label = n), hjust = -0.3) +
  
  labs(title = "문재인 대통령 출마 연설문 단어 빈도",
       x = NULL, y = NULL) +
  
  theme(title = element_text(size = 12),
        text = element_text(family = "gamjaflower"))  # 폰트 적용
  • RStudio는 새로 시작하면 폰트는 재설정해주어야 한다.
  • ggplot2 기본 테마 폰트 바꾸기
theme_set(theme_gray(base_family = "nanumgothic"))

형태소 분석기에 대해 궁금하신 분은 여기 링크를 참고바랍니다.

참고 > Do It! 쉽게 배우는 R 텍스트 마이닝

[이지스퍼블리싱]Do it! 쉽게 배우는 R 텍스트 마이닝 - Do it! 시리즈, 이지스퍼블리싱

“이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.”

Back to top