適材適所

パソコンができることはパソコンに。

PowerShellで政府統計を見てみよう

PowerShellでAPIを使うシリーズ

PowerShellを使って、ネット上の面白いAPIを使ってみる、このシリーズ。

今回は、日本政府の統計データを見てみようと思います。

政府統計の総合窓口

政府統計の総合窓口

このサイトでは、政府が発表している統計をブラウザ上で簡単に見ることができます。

政府の統計データに家にいながらアクセスできる時代が来ようとは・・・。

便利な世の中になったものです。

このサイトでは、統計データを色々な検索条件で絞ったり、グラフ化してみたり、地図上に表示したり・・・。

ただ、自在に使いこなすには、ちょっと学習が必要そうですが・・・。

このサイトでは、統計データをAPIで提供しています。

今回はそのAPIをPowerShellで操作する方法を紹介したいと思います。

APIの例

このページに、PHPとJavaScriptの使用例が書いてあるので、これを参考にPowerShellで操作してみたいと思います。
APIの使い方 | 政府統計の総合窓口(e-Stat)−API機能

アプリケーションIDを作成する

先ほどのページを読むと、APIを利用するためには、アカウントを登録する必要があるとのこと。

トップページの右上の新規登録ぺージから登録することができます。 f:id:shinmai_papa:20191204125849p:plain

アカウントを登録した後は、アプリケーションIDを発行してもらいます。

アプリケーションIDの発行はマイページから行うことができます。

f:id:shinmai_papa:20191204100010p:plain

これで準備ができました。

実際にAPIを使ってみよう

先ほどのページを見てみると、使い方の例が書いてあります。

以下のリクエストを実行することにより、東京の老年人口割合[65歳以上人口]を取得することが可能です。

http://api.e-stat.go.jp/rest/2.0/app/getStatsData?appId=<取得したアプリケーションID>&statsDataId=C0020050213000&cdCat01=%23A03503

統計データ取得APIの場合は、次のリクエストURLとなります。

// XMLの場合
http://api.e-stat.go.jp/rest/<バージョン>/app/getStatsData?<パラメータ群>

// JSONの場合
http://api.e-stat.go.jp/rest/<バージョン>/app/json/getStatsData?<パラメータ群>

このとおりリクエストを送れば、統計情報を取得することができるようです。

習うより慣れろ、実際にやってみることにしましょう。

xml、json、csvとデータ形式を選ぶことができますが、今回は扱いが楽なjson形式を使ってみようと思います。

PS C:\> $json=Invoke-RestMethod -Method "GET" -Uri "http://api.e-stat.go.jp/rest/2.0/app/json/getStatsData?appId=<取得したアプリケーションID>&statsDataId=C0020050213000&cdCat01=%23A03503"

こうすると、APIで取得した結果が$json変数にjson形式で格納されているはずです。

確認してみましょう。

PS C:\> $json.GET_STATS_DATA.RESULT

STATUS ERROR_MSG            DATE
------ ---------            ----
     0 正常に終了しました。 2019-11-20T16:36:03.242+09:00

正常に終了したことが確認できるかと思います。

ちなみに、jsonのルートタグは<GET_STATS_DATA>だそうです。

<GET_STATS_DATA>の下にあるタグを確認すると正常終了が確認できます。

データの中身はどこに格納されるのかというと、<GET_STATS_DATA>タグの下、<STATISTICAL_DATA>のさらに下、<DATA_INF>のVALUEにいます。

深い!!

では、確認してみましょう(VALUEは配列なので、添え字を指定しています)。

PS C:\> $json.GET_STATS_DATA.STATISTICAL_DATA.DATA_INF.VALUE[0]


@tab   : 002
@cat01 : #A03503
@area  : 13000
@time  : 2005
@unit  : %
$      : 18.3

何やらそれらしいデータが返ってきているようですね。

しかし、それぞれの項目名が、よくわからない形式で返ってきます。

ここで仕様を確認してみます。

それによると、STATISTICAL_DATAタグ→CLASS_INFタグ→ CLASS_OBJタグと辿ると、データのメタ情報が格納されている、とのこと。

確認してみましょう。

PS C:\> $json.GET_STATS_DATA.STATISTICAL_DATA.CLASS_INF.CLASS_OBJ|Format-list


@id   : tab
@name : データ種別
CLASS : {@{@code=001; @name=基礎データ; @level=1}, @{@code=002; @name=指標データ; @level=1}}

@id   : cat01
@name : 項目
CLASS : @{@code=#A03503; @name=老年人口割合[65歳以上人口]; @level=1; @unit=%}

@id   : area
@name : 都道府県・市区町村名
CLASS : @{@code=13000; @name=東京都; @level=1}

@id   : time
@name : 調査年度
CLASS : {@{@code=1975; @name=1975; @level=1}, @{@code=1976; @name=1976; @level=1}, @{@code=1977; @name=1977; @level=1},
         @{@code=1978; @name=1978; @level=1}...}

これを踏まえた上で、改めて先ほどのデータを見てみます。

@tab   : 002(指標データ)
@cat01 : #A03503(老年人口割合[65歳以上人口])
@area  : 13000(東京都)
@time  : 2005(2005年)
@unit  : %
$      : 18.3(値)

併せて考えると、「2005年の東京都では、65歳以上人口が18.3%だった」ということを表しているデータということがわかるかと思います。

最後に

結構、簡単にデータを取得することができたと思いませんか?

でもこれだけでは、データの羅列になってしまい、データを使っている感があまりありませんね。

次回は取得したデータをExcelを使ってグラフ化して、少しでもデータを活用している感を出したいと思います。

ここまでお読みいただき、ありがとうございました。