e-StatのAPI機能を利用して、2015年の国勢調査結果から年齢別の人口を探索する

2020.03.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

データアナリティクス事業本部プロダクト営業部プリセールススペシャリストの兼本です。

皆さんはe-Statをご存じですか?
e-Statは、日本の統計が閲覧できる政府統計ポータルサイトで、さまざまなデータが公開されています。

ただ、公開されているデータは目で見てわかりやすいクロスタブ形式になっているものが多く、データ分析に使うにはひと手間掛けないといけないところが惜しいんですよね。

そんなe-StatにAPI機能がありましたので、AlteryxからAPIを実行してデータ加工をしてみました。

e-Stat API機能のユーザ登録

API機能は無料でどなたでも利用できますが、事前にユーザ登録をしてアプリケーションIDを取得する必要があります。
まずはじめに利用ガイドに従ってアプリケーションIDを取得してください。
利用ガイドにはAPI仕様も記載されていますので、こちらもよく読んでおきましょう。

APIを実行してデータを取得する

どのようなデータがAPIで取得できるのかは、e-Statのサイトで確認できます。提供データの検索ページで国勢調査について検索すると、以下のような結果が表示されます。

ここで「データベース」のリンクを選択するとAPIで提供されているデータの一覧を辿ることができます。

APIのリンクをクリックすると、APIをコールすために必要なURLのサンプルを表示してくれますので、事前に取得済みのアプリケーションIDをセットしてAPIを実行することで、データを取り出すことができます。

APIを実行してみる

統計表の中から、「出生の月(4区分),年齢(各歳),男女別人口(総数及び日本人)>全国(市部・郡部),人口集中地区」を取得するAPIを実行してみます。
なお、本APIは統計データをXML、JSON、CSVで返してくれますので、今回は結果をJSONで受け取るために以下のURLを実行しています。

http://api.e-stat.go.jp/rest/2.1/app/json/getStatsData?appId=<your applicationID>&lang=J&statsDataId=0003149860&metaGetFlg=Y&cntGetFlg=N&sectionHeaderFlg=1

まずはPostmanを使用して、データを確認します。

PostmanはREST APIを実行するときにすごく便利なツールで私のお気に入りのひとつです。
基本的な使い方についてはこちらのエントリをご確認ください。

