November 13, 2014

政府統計APIに関する覚え書き

政府の統計データ利用データベースからphpプログラムなどを利用してデータを取得、APIを活用して分析ができるというサービスをながしましに教えてもらいました。自分の記憶をたよりに再現してみます(下書き段階)。

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

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

STEP2. Apacheとphpをインストールする。
ApacheはMax OS Xにはプリインストール済み。ターミナルを開いて、
sudo apachectl start  #Apacheを起動する。

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

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」or「i」を押してInsertモードにしてから、

ずーーーっと下にいって

#LoadModule php5_module libexec/apache2/libphp5.so
これの#を削除する
LoadModule php5_module libexec/apache2/libphp5.so

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

STEP3. ローカルホストにphpファイルを置く。
Macintosh HD→Library(ライブラリ)→WebServer→Documentsで、このフォルダのアクセス権を右クリック「情報を見る」から変更する。「共有とアクセス権」の右下にある鍵をクリックして、全てについて読み書きを認めるようにする。phpファイルはながしましが作ってくれたものを使用しました。

コードは以下の通り

<?php
ini_set('memory_limit', '256M');
$appId = urlencode(“#”アプリケーションID);
$url = "http://statdb.nstac.go.jp/api/1.0b/app/json/getStatsData?";
$code = urlencode("0003005867");
$json = file_get_contents($url."appId=".$appId."&statsDataId=".$code."&metaGetFlg=N&cdCat02=2&cdCat03=08&cdCat04=08&cdCat05=00");
$jset = json_decode($json, true);
$filename = “mimimi.json";
$fp = fopen($filename, "w");
fclose($fp);
echo count($jset['GET_STATS_DATA']['STATISTICAL_DATA']['DATA_INF']['VALUE']);
$fp = fopen($filename, "a");
foreach($jset['GET_STATS_DATA']['STATISTICAL_DATA']['DATA_INF']['VALUE'] as $jsondata) {
    fwrite($fp, $jsondata["@time"].",".$jsondata["@unit"].",".$jsondata["$"]."\n");
    echo $jsondata["$"]."\n";
}
fclose($fp);

?>

STEP4. 統計表情報を取得する。
次世代統計利用システムにアクセスして「本システムについて」→「API機能」→「開発支援情報」→「API機能テストフォーム」に移動する。「XMLで取得」の下にある「統計表情報取得」を選ぶ。

このページにつきます。
http://statdb.nstac.go.jp/API/sample/testform/getStatsList.html


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




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

ここで、appidと、見たいマクロ統計のリスト番号を「統計表ID」に入力します。リスト番号は、先ほどの統計表情報取得で開いたページから <LIST_INF id="xxxxxxxxxxxxx">となっているxに当たる番号のことです。ここでは、「平成17年国勢調査 労働力状態,就業者の産業,就業時間など(第2次基本集計) 全国結果」というデータを見てみたいと思うので、0000033923を入力します。最後に、データ取得件数を「1」にします。

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

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

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

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

上記のphpファイルを開くと、以下のような記述があります。


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

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



No comments:

Post a Comment