logo

Python을 이용한 트위터 감성 분석

Twitter 감정 분석은 Python을 사용하여 트윗에 표현된 감정이나 의견을 자동으로 이해하는 프로세스입니다. 텍스트를 분석함으로써 우리는 트윗을 긍정적, 부정적 또는 중립적으로 분류할 수 있습니다. 이를 통해 기업과 연구자는 대중 분위기의 브랜드 평판이나 이벤트에 대한 반응을 실시간으로 추적할 수 있습니다. TextBlob Tweepy 및 NLTK와 같은 Python 라이브러리를 사용하면 트윗을 쉽게 수집하고 텍스트를 처리하고 감정 분석을 효율적으로 수행할 수 있습니다. Python을 이용한 트위터 감성 분석

트위터 감정 분석은 어떻게 유용합니까?

  • 트위터 감정 분석은 사람과 기업이 대중의 생각을 실시간으로 이해하는 데 도움이 되기 때문에 중요합니다.
  • 매일 수백만 개의 트윗이 게시되어 브랜드 제품 이벤트나 사회 문제에 대한 의견을 공유합니다. 기업은 이러한 엄청난 양의 데이터 흐름을 분석함으로써 고객 만족도 동향을 파악하고 부정적인 피드백을 조기에 신속하게 처리하고 사람들이 실제로 느끼는 방식에 따라 더 나은 결정을 내릴 수 있습니다.
  • 또한 원시 트윗을 귀중한 통찰력으로 전환하므로 연구원과 정부가 선거 위기나 대규모 행사 중에 대중 분위기를 모니터링하는 데 유용합니다.

단계별 구현

1단계: 필요한 라이브러리 설치

이 블록은 필요한 라이브러리를 설치하고 가져옵니다. 그것은 사용한다 팬더 데이터를 로드하고 처리하기 위해 Tfidf벡터라이저 텍스트를 숫자로 변환하고 scikit 학습 모델을 훈련시킵니다.

Python
pip install pandas scikit-learn import pandas as pd from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split from sklearn.naive_bayes import BernoulliNB from sklearn.linear_model import LogisticRegression from sklearn.svm import LinearSVC from sklearn.metrics import accuracy_score classification_report 

2단계: 데이터세트 로드

  • 여기서 우리는 Sentiment140 데이터 세트 압축된 CSV 파일을 Kaggle에서 다운로드할 수 있습니다.
  • 극성만 유지하고 트윗 텍스트 열은 명확성을 위해 이름을 바꾸고 처음 몇 행을 인쇄하여 데이터를 확인합니다.
Python
df = pd.read_csv('training.1600000.processed.noemoticon.csv.zip' encoding='latin-1' header=None) df = df[[0 5]] df.columns = ['polarity' 'text'] print(df.head()) 

산출:



산출' loading='lazy' title=산출

3단계: 긍정적인 감정과 부정적인 감정만 유지하세요

  • 여기서는 극성이 2인 중립 트윗을 제거하여 레이블을 매핑하므로 0은 음수로 유지되고 4는 양수로 1이 됩니다.
  • 그런 다음 데이터에 얼마나 많은 긍정적인 트윗과 부정적인 트윗이 남아 있는지 인쇄합니다.
Python
df = df[df.polarity != 2] df['polarity'] = df['polarity'].map({0: 0 4: 1}) print(df['polarity'].value_counts()) 

산출:

스크린샷-2025-07-09-092140' loading='lazy' title=산출

4단계: 트윗 정리

  • 여기서는 일관성을 위해 모든 텍스트를 소문자로 변환하는 간단한 함수를 정의하여 데이터 세트의 모든 트윗에 적용합니다.
  • 그런 다음 처음 몇 개의 트윗의 원본 버전과 정리된 버전을 표시합니다.
Python
def clean_text(text): return text.lower() df['clean_text'] = df['text'].apply(clean_text) print(df[['text' 'clean_text']].head()) 

산출:

산출' loading='lazy' title=산출

5단계: 훈련 테스트 분할

  • 이 코드는 80/20 분할을 사용하여 clean_text 및 polarity 열을 훈련 및 테스트 세트로 분할합니다.
  • random_state=42는 재현성을 보장합니다.
Python
X_train X_test y_train y_test = train_test_split( df['clean_text'] df['polarity'] test_size=0.2 random_state=42 ) print('Train size:' len(X_train)) print('Test size:' len(X_test)) 

