일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 비지도학습
- supervised learning
- 머신러닝 강의
- 자바
- 인공지능
- 자바강좌
- 머신러닝
- java
- 백준 알고리즘
- 파이썬강의
- 머신러닝공부
- JAVA강좌
- C언어
- feature scaling
- 효묘블로그
- unsupervised learning
- acmicpc.net
- 딥러닝공부
- python강좌
- Python강의
- 경사하강법
- 파이썬강좌
- 선형회귀
- 머신러닝 강좌
- 지도학습
- 비용함수
- c언어 오목
- 딥러닝
- Gradient Descent
- 자바시작하기
- Today
- Total
컴공과컴맹효묘의블로그
[효묘] Worldcloud를 간단히 쓰는 방법 ( Python ) 본문
1.필요한 라이브러리
import numpy as np # 이미지 데이터를 다루기 위해
import pandas as pd # 데이터를 다루기 위한 라이브러리
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator # wordcloud 라이브러리
from PIL import Image # 이미지를 위한 라이브러리
import matplotlib.pyplot as plt # 그래프 및 이미지화 라이브러리
2. Text 데이터 준비
어떤 text도 상관 없지만 저는 wine review dataset을 다운받았습니다.
데이터의 구성은 이렇습니다. 여기서 wine review인 description 열만 빼서 사용하도록 하겠습니다.
# index_colr = 0 이 코드는 여기에서는 의미 없습니다. 그냥 안쓰셔도 됩니다.
df = pd.read_csv('data/winemag-data-130k-v2.csv', index_col=0) # index_col don't show index
# 모든 description을 한 문장(str)으로 만들어줍니다.
text = ''.join(v for v in df['description'])
3. wordcloud 생성 및 이미지화
이제 이 text 데이터를 wordcloud로 생성합니다.
wordcloud = WordCloud().generate(text)
WorldCloud 클래스의 생성자 매개변수는 여기서 더 자세히 알아볼 수 있습니다.
시각화를 합니다.
plt.figure()
plt.axis('off')
plt.imshow(wordcloud, interpolation='bilinear')
plt.show()
interpolation은 이미지를 어떻게 처리해서 보여줄지 결정합니다. bilinear는 부드럽게, None 혹은 none은 이미지를 있는 그대로 보여줍니다. 자세한 것은 여기를 클릭해주세요.
4. 매개변수에 따른 여러가지 시각화
background, max_words, width and height
WordCloud로 클래스를 생성할 때 매개변수를 줘서 배경색 등 여러가지를 바꿀 수 있습니다.
배경색을 white로, 최대 글자수는 150, 크기는 가로 1600, 세로 500으로 해보겠습니다.
wordcloud = WordCloud(background_color='white', max_words=150, width=1600, height=500).generate(text)
각 조건에 맞게 이미지가 출력되신 것을 볼 수 있습니다.
stopwords, scale
wine review의 description에서 drink, now, flavor, flavors, wine이라는 뻔한 단어들을 빼고싶습니다.
이때 stopwords매개변수를 사용하면 됩니다.
추가로 scale은 이미지 크기를 결정합니다. default 값은 1입니다.
블로그에서 보여지는 이미지에는 차이가 없지만 plt.show()로 보여지는 이미지의 크기는 값에 따라 커지거나 작아집니다.
stopwords = set(STOPWORDS)
stopwords.update(['drink', 'now', 'wine', 'flavor', 'flavors']) # 제거할 단어들
wordcloud = WordCloud(background_color='white', stopwords=stopwords, scale=3).generate(text)
mask, max_font_size
특정한 형태에 맞춰서 텍스트를 띄우는 것도 가능합니다. 이때 이 특정 형태를 mask라고 부릅니다.
이미지를 구글에서 다운받아줍니다. 텍스트를 띄우지 않을 배경은 하얀색이여야 합니다.
다음과 같은 이미지에 맞춰서 텍스트를 띄워보겠습니다.
추가로 max_font_size를 매개변수로 줘보겠습니다. max_font_size는 말 그대로 최대 폰트 사이즈이고, default값은 이미지의 height값과 같다고 합니다. mask를 사용한 경우 이미지의 height이 아니라 mask안에 최대로 들어갈 수 있는 값이 최대가 되는 것 같습니다.
wine_mask = np.array(Image.open('mask_img/wine_glass.png'))
wordcloud = WordCloud(background_color='white', stopwords=stopwords, mask=wine_mask, max_font_size=30).generate(text)
다음은 background를 black으로 줬을때 이미지입니다.
ImageColorGenerator를 사용한 색깔 있는 mask
색이 있는 mask를 이용해서 text의 색도 바꿀 수 있습니다.
다음 티스토리 이미지를 이용해보겠습니다.
mask에서 했던 것과 똑같이 해준다음, mask를 매개변수로 하는 ImageColorGenerator 클래스로 image_colors 인스턴스를 만들어줍니다.
그리고 plt imshow에서 wordcloud.recolor(color_func=image_colors)를 해줍니다.
추가로 이전에 소개했던 매개변수들을 적절히 섞도록 하겠습니다.
stopwords = set(STOPWORDS)
stopwords.update(['drink', 'now', 'wine', 'flavor', 'flavors']) # 제거할 단어들
mask = np.array(Image.open('mask_img/tistory.jpg'))
wordcloud = WordCloud(background_color='white',
stopwords=stopwords,
mask=mask,
max_font_size=15,
max_words=2000).generate(text)
image_colors = ImageColorGenerator(mask)
wordcloud.recolor(color_func=image_colors)
plt.figure()
plt.axis('off')
plt.imshow(wordcloud, interpolation='bilinear')
plt.show()
에러가 나는 mask
하지만 모든 mask 이미지가 잘 작동하는 것은 아닙니다. 그 이유는 동일한 format이 아니기 때문인데요, 포맷 변경 작업을 함으로써 이 오류를 해결할 수 있습니다. 이미지 포맷은 여기서 다루진 않겠지만, 간단하게는 window에 내장된 pbrush(그림판)을 이용해서 쉽게 변환할 수 있습니다.
이미지로 저장하기 worldcloud.to_file()
plt로 출력된 창에서 저장 기능이 있지만, 이 기능을 쓰면 이미지의 원본이 저장되지 않습니다.
to_file 함수로 이미지를 저장할 수 있습니다. 매개변수는 저장할 파일 경로와 이미지 이름입니다.
stopwords = set(STOPWORDS)
stopwords.update(['drink', 'now', 'wine', 'flavor', 'flavors']) # 제거할 단어들
mask_image = Image.open('mask_img/YouTube-Logo.png')
mask = np.array(mask_image)
wordcloud = WordCloud(background_color='white',
stopwords=stopwords,
mask=mask,
max_font_size=15,
max_words=2000,
scale=3).generate(text)
image_colors = ImageColorGenerator(mask)
wordcloud = wordcloud.recolor(color_func=image_colors)
wordcloud.to_file(filename="YouTube.png") # to_file 함수
plt.figure()
plt.axis('off')
plt.imshow(wordcloud, interpolation='bilinear')
plt.show()
다음은 각가 plt를 이용해 저장한 것과 to_file을 이용해 저장한 결과입니다.
결과물을 잠시 확인할때는 plt.show()를, 원본 혹은 깔끔하고 큰 이미지를 얻고 싶다면 to_file을 이용하는게 맞습니다.
'컴퓨터 > Python' 카테고리의 다른 글
MacOS matplotlib 그래프 폰트 깨짐 (0) | 2024.05.12 |
---|---|
파이썬 가장 쉬운 정렬 알고리즘- 순차정렬 (0) | 2020.02.16 |
[효묘]초보자를 위한 Python강좌 반복문 (0) | 2019.06.17 |
[효묘]초보자를 위한 Python강좌 리스트, 슬라이스 (0) | 2019.06.15 |
[효묘]초보자를 위한 Python강좌 3 (0) | 2019.06.14 |