福島沖地震のツイッター統計についての備忘録

この記事はニューズウィーク寄稿記事(福島県沖地震後にもっとも拡散した外国人関連ツイートは、ヘイトではなく安全情報だった)で入れなかったこまごましたコードやデータについて備忘録的に書いたものです。本当は地震直後に書きたかったのですが、あの時はまだふたつ前のニューズウィークの記事を書いており、さらに次の原稿の内容も決まっていたので、このタイミングになってしまいました。
今回もRでツイッターAPIをたたきました。ところどころ統計やRの用語が出て来ます
2021年2月13日23時09分に福島県沖でおきた地震の後に差別ツイートや千葉で爆発が起きたという誤情報が拡散していると聞いてデータを集めて調べてみました。

1.データの取得方法
以前、ご紹介したRのrtweetを使って2021年2月13日23時09分から2月14日12時09分の期間の以下のツイートを取得しました。
 ・千葉と爆発に関するツイート 「千葉 AND 爆発」
 ・井戸と毒に関するツイート 「井戸 AND 毒」
 ・地震と外国人に関するツイート 「地震 AND (外国人 OR 外人 OR 中国 OR チャイナ OR 支那 OR 在日 OR チョン OR 韓国 OR 朝鮮 OR 朝○ OR シナ OR (井戸 AND 毒)」
 ・韓国人に関するツイート(直後1時間のみ) 「朝鮮 OR 在日 OR 韓国」
 ・毎日新聞のバックファイア効果の確認 地震と外国人に関するツイート 
「地震 AND (外国人 OR 外人 OR 中国 OR チャイナ OR 支那 OR 在日 OR チョン OR 韓国 OR 朝鮮 OR 朝○ OR シナ OR (井戸 AND 毒)」を2021年2月14日12時09分から2月15日00時09分までの期間取得しました。バックファイア効果はなかったので、記事にはしませんでした。

今回、中心にしたのは地震と外国人に関するツイートでした。一般で使えるツイッターAPIの制限を超えていたので、適当に時間を区切って取得し、rbindでくっつけました。


2.結果
集計、グラフ化した結果はニューズウィークの記事に書いた通り、差別やヘイトはあまり拡散されていませんでした。地震と外国人に関するツイートでもっともRTが多かったツイートは下記です。4位に社民党が入っていたのは意外でした。

1 https://twitter.com/arakencloud/status/1360596095873605644
2 https://twitter.com/iki_tanaka/status/1360598210817892356
3 https://twitter.com/nhk_seikatsu/status/1360618216993615873
4 https://twitter.com/SDPJapan/status/1360638020496445441

千葉と爆発に関するツイートはたったひとつのツイートのリツイートが全体のツイートの半分以上を占めていました。これがその元のツイートです。インフルエンサーの威力はすごい!? といっても1万もいっていないのですごく多いわけでもないですが。
https://twitter.com/Ichiro_leadoff/status/1360592961885462529

3.地震と外国人に関するツイートの集計で判別に用いた言葉
差別とそうでないツイートを判別するために、当初は「デマ」「ネタ」などが入っているものをそうでないツイートと判別しました。いったんそれで分けた後、双方のリツイート回数上位のツイートの内容を確認し、言葉を加えていって最終的には下記のようになりました。これをmutateでフラグの列を足して、その列をキーにして集計しました。

ifelse(str_detect(Gx0$text,"デマ") | str_detect(Gx0$text,"ネタ") | str_detect(Gx0$text,"差別") | str_detect(Gx0$text,"冗談") | str_detect(Gx0$text,"不謹慎") | str_detect(Gx0$text,"言っていいこと") | str_detect(Gx0$text,"業務妨害") | str_detect(Gx0$text,"弁護士") | str_detect(Gx0$text,"流言飛語") | str_detect(Gx0$text,"自覚") | str_detect(Gx0$text,"遊び") | str_detect(IDOx$text,"ジョーク") | str_detect(Gx0$text,"アナクロ") | str_detect(Gx0$text,"悪ふざけ") | str_detect(IDOx$text,"迷信") | str_detect(Gx0$text,"東京防災") | str_detect(Gx0$text,"語字幕"), 1, 0)

目視の範囲ではだいぶうまく分けられていました。
頻出ワードを使ってコレスポンデンス分析で分類するとか統計で殴る方法も考えましたが、おそらく人間が目視でやった方が確実だろうと思ってこちらにしました。ツイッターは文字数が限られているので、短縮語を使うことも多いし、文法も表現もふつうとは異なることが多いです。

4.時系列処理
時系列処理はいろいろやり方があると思いますが、今回はdateデータを数値に変換して、地震発生時刻からの経過時間(秒)を3600で割って、整数にしました。後から別に時間単位にしなくてもよかったなと思い返しました。ほんとうは1時間ごとに集計したりするかもしれないと思っていたのですが、しませんでした。

start_time=as.numeric(as.POSIXct("2021-02-13 14:09:00", tz="UTC"))
Gx[,"TL"]=as.integer((as.numeric(as.POSIXct(Gx$created_at, tz="UTC"))-start_time)/3600)+1
GxTL=table(Gx$TL,Gx$Con)

最後に
ニューズウィークの記事にも書きましたが、個人がツイッターAPIからデータを取得するのは、いろいろ制限があります。学術関係はツイッターに申請すれば無償でフルアクセスできるようになります。関心ある方はぜひ挑戦してください。共同研究しましょう。

本noteではサポートを受け付けております。よろしくお願いいたします。