본문 바로가기
Programming

우분투에서 wordcloud 사용하기, 테스트 파일 , 리스트 형식 데이터 우분투 wordcloud 한글 한글 워드클라우드 mask

by 하하호호 2021. 12. 20.
반응형

 

 

 

wordcloud는 키워드 데이터들을 한눈에 알아볼 수 있도록

키워드의 크기를 조절하여 출력해주는 라이브러리다. 현재

어떤 키워드가 가장 많은 관심을 받고 있는지 확인할 때

유용하게 사용된다.

 

먼저, wordcloud 라이브러리를 설치한다.

 

1
pip3 install wordcloud
cs

출력할 데이터를 선택한다. 

텍스트 파일을 읽어들여서, 데이터를 파싱한 다음

출력해도 되고,

 

리스트 형식으로 저장된 데이터를 사용해도 상관

없다. 

 

두가지 방식으로 wordcloud 출력을 해보도록 한다.

 

1. 리스트 형식

 

리스트로 저장된 데이터를 wordcloud로 출력하기

위해서는 먼저, string 형식의 데이터로 변환해줘야

한다. 

 

파이썬에서 리스트를 string으로 변환하기 위해서는

join() 함수를 사용해야 한다. join 앞의 문자열은 

문자열 사이 어떤 문자열을 정의할 것인지 설정

한다.

 

예제에서는 리스트 각 요소들을 띄워쓰기로 

string 변환 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
text = ['불가살 등장인물',
        '연예대상',
        '구자욱',
        '복면가왕',
        '복면가왕 겨울아이',
        '2021 kbs 연예대상',
        '육성재 제대',
        '부캐전성시대',
        '2021 mbc 연예대상',
        '제이크폴 우들리',
        '파킹통장',
        '던전앤파이터',
        '솔로지옥 출연진',
        '불가살 아역',
        '목포해상케이블카',
        '장승조',
        '제이크 폴',
        '스파이더맨 쿠키영상',
        '스파이더맨 쿠키',
        '설강화 청원',
        '미운 우리 새끼 272회',]
text_str = ' '.join(text)
cs

 

문자열로 저장된 데이터를 출력해보면 다음과 같다.

 

 

2. 파일 읽어들이기

먼저 wordcloud로 출력할 데이터를 텍스트 파일로 저장한다.

'wordcloud.vim' 텍스트 파일을 저장하고, 

파일을 읽어 들여서 테스트 파일을 만든다.

 

1
2
3
with open('wordcloud.vim''r'as text:
    text_file = text.read()
    print(text_file)
cs

 

 

워드클라우드 객체 생성하기

 

wordcloud 객체생성은 다양한 파라미터를 

지원하고 있다. 간단한 예제를 통해서 어떻게

wordcloud 객체를 생성하는지 살펴보자.

 

먼저 폰트의 경로를 설정해준다.

영어를 사용하면 문제될 것이 없다. 하지만,

한글을 wordcloud로 표현하고자 한다면 

필수적으로 Font의 경로를 입력해야 한다.

 

윈도우의 경우 ttf 형식의 파일을 찾아야 하고,

우분투 리눅스의 경우 otf 형식의 파일을 

찾아서 지정해준다.

 

만약 새로운 폰트를 적용하고 싶다면 

구글 폰트에서 다운받아서 사용해도 무방하다.

 

 

Google Fonts

Making the web more beautiful, fast, and open through great typography

fonts.google.com

 

배경색상과 wordcloud의 전체 크기를 지정해준다.

마지막으로 가장 크게 표현되는 텍스트의 크기까지

지정해주면 wordcloud 객체 생성은 성공이다.

1
2
3
4
5
6
7
8
9
wc = WordCloud(
        font_path="/home/ys/project/temp/Noto_Sans_KR/NotoSansKR-Black.otf",
        background_color = 'white',
        height = 600,
        width = 1000,
        max_font_size = 100
)
wc.generate(text_str)
cs

 

 

wordcloud는 더 많은 파라미터를 지원하고 있기 때문에,

필요한 사람은 직접 찾아보는 것도 도움이 된다.

 

wordcloud

A little word cloud generator

pypi.org

 

 

wordcloud 출력하기

 

마지막으로 wordcloud 객체에 텍스트를 입력하고

matplotlib으로 출력을 진행하면 wordcloud 이미지를

확인할 수 있다.

 

1
2
3
4
5
wc.generate(text_str)
 
plt.axis('off')
plt.imshow(wc)
plt.show()
cs

 

 

마스크 사용하기

 

출력된 wordcloud 이미지를 원하는 틀에 맞춰서 

출력하기 위해서는 마스크를 정의해줘야 한다.

먼저 배경과 이미지가 깔끔하게 구분된 이미지를

준비한다.

 

1
mask_img = np.array(Image.open('hawk.jpg'))
cs

 

wordcloud 객체 생성 부분에 마스크를 새로 

정의해준다.

 

1
2
3
4
5
6
7
8
9
wc = WordCloud(
        font_path="/home/ys/project/temp/Noto_Sans_KR/NotoSansKR-Black.otf",
        background_color = 'white',
        stopwords=stopwords,
        height = 1500,
        width = 2000,
        max_font_size = 100,
        mask=mask_img,
)
cs

 

다시 wordcloud를 출력해보면 틀에 맞춰서 wordcloud가

출력되는 것을 확인할 수 있다.

 

전체코드

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS
import numpy as np
from PIL import Image
 
 
# 리스트 방식
 
text = ['불가살 등장인물',
        '연예대상',
        '구자욱',
        '복면가왕',
        '복면가왕 겨울아이',
        '2021 kbs 연예대상',
        '육성재 제대',
        '부캐전성시대',
        '2021 mbc 연예대상',
        '제이크폴 우들리',
        '파킹통장',
        '던전앤파이터',
        '솔로지옥 출연진',
        '불가살 아역',
        '목포해상케이블카',
        '장승조',
        '제이크 폴',
        '스파이더맨 쿠키영상',
        '스파이더맨 쿠키',
        '설강화 청원',
        '미운 우리 새끼 272회',]
 
text_str = ' '.join(text)
 
 
# 파일 읽기 방식
 
with open('wordcloud.vim''r'as text:
    text_file = text.read()
    print(text_file)
 
#마스크 정의
 
mask_img = np.array(Image.open('hawk.jpg'))
 
 
# 워드클라우드 객체 생성
 
wc = WordCloud(
        font_path="/home/ys/project/temp/Noto_Sans_KR/NotoSansKR-Black.otf",
        background_color = 'white',
        stopwords=stopwords,
        height = 1500,
        width = 2000,
        max_font_size = 100,
        mask=mask_img,
)
 
# 워드클라우드 텍스트 입력
 
wc.generate(text_str)
 
 
# 이미지 ㅜㄹ력
 
plt.axis('off')
plt.imshow(wc)
plt.show()
cs
반응형

댓글