[텍스트 분석] 단어 구름
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()