본문 바로가기
Python

크롤링 데이터로 텍스트 분석 & 워드클라우드 시각화 프로젝트

by ramzee 2025. 4. 3.

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

  • 크롤링한 뉴스/블로그 데이터를 텍스트 분석에 활용하고 싶어요.
  • 자주 등장하는 키워드를 자동으로 추출해서 시각화해보고 싶어요.
  • 워드클라우드 예쁘게 만드는 방법을 알고 싶어요!

1. 준비 데이터: 블로그 크롤링 결과 CSV

이전 글에서 저장한 인공지능_블로그_필터링결과.csv 파일 사용


2. 필요한 라이브러리 설치

pip install pandas matplotlib wordcloud konlpy

3. 데이터 불러오기


import pandas as pd

df = pd.read_csv('인공지능_블로그_필터링결과.csv')
print(df.head())
출력 예시
제목	링크	날짜
0	美 주가지수 선물 장전 급락 흐름과 엔비디아 주가 (ft. 중국 '딥시크'발 2차인...	https://blog.naver.com/gupsin/223740159198	2025.01.27.
1	AI인공지능빅데이터분석 국비지원 부트캠프 학원	https://adcr.naver.com/adcr?x=pvpMD11NyUFrYCrQ...	2025.02.05.
2	인공지능특허 AI특허 출원 방법 팁	https://blog.naver.com/gempy123/223751602414	2025.02.07.
3	액침냉각 관련주 &인공지능AI 데이터센터 건설 추진	https://blog.naver.com/rec1820/223766039238	2025.02.19.
4	AI 에이전트의 시대:인공지능이 소프트웨어를 사용하는 패러다임의 변화	https://post.naver.com/viewer/postView.naver?v...	2024.11.25.

4. 텍스트 전처리

text_data = " ".join(df['제목'].dropna())
print(text_data[:100])

5. 형태소 분석으로 명사만 추출

from konlpy.tag import Okt

okt = Okt()
nouns = okt.nouns(text_data)
print(nouns[:20])
출력 예시
['주가지수', '선물', '장전', '급락', '흐름', '엔비디아', '주가', '중국', '딥', '시크', '발', '지능', '회의론', '반도체', '이익', '률', '인공', '지능', '빅데이터', '분석']

6. 불용어 제거 + 단어 길이 필터링

stopwords = ['인공지능', 'AI', '챗GPT', '관련', '소개', '방법', '활용']
filtered_words = [word for word in nouns if len(word) > 1 and word not in stopwords]
print(filtered_words[:20])

7. 단어 빈도 분석

from collections import Counter

word_freq = Counter(filtered_words)
top_20 = word_freq.most_common(20)
print(top_20)
출력 예시
[('지능', 31), ('인공', 28), ('특허', 4), ('중국', 3), ('시크', 3), ('서비스', 3), ('챗봇', 3), ('성형', 3), ('영상', 3), ('세대', 3), ('주가', 2), ('빅데이터', 2), ('분석', 2), ('출원', 2), ('데이터', 2), ('센터', 2), ('에이전트', 2), ('시대', 2), ('변화', 2), ('제작', 2)]

8. 워드클라우드 시각화

from wordcloud import WordCloud
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm

# 폰트 설정
font_path = "C:/Windows/Fonts/malgun.ttf"  # mac은 /Library/Fonts/AppleGothic.ttf
font_prop = fm.FontProperties(fname=font_path, size=14)
plt.rc('font', family=font_prop.get_name())
plt.rcParams['axes.unicode_minus'] = False  # 마이너스 깨짐 방지

# 워드클라우드 생성
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("인공지능 관련 블로그 키워드 워드클라우드")
plt.show()


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

wordcloud.to_file("인공지능_워드클라우드.png")

10. 마무리 요약

단계 설명
1 크롤링한 제목 불러오기 (read_csv)
2 제목 합치기 (" ".join())
3 형태소 분석 (Okt.nouns)
4 불용어 제거 + 단어 필터링
5 Counter로 단어 빈도 분석
6 WordCloud.generate_from_frequencies
7 plt.imshow()로 시각화
8 to_file()로 이미지 저장