본문 바로가기
데이터 분석/Python

[텍스트 마이닝-시각화] 워드클라우드 만들기

by 초코레모네이드 2023. 12. 27.

 
 
 
 
패키지 임포트

import pandas as pd
from wordcloud import WordCloud, ImageColorGenerator
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
from PIL import *

 
 
단어명과 빈도가 있는 데이터 불러오기

df = pd.read_csv("저장경로/파일명.txt", sep='\t', encoding='UTF-8')
df

 
 
단어명과 빈도로 딕셔너리 객체 생성.
(단어 개수가 많을 경우 적당량만 새 데이터프레임에 담아서 사용해도 됨.)

dict = dict(zip(list(df['명사']), list(df['빈도'])))
dict

 
 
워드 클라우드를 만들고 싶은 모양이 있을 경우 이미지 파일을 불러와서 numpy 객체에 담기

icon = Image.open("저장경로/파일명.png")
# jpeg여도 되지만 보통 png가 화질이 덜 깨짐. 화질이 깨지는 경우 워드클라우드 모양의 가장자리가 울퉁불퉁해서 보기 좋지 않음.
mask = Image.new("RGB", icon.size, (255,255,255))
mask.paste(icon,icon)
mask = np.array(mask)

 
 
워드 클라우드 생성하기~

# wordcloud는 외국에서 만든 라이브러리로 한글 글꼴이 포함되어 있지 않기 때문에 사용하고자 하는 한글 글꼴을 미리 불러와서 저장해둬야 함.
# mask에다가 앞서 불러온 이미지를 담은 객체명 지정, scale은 숫자가 클수록 이미지 선명도가 높아짐. 너무 크면 시간이 오래 걸리므로 2~3이 적당.
# 나머지 파라미터는 wordcloud 공식 사이트에서 참고.
# https://amueller.github.io/word_cloud/
wc = WordCloud(font_path='malgun', width=500, height=500, mask=mask, scale=2.0, background_color="white", max_font_size=250, colormap="viridis", contour_color="black")

gen = wc.generate_from_frequencies(dict) # 아까 단어명과 빈도를 담은 딕셔너리를 여기 넣어줌
plt.figure() # 저장하기 전에 워드클라우드를 미리 보기 위한 코드
plt.figure(figsize=(15,15)) # figsize는 코드 출력란에 표시되는 이미지의 크기를 정함. 15, 15면 적당한데 더 크게 볼 수도 있음.
plt.imshow(gen)
plt.axis("off")

 
 
저장하면 끝!

wc.to_file('저장경로/파일명.png')

 
 
 

728x90

댓글