「共感格差」を支える技術 SNS調査の検索・集計に使ったITツールを公開

  • URLをコピーしました!

 少し前に、「共感格差」を書いた。ありがたいことに多くの人に読まれたようで、INODS UNVEILにもサマリーを掲載していただいた。

 今回は、「共感格差」がどのように書かれたか?それを支える仕組みから説明していこう。

 今回の原稿の主旨は、何かを書いたり調べたりする際にシステムから作ろうというものだ。

目次

マスコミのツイートを手軽に検索・集計できる仕組みを作る

 3年ほど前にマスコミ各社のSNS(Twitter)アカウントのツイート(その多くは自社ニュース)を収集して、検索、集計が可能なサイトを作った。サイト名を「マスコミツイート横断比較」とした。

マスコミツイート横断比較
マスコミツイート横断比較

 現在、以下の報道各社のツイートを収集している。

日本のマスコミツイート(合計491万件)

報道機関名Twitterアカウント名開始月件数
朝日asahi2009-0646万件
朝日新聞デジタルasahicom2009-0712万件
ハフポストhuffpost2013-0430万件
時事通信jijicom2010-0577万件
共同通信kyodo2013-0357万件
毎日mainichi2009-0643万件
毎日新聞ニュースmainichijpnews2009-0749万件
NHKnhk2010-1168万件
日経nikkei2010-0842万件
産経sankei2012-0432万件
読売yomiuri2010-0230万件

アメリカのマスコミツイート(合計450万件)

報道機関名Twitterアカウント名開始月件数
ABC newsabc2008-1043万件
CBS newscbs2008-0735万件
CNNcnn2007-0238万件
フォックス・ニュースfoxnews2007-0359万件
ハフポストhuffpost-us2008-0461万件
NBC newsnbcnews2008-0337万件
ニューヨークタイムスnytimes2007-0348万件
USA Todayusatoday2008-0836万件
ワシントン・ポストwashingtonpost2008-1247万件
WSJwsj2007-0441万件

イギリスのマスコミツイート(合計556万件)

報道機関名Twitterアカウント名開始月件数
BBCbbc2007-0142万件
ファイナンシャルタイムスfinancialtimes2007-0432万件
ガーディアンguardian2009-1285万件
インディペンデントindependent2008-10127万件
ロイターreuters2007-03116万件
スカイニュースsky2007-0767万件
テレグラフtelegraph2008-0954万件
TheTimesthetimes2007-0529万件

 上記で紹介した「マスコミツイート横断比較」では、各報道機関が、年ごとにどのワードでどのくらい言及したかを可視化できる。

 例えば、日本のどの報道機関が安保法制でどのくらいの件数言及したかがわかる。

安保法制言及数の年推移
安保法制言及数の年推移

 見たところ、安保法制の言及数は2015年に盛り上がっていた。

 安保法制が成立し、施行される頃にはめっきり言及数が減る。施行後の言及は憲法違反かどうかを巡る裁判などが主で、例えば安保法制が台湾有事に与える影響みたいな記事は1件しかなかった。

 政局になりそうな瞬間は盛り上がるが、それが実際に運用されるときには興味が薄れるように見える。マスコミツイート横断比較は、このマスコミが興味をなくす様を可視化したくて作成した。このシステムは思わぬ副産物を生んだ。それが、共感格差だ。

言及されるLGBT、言及されない労働者階級

 共感格差の着想は、たまたま、”LGBT GAY” を検索したことから始まった。トランプが第一期大統領になる前の2010-2015年のアメリカ大手マスコミのGAY LGBT言及数は9814件、一方、労働者階級(working class、blue collar)の言及数は63件。LGBTへの言及数は、労働者階級の155倍だった。

 これは共感や関心の格差と言えるのではないか?という発見が共感格差を思いついたきっかけだった。

「GAY LGBT」と「労働者階級」の言及数の構成比
「GAY LGBT」と「労働者階級」の言及数の構成比

マスコミツイート横断比較を支える技術

マスコミツイート横断比較の技術スタック

 マスコミツイート横断比較は次のような技術スタックで作られた。

  • Twitterからsnscrapeを利用してマスコミツイートを収集する(2022年当時)。
  • そのデータをMySQLをベースにした全文検索エンジンMroongaに格納する。
  • PythonのWebフレームワークflaskを使って検索UIを作る。
  • グラフライブラリのplotlyを使ってグラフを作る。
  • 集計結果はredisを使ってキャッシュする。

 データの流れをもう少し見ていこう。