산출:

열차 규모: 1280000
테스트 크기: 320000

6단계: 벡터화 수행

  • 이 코드는 5000개 기능으로 제한된 유니그램 및 바이그램을 사용하여 텍스트를 숫자 기능으로 변환하는 TF IDF 벡터화기를 생성합니다.
  • 훈련 데이터를 맞춰서 변환하고 테스트 데이터를 변환한 다음 결과 TF IDF 행렬의 모양을 인쇄합니다.
Python
vectorizer = TfidfVectorizer(max_features=5000 ngram_range=(12)) X_train_tfidf = vectorizer.fit_transform(X_train) X_test_tfidf = vectorizer.transform(X_test) print('TF-IDF shape (train):' X_train_tfidf.shape) print('TF-IDF shape (test):' X_test_tfidf.shape) 

산출:

TF-IDF 형상(열차): (1280000 5000)
TF-IDF 형상(테스트): (320000 5000)

7단계: Bernoulli Naive Bayes 모델 학습

  • 여기서 우리는 베르누이 나이브 베이즈 훈련 데이터의 TF IDF 기능에 대한 분류자입니다.
  • 테스트 데이터에 대한 감정을 예측한 다음 정확성과 세부 분류 보고서를 인쇄합니다.
Python
bnb = BernoulliNB() bnb.fit(X_train_tfidf y_train) bnb_pred = bnb.predict(X_test_tfidf) print('Bernoulli Naive Bayes Accuracy:' accuracy_score(y_test bnb_pred)) print('nBernoulliNB Classification Report:n' classification_report(y_test bnb_pred)) 

산출:

산출' loading='lazy' title=산출

9단계: 지원 벡터 머신(SVM) 모델 학습

  • 이 코드는 지원 벡터 머신(SVM) TF IDF 기능에 대해 최대 1000번의 반복이 가능합니다.
  • 테스트 라벨을 예측한 다음 정확성과 SVM의 성능을 보여주는 상세한 분류 보고서를 인쇄합니다.
Python
svm = LinearSVC(max_iter=1000) svm.fit(X_train_tfidf y_train) svm_pred = svm.predict(X_test_tfidf) print('SVM Accuracy:' accuracy_score(y_test svm_pred)) print('nSVM Classification Report:n' classification_report(y_test svm_pred)) 

산출:

라텍스 목록
산출' loading='lazy' title=산출

10단계: 로지스틱 회귀 모델 학습

  • 이 코드는 로지스틱 회귀 TF IDF 기능을 최대 100번 반복하여 모델을 만듭니다.
  • 테스트 데이터에 대한 감정 라벨을 예측하고 모델 평가를 위한 정확성 및 세부 분류 보고서를 인쇄합니다.
Python
logreg = LogisticRegression(max_iter=100) logreg.fit(X_train_tfidf y_train) logreg_pred = logreg.predict(X_test_tfidf) print('Logistic Regression Accuracy:' accuracy_score(y_test logreg_pred)) print('nLogistic Regression Classification Report:n' classification_report(y_test logreg_pred)) 

산출:

산출' loading='lazy' title=산출

11단계: 샘플 트윗에 대한 예측 수행

  • 이 코드는 세 개의 샘플 트윗을 가져와 동일한 벡터기를 사용하여 이를 TF IDF 기능으로 변환합니다.
  • 그런 다음 훈련된 BernoulliNB SVM 및 로지스틱 회귀 모델을 사용하여 감정을 예측하고 각 분류자에 대한 결과를 인쇄합니다.
  • 여기서 1은 양수를 나타내고 0은 음수를 나타냅니다.
C++
sample_tweets = ['I love this!' 'I hate that!' 'It was okay not great.'] sample_vec = vectorizer.transform(sample_tweets) print('nSample Predictions:') print('BernoulliNB:' bnb.predict(sample_vec)) print('SVM:' svm.predict(sample_vec)) print('Logistic Regression:' logreg.predict(sample_vec)) 

산출:

산출' loading='lazy' title=산출

우리 모델이 잘 작동하고 다른 접근 방식을 사용해도 동일한 예측을 제공한다는 것을 알 수 있습니다.

여기에서 소스 코드를 다운로드할 수 있습니다. Python을 이용한 트위터 감성 분석

퀴즈 만들기