본문 바로가기

Python 입문

데이터 분석1-3. 워드 클라우드

1. 목적

여러 개의 텍스트 파일에서 많이 사용한 단어를 찾으려고 한다.

 

2. 준비: 설치

워드 클라우드를 구현해줄 수 있는 프로그램을 설치하고

conda install -c conda-forge wordcloud

 

라이브러리를 불러온다.

import numpy as np
from PIL import Image
from wordcloud import WordCloud
import matplotlib.pyplot as plt

 

3. 준비: 데이터 확인

행과 열로 구성된 데이터가 아닌, 워드 형식의 데이터인 경우 open 함수를 사용하고, 상세 텍스트를 읽을 수 있도록 text.read()까지 한다.

text = open('./data/Sequence_01.txt')

text = text.read()

 

데이터를 보면 줄 바꿈 기호(\n)가 있어 워드 클라우드를 만들면 줄 바꿈 기호가 가장 많이 나올 것 같으므로 공백으로 변환한다.
text = text.replace('\n', " ")

4. 준비: 데이터 가공

txt 파일은 총 14개이므로, 3번 작업을 14개 파일에 모두 적용할 수 있는 반복문을 작성한다.

 

1부터 15미만 사이의 숫자를 도는데

for number in range(1,15):

1, 2, 3 형태가 아니라 01, 02, 03 모양으로 바꾸되, 숫자 형식으로 나타내는 index 값을 정의하고

index = '{:02}'.format(number)

파일명에서 숫자 부분에다가 inext 값 넣어주고

filename = "Sequence_" + index + ".txt"

파일을 계속 열면서, 텍스트 형식에 따른 변환이 잘 될 수 있도록 하고

text = open('./data' + filename, 'r', encoding='utf-8-sig')

 

result = ""
4개 문장 위아래로 result 값 정의해서, 텍스트 파일 열고 변환한 다음에 사라지지 않게 result 값에다가 넣어주면서 합치고, 공백 변환

result += text.read().replace("\n", " ")
(또는 result += text 라고도 적을 수 있다)

 

아래와 같은 코드를 한 번에 실행한다.

5. 준비: 특수 문자 제거

정규식에 따라 특수 문자 제거하는 코드를 실행한다.

import re
pattern = '[^\w\s]'
text = re.sub(pattern=pattern, repl='', string=result)

 

기존에 정해진 문법 같은 것이므로 참고한다.

 

6. 워드 클라우드 생성

워드 클라우드이므로 어떤 글씨체를 사용할지가 중요한데

Font Manager라는 라이브러리를 활용해 불러올 수 있는 폰트 위치를 찾는다.

사용할 폰트를 정했으면, 먼저 폰트 위치를 입력해주고

font_path = '/System/Library/Fonts/Supplemental/AppleGothic.ttf'

 

워드 클라우드 모양(폰트, 색깔) 입력하고, 만들어 두었던 텍스트를 불러오고
wc = WordCloud(font_path=font_path, background_color="white")
wc.generate(text)

 

자세한 모양까지 설정하면 된다.
plt.figure(figsize=(50,50))
plt.axis("off")
plt.imshow(wc)
plt.show()

 

7. 나만의 워드 클라우드 생성

네모난 모양이 싫다면, 이미지를 불러와서 형태 안에 워드 클라우드를 만들 수 있다.

 

내가 원하는 이미지를 불러와서, 워드 클라우드를 생성한다.

mask = np.array(Image.open('./data/sparta.png'))
wc = WordCloud(font_path=font_path, background_color="white", mask=mask)
wc.generate(text)

f = plt.figure(figsize=(50,50))
plt.imshow(wc, interpolation='bilinear')
plt.title('나만의 워드 클라우드', size=40)
plt.axis("off")
plt.show()

 

마지막으로 원하는 위치에 저장하면, 파일로도 공유가 가능하다.

f.savefig('./data/myWordCloud.png')

'Python 입문' 카테고리의 다른 글

2023 점프 투 파이썬 - 2주차  (1) 2023.07.02
데이터 분석1-4. 요일/시간 분석  (0) 2021.06.26
데이터 분석1-2. 이탈 분석  (0) 2021.06.26
데이터 분석 1-1. 상권 분석  (0) 2021.06.16
Matplotlib 연습  (0) 2021.05.23