반응형
[Python & Matplotlib] 명사 추출 후 다양한 그래프로 시각화하기 !!
2024.11.27 - [Coding/데이터 시각화] - [Python & Matplotlib] 명사 추출 후 그래프로 시각화하는 방법 !!
이전글에서 명사추출해서 그래프로 표현했었는데, 이번 코드에선 워드클라우드, 파이차트 등 다양한 차트를 같이 포함하여 시각화 해보았습니다 !
1. 필요한 라이브러리 설치
pip install konlpy matplotlib wordcloud networkx plotly
2. 예제 코드
아래 코드 실행시키면 위에 결과화면 처럼 나오게 됩니다 :)
from konlpy.tag import Okt
from collections import Counter, defaultdict
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import networkx as nx
import plotly.express as px
import pandas as pd
from matplotlib import font_manager, rc
# 한글 폰트 설정
font_path = "C:/Windows/Fonts/malgun.ttf" # 시스템에 맞게 변경하세요
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font_name)
# 분석할 텍스트
text = """
코드 설명
폰트 설정: matplotlib에서 한글이 깨지지 않도록 시스템에 설치된 한글 폰트를 설정합니다.
텍스트 입력: 분석하고 싶은 한국어 텍스트를 text 변수에 입력합니다.
명사 추출: Okt 형태소 분석기를 사용하여 텍스트에서 명사만 추출합니다.
빈도 계산: Counter를 사용하여 명사의 빈도수를 계산합니다.
데이터 준비: 가장 빈도 높은 10개의 명사와 그 빈도수를 리스트로 분리합니다.
그래프 시각화: 막대 그래프로 명사의 빈도수를 시각화합니다.
실행 결과
코드를 실행하면 입력한 텍스트에서 가장 많이 등장한 명사 10개의 빈도수를 막대 그래프로 볼 수 있습니다.
"""
# 형태소 분석기 초기화
okt = Okt()
# 명사 추출
nouns = okt.nouns(text)
# 명사 빈도 계산
count = Counter(nouns)
# 상위 n개의 명사 추출
n = 10
most_common = count.most_common(n)
words = [word for word, _ in most_common]
freqs = [freq for _, freq in most_common]
# 그래프를 2x2 형태로 배치
fig, axs = plt.subplots(2, 2, figsize=(15, 12))
# 1. 막대 그래프
axs[0, 0].bar(words, freqs, color='skyblue')
axs[0, 0].set_xlabel('명사')
axs[0, 0].set_ylabel('빈도수')
axs[0, 0].set_title('명사 빈도 막대 그래프')
axs[0, 0].tick_params(axis='x', rotation=45)
# 2. 워드 클라우드
wordcloud = WordCloud(font_path=font_path, background_color='white', width=400, height=300).generate_from_frequencies(count)
axs[0, 1].imshow(wordcloud, interpolation='bilinear')
axs[0, 1].axis('off')
axs[0, 1].set_title('워드 클라우드')
# 3. 파이 차트
axs[1, 0].pie(freqs, labels=words, autopct='%1.1f%%', startangle=140)
axs[1, 0].set_title('명사 빈도 파이 차트')
axs[1, 0].axis('equal')
# 4. 히스토그램 (명사 길이 분포)
lengths = [len(noun) for noun in nouns]
axs[1, 1].hist(lengths, bins=range(1, max(lengths)+2), align='left', color='skyblue', rwidth=0.8)
axs[1, 1].set_xlabel('글자 수')
axs[1, 1].set_ylabel('빈도수')
axs[1, 1].set_title('글자 수 분포 히스토그램')
axs[1, 1].set_xticks(range(1, max(lengths)+1))
plt.tight_layout()
plt.show()
728x90
반응형
'Coding > Python' 카테고리의 다른 글
Python을 이용하여 설정 된 프린터 가져오기 및 변경하기 (1) | 2024.12.16 |
---|---|
FastAPI에서 데이터베이스 모델링과 ORM 사용 전략(SQLAlchemy) (4) | 2024.11.11 |
안전한 API 구축을 위한 보안 강화 (JWT, CORS) (1) | 2024.11.07 |
FastAPI에서 HTTPException과 로깅으로 에러를 효율적으로 처리하는 방법 (1) | 2024.11.06 |
Pydantic을 활용한 데이터 검증과 설정 관리 (1) | 2024.11.05 |
댓글