정치 텍스트 감성 분석 (Python NLP)

중급 정량 분석 political python
예상 소요 시간 90분
사전 지식 Python 기초, NLP 개념
표본 크기 기준 최소 1,000개 기사
통계 가정 텍스트 독립성, 언어 모델 적합성
난이도: 중급 — 실제 연구에 바로 적용 가능한 수준입니다.

개요

정치 관련 뉴스 기사의 텍스트를 분석하여 정치적 성향(진보/보수)을 분류하는 머신러닝 모델을 Python으로 구축한다. TF-IDF 벡터화와 로지스틱 회귀를 결합하여 텍스트 분류 파이프라인을 구성한다.

분석 절차

1단계: 데이터 수집 및 전처리

뉴스 기사 크롤링 또는 API로 수집한 후 텍스트 정제(특수문자 제거, 소문자 변환)를 수행한다.

2단계: TF-IDF 벡터화

TfidfVectorizer로 텍스트를 숫자 벡터로 변환한다. max_features로 상위 5,000개 단어만 사용하여 차원을 축소한다.

3단계: 모델 학습

로지스틱 회귀로 분류 모델을 학습한다. 80%는 학습 데이터, 20%는 테스트 데이터로 사용한다.

4단계: 모델 평가

classification_report로 정밀도(Precision), 재현율(Recall), F1-score를 확인한다.

5단계: 해석

회귀 계수가 높은 단어는 보수적 성향과 연관된 단어, 계수가 낮은 단어는 진보적 성향과 연관된 단어다.

코드 예제

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report

# 데이터 로드
df = pd.read_csv('political_articles.csv')

# TF-IDF 벡터화
vectorizer = TfidfVectorizer(max_features=5000, stop_words='english')
X = vectorizer.fit_transform(df['article_text'])
y = df['political_leaning']  # progressive/conservative

# 학습/테스트 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 로지스틱 회귀 분류
clf = LogisticRegression(max_iter=1000)
clf.fit(X_train, y_train)

# 예측 및 평가
y_pred = clf.predict(X_test)
print(classification_report(y_test, y_pred))

# 주요 단어 확인
feature_names = vectorizer.get_feature_names_out()
coefs = clf.coef_[0]
top_progressive = sorted(zip(coefs, feature_names))[:10]
top_conservative = sorted(zip(coefs, feature_names), reverse=True)[:10]

참고문헌

Manning, C. D., Raghavan, P., & Schütze, H. (2008). Introduction to Information Retrieval. Cambridge University Press.

코드 예제

PYTHON
import pandas as pd from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import classification_report # 데이터 로드 df = pd.read_csv('political_articles.csv') # TF-IDF 벡터화 vectorizer = TfidfVectorizer(max_features=5000, stop_words='english') X = vectorizer.fit_transform(df['article_text']) y = df['political_leaning'] # progressive/conservative # 학습/테스트 분할 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 로지스틱 회귀 분류 clf = LogisticRegression(max_iter=1000) clf.fit(X_train, y_train) # 예측 및 평가 y_pred = clf.predict(X_test) print(classification_report(y_test, y_pred)) # 주요 단어 확인 feature_names = vectorizer.get_feature_names_out() coefs = clf.coef_[0] top_progressive = sorted(zip(coefs, feature_names))[:10] top_conservative = sorted(zip(coefs, feature_names), reverse=True)[:10]

참고문헌

Manning, C. D., Raghavan, P., & Schütze, H. (2008). Introduction to Information Retrieval. Cambridge University Press.

이 방법론과 연결된 콘텐츠