2017-05-31

統計ダッシュボードAPIによるデータ取得

2017年5月12日、「統計ダッシュボード」(総務省統計局)の運用が始まりました。同サイトでは、ウェブブラウザ画面上で主要な統計データのグラフや表が閲覧できるほか、HTTP プロトコルによるリクエスト/レスポンスの方式によって XML, JSON, またはCSV形式のデータを取得するための API も提供されています。

FMEでは、HTTP プロトコルによる API が公開されているウェブサービスには、一般に HTTPCaller トランスフォーマーによって接続することができ、また、XML, JSON, CSV 形式のデータは自在に変換できます。

ここでは、統計ダッシュボードAPIによるデータ取得の実験として、[時間] 2010~2015年の年別・[地域] 都道府県別の [系列] 人口総数をXML形式で取得し、PostgreSQL データベース (次の2テーブル) に格納するワークスペース例を掲げます。

出力先データベーステーブル
テーブル名列名内容
population region_code 地域コード
year
population 人口総数
region code 地域コード
name 地域名称 (都道府県名)

統計ダッシュボードAPIの利用規約、技術的な仕様 (リクエストURL・パラメーター、レスポンスのスキーマ等) については、統計ダッシュボードサイトのAPI関連ページを参照してください。

FME 2017.0.1.1 build 17291

FMEワークスペース例
























HTTPCaller: Creator から出力されたフィーチャーを受け取ったタイミングで、次のパラメーター設定に基づいて2010~2015年の年別・都道府県別の人口総数データをXML形式で取得するためのHTTPリクエスト (GETメソッド) を発行し、レスポンスとして得られたXML文書を属性として持ったフィーチャーを出力します。

HTTPCaller の主要パラメーター
Request:
    Request URL: http://data.e-stat.go.jp/dashboard/api/1.0/Xml/getData
    HTTP Method: 
GET
    Query String Parameters:

Name Value 備考
Lang JP 取得するデータの言語 (JP:日本語)
MetaGetFlg Y メタ情報取得有無のフラグ (Y:取得する)
IndicatorCode 0201010000000010000 系列コード
RegionLevel 3 地域レベル (3:都道府県)
TimeFrom 2010CY00 時間軸 (開始)
TimeTo 2015CY00 時間軸 (終了)
これらの API パラメーターの全部または一部を、通常の REST API パラメーターの書式で Request URL 文字列に含めても構いません。

Response:
    Response Body Attribute: 
_response_body


XMLFragmenter: XML文書から全ての VALUE 要素をXML断片として抽出するともに、それらを平坦化して regionCode 属性の値 (地域コード)、time 属性の値 (時間軸コード)、および VALUE 要素の内容 (系列の値。この例では人口総数) を取得します。

VALUE 要素 (XML断片) の例
<VALUE indicator="0201010000000010000" unit="090" stat="20020101" regionCode="01000" time="2010CY00" cycle="3" regionRank="3" isSeasonal="1" isProvisional="0">5506419</VALUE>

XMLFragmenter の主要パラメーター
XML Source:
    XML Attribute: _response_body
Feature Paths Configuration:
   
 Elements to Match: VALUE
Customize Attributes:

    Flatten Options:
        Enable Flattening: <checked> 
Expose Attributes:
   
 Attributes to Expose:
        VALUE.regionCode (地域コード)
        VALUE.time (時間軸コード)
        VALUE (系列の値。この例では人口総数)


XMLXQueryExploder: 地域の識別子 (コードと名称) を記述している CLASS 要素をXML断片として抽出します。統計ダッシュボードから取得したXML文書に含まれる CLASS 要素は、いくつかの CLASS_OBJ 要素の子要素としてグループ化されており、何を記述している CLASS 要素であるかは、親の CLASS_OBJ 要素の id 属性によって識別する仕組みになっています。ここでは、地域コードと地域名称を記述している CLASS 要素 (親要素の id 属性値が regionCode であるもの) のみを抽出したいので、断片化の対象とするXML要素の条件を XQuery 式によって自由に指定できる XMLXQueryExploder を使いました。

CLASS_OBJ 要素 (地域) と CLASS 要素の一部
<CLASS_OBJ id="regionCode" name="地域">
    <CLASS code="01000" name="北海道"/>
    <CLASS code="02000" name="青森県"/>
    ....
</CLASS_OBJ>

XMLXQueryExploder の主要パラメーター
XQuery Type:
    XQuery Expression: //CLASS_OBJ[@id="regionCode"]/CLASS
XML Source:
    XML Attribute: 
_response_body
    Remove Source XML Attribute?: Yes
Results:
    Result Attribute: 
_result


XMLFlattener: XMLXQueryExploder によって抽出された各 CLASS 要素を平坦化して、code 属性の値 (地域コード) と name 属性の値 (地域名称。この例では都道府県名) を取得します。

XMLFlattener の主要パラメーター
XML Source:
    XML Attribute: _result
Flatten Paths:
    
Elements to Match: CLASS
Expose Attributes:
    
Attributes to Expose:
        CLASS.code (地域コード)
        CLASS.name (地域名称)


最後に PostgreSQL ライターをワークスペースに追加、2つのフィーチャータイプ (population, region) で出力先テーブルのスキーマを定義し、XMLFragmenter, XMLFlattener トランスフォーマーと接続しました。

VALUE 要素の time 属性の値 (時間軸) は、単位が暦年の場合、"<西暦年>CY00" という書式のコードで記述されています。そのため、"population" ライターフィーチャータイプの User Attributes タブで、時間軸コードの先頭から4文字 (西暦年の部分) のみを year 列に書き込むように設定しました。

PostgreSQL ライター | population フィーチャータイプ (テーブル) の属性 (列) 定義













注: FME  2017.0 では、上の図のように、ライターフィーチャータイプ User Attributes タブ (Value 列) でも属性値を調製できるようになりました。


PostgreSQL データベースに対する SQL クエリ (問い合わせ) と結果テーブルの例:
2015年の都道府県別人口総数 (pgAdmin III クエリーツール)





























0 件のコメント:

コメントを投稿