본문 바로가기
3.9 기타 개발/Python

[파이썬/코드] 한글 wordcloud생성하고 이미지/그래프로 응용 출력하기

by Dohi._. 2023. 5. 13.
728x90

안녕하세요 이번 코드는 파이썬 wordcloud를 이용해서 이미지/그래프로 시각화하는 방법입니다

 

 

0. 패키지 

 

wordcloud

  from wordcloud import WordCloud
용도: 워드클라우드를 생성 

설치필요

 pip install wordcloud

설치가 안될경우 아래 링크

2023.05.12 - [공부/Python] - [파이썬] wordcloud설치 (설치 오류 해결방법!)

 

matplotlib

  import matplotlib.pyplot as  plt
용도: wordcloud 데이터를 시각화

설치필요

둘중 하나 ( 저는 python -m pip install -U matplotlib 사용)
pip install matplotlib
python -m pip install -U matplotlib

  import matplotlib.font_manager as fm

용도: 시각화한 자료에 폰트적용을 위해 사용

 

-추후에 자세하게 공부해서 추가 포스팅예정 (재밌더라고요)

 

Counter

  from collections import Counter
용도: 텍스트와 빈도 수를 추출하기 위해 사용 -> wordcloud에서 글자 크기에 사용합니다

 

konlpy

  from konlpy.tag import Okt
용도: 한국어를 처리하는 대표적인 형태소 분석 패키지입니다

설치필요

pip install konlpy
KoNLPy: 파이썬 한국어 NLP 사이트
https://konlpy.org/ko/latest/index.html

 

PIL

  from PIL import Image
- 워드클라우드를 원하는 형태로 그리기 위해 그림을 불러오는 패키지입니다.

설치필요

pip install pillow
-----------(아래는 위에가 만약 안될경우..?)
pip2 install image (파이썬2)
pip3 install image (파이썬3)

 

numpy

  import numpy as np

용도:수치 계산 모듈

설치필요

pip install numpy

 


1.코드

 

필요한 파일

문재인대통령취임사.txt
0.01MB
윤석열대통령취임사.txt
0.01MB

with open에 있는 파일 같은 경우는 경로를 지정하거나
파일명만 불러올경우에 기본 python폴더에 있어야 합니다

from wordcloud import WordCloud #워드 클라우드 생성
import matplotlib.pyplot as plt #시각화
from collections import Counter #텍스트, 빈도수 추출
from konlpy.tag import Okt #형태소 분석
from PIL import Image # 이미지 처리 모듈
import numpy as np #수치 계산 모듈
import matplotlib.font_manager as fm

with open('문재인대통령취임사.txt', 'r', encoding='utf-8') as f1: #with open: 파일 열기
    text1 = f1.read()
with open('윤석열대통령취임사.txt', 'r', encoding='utf-8') as f2:
    text2 = f2.read()

okt = Okt() #konlpy.tag.Okt: 형태소 분석 모듈
nouns1 = okt.nouns(text1) #nouns: 문장에서 명사만 추출하는 함수
nouns2 = okt.nouns(text2)

words1 = [n for n in nouns1 if len(n) > 1] #[n for n in nouns1 if len(n) > 1]: 길이가 1인 단어는 제외하는 조건식
words2 = [k for k in nouns2 if len(k) > 1]

c1 = Counter(words1) #collections.Counter: 단어별 빈도수를 계산하는 함수
c2 = Counter(words2)

wc1 = WordCloud(font_path='malgun',width=500, height=500, scale=2.0, max_font_size=250)
wc2 = WordCloud(font_path='malgun',width=500, height=500, scale=2.0, max_font_size=250)
#WordCloud: 워드 클라우드 생성 모듈
#font_path: 폰트 경로
#width: 이미지 가로 길이
#height: 이미지 세로 길이
#scale: 이미지 확대 비율
#max_font_size: 최대 폰트 크기

gen1 = wc1.generate_from_frequencies(c1)
gen2 = wc2.generate_from_frequencies(c2)
#WordCloud 객체 wc2를 이용하여 단어의 빈도수 정보가 담긴
#Counter 객체 c2를 이용하여 워드클라우드를 gen2생성하는 메소드
path = 'C:\\Users\\kmam1\\AppData\\Local\\Microsoft\\Windows\\Fonts\\EBS훈민정음새론R.ttf' #폰트경로
fontprop = fm.FontProperties(fname=path)#폰트경로입힘
fig, (ax1, ax2) = plt.subplots(1, 2)
fig.suptitle('대통령 취임사비교',fontproperties=fontprop)
#이 코드는 두 개의 서브플롯을 가진 새로운 figure를 생성하고,
#각각의 subplot에 대한 객체를 반환합니다. 그리고 figure의 제목을 지정합니다.
#fig.subplots() 메소드는 figure 객체와 각각의 subplot의 axis 객체를 반환합니다. (1, 2) 인자는 하나의 row와 두 개의 column으로 subplot의 배치를 지정합니다.
#fig.suptitle() 메소드는 figure의 제목을 지정하는데,
#suptitle은 "super title"의 약어로써, 전체 figure에 대한 제목을 말합니다.

ax1.imshow(gen1)
ax1.set_title('문재인대통령취임사',fontproperties=fontprop)
ax1.grid(False) #1번 그래프축삭제
ax1.set_xticks([])#X
ax1.set_yticks([])#Y삭제 

ax2.imshow(gen2)
ax2.set_title('윤석열대통령취임사',fontproperties=fontprop) #제목폰트한글입힘
ax2.grid(False) #2번 그래프축삭제
ax2.set_xticks([])#X
ax2.set_yticks([])#Y삭제 


#wc1.to_file('사진명.png') 사진으로 저장하는 코드

plt.show()
#plt.show()는 Matplotlib 라이브러리에서 그래프를 화면에 출력하는 함수입니다.
#이 함수가 호출되면 그래프가 화면에 나타납니다.

 

path = '폰트경로'   
**폰트 경로 따는법 검색에서 font 입력 -> 글꼴 -> 원하는 한글 폰트 우클릭 속성클릭 -> '경로' +'\\폰트이름.ttf'
fontprop = fm.FontProperties(fname=path)
ax.set_title('ㅇㅇㅇ',fontproperties=fontprop)

폰트를 다 지정해 준 이유는
한글폰트가 지원되는 폰트를 사용하지 않으면 한글이 다 깨져보입니다.
윈도우기준으로 한글이 깨질경우에는 이렇게 일반적으로 한개씩 지정하는 방법이 있습니다

 

2. 마무리

이렇게 학교에서 간단하게 배운 패키지들을 응용해서 사용해보는 시간을 가지기위해서 고민하다가

형태소와 wordcloud를 이용해서 이미지시각화하는 방법을 배워봤습니다
한글을 사용하는 경우에 깨짐이 많아 기본적으로 malgun이라는 기본 한글을지원해주는 폰트를 사용했는데요

 

더 자세히 배워서 다양한 응용이 있을 것같은 패키지들이라 더많은 공부를 해서 추가 정보로 찾아오도록 하겠습니다:)

728x90

댓글