見出し画像

Twitter APIを利用して感情分析(データ分析)をしてみよう~コロナワクチンのイメージは?~

 皆さん、こんにちは!今回は、Twitter APIを利用して、Pythonから感情分析(データ分析)してみようというお話です。これをやろうと思った理由は、「コロナワクチンは本当に大丈夫なの!?」という素朴な疑問がきっかけでした。もちろん、感情分析では本当に大丈夫かはわからないですが、多くの人がコロナワクチンに対してポジティブな感情を抱いて入れば、ある程度は安心して受診してもいいかなと思えると考えたからです。それでは、いってみましょう!
 データ分析とは、情報、数値、文字、符号などを収集し、分類・整理・成形・取捨選択したうえで解釈することです。データは、量的データ質的データに分類されます。量的データとは、数量で表されるデータです。質的データは、数量化されないデータです。私は大学・大学院で心理学を勉強しましたが、心理学の分野では、量的データを扱うタイプの研究を量的研究(quantitative study)、質的データを扱うタイプの研究を質的研究(qualitative study)といいます。

感情分析とは

 感情分析(sentiment analysis)とは、AI(人工知能)が人間の感情や気持ちを解析する(読み取る)ことです。感情は、主に言語コミュニケーション非言語コミュニケーションの2種類に分類できます。言語コミュニケーションとは、人間の発する言葉を利用して情報を伝達するコミュニケーション手法です。非言語コミュニケーションとは、身振り手振りといったジェスチャーや表情などの言語以外を利用して情報を伝達するコミュニケーション手法です。感情分析で分析する対象は、テキスト(文字)音声表情(映像解析など)が挙げられます。

テキストによる感情分析

 テキストによる感情分析とは、人間が入力したテキストをAIが自然言語処理を施し、「ポジティブ(positive)」「ニュートラル(neutral)」「ネガティブ(negative)」の3種類に分類したり、「好き」「悲しみ」「怒り」「恐れ」「喜び」など詳細に分類したりして感情を判断することです。テキストマイニング(text mining)とも呼ばれます。テキストマイニングとは、大量のテキストデータを単語や文節で区切り、単語や文節の出現頻度や共出現の相関、出現傾向、時系列などを解析することで、有益な情報を取り出すことです。感情分析では、テキストデータに含まれている単語や表現、言葉遣いを分析することで、書き手の人間が抱いていた感情を判断します。今回のTwitter APIを利用した感情分析もこれにあたります。今すぐテキストによる感情分析がしたい場合は、下記サイトをご利用ください。

音声による感情分析

 音声による感情分析とは、人間が発する音声からその感情を判断することです。会話の速度や声のトーン、強弱、抑揚、イントネーションなどを分析対象としてAIで解析することで、上記3種類や5種類などに感情を分類します。人間の感情表現は、非言語コミュニケーションの割合が言語コミュニケーションよりも多いため、テキストによる感情分析よりも高精度な感情分析が可能といわれています。音声による感情分析は、テキストによる感情分析と併用することで、言葉に加えて言葉だけでは伝わり切れない気持ちを読み取ることで、より話し手の気持ちに寄り添った応答ができる可能性があるため、スマートスピーカーなどでの活用も期待されています。スマートスピーカーとは、インターネットの接続と、対話型の音声認識・音声操作に対応したAIアシスタント機能を持つスピーカーです。スピーカーを手で操作することなく音声のみでの操作が可能です。Amazonの「Alexa」が有名です。

今すぐ音声による感情分析がしたい場合は、下記サイトをご利用ください。

表情による感情分析

 表情による感情分析とは、喜怒哀楽など比較的わかりやすい表情の変化を読み取る一般的なものから、黒眼領域や瞬きの変化を読み取るもの、富士通が開発した表情筋の変化に対応付けて読み取るものまであり、日進月歩で開発が進められています。表情分析表情認識と呼ばれることもあります。

表情認識アプリには、VTuber(バーチャルユーチューバー)向けアプリの「恋顔」というものがあります。「恋顔」とは、顔認証機能が搭載されたiPhoneで表情を認識し、macOS/Windowsのパソコンで3Dキャラクターを動かせるアプリです。

POINT
【感情分析】
AI(人工知能)が人間の感情や気持ちを解析する(読み取る)こと
・言語コミュニケーションと非言語的コミュニケーションに分類できる

【感情分析の分析対象】
①テキストによる感情分析
:人間が入力したテキストをAIが自然言語処理を施し、「ポジティブ(positive)」「ニュートラル(neutral)」「ネガティブ(negative)」の3種類に分類したり、「好き」「悲しみ」「怒り」「恐れ」「喜び」など詳細に分類したりして感情を判断すること
②音声による感情分析
:人間が発する音声からその感情を判断すること。
 会話の速度や声のトーン、強弱、抑揚、イントネーションなどを分析対象としてAIで解析することで、上記3種類や5種類などに感情を分類する。
