お読みいただきありがとうございます!
本記事は[その2]となります。
以下4記事がまとめて3分で読める!
[3分で読める] 食べログとSNSの評価を比較してみた~ショート編~
簡単なあらすじ(元記事リンク!)
-
(その1)ツイートの取得(SNSの調査)/カフェの選定
TwitterAPIを活用し、東京23区内の人気カフェ/スイーツ店のツイートを取得
取得した店舗のうち、総ツイート数が200件を超えている店舗10店舗を選定。 -
(その2)ツイートの前処理(本記事)
ツイートには取得したい感想(評価)の他に、公式アカウントや引用ツイート、
お土産ランキングなど不要なツイートを削除。 -
(その3)感情分析にてツイートを得点化
「日本語評価極性辞書」と「単語感情極性値対応表」2つの辞書を活用し、得点の比較。
食べログの評価幅が[0~5]のため、正規化にて幅を[0~5]合わせる。 -
(その4)食べログ評価を取得/比較
食べログの評価を取得し、評価の分布をグラフ化。
先ほど取得したツイートの点数との比較を行う。
3.ツイートデータの前処理
__コード一覧はこちら__
!pip install emoji --upgrade
import emoji
import pandas as pd
import numpy as np
import re
import csv
import matplotlib.pyplot as plt
import traceback
from google.colab import drive
drive.mount('/content/drive')
# CSV読み込み
df = pd.read_csv('/content/drive/MyDrive/aidemy/ブログ_食べログ/tweet/csv/(326)和栗や.csv',
usecols=['text', 'name','created_at'])
df = pd.DataFrame(df)
df.index +=1
# 時間の表示変更
df["created_at"] = df["created_at"].str.split(" ",expand=True)[2]
# URLと@の消去
df['text'] = df['text'].str.replace("http\S+", '')
df['text'] = df['text'].str.replace("@\S+", '')
# 絵文字の消去
df['text'] = df['text'].apply(lambda x: emoji.get_emoji_regexp().sub(u'', x))
# 重複の消去
df = df.drop_duplicates(subset=['text'])
df = df.drop_duplicates(subset=['name'])
print(df["name"].value_counts())
print(df['text'].value_counts())
時間表記の変更
df["created_at"] = df["created_at"].str.split(" ",expand=True)[2]
変更前 | 変更後 |
---|---|
Sun Sep 26 12:53:51 +0000 2021 | 26 |
時間は正確に取得できているか確認するために残しました。
@返信ID/URL/絵文字の消去
# @
df['text'] = df['text'].str.replace("@\S+", '')
# URL
df['text'] = df['text'].str.replace("http\S+", '')
# 絵文字
df['text'] = df['text'].apply(lambda x: emoji.get_emoji_regexp().sub(u'', x))
変更前 | 変更後 |
---|---|
🐄🐄🐄 🌀ブルーボトルコーヒー🌀 #ブルーボトルコーヒー 食べた物→ @0117ushi 🐄 その他→ @ushi0117 🐄 カフェ活→ #🐄カフェ 🐄 https://t.co/cw4LE8PRIt https://t.co/2BK0Uwi1vb |
ブルーボトルコーヒー #ブルーボトルコーヒー 食べた物→ その他→ カフェ活→ #カフェ |
感情分析では、絵文字の判別は不可。
URLや@(メンション)も分析対象外のため、ここですべて消去しておきます。
URLとメンションはそれぞれ、「http\」「@」から始まる文字列を空白に置換しました。
そのため、改行された空白が残っているところがあります。
重複の消去
df = df.drop_duplicates(subset=['text'])
df = df.drop_duplicates(subset=['name'])
テキストを確認していく上で、引用ツイートや何かの記事をツイートされている方、
また、公式ツイートの宣伝も多くみられました。
今回取得を行いたいのは、利用した人の感想や利用を期待する人の意見のため
複数回ツイートをしている方を重複を消去するduplicates()で一括消去しました。
これにより「○○、行きたい」「美味しかった」などのシンプルな正の感情のツイートも消去しています。
しかし、全店舗同様の処理を行っていため評価に影響はしないと考えます。
処理後のツイート数
店名 | 処理前 | 処理後 |
---|---|---|
キル フェ ボン | 2385 | 1914 |
ピエール・エルメ | 996 | 786 |
ブルーボトルコーヒー | 731 | 565 |
ケンズカフェ東京 | 647 | 567 |
マリアージュフレール | 527 | 429 |
ひみつ堂 | 419 | 303 |
資生堂パーラー | 395 | 308 |
和栗や | 326 | 265 |
アンリ・シャルパンティエ | 292 | 226 |
銀座ウエスト | 268 | 216 |
- ツイート数は減少
- 元のツイート数が多いほど、減少数は大きい
- 消去されたツイートには「公式アカウント」や「スイーツランキング」の引用ツイートなどが見られた
- SNSでの情報発信には「いいね」が一定数見られた、SNSの活用はマストか…
今後の展望として
- ツイート数の多い店舗のツイート内容を確認し、どんな内容に関してはツイート数が増加するのか確認してみたい!
- 例えば、テイクアウト、お土産、フェア、新商品など
続く!
[その3]
4.ツイートデータの感情分析