Pythonを使ったTwitter感情分析
Twitter 感情分析は、Python を使用してツイートで表現された感情や意見を自動的に理解するプロセスです。テキストを分析することで、ツイートをポジティブ、ネガティブ、またはニュートラルに分類できます。これにより、企業や研究者が世間の雰囲気やブランドの評判やイベントに対する反応をリアルタイムで追跡できるようになります。 TextBlob Tweepy や NLTK などの Python ライブラリを使用すると、ツイートを収集してテキストを処理し、感情分析を効率的に実行することが簡単になります。
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 からダウンロードできます。
- 極性のみを保持し、わかりやすくするためにツイート テキスト列の名前を変更し、データをチェックするために最初の数行を出力します。
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 になるようにラベルをマップします。
- 次に、データに残っている肯定的なツイートと否定的なツイートの数を出力します。
df = df [ df . polarity != 2 ] df [ 'polarity' ] = df [ 'polarity' ] . map ({ 0 : 0 4 : 1 }) print ( df [ 'polarity' ] . value_counts ())
出力:
出力 ステップ 4: ツイートをクリーンアップする
- ここでは、一貫性を保つためにすべてのテキストを小文字に変換する単純な関数を定義し、データセット内のすべてのツイートに適用します。
- 次に、最初の数ツイートの元のバージョンとクリーンなバージョンを表示します。
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 により再現性が保証されます。
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 マトリックスの形状を出力します。
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 特徴に対する分類器。
- テスト データのセンチメントを予測し、精度と詳細な分類レポートを出力します。
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 のパフォーマンスを示す詳細な分類レポートを出力します。
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 回の反復を行うモデル。
- テスト データのセンチメント ラベルを予測し、モデル評価の精度と詳細な分類レポートを出力します。
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 はネガティブを表します。
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感情分析