[Step 4] 워드클라우드로 텍스트 데이터 시각화하기 - WordCloud + matplotlib
텍스트에서 단어 빈도를 추출하고 워드클라우드 이미지를 생성합니다. 영화 리뷰, SNS 게시글 분석부터 커뮤니티 트렌드 파악까지 활용 방법을 배웁니다.
시작하며 - 텍스트 데이터를 시각화한다는 것
주식 데이터, 막대 그래프까지 배웠으니 이제 조금 다른 걸 해볼까요?
이번에는 텍스트 데이터를 시각화합니다. 영화 리뷰, 뉴스 기사, SNS 게시글... 텍스트에 어떤 단어가 많이 나오는지 한눈에 보고 싶을 때 사용하는 게 워드클라우드(Word Cloud)입니다.
완성된 워드클라우드 - 단어 빈도가 크기로 표현됩니다
단어가 클수록 많이 등장한 단어, 작을수록 덜 등장한 단어입니다.
데이터 분석 보고서, 연구 논문, 프레젠테이션에 넣으면 "와, 프로페셔널하다"는 소리를 들을 수 있는 시각화 기법입니다.
Google Colab에서 시작하기
Step 2, 3과 동일하게 Google Colab에서 진행합니다.
브라우저만 있으면 됩니다. 설치할 게 없습니다.
Google Colab 접속 후 "+ New notebook" 클릭
1. 라이브러리 설치하기
워드클라우드를 만들려면 wordcloud 라이브러리가 필요합니다.
첫 번째 셀에 다음 코드를 입력하고 Shift + Enter로 실행하세요.
!pip install wordcloud matplotlib
"Successfully installed wordcloud" 메시지가 보이면 성공
---샘플 텍스트 데이터 준비하기
워드클라우드를 만들려면 텍스트 데이터가 필요합니다.
실습을 위해 간단한 텍스트를 준비해볼게요. 데이터 과학 관련 키워드들입니다.
text = """
python data science machine learning
artificial intelligence neural network
deep learning computer vision NLP
data visualization pandas numpy matplotlib
"""
print(text)
텍스트가 정상적으로 출력되는지 확인
실제 프로젝트에서는 여기에 영화 리뷰 수백 개, 뉴스 기사 전문, SNS 게시글 모음 같은 긴 텍스트를 넣으면 됩니다.
지금은 연습이니까 짧게 진행합니다.
첫 번째 워드클라우드 만들기
이제 본격적으로 워드클라우드를 생성해봅시다.
WordCloud 객체를 만들고, generate() 메서드에 텍스트를 넣으면 끝입니다.
from wordcloud import WordCloud
import matplotlib.pyplot as plt
wordcloud = WordCloud(width=800, height=400).generate(text)
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
기본 워드클라우드 - 흰 배경, 검은 글자
짜잔~! 단어들이 크기별로 배치되었습니다.
plt.imshow()는 이미지를 표시하는 함수입니다. 워드클라우드는 내부적으로 이미지로 생성되기 때문에 이렇게 표시합니다.
코드 이해하기
WordCloud(width=800, height=400)- 800x400 크기의 워드클라우드 객체 생성.generate(text)- 텍스트에서 단어 추출 및 빈도 분석plt.imshow()- 워드클라우드 이미지를 화면에 표시plt.axis('off')- X축, Y축 눈금 숨기기 (깔끔하게 보이도록)
색상 입히기 - viridis 색상맵
기본 워드클라우드는 좀 심심하죠? 색상을 추가해봅시다.
colormap 파라미터로 색상 테마를 지정할 수 있습니다.
from wordcloud import WordCloud
import matplotlib.pyplot as plt
text = """
python data science machine learning
artificial intelligence neural network
deep learning computer vision NLP
data visualization pandas numpy matplotlib
tensorflow pytorch scikit-learn
"""
wordcloud = WordCloud(
width=800,
height=400,
background_color='white',
colormap='viridis' # 파랑-초록-노랑 그라데이션
).generate(text)
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.title('Styled Word Cloud with Viridis Colormap', fontsize=14, pad=10)
plt.show()
알록달록한 색상이 추가되었습니다
훨씬 보기 좋아졌습니다!
colormap='viridis'는 파랑에서 초록, 노랑으로 변하는 그라데이션을 적용합니다.
다른 색상맵도 시도해보세요
'plasma'- 보라-분홍-노랑'inferno'- 검정-빨강-노랑'magma'- 검정-보라-분홍'Set2'- 부드러운 파스텔 톤
어두운 배경 + 화려한 색상
프레젠테이션이나 다크 테마 보고서에 넣을 거라면 배경을 어둡게 하면 더 멋집니다.
background_color로 배경색을 지정할 수 있습니다.
from wordcloud import WordCloud
import matplotlib.pyplot as plt
text = """
python data science machine learning
artificial intelligence neural network
deep learning computer vision NLP
data visualization pandas numpy matplotlib
tensorflow pytorch scikit-learn keras
"""
wordcloud = WordCloud(
width=800,
height=400,
background_color='#1a1a2e', # 어두운 배경
colormap='plasma', # 보라-분홍-노랑 그라데이션
max_words=50
).generate(text)
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.title('Dark Theme Word Cloud', fontsize=14, pad=10, color='white')
plt.show()
어두운 배경 + plasma 색상맵
max_words=50은 최대 50개 단어만 표시하라는 의미입니다.
텍스트가 엄청 길 때 상위 빈도 단어만 선택해서 보여줍니다.
단어 빈도 분석하기
워드클라우드는 예쁘지만, 정확한 숫자를 알고 싶을 때도 있습니다.
wordcloud.words_ 속성으로 각 단어의 빈도를 확인할 수 있습니다.
from wordcloud import WordCloud
import matplotlib.pyplot as plt
text = """
python data science machine learning
artificial intelligence neural network
deep learning computer vision NLP
data visualization pandas numpy matplotlib
tensorflow pytorch scikit-learn keras
"""
# 단어 빈도 분석
wordcloud = WordCloud(width=800, height=400).generate(text)
word_freq = wordcloud.words_
# 상위 10개 단어 출력
print("Top 10 Most Frequent Words:")
for word, freq in sorted(word_freq.items(), key=lambda x: x[1], reverse=True)[:10]:
print(f"{word}: {freq:.4f}")
각 단어별 빈도가 숫자로 출력됩니다
이 빈도값이 워드클라우드에서 글자 크기를 결정합니다.
빈도가 높을수록 큰 글자, 낮을수록 작은 글자로 표현됩니다.
실전 예제 - 더 많은 텍스트로 만들기
이제 조금 더 많은 텍스트로 워드클라우드를 만들어봅시다.
실제 프로젝트에서 사용할 법한 규모입니다.
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 더 많은 텍스트 데이터
text = """
python data science machine learning deep learning
artificial intelligence neural network computer vision
NLP natural language processing data visualization
pandas numpy matplotlib seaborn plotly
tensorflow pytorch keras scikit-learn
database SQL NoSQL API REST
cloud computing AWS Azure docker kubernetes
"""
wordcloud = WordCloud(
width=1200,
height=600,
background_color='white',
colormap='Set2', # 부드러운 파스텔 톤
max_words=100,
relative_scaling=0.5,
min_font_size=10
).generate(text)
plt.figure(figsize=(15, 7.5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.title('Complete Word Cloud Visualization', fontsize=18, pad=15, fontweight='bold')
plt.tight_layout()
plt.show()
완성! 실전에서 사용 가능한 워드클라우드
추가 파라미터 설명
relative_scaling=0.5- 단어 크기 차이를 조절 (0~1 사이, 높을수록 차이 큼)min_font_size=10- 최소 글자 크기 (너무 작은 글자 방지)max_words=100- 최대 100개 단어만 표시
흑섬 브리딩에서의 활용
저는 레오파드 게코 브리딩 관련 커뮤니티 게시글을 모아서 워드클라우드로 만들어봤습니다.
"온도", "습도", "급여", "쉘터" 같은 단어가 가장 크게 나오더라고요. 사람들이 가장 궁금해하는 주제가 뭔지 한눈에 알 수 있었습니다.
SNS 댓글 분석, 고객 리뷰 분석, 설문조사 결과... 텍스트만 있으면 뭐든 시각화할 수 있습니다.
---다음 시리즈 예고
다음 글에서는 "산점도로 두 변수 간 상관관계 파악하기" (Step 5)를 다뤄볼 예정입니다.
키와 몸무게, 공부 시간과 성적처럼 두 변수가 어떻게 관련되어 있는지 시각화하는 방법을 배워볼 거예요.
궁금한 점이 있거나, 이런 내용도 다뤄줬으면 좋겠다는 의견이 있다면 인스타그램 DM 주세요!
