「ゆれた」「地震だ!」地震ツイートから位置情報をどの程度絞れるのか検証

本記事はISL Advent Calendar 2020の17日目の記事です。

こんにちは。B3のユーキャンです。
今回は、「ゆれた!!」「地震だ」といった地震観測ツイートから、位置情報がどの程度絞れてしまうのか、検証をするアプリケーションを開発したので、動機や開発経緯を書かせていただこうと思います。

 

 

 

動機

皆さんも、頭の中では「SNSで個人情報をむやみにバラすべきではない」というのは分かっていると思います。自分の個人情報が勝手に使われたら嫌ですよね。しかし実際、本気を出したら、どれほどの個人情報が自分のSNSアカウントから判明してしまうのか、自分で自分を”攻撃”をしたことがある人は中々いないんじゃないでしょうか。

今回は、SNSの投稿の中からツイッターの「地震観測ツイート※」に焦点を絞り、地震観測ツイートだけでどの程度投稿者の位置情報が分かってしまうのか、調べたいと思い、このアプリを作成するに至りました。

 

地震観測ツイート...「ゆれた」「地震だ」など、地震を観測した直後にされたツイートのこと。私が名付けました

 

大まかな方法

まず考えたのは、


1.何個か地震観測ツイートを集める
2.各地震観測ツイートから該当する地震を求める
3.各地震ごとの震度が観測された観測点※を地図上に出し、重複した点を抽出する

 

※ 観測点とは、震度を測るための震度計が置いてある場所です。

この方法だと、3.で重なった点の近くにツイートしたユーザの居住地があると推測できます。

 

実際にやったこと

地震のデータをあつめる

地震のデータってどっかにまとまってるもんなの?...と思い調べてみたら、気象庁がまとめてました。

www.data.jma.go.jp

残念ながら2018年までしかデータはありませんでしたが、とりあえずこのサイトに載っているレコードファイルを使ってみることにしました。

ためしにレコードファイルをダウンロードして開いてみると、、

f:id:nexem:20201216023231p:plain

なんじゃこりゃ。

読み方はこのページを読むと分かるんですけど、要はこんな感じのことが書かれてます。

地震1
--最大震度
--緯度経度
--発生時刻
--観測点群
----観測点1
------震度
------観測点番号
----観測点2
------震度
------観測点番号
...
地震2
--最大震度
--緯度経度
...

多少内容は省いてます。


しかし、このレコード形式とやら、分かりづらいったらありゃしないので、Pythonスクリプトを書いてjsonにしました。

f:id:nexem:20201216023912p:plain

よし。これなら扱いやすくなりそうですね。とりあえず地震のデータは用意できました。

 

地震観測ツイートを集める

ツイッターには検索演算子というものがあって、これを上手く使うと欲しいツイートを効率的に探せます。詳しくはググってください。

「from:対象ユーザのID until:2018-12-31 キーワード1 OR キーワード2」
で検索すると、2018年までの対象ユーザのキーワードが含まれたツイートが出てきます。
キーワードは「ゆれ」とか、「地震」とか、「揺れた」とかで。思いつく限りOR演算子を使って羅列します。
検索に出てこなければ、全ツイート履歴をダウンロードして探すという手もあります。

help.twitter.com

ツイートから該当する地震を求める

どのようにツイートから該当する地震を求めればよいのか?

僕が考えた方法は以下の通りです。

 

1. 地震リストから、最大震度が1以下の地震を除外する
2. ツイートURLからツイート時刻を求める

3. ツイート時刻より前に起こったの地震の中から、一番ツイート時刻と発生時間が近い地震を「ツイートに該当する地震」とする。

 

1.の解説

www.jma.go.jp

 

このページによると、震度1は

屋内で静かにしている人の中には、揺れをわずかに感じる人がいる。

 らしいです。確かに、震度1で「地震だ」呟いている人を見たことが無い気がします。

震度2は

屋内で静かにしている人の大半が、揺れを感じる。眠っている人の中には、目を覚ます人もいる。

なので、震度2以上だと「地震だ」とつぶやく人がいそうですね。

2.の解説

こちらを参考にしました。

qiita.com

 

3.の解説

「ツイートは必ず、地震が起きた後にされる」からですね。

 

 

では、地震データも集まったし、方法もある程度決まったので、作っていきましょう。

 

完成したアプリ

f:id:nexem:20201216025342p:plain

完成したアプリはTweet + Earthquakeで「TweetQuake」と名付けました。

フレームワークにはFlaskを使っていて、地図の表示にはleaflet.js、チュートリアルの実装にはintro.jsを用いました。

github.com

 

検証

さて、実際にこのアプリを使って仮説が正しいのか検証していきましょう。もちろん使うのは私のツイートです。

 

4つツイートを用意しました。これを入力として、位置情報を推測します。

まずは一番上のツイートURLを入力します。すると、観測点が地図上に出てきました。

f:id:nexem:20201216030113p:plain

ずいぶん観測点の数が多いですね。これだとまだ全然絞れてはいないですが、どうやら関東付近にいそうですね。

続いてもう一つツイートURLを入れてみます。

f:id:nexem:20201216030228p:plain

二つの地震の観測点が同時に表示されているので、何がなんだかわかりません。ここで「重複している観測点」にチェックを入れてみます。

f:id:nexem:20201216030307p:plain

すると、赤色で重複している観測点が表示されました。もうお分かりだとは思いますが、ツイートの数を増やすたびに、この「重複している観測点」は減っていきます。

残りの2つのツイートも入れて、重複している観測点を見てみましょう。

f:id:nexem:20201216030620p:plain

先ほどより重複している観測点が少なくなりました。
私の仮説だとこの赤点の範囲に位置情報が来るはずなのですが、私の居住地は実際にこの赤点の中にあります。やったぜ。

もう少しツイートを多くすれば更に絞り込めそうですが、2018年までの地震観測ツイートが少なかったため、今はここまでです。2019年の地震データを気象庁が追加してくれたら、再度検証してみます。

 

私のツイートの検証だけでは信ぴょう性が薄すぎるので、埼玉県住の友達のツイートを許可をもらってお借りし、そちらでも検証してみることにしました。(ツイートを貸してくださってありがとうございます。)

それがこちらです。

f:id:nexem:20201216031305p:plain

4つの地震観測ツイートを入力とした結果、見事、赤点が埼玉県にあることが確認できます。

 

まとめ

いかがでしたでしょうか。地震観測ツイートからおおよその位置が割り出せることが分かっていただけたと思います。
この記事をぜひ、自分のツイートから思わぬ個人情報が漏れてないかな?と見直す機会にしていただければと思います。

ちなみにこのアプリは、ツイッター認証による本人確認機能※などを付けて、セキュリティ対策アプリとして公開する予定です。

 

※ 今のアプリは、ツイートURLを入力としているため、他人のツイートからも位置情報の推測が出来てしまう。

 

P.S. まだ検証の数が圧倒的に足りてないため、2018年までに地震観測ツイートをしていて、我こそは!という方は、ぜひツイッターID:@n3_xまで連絡お願いします。m(_ _)m