データ量が多いので抜粋しますが、返されたデータを見ると、"CLASS_INF"というキーにデータのカテゴリデータが、"DATA_INF"というキーに実際のデータがそれぞれ格納されているようです。

                    :
                    :
                    :
            "CLASS_INF": {
                "CLASS_OBJ": [
                    {
                        "@id": "tab",
                        "@name": "表章項目",
                        "CLASS": {
                            "@code": "020",
                            "@name": "人口",
                            "@level": "",
                            "@unit": "人"
                        }
                    },
                    {
                        "@id": "cat01",
                        "@name": "全域・人口集中地区(2015)",
                        "CLASS": [
                            {
                                "@code": "00710",
                                "@name": "全域",
                                "@level": "1"
                            },
                            {
                                "@code": "00711",
                                "@name": "人口集中地区",
                                "@level": "1"
                            }
                        ]
                    },
                    :
                    :
                    :
                    :
                    :
                    :
            "DATA_INF": {
                "NOTE": [
                    {
                        "@char": "***",
                        "$": "当該数値がないもの"
                    },
                    {
                        "@char": "-",
                        "$": "当該数値がないもの"
                    }
                ],
                "VALUE": [
                    {
                        "@tab": "020",
                        "@cat01": "00710",
                        "@cat02": "0000",
                        "@cat03": "0000",
                        "@cat04": "0000",
                        "@cat05": "0000",
                        "@area": "00000",
                        "@time": "2015000000",
                        "@unit": "人",
                        "$": "127094745"
                    },
                    {
                        "@tab": "020",
                        "@cat01": "00710",
                        "@cat02": "0000",
                        "@cat03": "0000",
                        "@cat04": "0000",
                        "@cat05": "0000",
                        "@area": "00001",
                        "@time": "2015000000",
                        "@unit": "人",
                        "$": "116137232"
                    },
                    :
                    :
                    :

今回は、このJSONデータを以下のようなワークフローを使って処理しています。

結構ボリュームがあるのですが、順を追って解説します。

Alteryx からAPIを実行する

最初のプロセスではダウンロードツールを使用してAPIを実行しています。

最初のデータ入力ツールでREST APIのURLを保存します。

ダウンロードツールでURLを実行して結果を取得します。

最後に実行結果をJSONパースツールで解析します。

ここまでのステップで以下のようなデータを取得できます。

取り出したJSONデータを解析する

せっかく取り出したJSONデータではありますが、構造が複雑なのでこのままでは使えないですね。
次のプロセスではデータ構造を解析してテーブルデータに加工します。

ここまでの手順で取り出したJSONデータのキー名は

GET_STATS_DATA.STATISTICAL_DATA.CLASS_INF.CLASS_OBJ.2.CLASS.2.@code

のように複数のキーが接続された状態ですので、まずは列分割ツールを使用してキー名を分解します。

列分割ツールのプロパティは以下の通りです。

分解するとデータは以下のようになります。

最初にPostmanでデータ構造を確認した通り、今回のデータは"CLASS_INF"というキーにデータのカテゴリデータが、"DATA_INF"というキーに実際のデータがそれぞれ格納されています。 このような場合は、カテゴリと実データに分けてデータを処理したほうが楽ちんです。

プロセス上部のフローでは実データのみを処理するためにフィルタツールを配置して分割した「JSON_Name3」フィールドの値がDATA_INFとなるデータのみを取り出しています。ただし「JSON_Name4」の値がNOTEであるデータは不要なので除外しています。

次のフォーミュラツールでは後で使用するためにJSON_ValueStringフィールドの値を少し加工しています。

続いて、クロスタブツールを使用してデータをピボットします。

最後にセレクトツールを使用して不要なデータの削除とフィールド名称の変更を行うことで、以下のようなデータを作成することができます。

勘のいい方はお気づきかもしれないのですが、ここで作成したデータの「area」および「cat01-05」のデータには、各レコードの年齢や性別などのカテゴリが格納されています。
が、なぜかすべてカテゴリデータに対応するキーだけが格納されている状態ですので、フロー下段では各キーに対応するカテゴリデータを作成しています。

解析したデータを加工して使いやすいデータにする

次のステップではここまでに作成したデータを組み合わせて、データを使いやすい形にします。

まずはカテゴリデータに対してフォーミュラツールを配置し、「Key」フィールドを作成します。

次に、最初に作成した実データに検索置き換えツールを配置して、R入力に作成したデータを接続して、以下のような検索置き換えを実行します。

すると、こんな感じでareaのデータを加工できます。

cat01からcat05までに対しても同様の処理をするとわかりやすいデータになりますね。

最後に、動的リネームツールを使用して、フィールド名もわかりやすい名前に変更しておきます。

動的リネームツールの右入力には、カテゴリデータをもとに作成したユニークなカテゴリのidとnameを入力しています。

ここまでの手順で以下のようなデータを作成できました。ここまでくればデータの加工は簡単ですね。

不要なデータの削除と計算

ところで、このデータをよく見てみると、年齢や男女別データが個別のデータと総数が混ざった状態になっていたり、全国と市部、郡部のデータが格納されていたりしています。
可視化をするうえでは重複データは排除したいので、いくつかのデータをフィルタしたり、再計算をします。

フローはこんな感じです。

最初に不要なデータを除外しますが、これはフィルタツールで対応します。フィルタツールではANDやORを使った複雑な条件式を書くこともできます。

次に日本人と外国籍の方の人口について着目すると、なぜかこのデータは日本人と外国籍の方を含む総数に分類されているようです。このままだと外国籍の方だけの人口がわからないので、外国籍の方だけの人口を計算する処理を追加します。
この処理は異なるレコードに対して計算処理を行う必要がありますので、通常のフォーミュラツールではなく、複数行フォーミュラツールを使います。
最初にソートツールを使用してデータを年齢>男女別>国籍の順に並べ替えます。

並べ替えたデータに対して複数行フォーミュラツールを接続して、「総数(国籍)-日本人」という計算式を作成します。

すると、以下のように日本人と外国籍の方の人口を作成することができます。

作成したデータの可視化

ここまでできればあとはBIツールなどで可視化するだけですが、Alteryxにもグラフツールやインサイトツールといった可視化を行うためのツールが用意されています。

以下はインサイトツールを使用した可視化の例です。

おわりに

いかがでしたか。今回はAlteryxを使用して、e-StatのAPI機能を実行し、取得したデータを可視化しやすい形に加工する方法についてご紹介しました。
APIを利用するとファイルダウンロードすることなく、最新のデータを取得できるので自動化の流れを作りやすいですね。
またAlteryxを使えば、複雑なJSONファイルの加工をプログラムなしに行えるため、データ分析を簡単に効率よく行うことが可能です。

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

Alteryxの導入なら、クラスメソッドにおまかせください

日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。

alteryx_960x400