食べログとSNSの評価を比較してみた [その2]～ツイート前処理～

お読みいただきありがとうございます！
本記事は[その2]となります。

以下4記事がまとめて3分で読める！
[<font color="LimeGreen">__[3分で読める] 食べログとSNSの評価を比較してみた～ショート編～__</font>](https://qiita.com/masaya_gg/items/e9dd362fa4aa3eaa56ba)

##簡単なあらすじ(元記事リンク！)

- [<font color="LimeGreen">__(その1)ツイートの取得(SNSの調査)/カフェの選定__</font>](https://qiita.com/masaya_gg/items/c5f4301b13c2cf1bf844)
TwitterAPIを活用し、東京23区内の人気カフェ/スイーツ店のツイートを取得
取得した店舗のうち、総ツイート数が200件を超えている店舗10店舗を選定。

- [<font color="LimeGreen">__(その2)ツイートの前処理__</font>](https://qiita.com/masaya_hashizaki/private/918d4efaa3ae97d45c27)<font color="Red">（本記事）</font>
ツイートには取得したい感想(評価)の他に、公式アカウントや引用ツイート、
お土産ランキングなど不要なツイートを削除。

- [<font color="LimeGreen">__(その3)感情分析にてツイートを得点化__</font>](https://qiita.com/masaya_hashizaki/private/24d6a898312dc7e4a524)
「日本語評価極性辞書」と「単語感情極性値対応表」2つの辞書を活用し、得点の比較。
食べログの評価幅が[0~5]のため、正規化にて幅を[0~5]合わせる。

- [<font color="LimeGreen">__(その4)食べログ評価を取得/比較__</font>](https://qiita.com/masaya_hashizaki/private/89c08a49d76393ca4438)
食べログの評価を取得し、評価の分布をグラフ化。
先ほど取得したツイートの点数との比較を行う。


#3.ツイートデータの前処理

<details><summary><font color="Red">__コード一覧はこちら__</font></summary><div>

```python
!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())
```
</div></details>

####時間表記の変更
```
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)) 
```

|変更前     　　  |変更後　　　　　　|
|:--------------------------|:----------------------------------------------------|
|🐄🐄🐄<br>🌀ブルーボトルコーヒー🌀<br>#ブルーボトルコーヒー<br>食べた物→ @0117ushi 🐄<br>その他→ @ushi0117 🐄<br>カフェ活→ #🐄カフェ 🐄<br>https://t.co/cw4LE8PRIt https://t.co/2BK0Uwi1vb|ブルーボトルコーヒー<br>#ブルーボトルコーヒー<br>食べた物→  <br>その他→ <br>カフェ活→ <br>#カフェ  |

感情分析では、絵文字の判別は不可。
URLや@（メンション）も分析対象外のため、ここですべて消去しておきます。
URLとメンションはそれぞれ、「http\」「@」から始まる文字列を空白に置換しました。
そのため、改行された空白が残っているところがあります。

####重複の消去
```
df = df.drop_duplicates(subset=['text'])
df = df.drop_duplicates(subset=['name'])
```
テキストを確認していく上で、引用ツイートや何かの記事をツイートされている方、
また、公式ツイートの宣伝も多くみられました。
今回取得を行いたいのは、利用した人の感想や利用を期待する人の意見のため
複数回ツイートをしている方を重複を消去するduplicates()で一括消去しました。
これにより「○○、行きたい」「美味しかった」などのシンプルな正の感情のツイートも消去しています。
しかし、全店舗同様の処理を行っていため評価に影響はしないと考えます。

![Twitter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1971455/2c076828-4b09-3c18-102a-6f0454b6bd7c.png)

####処理後のツイート数

| 店名  |処理前|処理後|
|:-----------------|:------------------|:-----------|
|キル フェ ボン|2385   |1914 |
|ピエール・エルメ|996        |786     |
|ブルーボトルコーヒー|731   |565      |
|ケンズカフェ東京|647       |567 |
|マリアージュフレール|527     |429    |
|ひみつ堂 |419     |303        |
|資生堂パーラー|395   |308         |
|和栗や |326   |265           |
|アンリ・シャルパンティエ |292|226     |
|銀座ウエスト  |268  |216          |

- ツイート数は減少
- 元のツイート数が多いほど、減少数は大きい
- 消去されたツイートには「公式アカウント」や「スイーツランキング」の引用ツイートなどが見られた
- SNSでの情報発信には「いいね」が一定数見られた、SNSの活用はマストか…

今後の展望として

- ツイート数の多い店舗のツイート内容を確認し、どんな内容に関してはツイート数が増加するのか確認してみたい！
- 例えば、テイクアウト、お土産、フェア、新商品など



__続く！__
[__[その3]__](https://qiita.com/masaya_hashizaki/private/24d6a898312dc7e4a524)
4.ツイートデータの感情分析