logo

[텍스트 분석] 단어 구름

pip 명령어로 설치

pip install wordcloud

wordcloud 모듈을 임포트

from wordcloud import WordCloud

설정

wc = WordCloud(
  font_path='NanumGothic.ttf', # 글꼴 파일이 있을 경우
  background_color='white',    # 배경색
  max_words=100,               # 시각화할 단어 개수
  width=400,                   # 가로 크기
  height=300)                  # 세로 크기

단어별 빈도 데이터 불러오기

import pandas as pd
word_count = pd.read_excel('word_count.xlsx')

word_count를 사전(dict) 형태로 변환

count_dic = dict(zip(word_count.단어, word_count.빈도))

단어 구름

cloud = wc.fit_words(count_dic)

보기

cloud.to_image()

파일로 저장

cloud.to_file('cloud.png')
 

크기에 따라 다른 색깔

색 지정 함수

sizes = set()
def get_font_size(*args, **kwargs):
    sizes.add(kwargs['font_size'])
    return 255, 0, 0

단어 구름을 한 번 그려서 글꼴의 크기를 수집

wc = WordCloud(color_func=get_font_size)
cloud = wc.fit_words(count_dic)

글꼴의 크기를 로그 척도를 이용해서 0~1로 변환한다

from matplotlib.colors import LogNorm
norm = LogNorm(vmin=min(sizes), vmax=max(sizes))

컬러맵을 지정

참고: https://matplotlib.org/stable/tutorials/colors/colormaps.html

import matplotlib
cmap = matplotlib.colormaps['Reds']

색깔 지정 함수

def set_color(*args, **kwargs):
    r, g, b, a = cmap(norm(kwargs['font_size']))
    return int(255 * r), int(255 * g), int(255 * b)

만들어진 색깔 지정 함수로 단어 구름 그리기

wc = WordCloud(font_path='NanumGothic.ttf',
               background_color='white', color_func=set_color)
cloud = wc.fit_words(count_dic)
cloud.to_image()
 

특정한 모양으로 그리기

특정한 모양으로 그리려면, 흰 바탕에 검은 색으로 모양을 그린 뒤 mask.png로 저장하고 불러온다

from PIL import Image
import numpy as np
mask = Image.open('mask.png')
mask

흑백 이미지로 변환하고, 넘파이 어레이로 변환

mask = mask.convert('L')
mask = np.asarray(mask)

단어 구름 그리기

wc = WordCloud(background_color='white', mask=mask)
cloud = wc.fit_words(count_dic)
cloud.to_image()
 

특정한 모양 & 색으로 그리기

특정한 모양과 색으로 그리려면, 흰 바탕에 그리고 싶은 모양과 색으로 그린 뒤 color_mask.jpg로 저장하고 불러온다

mask = Image.open('color_mask.jpg')
mask

넘파이 배열로 변환

mask = np.asarray(mask)

단어 구름 그림

wc = WordCloud(background_color='white', mask=mask)
wc.fit_words(count_dic)
<wordcloud.wordcloud.WordCloud at 0x22e62ba6e30>

색 지정

from wordcloud import ImageColorGenerator
color_func = ImageColorGenerator(mask)
cloud = wc.recolor(color_func=color_func)
cloud.to_image()
Previous
문서 단어 행렬