PHP 政府統計 API の使い方メモ(e-Stat)

データ分析
スポンサーリンク

政府統計の総合窓口(e-Stat)の API 機能 では、各府省が公表する統計データを、APIを使って簡単に取得することができます。以前は各府省ごとに、統計データを公開していましたが、近年この、政府統計の総合窓口サイトの1つにまとめられ、昨年からは API 機能の提供も開始されました。

政府統計 API の使い方はいたって簡単なのですが、統計データの種類、量ともに膨大なため、データ取得までの流れが、他のWEBサービス系のAPIとは少し異なります。そこで今回は、政府統計 API の使い方をご紹介します。

政府統計 API でデータ取得するまでの流れ

もくじの2〜5の流れで、統計データを取得します。

政府統計 API にリクエストするパラメータなど、詳細な仕様は公式マニュアルをご参照ください。

▽ 政府統計の総合窓口(e-Stat)API仕様
https://www.e-stat.go.jp/api/api-spec

今回は、地域別の「うなぎのかば焼き」の年間支出金額の統計データを取得してみたいと思います。

アプリケーションID の取得

政府統計 API は、誰でも無料で利用登録ができます。クレジット表示をすれば、取得した統計データを元に作成した、アプリやWEBサービスを公開することもできます。

▽ ユーザ登録 | 政府統計の総合窓口(e-Stat)−API機能
https://www.e-stat.go.jp/mypage/user/preregister

利用登録が終わったら、管理ページにログインして、アプリケーションIDを取得します。

「アプリケーションIDの取得」を選択し、名称とURLを入力して「発行」ボタンを押します。そうすると appId欄にアプリケーションIDが表示されますので、こちらをメモしておきます。
e-stat-api-01

統計表IDの取得

まずはじめに、データを取得したい統計表のIDを APIで取得します。WEBサービス系のAPIでは、取得したいデータIDの一覧ページがあったりしますが、統計表は数が多いためか、統計表IDを検索するところからAPIを使います。

APIへのリクエストパラメータは「appId=<アプリケーションID>」が必須になります。パラメータ値には URLエンコードが必要です。

検索キーワードパラメータ searchWord に「うなぎのかば焼き」を指定して、統計表情報を取得します。API名は getStatsList です。

<?php
// パラメータ
$params = array(
    'appId'         => '<アプリケーションID>',
    'searchWord'    => 'うなぎのかば焼き',
);

// URLエンコード
$query = http_build_query($params, '', '&', PHP_QUERY_RFC3986);

// 統計表情報を取得(Json形式)
$url = 'http://api.e-stat.go.jp/rest/2.0/app/json/getStatsList?' . $query;
$json = file_get_contents($url);

// Json形式を配列に変換
$arr = json_decode($json, true);

// 取得したデータの表示
var_dump($arr);

