-
[텍스트마이닝] 한글 빈도분석과 WordCloudPython 2023. 1. 27. 15:00
동아대 INSPIRE - python텍스트마이닝 25강을 실습 및 정리한 내용입니다.
1. 분석 명령어
① 패키지 및 데이터 불러오기
먼저, 필요한 명령어들을 불러옵니다.
import numpy as np from sklearn.feature_extraction.text import CountVectorizer from matplotlib import font_manager import matplotlib.pyplot as plt from wordcloud import WordCloud import pickle
지난 강의에서 만들었던 한글 파일을 여는 코드를 fp라고 임의로 지정하고, pickle을 로드하여 ko_word에 저장합니다.
with open('ko_stopped_join.bin', 'rb') as fp: ko_word = pickle.load(fp)
ko_word를 실행하면, 단어들이 쭉 나열된 형태로 잘 저장된 것을 확인할 수 있습니다.
② DTM 자료 만들기
상위 100개를 뽑아서 cv에 저장하겠습니다.
cv=CountVectorizer(max_features=100)
fit_transform라는 명령어를 사용해서 dtm 자료를 만들어 확인해 봅시다.
dtm=cv.fit_transform(ko_word) dtm
문서가 세로로 118개, 상위 단어 100개가 가로로 나오는 자료가 만들어졌습니다.
지금 dtm에 이름이 없기 때문에, get_feature_names 명령어를 사용해 cv의 이름을 words에 저장하겠습니다.
words=cv.get_feature_names()
③ 단어별 빈도세기 및 단어-빈도(TF) 만들기
이번에는 DTM 자료가 아래와 같이 만들어졌다고 생각했을 때, 각 단어별 개수를 카운트해 보겠습니다.
가능성 가치 ... 인간 문서 1 2 1 0 문서 2 0 2 1 문서 3 1 1 0 ... 문서 118 3 2 0 dtm.sum(axis=0)을 하면 세로로 개수를 더한 값을 구할 수 있고, count_mat에 저장합니다.
count_mat=dtm.sum(axis=0) count_mat
잘 저장되었지만, 행렬 형태입니다.
A-29
B-24
C-26
위와 같은 형태로 차원을 줄여 array 형태로 만들겠습니다.
차원을 줄일 때는 squeeze를 사용하고, 단어와 카운트를 묶기 위해 zip을 사용합니다.
count=np.squeeze(np.asarray(count_mat)) word_count=list(zip(words,count)) word_count
단어와 빈도가 잘 매치되었습니다.
이를 워드클라우드로 만들기 위해서는 개수가 많은 순서대로 정렬되어야 합니다.
word_count=sorted(word_count, key=lambda x:x[1], reverse=True) word_count
빈도가 높은 순으로 정렬되었습니다.
④ wordcloud 작성하기
이제 워드클라우드를 작성해 봅시다!
주의! 한글은 폰트가 깨질 수 있기 때문에, font_path를 window 폰트로 설정해 주어야 합니다.
wc=WordCloud(font_path='C:/Windows/Fonts/malgun.ttf', background_color='black', width=800, height=600)
빈도는 word_count로 지정해 줍니다.
cloud=wc.generate_from_frequencies(dict(word_count))
워드클라우드의 크기, 축 등을 설정해 줍니다.
plt.figure(figsize=(12,9)) plt.imshow(cloud) plt.axis('off') plt.show()
폰트 깨지는 것 없이 잘 만들어졌습니다!
'Python' 카테고리의 다른 글
[텍스트마이닝] 한글 Document cluster (0) 2023.02.16 [텍스트마이닝] 단어연관 및 word network (2) 2023.02.10 [텍스트마이닝] LDA 결과의 시각화 (0) 2023.01.16 [텍스트마이닝] Text Clustering 개념 및 활용 (0) 2023.01.04 [텍스트마이닝] 단어 연관 분석과 Word Network (0) 2022.12.28