December 23, 2017

政府統計APIに関する覚え書き(アップデート)

国勢調査や労働力調査などの政府統計を利用しようと思ってe-statにアクセスしてみたはいいものの、いちいちエクセルファイルやCSVファイルを開くのが、面倒に感じたことがある方は少なくないのではないでしょうか。

実は、政府の統計データ利用データベースからphpプログラムなどを利用してデータを取得、APIを活用して分析ができるというサービスがあり、友人の永島さんに教えてもらいました。

この度、久しぶりにAPIを使ってデータを落としてみようと思い立ち、政府のページも少々変わっていたので、自分の記憶をたよりにアップデートしたものを再現してみます(Mac OSでChrome使用)。 PHPに詳しい人はすぐできると思うので、ぜひ利用してみましょう。

STEP 1. 利用登録
e-StatページからAPI機能の利用登録をします。
http://www.e-stat.go.jp/api/regist-login/

登録後にログインをすると、アプリケーションID(appid)を3つまで取得できます。URLなどは、公開サイトで利用しない場合は「http://localhost/」とする。

STEP 2. Apacheとphpをインストールする。
ApacheはMax OS Xにはプリインストール済みです。ターミナルを開いて、

sudo apachectl start  #Apacheを起動する。

ローカルホストにウェブ上からアクセスする仕様になるので、必要の無いときは以下のように閉じましょう。先起動するときはrestartとします。

sudo apachectl stop #停止
sudo apachectl restart #再起動

Apacheを起動させた状態にすると、ブラウザ上(Chrome推奨)で「http://localhost」にアクセスすると「It Works!」と出てきます。

次に、phpを起動します(Mac OS Xではこちらもインストール済み)。

sudo cp -p /etc/php.ini.default /etc/php.ini
sudo vi /etc/apache2/httpd.conf

これで、UNIX、Linux系OSで使われるテキストエディタのviを開いたことになります。「a」あるいは「i」を入力すると、Insertモードになります。この状態で、しばらく下に行くと

#LoadModule php5_module libexec/apache2/libphp5.so

というセンテンスがあるので、これの#を削除します。
LoadModule php5_module libexec/apache2/libphp5.so

終わったら、escキーを押してInsertモードを終了します。
その後、:wq と入力して、returnキーを押すと、エディタが終了します。

STEP 3. 取得したい統計表情報を入手する。
次に、phpファイルを通じて取得したい統計表を選びます。

