✔️ 전체 흐름 먼저 보기
1. 텍스트 정리하기 (HTML, 특수기호 제거 등)
import re
def clean_text(text):
text = re.sub(r'<[^>]+>', ' ', text) # HTML 태그 제거
text = re.sub(r'http\S+', ' ', text) # URL 제거
text = re.sub(r'[^가-힣a-zA-Z0-9\s]', ' ', text) # 특수문자 제거
return re.sub(r'\s+', ' ', text).strip() # 여백 정리
예: <p>정말 좋은 영화예요!!</p> → 정말 좋은 영화예요
2. 단어로 나누기 (형태소 분석)
from konlpy.tag import Okt
okt = Okt()
def tokenize(text):
return okt.morphs(text, stem=True) # 어간 추출 포함
예: 정말 재미있어요 → ['정말', '재미있', '어요']
3. 불필요한 단어 제거 (은, 는, 이, 가…)
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(
tokenizer=tokenize,
ngram_range=(1, 2),
min_df=3,
max_df=0.8
)
X = vectorizer.fit_transform(df['document']) # df는 리뷰 데이터
4. 숫자로 바꾸기 (벡터화)
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(
tokenizer=tokenize,
ngram_range=(1, 2),
min_df=3,
max_df=0.8
)
X = vectorizer.fit_transform(df['document']) # df는 리뷰 데이터
5. 감정 예측 모델 만들기 (랜덤 포레스트)
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
model = RandomForestClassifier()
scores = cross_val_score(model, X, df['label'], cv=5, scoring='f1')
print("평균 F1 점수:", scores.mean())
🎁 보너스: 리뷰 길이 시각화하기
import matplotlib.pyplot as plt
df['len'] = df['document'].apply(len)
plt.hist(df['len'], bins=30, edgecolor='black')
plt.title('리뷰 길이 분포')
plt.xlabel('문자 수')
plt.ylabel('빈도')
plt.show()
'데이터사이언스 > 데이터사이언티스트4기' 카테고리의 다른 글
삼성전자 주가 시계열 분석 설계문서 (2020-05-23 ~ 2025-05-23) (0) | 2025.05.26 |
---|---|
시계열 데이터 분석 용어 정리 (정상성, 차분, ACF, PACF 등) (1) | 2025.05.22 |
A/B 테스트의 결과가 통계적으로 유의하나 효과의 차이 자체는 매우 작은 경우 (0) | 2025.04.30 |
비정제 데이터 처리하기 (0) | 2025.04.15 |
SQL 이란 무엇인가? (0) | 2025.04.03 |