上のプログラムを実行すると「うなぎのかば焼き」に関する統計表情報が表示されますので、統計表名を参考に、取得したいデータがありそうな統計表を探します。以下の統計表が該当しそうです。この統計表ID(@id)「0003021328」をメモしておきます。

        [5]=>
        array(13) {
          ["@id"]=>
          string(10) "0003021328" ← 統計表ID
          ["STAT_NAME"]=>
          array(2) {
            ["@code"]=>
            string(8) "00200561"
            ["$"]=>
            string(12) "家計調査"
          }
          ["GOV_ORG"]=>
          array(2) {
            ["@code"]=>
            string(5) "00200"
            ["$"]=>
            string(9) "総務省"
          }
          ["STATISTICS_NAME"]=>
          string(50) "家計調査 家計収支編 二人以上の世帯" ← 統計表名
          ["TITLE"]=>
          array(2) {
            ["@no"]=>
            string(3) "010"
            ["$"]=>
            string(69) "品目分類 品目分類(平成22年改定)(総数:金額)"
          }
          ["CYCLE"]=>
          string(6) "年次"    ← 集計期間
          ["SURVEY_DATE"]=>
          int(0)

統計表のメタ情報を取得

続いて、取得した統計表IDを元に、統計表のメタ情報を取得します。メタ情報には、分類コードや時間コードなど、統計データを取得する際に指定する、パラメータの値が含まれています。

先ほど取得した統計表IDを、パラメータ statsDataId に、指定します。API名は getMetaInfo です。

<?php
// パラメータ
$params = array(
    'appId'         => '<アプリケーションID>',
    'statsDataId'   => '0003021328',
);

// URLエンコード
$query = http_build_query($params, '', '&', PHP_QUERY_RFC3986);

// 統計表のメタ情報を取得(Json形式)
$url = 'http://api.e-stat.go.jp/rest/2.0/app/json/getMetaInfo?' . $query;
$json = file_get_contents($url);

// Json形式を配列に変換
$arr = json_decode($json, true);

// 取得したデータの表示
var_dump($arr);

かなり大量のメタ情報が表示されます(^^;) 分類が688種類もあるようです。探してみると「うなぎのかば焼き」は分類事項01(cat01) の、分類コード「010920010」と分かりました。

          [1]=>
          array(3) {
            ["@id"]=>
            string(5) "cat01"  ← 分類事項01を示す
            ["@name"]=>
            string(29) "品目分類(22年改定)"
            ["CLASS"]=>
            array(688) {
			(略)
              [210]=>
              array(5) {
                ["@code"]=>
                string(9) "010920010" ←分類コード
                ["@name"]=>
                string(24) "うなぎのかば焼き"
                ["@level"]=>
                string(1) "4"
                ["@unit"]=>
                string(3) "円"
                ["@parentCode"]=>
                string(9) "010920000"
              }

同様に、一番最近の時間軸コードも探します。2014年の時間軸コードは「2014000000」になります。

          array(3) {
            ["@id"]=>
            string(4) "time"
            ["@name"]=>
            string(21) "時間軸(年次)"
            ["CLASS"]=>
            array(30) {
              [0]=>
              array(3) {
                ["@code"]=>
                string(10) "2014000000" ←時間軸コード
                ["@name"]=>
                string(7) "2014年"
                ["@level"]=>
                string(1) "1"
              }

統計データの取得

いよいよ統計データの取得です。パラメータには統計表IDに加えて、先ほど調べた、分類コードをパラメータ cdCat01 に、時間軸コードを cdTime に指定します。API名は getStatsData です。

<?php
// パラメータ
$params = array(
    'appId'             => '<アプリケーションID>',
    'statsDataId'       => '0003021328',
    'cdCat01'           => '010920010',
    'cdTime'            => '2014000000',
);

// URLエンコード
$query = http_build_query($params, '', '&', PHP_QUERY_RFC3986);

// 統計データを取得
$url = 'http://api.e-stat.go.jp/rest/2.0/app/json/getStatsData?' . $query;
$json = file_get_contents($url);


/**
 * 統計データの取得は以上で完了です。以下は表示処理です。
 */
$arr = json_decode($json, true);
foreach ($arr['GET_STATS_DATA']['STATISTICAL_DATA']['CLASS_INF']['CLASS_OBJ'][3]['CLASS'] as $row) {
    $areas_list[$row['@code']] = $row['@name'];
}

$stat = $arr['GET_STATS_DATA']['STATISTICAL_DATA']['DATA_INF']['VALUE'];
foreach ($stat as $key => $row) {
    $yens[$key] = $row['$'];
}
array_multisort($yens, SORT_DESC, SORT_NUMERIC, $stat);

$year   = substr($arr['GET_STATS_DATA']['PARAMETER']['NARROWING_COND']['CODE_TIME_SELECT'], 0, 4);
$name   = $arr['GET_STATS_DATA']['STATISTICAL_DATA']['CLASS_INF']['CLASS_OBJ'][1]['CLASS']['@name'];
echo "{$year}年「{$name}」の地域別の年間支出金額\n\n";
foreach ($stat as $row) {
    if ($row['@cat02'] === '03') {
        echo $areas_list[$row['@area']] . "\t" . number_format($row['$']) . $row['@unit'] . "\n";
    }
}

取得した統計データには、コードと数値のみの統計データと、地域名などメタ情報が含まれています。上のプログラムは、それらを組み合わせて表示しています。配列の階層が深いのでちょっと大変ですね。

プログラムを実行してみます。やはり浜松市がダントツです(^^)

2014年「うなぎのかば焼き」の地域別の年間支出金額

22130 浜松市	6,209円
26100 京都市	3,831円
23100 名古屋市	3,135円
13100 東京都区部	3,130円
25201 大津市	3,123円
08201 水戸市	3,087円
17201 金沢市	3,071円
27100 大阪市	3,068円
27140 堺市	3,064円
22100 静岡市	2,910円
(略)

分類コード cdCat01 の値を変えれば、パーソナルコンピュータ「090100050」や、世帯主こづかい「100200010」などの地域別の年間支出金額を表示することができます。

終わりに

行政機関には、強い縦割り行政のイメージを持っていましたが、政府統計の総合窓口(e-Stat)は、各府省等の参画のもと、総務省統計局が中心となり開発を行ったそうです。縦割りをやめ、各府省が協力してくれると、私たちにはこのような形で恩恵が受けられます。統計分野以外でも、各府省の本当の協力が広がってほしいものです。

コメント

  1. fermata より:

    ありがとうございます!
    参考にさせていただきました。

タイトルとURLをコピーしました