Python/Matplotlib

[Matplotlib] 파이썬 워드 클라우드(Word Cloud) 시각화 예제

jimmy_AI 2022. 2. 15. 00:23
반응형

Python 워드 클라우드 색상, 크기, 모양 지정 방법 정리

안녕하세요. 이번 글에서는 파이썬의 WordCloud 라이브러리를 활용하여

단어의 빈도를 한 눈에 시각화할 수 있는 워드 클라우드를 그려보고

컬러맵, 크기, 모양 등의 속성을 변경하는 방법에 대하여 정리해보도록 하겠습니다.

 

 

파이썬 워드 클라우드 기본 예제

예를 들어, 단어의 빈도가 아래와 같은 데이터프레임으로 결과가 요약되었다고

가정해보고 이를 기반으로 워드 클라우드를 생성해보도록 하겠습니다.

(편의상 두개의 열로 잘라서 표현되었지만, 실제로는 AAA ~ ZZZ의 26개 행이 1개의 열입니다.)

워드 클라우드 생성에는 matplotlib 라이브러리와 WordCloud 라이브러리가 필요합니다.

기본 설정으로 워드 클라우드를 그리는 방법은 아래와 같습니다.

import matplotlib.pyplot as plt
from wordcloud import WordCloud

word_freq = df['frequency'].to_dict()

wordcloud = WordCloud().generate_from_frequencies(word_freq)

plt.imshow(wordcloud)

plt.show()

높은 빈도의 단어가 큰 사이즈로 표현된 것은 알 수 있으나,

다소 밋밋한 시각화인 듯 합니다. 이제 이를 꾸미는 방법에 대해서 하나씩 살펴보겠습니다.

 

 

워드 클라우드 배경색, 글자 컬러맵 설정

background_color 속성으로 배경의 색상을 지정할 수 있으며,

colormap 인자로 글자 컬러맵을 고를 수 있습니다.

컬러맵의 종류는 아래의 공식 사이트를 참고해보시면 스타일 선택에 도움이 되실 듯 합니다.

 

Choosing Colormaps in Matplotlib — Matplotlib 3.5.1 documentation

Colormaps are often split into several categories based on their function (see, e.g., [Moreland]): First, we'll show the range of each colormap. Note that some seem to change more "quickly" than others. Sequential2 Many of the \(L^*\) values from the Seque

matplotlib.org

예시로, 흰 배경에 가을 느낌 스타일로 워드 클라우드를 생성해보겠습니다.

또한, 이와 별개로 제목도 간단하게 지정해보았습니다.

wordcloud = WordCloud(background_color ='white', colormap='autumn').generate_from_frequencies(dic)

plt.imshow(wordcloud)
plt.title("Word Frequency", size = 13) # 제목 지정

plt.show()

반응형

워드 클라우드 크기 지정, 축 제거

이번에는 Word Cloud를 정사각형 모양으로 변경하고,

그래프의 축을 제거하여 시각화의 효과를 극대화 시켜보도록 하겠습니다.

 

width, height 인자로 폭과 높이를 지정할 수 있는데,

plt.figure 속성에서 최종 크기를 이에 맞추어 지정해주어야 합니다.

 

또한, plt.axis 속성을 'off'로 지정하여 크게 의미를 가지지 않는 그래프 축을 제거하겠습니다.

wordcloud = WordCloud(background_color ='white', colormap='autumn',
                      width = 700, height = 700, random_state = 43).generate_from_frequencies(dic)

plt.figure(figsize = (6, 6)) # 최종 워드 클라우드 사이즈 지정
plt.imshow(wordcloud)
plt.title("Word Frequency", size = 13)

plt.axis('off') # 그래프 축 제거

plt.show()

추가로, 워드 클라우드를 generate할 때 마다 스타일이 미세하게 다르게 형성되는데,

random_state 인자를 지정해주면 생성할 때마다 완전히 동일한 결과를 받을 수 있게 됩니다.

 

 

워드 클라우드 모양 설정

마지막으로, 사각형이 아닌 다른 모양의 워드 클라우드를 생성하는 방법을 말씀드리겠습니다.

 

원하는 이미지를 가져온 뒤, mask 인자에 해당 이미지의 픽셀 값을 지정해주시면 됩니다.

예를 들어, 아래 이미지를 이용하여 하트 모양으로 Word Cloud를 생성해보겠습니다.

참고로, 배경색이 흰색 혹은 투명색인 이미지가 정확하게 원하는 모양을 반영하기에 좋습니다.

from PIL import Image
import numpy as np
 
im = Image.open('heart.png') # 이미지 파일 읽어오기
mask_arr = np.array(im) # 픽셀 값 배열 형태 변환

wordcloud = WordCloud(background_color ='white', colormap='autumn',
                      width = 700, height = 700, random_state = 43, mask = mask_arr,
                      prefer_horizontal = True).generate_from_frequencies(dic)

plt.figure(figsize = (6, 6))  
plt.imshow(wordcloud)
plt.title("Word Frequency", size = 13)

plt.axis('off')

plt.show()

원본 이미지인 하트 모양에 가깝게 워드 클라우드가 만들어진 모습을 볼 수 있었습니다.

또한, prefer_horizontal 속성을 True로 지정하여 수평 방향으로만 글자가 기록된 모습도

참고해주시면 원하는 스타일 시각화에 도움이 되실 듯 합니다.