Saturday 1:20 p.m.–1:50 p.m.

日本のオープンデータプラットフォームをPythonでつくる

Yuta Kashino

Audience level:
Novice
Category:
Big Data

Description

私たちが正しく意思決定をするには根拠となるデータ,それもきちんとした手法で収集されたデータが必要です.その意思決定に必要なデータの最たるものが行政機関・地方自治・民間団体が発表するオープンデータです.しかし残念なことに,各行政機関のデータの出し方は雑多で,かつすぐに活用できるデータ形式になっていないという大きな問題があります.この問題を解決するためには全く新しいプラットフォームが必要だと考え,これをPythonスタックを中心とするサービスとして構築しました.本トークでは日本のオープンデータの現状とこれをPythonを用いて解決する手法を具体的に解説します.

Abstract

### データ収集から意思決定まで 私たちが間違わない意思決定をするには,統計調査などで集めたデータを根拠とすることが一番です.これを模式的に表すとデータの収集から意思決定へいたる一つの道筋が存在し,そこにはつぎのような「データのライフサイクル」が介在します. ![LifeCycle](https://bitbucket.org/bakfoo/pub/wiki/pycon2015kashino/data.png) 実は日本政府が行っている経済政策の決定という意思決定も,データ収集から意思決定までを同じようなフローでおこなっています.ことのきに根拠となっているのは,内閣の月例経済報告等で提示される行政機関・地方自治・民間団体が統計調査として収集し,各所管部署が整形・集計したデータです.通常の民間組織が扱うデータと違うのは,データ自体の収集の手間が膨大になると共に,上記ライフサイクルのうち「3.集計」が既に済んだデータを定期的にオープンデータとして公開してくれることが多いということです.官公庁や地方自治体などのいわゆるお役所の人員や予算などのリソースは,かなりの量で政策決定に関わる統計調査に費やされていますが,これはそれほどデータの収集や集計が大変であり,そのデータは意思決定の観点から社会にとって非常に重要なものである,ということです. ### 時系列の重要性 そういった行政機関・地方自治体が発表するオープンデータのうち,特に重要な経済・社会統計について見ていきます.現在,総務省管轄のe-Statというサイトはじめとして,各省庁が重要なデータを毎週,毎月,毎年webサイトにて発表しています.GDP,消費者物価,有効求人倍率,鉱工業生産指数など,マスメディアを通じてそういった数字に触れることもあるでしょう.往々にしてマスメディアはそのとき発表される数字の値と,前期や前年同月に発表された値の差だけを述べて終わりにする場合がほとんどです.しかし,正しい意思決定には,単発の数字や単なる二時点間を比較した数字だけでなく,時間を通じて変化してきた数字の積み重ねである時系列が絶対的に必要です. ![Plot](https://bitbucket.org/bakfoo/pub/wiki/pycon2015kashino/plot.png) 時系列の推移をみなければ,インサイトや意思決定の質を担保できません.そしてこの時系列の可視化,時系列における異常値の検知などが経済・社会統計にとって大きな機能になってきます. ### 日本のオープンデータの問題 日本のオープンデータの問題とは,長い話を端折ってしまうと次の2点に要約されます. - 重要統計であっても,データが一カ所になく,提供方法が種々雑多である - Excel/PDFというオープンでないフォーマットによる開示がほとんど 例えば,家計調査のデータを入手しようとしてもe-Statとe-Stat APIそして総務省のサイトと三つの場所があるのですが,どれも提供されるデータの種別や形式が違っているので一筋縄ではいきません. 更には行政機関発表のデータは決められた公表スケジュールに従って継続的に発表されます.そのために,データは月毎,四半期毎,半期毎,年毎と更新されますので,その度にいろいろなデータソースから入手しないといけません.当然ですが一度取得して終わりというわけにないかないのです. ### どうやって解決するか こういった問題を統一的に解決するためには,Pythonスタックによりオープンデータのプラットフォームを構築することにしました.そのオープンデータプラットフォームサービスが以下の"SocioMeasure"です. ![SocioMeasure](https://bitbucket.org/bakfoo/pub/wiki/pycon2015kashino/sociomeasure.png) プラットフォームの概要は次の通りです. - 多くの多様な場所から,スケジュールに従ってデータを取得するロボットを構築する. - Tornadoによるスケジューラ,BeautifulSoup, lxmlによるスクレイピング - ExcelやPDFなどのオープンでないデータからデータを抽出する. - python-excel, pypdf等によるパージング - データを時系列として首尾一貫した形式で整形する. - Pandasによる整形 - 全体のデータとしては大きな時系列データとなるので,スケーラブルなデータストアに保存する. - rq等のモダンキューシステムを介したデータストアへのアップデート - データを探索できるインタフェースとすぐに可視化ができるインタフェースを作る. - 正しいRESTインタフェースを用意して,機械可読を容易にする. - TronadoによるREST APIサーバ それぞれの方法の詳細は講演で解説します.Pythonのアジャイル性,ロバスト性がなければ短期間にサービスを構築することはできませんでした.まさにPythonの可能性を大きく感じた開発でした.
  • このエントリーをはてなブックマークに追加