단어 구름
많이 나오는 단어는 크게 그리고, 자주 안 나오는 단어는 작게 그린 것을 단어 구름(word cloud)라고 한다.
설치
pip install wordcloud
파이썬에는 워드 클라우드를 만들어주는 라이브러리가 있다. 이를 설치하기 위해 위 명령을 사용한다.
'pip'는 파이썬 코드가 아니라 별도의 명령어이다. 이 명령을 실행하기 위해서는 앞에 느낌표(!)를 붙여야 한다.
주피터 노트북에서는 느낌표를 붙이지 않아도 자동으로 인식되지만, 구글 콜랩에서는 느낌표를 붙여주어야 한다. 따라서 구글 콜랩에서 워드 클라우드 라이브러리를 설치하려면 '!pip install wordcloud'와 같이 입력해야 한다.
설정
from wordcloud import WordCloud
워드 클라우드 라이브러리를 사용하기 위해 import 문을 작성할 때는 대소문자에 주의해야 한다.
'from' 부분은 모두 소문자로 작성한다.
'import' 뒤에 오는 'WordCloud'에서는 'W'와 'C'를 대문자로 작성해야 한다.
wc = WordCloud(
background_color='white', # 배경색
max_words=100, # 시각화할 단어 개수
width=400, # 가로 크기
height=300) # 세로 크기
WordCloud를 설정할 때 다음과 같은 옵션들을 사용할 수 있다:
배경색은 'background_color'로 설정한다. 'white'로 하면 흰색 배경이 된다. 만약 빨간 배경을 원한다면 'red'라고 쓰면 된다.
'max_words'는 시각화할 단어의 개수를 지정한다. 문서-단어 행렬에 500개의 단어가 있더라도, 모두 그리면 너무 복잡해 보일 수 있다. 여기서는 100개만 사용하기로 했다.
'width'와 'height'는 각각 가로와 세로 크기를 지정한다. 여기서는 400과 300으로 설정했다. 이 값들은 결과를 보고 조절할 수 있다. 만약 그림이 너무 작다면 800과 600으로 키울 수 있고, 너무 크다면 다시 줄일 수 있다.
이러한 설정들은 결과를 보면서 적절히 조절하면 된다.
단어 구름 그리기
count_dic = dict(zip(word_count.단어, word_count.빈도))
cloud = wc.fit_words(count_dic)
cloud.to_image()
'워드카운트' 표에 있는 '단어'와 '빈도' 데이터를 사용한다.
'dict'와 'zip' 함수는 이 데이터를 사전(dictionary) 형태로 변환하는 데 사용된다. 이는 내용을 바꾸는 것이 아니라 형식만 변환하는 것이다.
'count_dic'은 이렇게 변환된 사전 형태의 데이터를 저장한다.
그 다음, 'wc.fit_words(count_dic)'를 사용하여 이 데이터로 워드 클라우드를 생성한다. 이 결과는 'cloud' 변수에 저장된다.
이 과정을 거치면 워드 클라우드가 생성되어 이미지로 볼 수 있게 된다.
특정한 모양으로 그리기
from PIL import Image
import numpy as np
mask = Image.open('mask.png').convert('L')
mask = np.asarray(mask)
wc = WordCloud(background_color='white', mask=mask)
cloud = wc.fit_words(count_dic)
cloud.to_image()
PIL 라이브러리와 numpy를 사용하여 특정 모양의 워드 클라우드를 만들 수 있다.
먼저, 원하는 모양의 이미지를 준비해야 한다. 이 이미지는 면이 있는 형태여야 한다. 예를 들어, 원이나 사각형 같은 단순한 형태가 좋다. 너무 복잡한 모양은 글자를 배치하기 어려우므로 피해야 한다.
회사 로고와 같이 선명하고 큰 이미지가 적합하다. 그러나 글자가 이미 들어가 있는 로고는 피하는 것이 좋다.
이미지를 'mask.png'라는 이름으로 저장한다.
코드에서 'convert('L')'는 이미지를 흑백으로 변환하는 부분이다. 색깔을 살리고 싶다면 이 부분을 제거해야 한다.
색깔을 살리기
from wordcloud import ImageColorGenerator
# 모양 잡기
mask = Image.open('color_mask.jpg') # .convert('L') 없음
mask = np.asarray(mask)
wc = WordCloud(background_color='white', mask=mask)
wc.fit_words(count_dic)
# 색칠하기
color_func = ImageColorGenerator(mask)
cloud = wc.recolor(color_func=color_func)
cloud.to_image()
나머지 코드는 이전과 동일하게 사용하면 된다. 단, 모양을 잡는 단계와 색을 칠하는 단계가 두 단계로 나뉘어 있다.
색깔을 살리려면 '.convert('L')' 부분을 지워야 한다. 이렇게 하면 원래 이미지의 색깔을 유지한 채로 워드 클라우드를 만들 수 있다.