③表情による感情分析
:喜怒哀楽など比較的わかりやすい表情の変化を読み取る一般的なものから、黒眼領域や瞬きの変化を読み取るもの、富士通が開発した表情筋の変化に対応付けて読み取るものまである

感情分析のメリット・デメリット

 感情分析には、メリットとデメリットがあります。それぞれ見ていきましょう!

感情分析のメリット

 感情分析が利用される業務には、チャットボット(chatbot)を含めたLINEなどでのチャット(テキスト)を活用した業務、コールセンターなどの電話(音声)を活用した業務などが挙げられますが、感情分析のメリットには、「顧客の満足度を感情分析を活用して測定し、より良いサービスに繋げる」ということが挙げられます。チャットボットとは、「チャット(chat)」と「ボット(bot)」を組み合わせた造語で、AIを活用した「自動会話プログラム」のことです。代表的なチャットボットにMicrosoftが初期の開発を手掛けた「りんな」があります。ほかには、「職場の従業員の心の健康度(ストレスレベルなど)を感情分析を活用して測定し、メンタルヘルスケア(mental health care)に活かす」ということも考えられます。メンタルヘルス(mental health)とは、心の健康という意味です。メンタルヘルスケアとは、職場で働くすべての人々がいきいきと働ける程度のストレスの範囲で健康に業務をこなせるように気配りと援助を行うことです。

感情分析のデメリット

 感情分析のデメリットには、「技術力が成熟しておらず、精度に幾分か課題がある」ということが挙げられますが、ほかには「テキスト、音声、表情などをデータ化することで、そのデータを保持することによる個人情報保護の課題がある」ということが考えられます。技術力については、まだまだ発展の可能性があるので、今後に期待ができます。個人情報保護については、感情分析に限らず、データを保持した時点でどの分野でもいえることなので、それらと一緒に解決していくことが重要になります。

POINT
【感情分析のメリット・デメリット】
◆メリット
・顧客の満足度を感情分析を活用して測定し、より良いサービスに繋げる
・職場の従業員の心の健康度(ストレスレベルなど)を感情分析を活用して測定し、メンタルヘルスケア(mental health care)に活かす
◆デメリット
・技術力が成熟しておらず、精度に幾分か課題がある
・テキスト、音声、表情などをデータ化することで、そのデータを保持することによる個人情報保護の課題がある

感情分析をしてみよう!

 では、早速感情分析をしてみましょう!まだ、Twitterアプリの登録やTwitter APIの利用申請などを済ませていない方は、下記記事を参考にして済ませてください。

Javapocalypseさんのコード

 今回は、Javapocalypseさんが書いたコードを若干変更したコードをご紹介します。コードの説明は、Javapocalypseさんご自身で解説されているので、必要でしたらご確認ください。

もし和訳をご希望でしたら、「設定」をクリックして

「設定」をクリック

「字幕(1)」をクリックして

「字幕(1)」をクリック

「英語(自動生成)」をクリックして

「英語(自動生成)」をクリック

「字幕(1)」をもう一度クリックして

「字幕(1)」をもう一度クリック

「自動翻訳」をクリックして

「自動翻訳」をクリック

一番下の「日本語」をクリックすると

一番下の「日本語」をクリック

和訳になりました。

和訳

 下記がJavapocalypseさんのコードから、円グラフの色などを若干変更したコードになります。言語はPythonです。コードをコピー&ペーストして、「SentimentAnalysis.py」などとして、保存してご利用ください。「consumer_key」「consumer_secret」「access_token」「access_secret」は、各々ご自分のものを設定してください。

from textblob import TextBlob
import sys
import tweepy
import matplotlib.pyplot as plt

# 感情分析の結果をパーセンテージに変換
def percentage(part, whole):
    return 100 * float(part)/float(whole)

consumer_key = 'AAAAAAAAAAAAAAAAAAAA' # Consumer Keyを記載
consumer_secret = 'BBBBBBBBBBBBBBBBBBBB' # Consumer Secretを記載
access_token = 'CCCCCCCCCCCCCCCCCCCC' # Access Tokenを記載
access_secret = 'DDDDDDDDDDDDDDDDDDDD' # Accesss Token Secertを記載

# Twiiter APIの認証処理
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)
api = tweepy.API(auth)

search_term = input("Enter keyword/hashtag to search about: ")
no_of_search_terms = 0
while True:
    no_of_search_terms = int(input("Enter how many tweets to analyze【only natural number】: "))
    if no_of_search_terms > 0:
        break

