この記事はCivictech1年目 Advent Calendar 2020の最終日(25日目)の記事です。(とは言ったものの、書き溜めしていた記事を消化したもので、あまり面白い記事ではないです...)
どうも、兵庫県版コロナウイルスまとめサイトコントリビュータ、y-chanです。本家東京都サイトにも積極的にコントリビュートしたり、SecHack365に受かっていろいろ開発したり、CCC2020の運営をしていたりと大忙しな感じです。
今回は、COVID-19のオープンデータを検証するというような、おそらくどこもやってない(当社調べ)ことをやったのでそれについてちょっと書き残しておこうかなといった感じです。聞きかじった話が含まれてるので間違ってる部分もあるかと思いますが、編集リクエストなんかで優しく直してくれるとありがたいです。
私たちはデータラングリングをしている
前置き的なお話をしたいと思います。私たちがやっている、オープンデータを取得したり、整形したり、あるいは加工したりという行為はデータラングリングというそうです。データラングリングという言葉自体は造語のようですが、ラングリングは「飼い慣らす」などの意味があるそうです。ちなみに私は今までデータを触ることなどなかったので、この用語自体つい最近まで知りませんでした。
オープンデータを検証する?何言ってんだこいつ
見出しの通りです。普通、オープンデータのようなものを利用する場合、検証するというのはおかしな話です。オープンデータは政府や自治体によって公開されるもので、データの入力は人間が行っているであろうデータです。当然、ヒューマンエラーがありえます。完璧であることはほとんどありません。そのようなエラーやノイズ、欠損値はオープンデータの利用者自身が「前処理」といった段階でデータの間違いを正規化したり、データを消去(ないものとして扱う)したりすることでデータを正して利用するものです。なお、この「前処理」もデータラングリングに含まれる行為のようです。しかし、データラングリングにおいて「検証」という行為は普通ありませんし、しないものとされています。
COVID-19のオープンデータをデータラングリングするにあたって検証すると言って、「は?」となった方も多いのではないでしょうか。私もまとめサイトのチーム内で「検証機構作ってます」というと、とある方に「検証するってどういうこと?」というような反応をされました。「検証よりも前処理すべき」と。前処理も必要ですし、いくつかしているんですが、各地の新型コロナウイルス感染症対策サイトはオープンデータについて自治体と連携を行っているところも多いと思います。兵庫県版では特に連携はしていないのですが、以前に「データ間違ってるんじゃない?」と指摘を入れたことがあります。指摘を入れた理由はただ単に私の整形するデータに狂いが生じるからなのですが、陽性患者の属性のようなセンシティブなデータは正しい形であるべきだと思っていた節もあります。その頃はデータの数も少なく、ヒューマンエラーもほんのちょっとだけだったのですが、今となっては感染者数が増大し、ヒューマンエラーの数もかなり増えています。同時に、ミスを見つけるのも難しくなります。じゃあ、ミスの発見はプログラムに任せようと私は考えたわけです。これがオープンデータを検証しようとしたきっかけです。まあ、データの修正を県の担当者に押し付けるのは何か違うような気もしますが...
オープンデータの検証方法
では、オープンデータの検証はどのように行ったのか、軽く書き残しておきたいと思います。検証、といってもやっていることは単純明快で
- データが文字列である場合、定型に当てはまったものであるか
- データが数値で、複数の形式(日別や累計など)で公開されている場合、その数値は整合性が取れているか(簡単に言えば、日別の値の合計が累計の値と一致しているかなど)
のみを見ています。
実際、誤字脱字などのミスは修正可能ですが、数値の誤差などはこちら側で正確に修正する、ということはできず、そのまま使うか切り捨てるしかないため、まとめサイト上では結局修正されずに元データがほぼそのまま掲載されています...
また、文字列に関してはルールが定められているかはわからず、今まで出てきたデータを基に定型を設定しているので、たまに例外的なのが検証に引っかかることもあります。
ちなみにスクリプトはデータスクレイピングのものと同一のものです。
検証結果について
検証結果は誰でも閲覧できるようにしています。検証の結果、データに間違いのある可能性がある場合、その節をメッセージ化して表示するようなスクリプトを組みました。とはいえ、突貫工事感が否めなくて、メッセージの意味がいまいちわかりずらいという問題は残っています...
また、あくまでこれは私が設定した基準での検証結果となります。数値に関しての差は明らかにミスであるとうかがえるものの、定型に当てはまっていない文字列はヒューマンエラーといえるかは微妙です。この辺りも普通はオープンデータの検証などをしない理由でしょう。
まとめ
- オープンデータを利用者側が検証するという謎行為をした
- 検証結果を誰でも見れるようにした
- 突貫工事すぎて検証がわかりにくい
- まだしていないが、検証結果を基に前処理もできるようにしたい。
意味の分からないまとめになりましたが、"4"をいまだにやってないのはちょっとやばいかなと思っています。ただ、センシティブなデータであるということもあり、数値を勝手に変えたり、陽性患者の属性情報を書き換えたりするのはどうなのかなとも思いつつあります。そこらへんが、COVID-19というオープンデータの難しさなのではないでしょうか。