Twitterからmroongaへのデータフロー

 Twitterから取得したツイートデータは一旦mongoDBに格納。その後mroongaにデータを編集しつつ格納した。

 Twitterが返すデータ構造が複雑だったため、一旦mongoDBに入れてその後処理をしたほうが楽であるためだ。Twitterが頻繁に仕様変更する可能性があったためDBのスキーマとミスマッチが生じる可能性があり、そのため、mongoDBを一旦バッファとして扱った。

 Twitterから得たデータはmongoDBに生データ(raw data)として格納した。mongoDB格納時にデータを加工をすると予期せぬ仕様変更により、Twitterからデータを取得するプログラムが止まる可能性があるためだ。

mroongaとflaskを使ってWebアプリケーションを作る

 こちらは一般的なWebアプリケーションと変わらない。mroongaに格納したツイートデータに対して検索クエリーを生成して結果を出力している。redisをキャッシュとして利用することでレスポンスの向上に努めた。

2022年当時のTwitterデータの取得(現在は禁止されている)

 現在はできないが、2022年当時のやり方を書いておく。イーロン・マスク体制になりTwitterからのデータ取得は禁止された。

 snscrapeを利用して、以下のようにすれば、例えば朝日新聞のツイートを取得できた。

 Twitterには検索クエリーがあり、from:アカウント名 since:いつから until:いつまでを指定すればfromで指定したアカウントの該当期間の投稿を取得できた。

query = “from:asahi since:2022-01-01 until:2022-02-01”
for i,tweet in enumerate(sntwitter.TwitterSearchScraper(query).get_items()):
    dkt=dataclasses.asdict(tweet)

 その後取得データをmongoDBに格納した。

Mroonga(MySQL全文検索エンジン)の性能

 マスコミツイート横断検索では、マスコミの投稿したツイートに指定したキーワードが含まれるかを検索する。記事の文頭に、安保法制が含まれていれば検索は楽であるが、中間に含まれているときは、記事を全部スキャンせねばならず集計が遅くなる。そのような場合は全文検索エンジンを使うと集計が速くなる。

 例えば、日本のマスコミツイート471万件に対して、中間一致のSQLで検索・集計するとき(下記)は3.59秒かかるが、

select count(1) as cnt from news where text like “%安保法制%”; –3.59秒

 全文検索エンジンを使えば(下記)0.02秒で検索・集計できる。179倍高速化される。

select count(1) as cnt from news where match(text) against(“安保法制” IN BOOLEAN MODE); –0.02秒

 全文検索エンジンを使うことで、集計結果をすばやく返すことができる。

InnoDBの集計を事前集計で高速化

 MySQLのストレージエンジンはInnoDBとMyISAMがあり、InnoDB のcountは遅いことで知られている。

 マスコミツイート横断比較でも、その期間に対するキーワードを含む投稿の割合を出す場所があり、そこでは、その期間での報道各社が全体でどのくらい投稿したかをカウントする処理がある。その処理が重かった。処理が重いと集計レスポンスが遅くなってしまうので、事前に報道機関ごとに日ごとに集計をカウントして、それを年で合計することで集計を高速化した。

「安保法制」を含む記事のツイート回数の推移
「安保法制」を含む記事のツイート回数の推移

まとめ

 共感格差を書くにあたり、どのような契機でどのようなツールでその着想を得たかを振り返った。何かを調査する際に、そのためのツールから作っていくというアプローチはちょっとユニークかも知れないなと思っている。

 なにか調査をする際は、ツールから作っていくと思わぬ発見があるのでおすすめである。

よかったらシェアお願いします
  • URLをコピーしました!

この記事を書いた人

主にSNSの分析を個人の趣味として行っている。X(旧twitter)などを中心に分析しているがその他マスメディアが何に言及したかなどの調査をしている。
興味があるのは、マスメディアによるアジェンダ設定とその影になる誰かの問題は社会問題にならないのか?という設問である。
計算機自体が好きで、特に発表するあてもないデータを集計しては喜んでいる。
X(旧ツイッターアカウント)は shioshio38 お気軽にフォローしてもらえると嬉しい。今回紹介した共感格差は、こちら https://shioshio3.hatenablog.com/entry/2022/09/03/191426
で全文が読める。

目次