배운 내용을 토대로 구름 모양 워드클라우드를 만들어봄
워드클라우드란 자료를 시각적으로 나타내는 방법 중 하나를 의미한다.
(단어들이 마치 구름처럼 뭉쳐져있다고 그럴까..?)
미리 저장된 파일을 시각화해보았다.
원하는 글귀를 txt파일로 만들고 저장.
한글입숨 사이트를 이용함
Python으로 파일 데이터를 불러와 데이터를 다듬어준다
file = open("20220823.txt", r, encoding = 'UTF8')
text = file.read()
file.close()
wordList = text.split()
파일은 open("불러올 파일", 모드(r: 읽기), UTF8로 인코딩)함수로 불러온다.
불러온 파일에 read() 함수로 읽어온 데이터를 text 변수에 담는다
기능이 끝났으면 불러온 file을 close() 함수로 닫는다.
split()으로 읽어온 데이터를 분할한다.
split() 메소드는 공백은 기본으로 구분하여 분할한다.
wordList에는 공백은 기준으로 구분된 단어들이 리스트 형태로 담긴다.
word_ori = set(wordList)
wordCount = {}
for w in word_ori:
wordCount[w] = wordList.count(w)
del_word = ['것이다', '무엇을', '어디', '있을', '없으면', '있으랴?', '하는', '이', '있음으로써', '하였으며']
for w in del_word:
if w in wordCount:
del wordCount[w]
문장들을 공백 기준으로 split() 했기에 중복되는 단어들이 존재한다.
단어들의 개수를 셀 때 검색하고자 하는 단어의 개수는 1개이면 충분하기 때문에 중복되는 단어들을 제거한 리스트를 만든다.
word_ori 변수에 wordList 데이터를 set() 함수로 처리한다.
set() 함수는 집합 함수로 데이터 type을 집합으로 변환한다.
집합의 성질은 중복되는 값의 의미가 없다는 것으로 중복되는 값을 무시하는 특징을 가진다.
이 과정으로 단어의 개수를 집계하기 위한 검색하고자 하는 단어 리스트가 마련된다.
단어(key):개수(value)로 구한 값을 저장할 공간을 미리 만든다.
wordCount 변수를 딕셔너리 type으로 선언한다.
for 반복문으로 word_ori의 값을 하나씩 w에 가져온다.
word_ori(검색하고자 하는 단어)를 w에 가져오면 wordList에 count(w) 메소드 작용으로
wordList에서 w의 개수 값을 구하고 wordCount[w]
는 해당 값을 가진다.
아래 두 문장이 같은 의미를 가짐
- 딕셔너리의 key = 딕셔너리의 value
- wordCount
[w]
= wordList.count(w)
del_word 변수를 선언해 표현하고 싶지 않은 단어(ex.조사)를 리스트로 선언한다.
for 반복문으로 데이터를 삭제한다.
첫 번째for w in del_word:
문에서 del_word 리스트에 값을 하나씩 w로 불러온다
두 번째 if 조건문으로 만약 wordCount에 w 값이 존재하면
wordCount[w]
해당 key 값을 삭제한다.
워드클라우드는 패키지 설치가 필요하다.
!pip install wordcloud
해당 문장으로 실행을 통해 워드클라우드를 설치한다
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from PIL import Image
import numpy as np
im = Image.open('C:/Users/pro/Desktop/KT에이블/데이터 다루기 실습 수업 ~0803/cloud.png')
mask_arr = np.array(im)
wordcloud = WordCloud(font_path = 'HMFMOLD',
background_color = 'white',
colormap = 'PuBu',
mask = mask_arr,
width = 1000,
height = 600).generate_from_frequencies(wordCount)
plt.figure(figsize=(15, 8))
plt.imshow(wordcloud)
plt.axis('off')
plt.show()
워드클라우드의 라이브러리를 불러온다.
이후 원하는 속성을 지정한다.
추가로 plt 관련 메소드를 적용한다.
원하는 결과가 나오지 않았다.
다른 것들은 잘 적용되었으나 내가 원하는 이미지 모양이 mask 적용되지 않은 것을 확인했다.
구름이라는 것을 느낄 정도만 구현한 구름 모양으로 워트클라우드가 작성되어야하는데
사각형 이미지 크기만큼 구현된 것으로 추정된다.
왜 워드클라우드에 이미지 마스크가 적용되지 않은 것인지 다시 확인해봐야겠다.