Pythonを使ったTwitter感情分析

Pythonを使ったTwitter感情分析

Twitter 感情分析は、Python を使用してツイートで表現された感情や意見を自動的に理解するプロセスです。テキストを分析することで、ツイートをポジティブ、ネガティブ、またはニュートラルに分類できます。これにより、企業や研究者が世間の雰囲気やブランドの評判やイベントに対する反応をリアルタイムで追跡できるようになります。 TextBlob Tweepy や NLTK などの Python ライブラリを使用すると、ツイートを収集してテキストを処理し、感情分析を効率的に実行することが簡単になります。 Pythonを使ったTwitter感情分析

Twitter 感情分析はどのように役立ちますか?

  • Twitter 感情分析は、人々や企業が大衆の考えをリアルタイムで理解するのに役立つため、重要です。
  • ブランド製品のイベントや社会問題について意見を共有するツイートが毎日何百万件も投稿されています。この膨大なデータの流れを分析することで、企業は顧客満足度の特定の傾向を早期に測定し、否定的なフィードバックに迅速に対処し、人々が実際にどう感じているかに基づいてより適切な意思決定を行うことができます。
  • また、生のツイートを貴重な洞察に変えるため、研究者や政府にとって、選挙危機や大きなイベントの際に国民の気分を監視するのにも役立ちます。

段階的な実装

ステップ 1: 必要なライブラリをインストールする

このブロックは、必要なライブラリをインストールおよびインポートします。使用します パンダ データをロードして処理するため TfidfVectorizer テキストを数値に変換し、 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 データセット zip 圧縮された 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  ())   

出力:

出力出力

ステップ 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出力

ステップ 4: ツイートをクリーンアップする

  • ここでは、一貫性を保つためにすべてのテキストを小文字に変換する単純な関数を定義し、データセット内のすべてのツイートに適用します。
  • 次に、最初の数ツイートの元のバージョンとクリーンなバージョンを表示します。
Python
   def   clean_text  (  text  ):   return   text  .  lower  ()   df  [  'clean_text'  ]   =   df  [  'text'  ]  .  apply  (  clean_text  )   print  (  df  [[  'text'     'clean_text'  ]]  .  head  ())   

出力:

出力出力

ステップ 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  =  (  1    2  ))   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)

  • ここでトレーニングします ベルヌーイ ナイーブ ベイズ トレーニング データからの 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  (  '  n  BernoulliNB Classification Report:  n  '     classification_report  (  y_test     bnb_pred  ))   

出力:

出力出力

ステップ 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  (  '  n  SVM Classification Report:  n  '     classification_report  (  y_test     svm_pred  ))   

出力:

出力出力

ステップ 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  (  '  n  Logistic Regression Classification Report:  n  '     classification_report  (  y_test     logreg_pred  ))   

出力:

出力出力

ステップ 11: サンプルツイートを予測する

  • このコードは 3 つのサンプル ツイートを取得し、同じベクトル化機能を使用してそれらを 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  (  '  n  Sample Predictions:'  )   print  (  'BernoulliNB:'       bnb  .  predict  (  sample_vec  ))   print  (  'SVM:'       svm  .  predict  (  sample_vec  ))   print  (  'Logistic Regression:'       logreg  .  predict  (  sample_vec  ))   

出力:

出力出力

モデルが正常に動作し、異なるアプローチでも同じ予測を示していることがわかります。

ここからソースコードをダウンロードできます- Pythonを使ったTwitter感情分析

クイズの作成