# tweetを抽出
tweets = tweepy.Cursor(api.search_tweets, q=search_term).items(no_of_search_terms)

# 各パラメータを0に初期化
positive = 0
negative = 0
neutral = 0
polarity = 0

# tweetを感情分析し-1(negative)~1(positive)の値で導出
for tweet in tweets:
    #print(tweet.text)
    analysis = TextBlob(tweet.text)
    polarity += analysis.sentiment.polarity
    
    if(analysis.sentiment.polarity == 0):
        neutral += 1
    elif(analysis.sentiment.polarity < 0.00):
        negative += 1
    elif(analysis.sentiment.polarity > 0.00):
        positive += 1

# 各パラメータのパーセンテージを計算
positive = percentage(positive, no_of_search_terms)
negative = percentage(negative, no_of_search_terms)
neutral = percentage(neutral, no_of_search_terms)
polarity = percentage(polarity, no_of_search_terms)

# 少数点以下8桁表示から2桁表示に変換
positive = format(positive, '.2f')
neutral = format(neutral, '.2f')
negative = format(negative, '.2f')

# 検索するTweetの単語とTweet数を表示
print("How people are reacting on " + search_term + " by analyzing " + str(no_of_search_terms) + " Tweets.")

# 感情分析の結果を言葉で表示
if(polarity == 0):
    print("Neutral")
elif(polarity < 0.00):
    print("Negative")
elif(polarity > 0.00):
    print("Positive")

# 感情分析の結果を円グラフで表示
labels = ['Negative [' + str(negative) + '%]', 'Neutral [' + str(neutral) + '%]', 'Positive [' + str(positive) + '%]']
sizes = [negative, neutral, positive]
colors = ['red', 'yellowgreen', 'cyan']
patches, text = plt.pie(sizes, colors=colors, startangle=90)
plt.legend(patches, labels, loc="best")
plt.title('How people are reacting on ' + search_term + ' by analyzing ' + str(no_of_search_terms) + ' Tweets. ')
plt.axis('equal')
plt.tight_layout()
plt.show()

 実行すると、

Enter keyword/hashtag to search about:

となりますので、分析したい言葉を「英語」で入力して、Enterキーを押してください。すると、

Enter how many tweets to analyze【only natural number】:

となりますので、分析に使用するTweet数を入力して、Enterキーを押してください。しばらく待つと、分析結果が円グラフで表示されます。ただし、1日で分析可能な数には限りがございますので、ご注意くださいね。

TextBlobを利用した感情分析

 今回使用したデータサイエンス用のライブラリは、「TextBlob」です。pipなどでインストールしてご利用ください。データサイエンス用のライブラリはほかにもあります。もし気になりましたら、下記を参考にしてください。

 TextBlobには、感情分析機能が備わっています。ただ、TextBlobの感情分析はブラックボックスとなっていて、分析結果として得られた極性や主体性の値の理由がわかりません。また、文脈を考慮した分析もできず、分析対象の単語が全体的にポジティブかどうかを判断しているに過ぎません。詳細は下記サイトをご確認ください。

それでも、Twitter APIを利用して簡易的に感情分析ができるので、とても有用だと思います。

コロナワクチンのイメージは?

 それでは、色々と感情分析をしてみましょう!まずは…、手始めに、結果がポジティブになりそうな「」を分析してみましょう。

分析対象「love」 Tweet数「1000」

やはり、ポジティブが73.00%となりましたね!「愛」に対してネガティブな感情を抱く人はごく限られた人ということですね。
 では、いよいよ本記事の目的であった「コロナワクチン」に対する感情分析をしてみましょう!

分析対象「COVID-19 Vaccines」 Tweet数「1000」

ポジティブが23.70%と、ネガティブの2倍はありましたね。私としては、コロナワクチンは受診しても大丈夫かなと思える内容でした~(すでに複数回受診していますが…)!
 では、「コロナ」だとどうなるのでしょうか!?やってみましょう!

分析対象「COVID-19」 Tweet数「1000」

ポジティブがネガティブの4倍はありましたね。「コロナ」に対してポジティブな発言が多かったということですね。社会的に、とても良い傾向のように感じます。
 この調子で「コロナ」に関係する言葉を分析していって、「コロナワクチン」の結果を再考察してみましょう。次は「マスク」を分析してみます。

分析対象「face mask」 Tweet数「1000」

「マスク」は「コロナワクチン」と同様でコロナ対策になるものなので、圧倒的にポジティブの割合が多いですね。
 次は「医療従事者」を分析してみましょう。

分析対象「healthcare worker」 Tweet数「1000」

ポジティブがネガティブを上回ってはいますが、ネガティブは24.30%と、思っていたよりも高い割合でした。この背景には、「医療従事者」の方は「コロナにうつりやすいかもしれない」などのネガティブなイメージがあるのかもしれませんね(わかりませんが…)。
 次は「ウィズコロナ」を分析してみましょう。