政府統計API機能のページにアクセスして「開発支援情報」→「API機能テストフォーム」に移動します(http://www.e-stat.go.jp/api/testform/)。

バージョンが3つありますが、ひとまず1.0に進みます。「XMLで取得」の下にある「統計表情報取得」を選ぶと以下のページにたどり着きます。
http://www.e-stat.go.jp/api/sample/testform/

ここで、先ほど取得したappid及び、調べてみたい統計データのコードを政府統計コード(statsCode)に入力します(このページが分かりやすいです:http://www.e-stat.go.jp/api/api-data/)。
例えば、国勢調査だと00200521が統計コードになります。最後に検索キーワードを指定します。指定しなくても出力はされますが,膨大なので、ここでは「就業」と打ってみました。画像のようなページが出てくるはずです。


次に、先ほどの開発支援情報のページに戻り、今度はJSONで取得から統計データ取得のページに進みます。
http://www.e-stat.go.jp/api/sample/testform/getStatsData-json.html

ここで、appidと、取得したいマクロ統計のリスト番号を「統計表ID」に入力します。リスト番号は、先ほどの統計表情報取得で開いたページから <LIST_INF id="xxxxxxxxxxxxx">となっているxに当たる番号のことです。

先ほどは国勢調査をみてみましたが、ここでは失業率の時系列的な推移が知りたいとしましょう。XML形式のデータを見て、労働力調査(統計コード00200531)の「労働力調査 基本集計 全都道府県 全国 月次」から「配偶関係,年齢階級別労働力人口比率,就業率及び完全失業率(2000年1月~)」(統計表ID:0003005867)を取得することにします。データ取得件数は1件にしておきましょう。

なお、統計表IDからデータを探したい時には「統計データAPIエクスプローラー」のページが便利です。
http://ecitizen.jp/statdb

さて、取得したjson形式のデータは以下のようになっています。


ちょっと細かすぎますが、例えばこのデータから、@idが産業や性別、就業状態といった大項目、@codeがその下位分類となる小項目であることが分かります。例えば、cat02を見ると、

{"@id":"cat02","@name":"性別","CLASS":[{"@code":"0","@name":"総数","@level":"1"},{"@code":"1","@name":"男","@level":"1"},{"@code":"2","@name":"女","@level":"1"}]}

とあり、cat02は@idが性別であり、@codeに総数、男、女の三つのカテゴリがあることを指しています。

また、timeというidの名前(name)は「時間軸(月次)となっており、2000年1月からの失業率が分類されていること、及び表章項目(tab)の単位(unit)が%であることもわかります。
{"@id":"time","@name":"時間軸(月次)","CLASS":[{"@code":"2000000101","@name":"2000年1月","@level":"1"}

{"@id":"tab","@name":"表章項目","CLASS":{"@code":"02","@name":"率","@level":"","@unit":"%"}}

STEP4. ローカルホストにphpファイルを置く。
最後に、phpファイルを経由して、自分の好きな値だけを取り出してみましょう。

Macintosh HD→Library(ライブラリ)→WebServer→Documentsと進んで、このフォルダのアクセス権を右クリック「情報を見る」から変更する(ターミナル上でchmodを使ってもできます)。

「共有とアクセス権」の右下にある鍵をクリックして、全てについて読み書きを認めるようにする。phpファイルは永島さんが作ってくれたものを少しいじって、使用しました。

phpファイルのコードは以下の通りです。ファイル名はgetUnemploymentRate.phpとでもしておきましょう。

<?php
ini_set('memory_limit', '256M');
$appId = urlencode("f081654f8fc4b78d96c183cb8fb3f03a2c18637f"); //取得したappidを入力
$url = "http://api.e-stat.go.jp/rest/1.0/app/json/getStatsData?"; //リクエストURLを入力します(詳細はhttp://www.e-stat.go.jp/api/api-spec/)
$code = urlencode("0003005867"); //統計表id(<LIST_INF id="0003005867">)です。
$json = file_get_contents($url."appId=".$appId."&statsDataId=".$code."&metaGetFlg=N&cdCat02=2&cdCat03=08&cdCat04=08&cdCat05=00"); //女性(Cat02=2)、30~34歳(Cat03=08)、配偶状態総数(Cat05=00)という制限をかけます。
$jset = json_decode($json, true);
$filename = "UnemploymentRate.json";
$fp = fopen($filename, "w");
fclose($fp);
echo count($jset['GET_STATS_DATA']['STATISTICAL_DATA']['DATA_INF']['VALUE']);
$fp = fopen($filename, "a");
foreach((array)$jset['GET_STATS_DATA']['STATISTICAL_DATA']['DATA_INF']['VALUE'] as $jsondata) {
    fwrite($fp, $jsondata["@time"].",".$jsondata["@unit"].",".$jsondata["$"]."\n"); //時間軸ごとに%単位の失業率を抽出することを宣言します。
    echo $jsondata["$"]."\n";
}
fclose($fp);
?>


ここで、上記のphpファイルをみると、以下のような記述があります。

{
    fwrite($fp, $jsondata["@time"].",".$jsondata["@unit"].",".$jsondata["$"]."\n");
    echo $jsondata["$"]."\n";
}

これは、時間軸ごとに(@time)表章単位(パーセント)をつけて値($)をアウトプットするという意味です。""で挟まれた,はJsonデータに文字として反映され、エクセルなどに出力する時に区切り文字として利用できます。このようにして欲しいデータの統計idと項目を指定すると、Jsonデータの形で入手することができます。

ターミナル上で、
php /Library/WebServer/Documents/getUnemploymentRate.php
と実行することで、お目当のjsonファイルが入手できます。

No comments:

Post a Comment