はじめに
感情分析
は、テキストデータから感情や意見を自動的に解析し、ポジティブ、ネガティブ、ニュートラルといった感情を分類する自然言語処理(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データを取得したら、次にそのデータに感情分析を実施します。ここでは、TextBlob
とVADER
という自然言語処理ライブラリを使用して、ツイートの感情を判定します。
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以下はネガティブと解釈します。
感情分析結果の可視化
感情分析結果を視覚的に表現することで、データの傾向が一目でわかるようになります。ここでは、Matplotlib
とSeaborn
を使って結果をグラフで可視化します。
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分析やマーケティングの意思決定において、こうした感情分析は非常に強力なツールとなります。