分析対象「new normal」 Tweet数「1000」

圧倒的にポジティブに軍配が上がりましたね。「ウィズコロナ」時代に入ってしばらく経ちましたが、「ウィズコロナ」時代であっても元気に生きていられているということでしょうか!?
 次は「ステイホーム」を分析してみましょう。

分析対象「stay home」 Tweet数「1000」

「ステイホーム」に関しては、ポジティブとネガティブが同じくらいの割合でしたね。「ステイホーム」は利点もあれば、欠点もあるからですかね。
 次は、私にとって利点か欠点かわかりにくいことに注目してみましょう。まずは「オンライン会議」です。

分析対象「web conference」 Tweet数「1000」

「オンライン会議」では、圧倒的にポジティブが上回りましたね。「オンライン会議」をポジティブに捉えている人が多いということですね。
 次は似ている言葉として「オンライン授業」を分析してみましょう。

分析対象「online classes」 Tweet数「1000」

「オンライン会議」と同様に「オンライン授業」もポジティブが圧倒的でしたね。「ウィズコロナ」時代にとてもマッチしたシステムなのかもしれませんね。
 次は「在宅勤務」を分析してみましょう。

分析対象「work from home」 Tweet数「1000」

「在宅勤務」では、ポジティブとネガティブが拮抗していましたね。利点も欠点もあるからかもしれませんね。
 では、視点を未来に変えて「アフターコロナ」を分析してみましょう。

分析対象「post-covid」 Tweet数「1000」

コロナ後も比較的ポジティブに捉えていることがわかりましたね。本当にそのようになると良いですね!
 では、そろそろ「コロナワクチン」について、再考察してみましょう。といっても、感情的な考察しかできないので、大した考察はできないですが、私としては、「コロナに関する言葉からは、全体的にポジティブな感情が多かったことから、コロナワクチンに対しても相対的にポジティブな発言が多いのかもしれない」ということでした。

そのほかの感情分析

 ついでなので、最近話題の「ウクライナ」に関係する言葉もちょこっとだけ分析してみましょう!
 まずは「ゼレンスキー大統領」です。

分析対象「Zelenskyy」 Tweet数「1000」

 ポジティブがネガティブの2倍以上ありましたね。「ゼレンスキー大統領」を応援する発言が多いのかもしれませんね。
 次は「核兵器」を分析してみましょう。

分析対象「nuclear weapons」 Tweet数「1000」

ポジティブとネガティブが半々くらいでしたね。私としては、ネガティブが多いと考えていたので意外でした。核兵器に関して、ポジティブな発言も一定数あるということでしょうか?
 次は、拒否権などで課題が残る「国際連合」を分析してみましょう。

分析対象「United Nations」 Tweet数「1000」

 「国際連合」では、ポジティブがネガティブの約4倍ありましたね。「国際連合」がうまく機能していないと騒がれてはいますが、依然として重要な国際機関であるということでしょうかね。
 では、G7として活躍が期待される日本の首相である「岸田首相」を分析してみましょう。

分析対象「Prime Minister Kishida」 Tweet数「1000」

「岸田首相」では、圧倒的にポジティブの割合が多かったですね。ぜひ、「岸田首相」には引き続き頑張ってほしいものです。

 それでは、最後に私たちの「未来」を分析してみましょう!!

分析対象「future」 Tweet数「1000」

 良かった!「未来」に関して、ポジティブな発言が約半分でしたね。これは「アフターコロナ」「アフターウクライナ(という言葉はありませんが…)」としても期待ができそうですね!!

 いかがでしたか?機械学習によるデータ分析ではなかったですが、簡易的な感情分析でデータ分析の最初の一歩を踏み出せたのではないでしょうか!?「機械学習とは?」について知りたい方は、下記記事を参考にしてください。

 でも、機械学習によるデータ分析もしてみたいですよね!?もしチャレンジしてみた方がいらっしゃったら、ぜひコメントにて教えてくださいね。では、また次回!!

書籍の紹介

 今回の冒頭で少しだけお話した量的研究に関する良著をご紹介します。量的研究は心理学の分野ではありますが、機械学習も心理学も統計学をベースにしている点において、とても親和性がある学問領域ですので、ぜひ一読していただけたら嬉しいです。

 この記事へのコメントお待しています!また、もしこの記事が「面白かったよ!」「参考になったよ!」など、何かしらお役に立ったら、♡をポチっと押して応援していただけたら嬉しいです。さらに、フォローもしていただけたら、大変励みになります!よろしくお願いしますね。

                            文責:nayuta

この記事が気に入ったらサポートをしてみませんか?