티스토리 뷰
▶워드 클라우드
워드 클라우드는 핵심 단어를 시각화하는 기법입니다.
문서의 키워드, 개념 등을 직관적으로 파악할 수 있게 핵심 단어를 시각적으로 돋보이게 합니다.
▷wordcloud 라이브러리 install, import
!pip install wordcloud
from wordcloud import WordCloud
▷wordcloud 기본 예제
▷예제에 사용할 파일
▷txt파일 읽어오기
text = open('wordData.txt').read()
▷generate() : 단어별 출현 빈도수를 비율로 반환
wordcloud = WordCloud.generate(text)
wordcloud.words_ # 전체 글자의 빈도수 나타내기
▷wordcloud(위에서 정의한 객체)를 시각화 - matplotlib.pyplot
import matplotlib.pyplot as plt
plt.figure(figsize=(15,10))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
imshow는 이미지를 출력할 수 있는 함수입니다.
wordcloud 데이터를 사용하고, inerpolation는 자료의 시각화를 돕기위한 인자입니다. 다음 사진을 참고하면 유용하겠습니다.
axis 는 축에 대한 함수입니다. 이때 'off'는 축을 제거한다는 의미가 되겠습니다.
위 코드에 대한 출력입니다.
out::::
▷max_font_size : 출현 빈도가 가장 많은 단어의 크기를 설정
wordcloud = WordCloud(max_font_size=50).generate(text)
plt.figure(figsize=(15,10))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
out::::
▷max_words : 워드 클라우드에 표시되는 단어의 개수를 설정
wordcloud = WordCloud(max_words=500).generate(text) # 500개 단어까지 표시
plt.figure(figsize=(15,10))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
out::::
▷wordcloud mask적용 예제
▷예제에 사용할 파일 불러오기
text = open('./alice.text').read()
▷mask를 활용하기 위한 라이브러리 import
from PIL import Image # 이미지에서 마스킹 데이터를 출력
from wordcloud import STOPWORDS # 불용어. 워드 클라우드로 작성할 단어에서 제외할 단어를 지정
import numpy as np
▷mask이미지를 ndarray로 저장
alice_mask = np.array(Image.open('./alice_mask.png'))
▷불용어 지정
stopwords = set(STOPWORDS) # 객체 생성
stopwords.add('said') # 불용어 추가
▷불용어 조건을 추가하여 wordcloud 생성
wc = WordCloud(backgroud_color='white', max_words=2000, stopwords=stopwords, mask=alice_mask)
wordcloud = wc.generate(text)
plt.figure(figsize=(15,10))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
out::::
▷컬러 마스크의 톤에 맞춰 wordcloud 생성
from wordcloud import ImageColorGeneratator # 원본 색상과 유사하게 색을 표현해주는 라이브러리
text = open('./alice.txt').read()
mask = np.array(Image.open('./alice_color.png'))
wc = WordCloud(background_color='white', max_words=2000, stopwords=stopwords, mask=mask,
max_font_size=40)
wordcloud = wc.generate(text)
image_color = ImageColorGenerator(mask) # 객체 생성
import random
plt.figure(figsize=(15,10))
plt.imshow(wordcloud.recolor(color_func=image_colors, random_state=3), interpolation='bilinear')
plt.axis('off')
plt.show()
같은 색끼리도 차이를 두기 위해 random_state를 주겠습니다.
out:::
▷형태소 분석 + 워드 클라우드 예제
▷형태소 분석 라이브러리 koNLpy 및 내장 문서 import
!pip install konlpy
from konlpy.corpus import kolaw
from kolnpy.tag import Twitter
t = Twitter()
import nltk # 말 모음 라이브러리
▷kolaw 읽어서 불어오기
ko_law_text = kolaw.open('./constitution.txt').read()
▷kolaw에서 명사 추출
token_ko = t.nouns(ko_law_text)
token_ko를 출력해보면 잘 출력되는 것도 있는 반면, 무엇인지를 확인하기 어려울 정도의 한글자 단어들을 발견할 수 있습니다.
그렇기 때문에, 의미를 알 수 없는 한글자 단어들은 불용어 리스트로 만들어 token_ko에서 제거해주겠습니다.
# 불용어 리스트(제거할 리스트)
stop_words = ['제', '월', '일', '조', '수', '때', '그', '이', '바', '및', '안', '정', '관', '위', '장']
token_ko = [each_word for each_word in token_ko if each_word not in stop_words]
▷단어 별 빈도수 출력
text()는 문서를 편리하게 탐색할 수 있는 다양한 기능을 제공합니다.(nltk 라이브러리에 있는 함수입니다.)
ko = nltk.Text(token_ko)
ko.vocab().most_common(50)
out::::
위에서 확인했다 싶이 set형태를 딕셔너리 형태로 변환해주겠습니다.
data = ko.vocab().most_common(500) # set형태
tmp_data = dict(data)
+google colab에서 한글 폰트 사용하기
!apt-get update -qq
!apt-get install fonts-nanum* -qq
import matplotlib.font_manager as fm
sys_font = fm.findSystemFonts()
[f for f in sys_font if 'Nanum' in f] # 나눔글꼴 전부 다 가져오기
out::::
▷generate_from_frequencies() : 딕셔너리에 저장된 데이터를 wordcloud 생성
wordcloud = WordCloud(
font_path = '/usr/share/fonts/truetype/nanum/NanumPen.ttf',
background_color = 'white').generate_from_frequencies(tmp_data)
plt.figure(figsize=(15,10))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
out::::
▷위 wordcloud를 mask에 적용
mask = np.array(Image.open('./korea_mask.jpg'))
wordcloud = WordCloud(
font_path = '/usr/share/fonts/truetype/nanum/NanumPen.ttf',
background_color = 'white',
mask=mask).generate_from_frequencies(tmp_data)
plt.figure(figsize=(15,10))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
out::::
여기까지 워드 클라우드에 대해 알아보았습니다 :)
728x90
LIST
'빅데이터 인공지능 > 데이터분석' 카테고리의 다른 글
[데이터분석] ⑫ 상권별 업종 밀집 통계 실습 (0) | 2022.07.13 |
---|---|
[데이터분석] ⑪ 지도 시각화 라이브러리 folium (0) | 2022.07.13 |
[데이터분석] ⑨ 형태소 분석 (0) | 2022.07.11 |
[데이터분석] ⑧ 셀레니움(Selenium) (0) | 2022.07.11 |
[데이터분석] ⑦ 스크레이핑(Scraping) (0) | 2022.07.09 |
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 파이썬
- 프로젝트 회고
- Python
- react
- 데이터분석
- jest
- 리액트 훅
- styled-components
- 자바스크립트 기초
- 자바스크립트
- HTML
- JSP
- rtl
- 자바
- 딥러닝
- 스타일 컴포넌트 styled-components
- 프론트엔드
- frontend
- 타입스크립트
- react-query
- testing
- 프론트엔드 기초
- 디프만
- CSS
- TypeScript
- 프론트엔드 공부
- 머신러닝
- 리액트
- next.js
- 인프런
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함