본문 바로가기
Python

감성분석 + 워드클라우드 결합 프로젝트 - 긍정/부정 키워드 시각화

by ramzee 2025. 4. 5.

0. 이 글은 누구를 위한 글인가요?

  • 긍정적인 글에서 자주 쓰이는 단어는 무엇일까?
  • 부정적인 글에서는 어떤 단어가 자주 등장할까?
  • 감성별로 텍스트를 나눠서 시각화해보고 싶어요!

1. 프로젝트 개요

  • 입력: 감성 분석이 완료된 CSV 파일 (인공지능_블로그_감성분석결과.csv)
  • 목표:
    • 감성이 '긍정'인 글, '부정'인 글을 나눠서 처리
    • 각각 자주 쓰이는 단어 분석
    • 긍정/부정 워드클라우드 2개 출력

2. 필요 라이브러리 설치

pip install pandas matplotlib wordcloud konlpy

3. 데이터 불러오기

import pandas as pd

df = pd.read_csv("인공지능_블로그_감성분석결과.csv")
print(df[['제목', '감성']].head())

| 제목 | 감성 |
|------|------|
| AI가 바꾸는 미래 사회 | 긍정 |
| 챗GPT 활용법 정리 | 중립 |
| 일자리를 위협하는 AI 기술 | 부정 |

4. 감성별 텍스트 분리


pos_texts = " ".join(df[df['감성'] == '긍정']['제목'].dropna())
neg_texts = " ".join(df[df['감성'] == '부정']['제목'].dropna())

5. 형태소 분석 & 단어 정리


from konlpy.tag import Okt
from collections import Counter

okt = Okt()
stopwords = ['인공지능', 'AI', '챗GPT', '관련', '소개', '활용', '사용', '방법', '정리', '이해']

def extract_keywords(text):
    nouns = okt.nouns(text)
    words = [word for word in nouns if len(word) > 1 and word not in stopwords]
    return Counter(words)

6. 긍정/부정 키워드 추출


pos_words = extract_keywords(pos_texts)
neg_words = extract_keywords(neg_texts)

print("긍정 키워드 Top 10:", pos_words.most_common(10))
print("부정 키워드 Top 10:", neg_words.most_common(10))

긍정 키워드 Top 10: [('미래', 5), ('기대', 4), ('도움', 3), ('변화', 3), ('기술', 3), ...]
부정 키워드 Top 10: [('위협', 4), ('문제', 3), ('불안', 3), ('일자리', 2), ('혼란', 2), ...]

7. 워드클라우드 시각화


from wordcloud import WordCloud
import matplotlib.pyplot as plt

font_path = "C:/Windows/Fonts/malgun.ttf"  # macOS는 /Library/Fonts/AppleGothic.ttf

def draw_wordcloud(word_freq, title):
    wordcloud = WordCloud(
        font_path=font_path,
        background_color='white',
        width=800,
        height=600
    ).generate_from_frequencies(word_freq)

    plt.figure(figsize=(10, 7))
    plt.imshow(wordcloud, interpolation='bilinear')
    plt.axis('off')
    plt.title(title)
    plt.show()

# 긍정 워드클라우드
draw_wordcloud(pos_words, "긍정 키워드 워드클라우드")

# 부정 워드클라우드
draw_wordcloud(neg_words, "부정 키워드 워드클라우드")


8. 워드클라우드 이미지 저장


wordcloud_pos = WordCloud(font_path=font_path, background_color='white', width=800, height=600).generate_from_frequencies(pos_words)
wordcloud_pos.to_file("긍정_워드클라우드.png")

wordcloud_neg = WordCloud(font_path=font_path, background_color='white', width=800, height=600).generate_from_frequencies(neg_words)
wordcloud_neg.to_file("부정_워드클라우드.png")

9. 마무리 요약

단계 설명
1 감성 분석된 데이터 불러오기
2 감성별 텍스트 분리
3 형태소 분석 (Okt 사용)
4 불용어 제거 + 단어 빈도 계산
5 워드클라우드 생성 및 시각화
6 이미지로 저장