Wordcloud

Sam (토론 | 기여)님의 2023년 2월 2일 (목) 05:09 판 (새 문서: == 개요 == 단어의 빈도에 따라 구름모양으로 표현한 그래프(워드 클라우드)를 만들어주는 라이브러리. === 사전 준비 === {| class="wikitable" !...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

1 개요

단어의 빈도에 따라 구름모양으로 표현한 그래프(워드 클라우드)를 만들어주는 라이브러리.

1.1 사전 준비

과정 설명 방법
KoNLPy 설치 형태소분석에 필요한 것들을 설치한다.

자바도 버전에 맞게 설치하자.(자바필수)

설명 방법
리눅스(apt) apt-get install g++ python-dev python3-dev openjdk-8-jdk
윈도우 운영체제에 따라 다음 링크에서 설치. abit.ly/easypy_101

pip install konlpy

wordcloud 설치 워드클라우드 패키지 설치. pip install wordcloud

2 워드 클라우드 만들기

과정 설명 방법
불필요한 문자 제거 특수문자, 한자, 공백 등을 제거한다.
import re

text_data = re.sub('^[가-힣a-zA-Z]*$', ' ', text_data)  # 정규표현식을 이용하여 한글과 알파벳만 남긴다.
명사만 추출 조사를 제거한다.
import konlpy
hannanum = konlpy.tag.Hannanum()  # 형태소 분석기 중 하나.
nouns = hannanum.nouns(text_data)  # 명사만 추출한다. 리스트로 반환.
단어 빈도 계산 특정 단어가 몇 번 나왔는지 계산한다.
import pandas as pd

df = pd.DataFrame({'word': nouns})  # 리스트로 데이터프레임을 만들고,

# 다음은 선택사항(한글자 버리기)
df['len'] = df['word'].str.len()  # 글자의 갯수를 센 후,
df = df.query('len >= 2')  # 1글자로 된 데이터는 버린다.

# 단어 빈도 세기
df = df.groupby('word', as_index=False) \  # 단어별 그룹화
        .agg(count = ('word', 'count')) \  # 단어별 등장횟수 세기
        .sort_values('count', ascending=False)  # 내림차순 정렬
(선택사항)

데이터 체크

해당 단어의 빈도에 대한 그래프를 그린다.
import seaborn as sns
import matplotlib.pyplot as plt

plt.rcParams.update({'font.family'  : 'NanumGothic',  # 나눔 고딕을 지정하는 경우'
                    })  # 이미지에 대한 필요한 설정.
sns.barplot(data=df.head(20), y='word', x='count')  # 상위 20개에 대해서만 막대형 그래프를 그린다.
워드클라우드 만들기 모양으로 사용할 이미지는
  1. 파워포인트 따위를 이용해 배경을 지운 후(그림서식>배경제거),
  2. 검게 만들어 사용하자.(밝기 -100%)
# 선택사항. 워드클라우드 모양 만들기.
import PIL
back_img = PIL.Image.open('파일경로.png')  # 워드클라우드는 기본적으로 사각형인데, 모양을 지정해줄 수 있다.
import numpy as np
img = PIL.Image.net('RGB', back_img.size, (255,255,255))
img.paste(back_img, back_img)
img = np.array(img)  # 그림을 배열처리.

from wordcloud import WordCloud
# 생성기. 생성에 필요한 옵션을 선언할 때 지정한다.(기본적으로 랜덤생성)
wc = WordCloud(mast = img,
                font_path = 'NanumGothic',  # 설치된 글꼴 지정. 속은 .ttf 경로 지정.
                )
img_cloud = wc.generate_from_frequencies(word_dict)  # 사전을 토대로 워드클라우드 생성.
plt.axis('off')  # 테두리선 없애기.
plt.imshow(img_cloud)  # 이미지 출력.