[더브레인-3] 2. 워드클라우드 예제 실습 안내
환영합니다, Rolling Ress의 카루입니다.
** 3-2. 워드클라우드 [통계]
준비물: 단어를 분석할 글 (.txt 파일로 제작 후 코랩에 업로드)
(신문기사나 논문도 괜찮습니다)
이건 전산언어학이라기보단 통계쪽에 더 가까워요. 정규표현식보단 이쪽이 훨씬 쉬울 겁니다.
!pip install nltk
!pip install konlpy
!apt-get update -qq
!apt-get install fonts-nanum* -qq
from collections import Counter
from konlpy.tag import Hannanum
from wordcloud import WordCloud
from PIL import Image
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
def flatten(l):
flatList = []
for elem in l:
if type(elem) == list:
for e in elem:
flatList.append(e)
else:
flatList.append(elem)
return flatList
첫 코드는 이렇게 입력해주시면 됩니다. 그냥 분석에 필요한 도구 입력하고 함수 하나 정의해둔 거니, 여기는 별 다른 설명 하지 않고 진행하겠습니다.
with open('_________', 'r', encoding='UTF-8') as f:
lines = f.readlines()
hannanum = Hannanum()
temp = []
for i in range(len(lines)):
temp.append(hannanum.nouns(lines[i]))
word_list = flatten(temp)
stop_words = [_____]
word_list = [x for x in word_list if not x in stop_words]
word_list = pd.Series([x for x in word_list if len(x) > 1])
word_list.value_counts().head(10)
그 다음 예제 코드는 이렇게 입력해주시면 됩니다. 첫 번째 빈칸에는 여러분의 txt 파일 이름, 두 번째 빈칸에는 워드클라우드에서 무시할 단어를 따옴표로 감싸 넣어주시면 됩니다. 예를 들어, 제 블로그의 글을 분석한다고 할 때 닉네임은 중요한 게 아니니 생략해버릴 수 있습니다.
stop_words = ['카루', '라에', '세타', '실비아', '키아나']
이런 식으로요. 만약 없다면 그냥 []만 남겨두셔도 됩니다. 이제 코드 해설을 해드리겠습니다.
with open('_________', 'r', encoding='UTF-8') as f:
lines = f.readlines()
파일을 읽어서 라인별로 분할하는 부분입니다. 참고로 여러분 컴퓨터는 UTF-8이 아니라 euc-kr을 사용해야 할 수도 있습니다.
temp = []
for i in range(len(lines)):
temp.append(hannanum.nouns(lines[i]))
리스트로 분할한 텍스트에서, 명사만 추려서 새로운 리스트를 만드는 과정입니다.
word_list = flatten(temp)
맨 위에 함수가 정의되어 있는데, 리스트를 1차원으로 눌러주는 역할을 합니다. 크게 신경 쓰실 필요는 없어요.
word_list = [x for x in word_list if not x in stop_words]
word_list = pd.Series([x for x in word_list if len(x) > 1])
word_list.value_counts().head(10)
불용어(데이터 분석에서 별 의미가 없는 단어)를 제거하고 판다스 배열로 만드는 과정입니다. 그리고 맨 아랫줄은 수가 가장 많은 순서대로 10개의 단어를 보여주는 코드입니다. 이걸 잘 관찰해보세요.
wordcloud = WordCloud(
font_path = 'NanumGothic',
width = 800,
height = 800,
background_color = 'white'
)
count = Counter(word_list)
wordcloud = wordcloud.generate_from_frequencies(count)
array = np.array(wordcloud.to_image())
fig = plt.figure(figsize=(10,10))
plt.imshow(array, interpolation = 'bilinear')
plt.show()
fig.savefig('wordcloud.png')
그리고 이건 본격적으로 워드클라우드를 만드는 과정입니다. 입력해주세요.
count = Counter(word_list)
wordcloud = wordcloud.generate_from_frequencies(count)
array = np.array(wordcloud.to_image())
리스트의 단어를 센 뒤, 자주 나오는 단어를 바탕으로 워드클라우드를 생성합니다.
fig = plt.figure(figsize=(10,10))
plt.imshow(array, interpolation = 'bilinear')
plt.show()
fig.savefig('wordcloud.png')
지난번에도 사용했던 matplotlib입니다. 출력이 끝나면 wordcloud.png 라는 파일로 저장합니다.

이건 제 블로그 글.. Karu's Story의 특정 글을 바탕으로 돌려본 워드클라우드입니다. 여러분도 해당 사진이 완성되면, 개인 드라이브에 올려주세요. 정규동아리 최종 보고서에 넣어도... 괜찮지 않을까요? 참고로 보고서에 넣을 거라면 figsize를 (10,5) 정도로 바꿔주세요.