Word Cloud
파이썬을 활용해서 Word Cloud를 그려보고자한다. Word Cloud를 사용하기 위해서는 자바 설치가 필요하다.
이러한 환경에 대한 문제 때문에 Colab을 이용하고자 한다.
필요한 패키지 설치
!pip install konlpy
!pip install nltk
!pip install wordcloud
- konlpy : 형태소 분석기
- nltk : konlpy를 이용하여 가시화를 하기 위해
- wordcloud :
필요한 import
import pandas as pd
import matplotlib.pyplot as plt
import konlpy
from konlpy.tag import *
from nltk import Text
from wordcloud import WordCloud
CSV 파일을 판다스의 데이터 프레임으로 만들기
df = pd.read_csv("article.csv")
df.tail(1)
데이터 프레임의 특정 컬럼의 값 → str 형태로 변환
- 지금은 데이터 프레임의 title이라는 컬럼의 values(값)를 모두 하나의 문자열로 만들고자 함
text = "".join(df['title'].values)
# 총 데이터 문자 길이 및 일부 데이터 조회
print(len(text), text[:50])
형태소 분석 객체 생성
# 형태소 분석기
okt = Okt()
명사 추출
- 문자열에서 명사만 추출하려면 noun 명령을 사용한다.
# 단어중 명사만 추출
%%time
nouns = okt.nouns(text)
print(nouns[:14])
Word Cloud 만들기
- 위에서 뽑은 명사를 가지고 dict 형태로 출현 횟수 카운트 하기
# 1. 명사만 뽑아서
article = Text(nouns, name="article")
datas = article.vocab()
- word cloud 그리기
# 2. D2coding 글씨체 이용해서 wc 만들기
wc = WordCloud(font_path="D2Coding.ttf", background_color="white")
plt.figure(figsize=(20, 5))
plt.imshow(wc.generate_from_frequencies(datas))
plt.axis('off')
plt.show()
- 불필요한 단어 제거
stop_words = ["불필요단어1", "불필요단어2"]
words = dict(datas)
for stop_word in stop_words:
print(stop_word)
del words[stop_word]
추가
품사를 포함한 문자
- pos 명령을 사용하면 품사 부착을 한다.
%%time
pos = okt.pos(text)
print(okt.tagset)
# {'Adjective': '형용사', 'Adverb': '부사', 'Alpha': '알파벳', 'Conjunction': '접속사', 'Determiner': '관형사', 'Eomi': '어미', 'Exclamation': '감탄사', 'Foreign': '외국어, 한자 및 기타기호', 'Hashtag': '트위터 해쉬태그', 'Josa': '조사', 'KoreanParticle': '(ex: ㅋㅋ)', 'Noun': '명사', 'Number': '숫자', 'PreEomi': '선어말어미', 'Punctuation': '구두점', 'ScreenName': '트위터 아이디', 'Suffix': '접미사', 'Unknown': '미등록어', 'Verb': '동사'}
- 특정 품사만 뽑기
Word Cloud
파이썬을 활용해서 Word Cloud를 그려보고자한다.
Word Cloud를 사용하기 위해서는 자바 설치가 필요하다.
이러한 환경에 대한 문제 때문에 Colab을 이용하고자 한다.
필요한 패키지 설치
!pip install konlpy
!pip install nltk
!pip install wordcloud
- konlpy : 형태소 분석기
- nltk : konlpy를 이용하여 가시화를 하기 위해
- wordcloud :
필요한 import
import pandas as pd
import matplotlib.pyplot as plt
import konlpy
from konlpy.tag import *
from nltk import Text
from wordcloud import WordCloud
CSV 파일을 판다스의 데이터 프레임으로 만들기
df = pd.read_csv("article.csv")
df.tail(1)
데이터 프레임의 특정 컬럼의 값 → str 형태로 변환
- 지금은 데이터 프레임의 title이라는 컬럼의 values(값)를 모두 하나의 문자열로 만들고자 함
text = "".join(df['title'].values)
# 총 데이터 문자 길이 및 일부 데이터 조회
print(len(text), text[:50])
형태소 분석 객체 생성
# 형태소 분석기
okt = Okt()
명사 추출
- 문자열에서 명사만 추출하려면 noun 명령을 사용한다.
# 단어중 명사만 추출
%%time
nouns = okt.nouns(text)
print(nouns[:14])
Word Cloud 만들기
- 위에서 뽑은 명사를 가지고 dict 형태로 출현 횟수 카운트 하기
# 1. 명사만 뽑아서
article = Text(nouns, name="article")
datas = article.vocab()
- word cloud 그리기
# 2. D2coding 글씨체 이용해서 wc 만들기
wc = WordCloud(font_path="D2Coding.ttf", background_color="white")
plt.figure(figsize=(20, 5))
plt.imshow(wc.generate_from_frequencies(datas))
plt.axis('off')
plt.show()
- 불필요한 단어 제거
stop_words = ["불필요단어1", "불필요단어2"]
words = dict(datas)
for stop_word in stop_words:
print(stop_word)
del words[stop_word]
추가
품사를 포함한 문자
- pos 명령을 사용하면 품사 부착을 한다.
%%time
pos = okt.pos(text)
print(okt.tagset)
# {'Adjective': '형용사', 'Adverb': '부사', 'Alpha': '알파벳', 'Conjunction': '접속사', 'Determiner': '관형사', 'Eomi': '어미', 'Exclamation': '감탄사', 'Foreign': '외국어, 한자 및 기타기호', 'Hashtag': '트위터 해쉬태그', 'Josa': '조사', 'KoreanParticle': '(ex: ㅋㅋ)', 'Noun': '명사', 'Number': '숫자', 'PreEomi': '선어말어미', 'Punctuation': '구두점', 'ScreenName': '트위터 아이디', 'Suffix': '접미사', 'Unknown': '미등록어', 'Verb': '동사'}
- 특정 품사만 뽑기
마스킹 관련 코드
mask = np.array(Image.open("bird.jpg"))
# 2. D2coding 글씨체 이용해서 wc 만들기
wc = WordCloud(max_words=1000, mask=mask, font_path="D2Coding.ttf", margin=10, background_color="black", colormap='Accent')
plt.figure(figsize=(20, 10))
plt.imshow(wc.generate_from_frequencies(datas), interpolation="bilinear")
plt.axis('off')
plt.show()
위 코드를 수정하면 아래와 같이 마스킹 된 이미지를 얻을 수 있다.

마스크 색 종류

마스킹 이미지
다른 이미지 참조해보세요
wordcloud mask image라고 검색하시면 다양한 이미지들을 볼 수 있어요.





댓글