はじめに

感情分析は、テキストデータから感情や意見を自動的に解析し、ポジティブ、ネガティブ、ニュートラルといった感情を分類する自然言語処理(NLP)の手法です。この記事では、Pythonを使ってTwitterのツイートデータを収集し、自然言語処理ライブラリを使って感情分析を行う方法を解説します。さらに、分析結果を可視化して、感情の傾向を視覚的に理解するための手順も紹介します。

感情分析とは?

感情分析(Sentiment Analysis)は、テキストデータに含まれる感情的なニュアンスを検出し、その感情がポジティブ、ネガティブ、ニュートラルのいずれに分類されるかを判断する技術です。これにより、企業の顧客のフィードバックやSNS上での意見を定量化し、ビジネスの意思決定に役立てることができます。

Twitterデータの取得

まず、Twitter APIを使ってツイートを収集します。Twitter APIを使用するには、TweepyというPythonライブラリを利用します。

Twitter APIキーの取得

Twitter APIを使用するためには、Twitter Developerアカウントを作成し、APIキーとアクセストークンを取得する必要があります。 これらはTwitterの開発者向けポータルから取得可能です。

Tweepyのインストール

Tweepyをインストールし、API認証を行います。

pip install tweepy

Twitter APIの認証とデータ取得

次に、Tweepyを使ってTwitter APIに接続し、特定のキーワードに基づいてツイートを収集します。以下は、Pythonスクリプトの例です。

import tweepy
import pandas as pd
# Twitter APIキーの設定
consumer_key = "YOUR_CONSUMER_KEY"
consumer_secret = "YOUR_CONSUMER_SECRET"
access_token = "YOUR_ACCESS_TOKEN"
access_token_secret = "YOUR_ACCESS_TOKEN_SECRET"
# Twitter APIに接続
auth = tweepy.OAuth1UserHandler(consumer_key, consumer_secret, access_token, access_token_secret)
api = tweepy.API(auth)
# 特定のキーワードでツイートを収集
query = "`Python`"
tweets = tweepy.Cursor(api.search_tweets, q=query, lang="en").items(100)
# データフレームにツイートを保存
tweet_data = [[tweet.text, tweet.created_at, tweet.user.screen_name] for tweet in tweets]
df = pd.DataFrame(tweet_data, columns=["Tweet", "Timestamp", "Username"])
# ツイートを確認
print(df.head())

コードの解説

  • tweepy.Cursor(): キーワードに基づいたツイートを収集し、指定された数(例: 100件)のツイートを取得します。
  • pd.DataFrame(): 取得したツイートデータをデータフレーム形式に変換して、操作を容易にします。

感情分析の実施

Twitterデータを取得したら、次にそのデータに感情分析を実施します。ここでは、TextBlobVADERという自然言語処理ライブラリを使用して、ツイートの感情を判定します。

TextBlobによる感情分析

TextBlobは、感情分析を含むテキスト処理機能を提供するPythonライブラリです。まずは、TextBlobを使って感情分析を行います。

TextBlobのインストール

pip install textblob

TextBlobで感情分析を実施するコード

from textblob import TextBlob
# 感情分析を実行する関数
def analyze_sentiment(tweet):
    analysis = TextBlob(tweet)
    if analysis.sentiment.polarity > 0:
        return "Positive"
    elif analysis.sentiment.polarity == 0:
        return "Neutral"
    else:
        return "Negative"
# データフレームに感情分析結果を追加
df['Sentiment'] = df['Tweet'].apply(analyze_sentiment)
# 感情の割合を確認
print(df['Sentiment'].value_counts())

コードの解説

  • TextBlob: ツイートの感情を解析し、polarity(極性)というスコアを出力します。ポジティブな感情なら正の値、ネガティブなら負の値、ニュートラルなら0が返されます。
  • apply(): データフレームの各行に対して、感情分析を行う関数を適用します。

Step 2: VADERによる感情分析

VADERは、SNSや短いテキスト向けに最適化された感情分析ツールです。これを使うことで、ツイートの感情分析がより精度高く行えます。

VADERのインストール

pip install vaderSentiment

VADERで感情分析を実施するコード

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
# VADERのインスタンスを作成
analyzer = SentimentIntensityAnalyzer()
# 感情分析を実行する関数
def vader_analyze_sentiment(tweet):
    score = analyzer.polarity_scores(tweet)
    if score['compound'] >= 0.05:
        return "Positive"
    elif score['compound'] <= -0.05:
        return "Negative"
    else:
        return "Neutral"
# データフレームにVADERの感情分析結果を追加
df['VADER_Sentiment'] = df['Tweet'].apply(vader_analyze_sentiment)
# 感情の割合を確認
print(df['VADER_Sentiment'].value_counts())

コードの解説

  • SentimentIntensityAnalyzer: VADERの分析インスタンスを作成し、ツイートの感情スコアを取得します。compoundスコアは全体的な感情を示すもので、0.05以上はポジティブ、-0.05以下はネガティブと解釈します。

感情分析結果の可視化

感情分析結果を視覚的に表現することで、データの傾向が一目でわかるようになります。ここでは、MatplotlibSeabornを使って結果をグラフで可視化します。

MatplotlibとSeabornのインストール

pip install matplotlib seaborn

感情分析結果のグラフ化

感情の分布を棒グラフで可視化

import matplotlib.pyplot
 as plt
import seaborn as sns
# 感情の分布を可視化
plt.figure(figsize=(8,6))
sns.countplot(x='Sentiment', data=df, palette='viridis')
plt.title('Sentiment Analysis of Tweets')
plt.show()

コードの解説

  • countplot: Seabornのcountplotを使って、ポジティブ、ネガティブ、ニュートラルのツイート数を棒グラフで表示します。
  • palette: 色を指定し、ビジュアルをカスタマイズしています。

感情スコアの分布をヒストグラムで可視化

# VADERのcompoundスコアをヒストグラムで可視化
df['compound'] = df['Tweet'].apply(lambda tweet: analyzer.polarity_scores(tweet)['compound'])
plt.figure(figsize=(8,6))
sns.histplot(df['compound'], bins=20, kde=True)
plt.title('Compound Sentiment Score Distribution')
plt.show()

コードの解説

  • histplot: 各ツイートのcompoundスコアの分布を可視化し、ツイートの感情スコアがどのように分布しているかを確認します。
  • kde: カーネル密度推定(KDE)を表示し、スコアの分布の滑らかな曲線を追加します。

まとめ

Pythonと自然言語処理ライブラリを活用することで、Twitterデータを収集し、感情分析を行うことができました。TextBlobやVADERを使用することで、ツイートに含まれる感情を簡単に解析でき、分析結果を可視化することで、感情の傾向や特徴を視覚的に把握できます。SNS分析やマーケティングの意思決定において、こうした感情分析は非常に強力なツールとなります。