初心者向け〜e-Stat-APIを使い国勢調査をxml形式でダウンロードする〜


[e-Stat：政府統計の総合窓口](http://www.e-stat.go.jp/SG1/estat/eStatTopPortal.do)から[国勢調査](http://www.stat.go.jp/data/kokusei/2010/index.htm)をはじめとする様々な官庁統計がダウンロードできます。API機能を使って一気にデータを取得する初心者向けの方法を紹介します。

##API機能の利点

- API機能を使った国勢調査のダウンロード：API機能を使わない場合にある集計表を取得するのに47都道府県分ダウンロードが必要ですが、１回のコマンドでOK。何らかの言語でxml(またはJSON)形式のデータの抽出が必要となります。


- API機能を使わない場合の国勢調査のダウンロード：全国の全市区町村のデータを取得するには都道府県分手動でダウンロードが必要。また１つの都道府県の町丁目別集計を取得するにも、1回で全ての町丁目をダウンロードできないので複数回に分けてダウンロードしなければならない。


##準備
事前に[利用登録](https://www.e-stat.go.jp/api/apiuser/provisional/)を行ってアプリケーションIDを取得しておきます。


##Step.1 取得したい統計表とその統計表コードを探します。
[e-StatのAPI機能トップページ](http://www.e-stat.go.jp/api/)から「開発者支援情報」→「API機能テストフォーム」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/114127/9e238b4e-1f42-08fa-f8dc-138425c01ce9.png)

バージョン1.0とバージョン2.0がありますが、バージョン2.0の方をクリックしました。
![image](https://qiita-image-store.s3.amazonaws.com/0/114127/e537db23-85f9-dfe7-c6ee-5f634db5e92a.png)

１)ＡＰＩ機能テストフォームの「統計表情報取得」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/114127/86b079c2-17e9-bd03-e2c0-05b77dcdf8c9.png)

２)アプリケーションIDを入力し、とりあえず2010年の国勢調査（人口統計）の表の種類のリストを取得します。「統計分野」と「政府統計コード」は、とりあえず例にある通り、統計分野0201（人口統計）、「政府統計コード」00200521と入力します。キーワードは入力せずに、xml形式で表示ボタンをクリックします。

![image](https://qiita-image-store.s3.amazonaws.com/0/114127/55d42df4-63a0-f259-58a7-d1635dcacda6.png)

３）xmlの結果が表示されました。この中から任意の集計表を選びます。\<TABLE_INF\>が統計表コードに該当します。
「妻の年齢、子供の有無別、夫婦の就業・非就業別夫婦のいる世帯数・世帯人員」を試しに取得してみます。ただし、人口50万以上の市区のみです（人口50万人以下の市町村は別表で取得できるはずです）

![image](https://qiita-image-store.s3.amazonaws.com/0/114127/27813a19-330c-6f9c-5187-b78d572023ad.png)

タグ\<TABLE_INF\>の部分が、「国勢調査産業等基本集計（労働力状態、就業者の産業など）」の巻の集計表「妻の年齢（５歳階級）、子供の有無・数・年齢（121区分）、夫婦の就業・非就業(４区分)(雇用者－特掲)別夫婦のいる一般世帯数及び一般世帯人員」のコード番号です。

```xml:sample.xml
<TABLE_INF id="0003052148">
<STAT_NAME code="00200521">国勢調査</STAT_NAME>
<GOV_ORG code="00200">総務省</GOV_ORG>
<STATISTICS_NAME>平成22年国勢調査 産業等基本集計（労働力状態，就業者の産業など）</STATISTICS_NAME>
<TITLE no = "02100">
 妻の年齢(５歳階級)，子供の有無・数・年齢(121区分)，夫婦の就業・非就業(４区分)(雇用者－特掲)別夫婦のいる一般世帯数及び一般世帯人員 全国，都道府県，人口50万以上の市区
</TITLE>
```


##Step.2 統計データをダウンロードします。
１）別ウィンドウで、政府統計の総合窓口(e-Stat)-API機能テストフォームのメニューウィンドウを開き、3つめの統計データ取得を選択します。

![image](https://qiita-image-store.s3.amazonaws.com/0/114127/b3737df1-11fe-783a-fbb0-e17ba17acce6.png)


２）統計表IDの欄に、\<TABLE_INF id="0003052148"\>のコードを入力し、その他は何も入力せずに、データ形式をXML形式にして、ダウンロードをクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/114127/24d3bd2a-e4e7-9b36-ef77-fb5a84f1b859.png)


３）ダウンロードしたデータを確認します。
このままでは使えないので、xmlをパースして必要な項目を抽出することになります。

（以下は一部でカットしています）

```xml:getdata.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<GET_STATS_DATA xsi:noNamespaceSchemaLocation="http://api.e-stat.go.jp/rest/2.0/schema/GetStatsData.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <RESULT>
        <STATUS>0</STATUS>
        <ERROR_MSG>正常に終了しました。</ERROR_MSG>
        <DATE>2016-03-19T14:58:01.729+09:00</DATE>
    </RESULT>
    <PARAMETER>
        <LANG>J</LANG>
        <STATS_DATA_ID>0003052148</STATS_DATA_ID>
        <DATA_FORMAT>X</DATA_FORMAT>
        <START_POSITION>1</START_POSITION>
        <METAGET_FLG>Y</METAGET_FLG>
        <CNT_GET_FLG>N</CNT_GET_FLG>
    </PARAMETER>
    <STATISTICAL_DATA>
        <RESULT_INF>
            <TOTAL_NUMBER>4773888</TOTAL_NUMBER>
            <FROM_NUMBER>1</FROM_NUMBER>
            <TO_NUMBER>100000</TO_NUMBER>
            <NEXT_KEY>100001</NEXT_KEY>
        </RESULT_INF>
        <TABLE_INF id="0003052148">
            <STAT_NAME code="00200521">国勢調査</STAT_NAME>
            <GOV_ORG code="00200">総務省</GOV_ORG>
            <STATISTICS_NAME>平成22年国勢調査 産業等基本集計（労働力状態，就業者の産業など）</STATISTICS_NAME>
            <TITLE no="02100">妻の年齢(５歳階級)，子供の有無・数・年齢(121区分)，夫婦の就業・非就業(４区分)(雇用者－特掲)別夫婦のいる一般世帯数及び一般世帯人員 全国，都道府県，人口50万以上の市区</TITLE>
            <CYCLE>-</CYCLE>
            <SURVEY_DATE>201010</SURVEY_DATE>
            <OPEN_DATE>2012-04-24</OPEN_DATE>
            <SMALL_AREA>0</SMALL_AREA>
            <MAIN_CATEGORY code="02">人口・世帯</MAIN_CATEGORY>
            <SUB_CATEGORY code="01">人口</SUB_CATEGORY>
            <OVERALL_TOTAL_NUMBER>4773888</OVERALL_TOTAL_NUMBER>
            <UPDATED_DATE>2012-04-20</UPDATED_DATE>
        </TABLE_INF>
        <CLASS_INF>
            <CLASS_OBJ id="tab" name="表章項目">
                <CLASS code="630" name="夫婦のいる一般世帯数" level="" unit="世帯"/>
                <CLASS code="631" name="夫婦のいる一般世帯人員" level="" unit="人"/>
            </CLASS_OBJ>
            <CLASS_OBJ id="cat01" name="子供の年齢等2010">
                <CLASS code="000" name="総数（子供の年齢等）" level="1"/>
                <CLASS code="001" name="子供なし" level="1"/>
                <CLASS code="002" name="子供あり" level="1"/>
                <CLASS code="003" name="最年少の子供　0歳" level="1"/>
                <CLASS code="004" name="最年少の子供　1歳" level="1"/>
                <CLASS code="005" name="最年少の子供　2歳" level="1"/>
                <CLASS code="006" name="最年少の子供　3歳" level="1"/>
                <CLASS code="007" name="最年少の子供　4歳" level="1"/>
                <CLASS code="008" name="最年少の子供　5歳" level="1"/>
                <CLASS code="009" name="最年少の子供　6歳" level="1"/>
                <CLASS code="010" name="最年少の子供　7歳" level="1"/>
                <CLASS code="011" name="最年少の子供　8歳" level="1"/>
                <CLASS code="012" name="最年少の子供　9歳" level="1"/>
                <CLASS code="013" name="最年少の子供　10歳" level="1"/>
                <CLASS code="014" name="最年少の子供　11歳" level="1"/>
                <CLASS code="015" name="最年少の子供　12歳" level="1"/>
                <CLASS code="016" name="最年少の子供　13歳" level="1"/>
                <CLASS code="017" name="最年少の子供　14歳" level="1"/>
                <CLASS code="018" name="最年少の子供　15歳" level="1"/>
                <CLASS code="019" name="最年少の子供　16歳" level="1"/>
                <CLASS code="020" name="最年少の子供　17歳" level="1"/>
                <CLASS code="022" name="最年少の子供　18歳以上" level="1"/>
                <CLASS code="032" name="子供１人" level="1"/>
                <CLASS code="033" name="子供１人　0歳" level="2"/>
                <CLASS code="034" name="子供１人　1～2歳" level="2"/>
                <CLASS code="035" name="子供１人　3～5歳" level="2"/>
                <CLASS code="036" name="子供１人　6～8歳" level="2"/>
                <CLASS code="037" name="子供１人　9～11歳" level="2"/>
                <CLASS code="038" name="子供１人　12～14歳" level="2"/>
                <CLASS code="039" name="子供１人　15～17歳" level="2"/>
                <CLASS code="040" name="子供１人　18歳以上" level="2"/>
                <CLASS code="043" name="子供２人" level="1"/>
                <CLASS code="044" name="子供２人　最年少0歳" level="2"/>
                <CLASS code="045" name="子供２人　最年少0歳　最年長0歳" level="3"/>
                <CLASS code="046" name="子供２人　最年少0歳　最年長1～2歳" level="3"/>
                <CLASS code="047" name="子供２人　最年少0歳　最年長3～5歳" level="3"/>
                <CLASS code="048" name="子供２人　最年少0歳　最年長6～8歳" level="3"/>
                <CLASS code="049" name="子供２人　最年少0歳　最年長9～11歳" level="3"/>
                <CLASS code="050" name="子供２人　最年少0歳　最年長12歳以上" level="3"/>
                <CLASS code="051" name="子供２人　最年少1～2歳" level="2"/>
                <CLASS code="052" name="子供２人　最年少1～2歳　最年長1～2歳" level="3"/>
                <CLASS code="053" name="子供２人　最年少1～2歳　最年長3～5歳" level="3"/>
                <CLASS code="054" name="子供２人　最年少1～2歳　最年長6～8歳" level="3"/>
                <CLASS code="055" name="子供２人　最年少1～2歳　最年長9～11歳" level="3"/>
                <CLASS code="056" name="子供２人　最年少1～2歳　最年長12歳以上" level="3"/>
                <CLASS code="057" name="子供２人　最年少3～5歳" level="2"/>
                <CLASS code="058" name="子供２人　最年少3～5歳　最年長3～5歳" level="3"/>
                <CLASS code="059" name="子供２人　最年少3～5歳　最年長6～8歳" level="3"/>
                <CLASS code="060" name="子供２人　最年少3～5歳　最年長9～11歳" level="3"/>
                <CLASS code="061" name="子供２人　最年少3～5歳　最年長12～14歳" level="3"/>
                <CLASS code="062" name="子供２人　最年少3～5歳　最年長15歳以上" level="3"/>
                <CLASS code="063" name="子供２人　最年少6～8歳" level="2"/>
                <CLASS code="064" name="子供２人　最年少6～8歳　最年長6～8歳" level="3"/>
                <CLASS code="065" name="子供２人　最年少6～8歳　最年長9～11歳" level="3"/>
                <CLASS code="066" name="子供２人　最年少6～8歳　最年長12～14歳" level="3"/>
                <CLASS code="067" name="子供２人　最年少6～8歳　最年長15～17歳" level="3"/>
                <CLASS code="068" name="子供２人　最年少6～8歳　最年長18歳以上" level="3"/>
                <CLASS code="069" name="子供２人　最年少9～11歳" level="2"/>
                <CLASS code="070" name="子供２人　最年少9～11歳　最年長9～11歳" level="3"/>
                <CLASS code="071" name="子供２人　最年少9～11歳　最年長12～14歳" level="3"/>
                <CLASS code="072" name="子供２人　最年少9～11歳　最年長15～17歳" level="3"/>
                <CLASS code="073" name="子供２人　最年少9～11歳　最年長18歳以上" level="3"/>
                <CLASS code="074" name="子供２人　最年少12～14歳" level="2"/>
                <CLASS code="075" name="子供２人　最年少12～14歳　最年長12～14歳" level="3"/>
                <CLASS code="076" name="子供２人　最年少12～14歳　最年長15～17歳" level="3"/>
                <CLASS code="077" name="子供２人　最年少12～14歳　最年長18歳以上" level="3"/>
                <CLASS code="078" name="子供２人　最年少15～17歳" level="2"/>
                <CLASS code="079" name="子供２人　最年少15～17歳　最年長15～17歳" level="3"/>
                <CLASS code="080" name="子供２人　最年少15～17歳　最年長18歳以上" level="3"/>
                <CLASS code="081" name="子供２人　最年少18歳以上" level="2"/>
                <CLASS code="123" name="子供３人" level="1"/>
                <CLASS code="124" name="子供３人　最年少0歳" level="2"/>
                <CLASS code="125" name="子供３人　最年少0歳　最年長0歳" level="3"/>
                <CLASS code="126" name="子供３人　最年少0歳　最年長1～2歳" level="3"/>
                <CLASS code="127" name="子供３人　最年少0歳　最年長3～5歳" level="3"/>
                <CLASS code="128" name="子供３人　最年少0歳　最年長6～8歳" level="3"/>
                <CLASS code="129" name="子供３人　最年少0歳　最年長9～11歳" level="3"/>
                <CLASS code="130" name="子供３人　最年少0歳　最年長12歳以上" level="3"/>
                <CLASS code="131" name="子供３人　最年少1～2歳" level="2"/>
                <CLASS code="132" name="子供３人　最年少1～2歳　最年長1～2歳" level="3"/>
                <CLASS code="133" name="子供３人　最年少1～2歳　最年長3～5歳" level="3"/>
                <CLASS code="134" name="子供３人　最年少1～2歳　最年長6～8歳" level="3"/>
                <CLASS code="135" name="子供３人　最年少1～2歳　最年長9～11歳" level="3"/>
                <CLASS code="136" name="子供３人　最年少1～2歳　最年長12歳以上" level="3"/>
                <CLASS code="137" name="子供３人　最年少3～5歳" level="2"/>
                <CLASS code="138" name="子供３人　最年少3～5歳　最年長3～5歳" level="3"/>
                <CLASS code="139" name="子供３人　最年少3～5歳　最年長6～8歳" level="3"/>
                <CLASS code="140" name="子供３人　最年少3～5歳　最年長9～11歳" level="3"/>
                <CLASS code="141" name="子供３人　最年少3～5歳　最年長12～14歳" level="3"/>
                <CLASS code="142" name="子供３人　最年少3～5歳　最年長15歳以上" level="3"/>
                <CLASS code="143" name="子供３人　最年少6～8歳" level="2"/>
                <CLASS code="144" name="子供３人　最年少6～8歳　最年長6～8歳" level="3"/>
                <CLASS code="145" name="子供３人　最年少6～8歳　最年長9～11歳" level="3"/>
                <CLASS code="146" name="子供３人　最年少6～8歳　最年長12～14歳" level="3"/>
                <CLASS code="147" name="子供３人　最年少6～8歳　最年長15～17歳" level="3"/>
                <CLASS code="148" name="子供３人　最年少6～8歳　最年長18歳以上" level="3"/>
                <CLASS code="149" name="子供３人　最年少9～11歳" level="2"/>
                <CLASS code="150" name="子供３人　最年少9～11歳　最年長9～11歳" level="3"/>
                <CLASS code="151" name="子供３人　最年少9～11歳　最年長12～14歳" level="3"/>
                <CLASS code="152" name="子供３人　最年少9～11歳　最年長15～17歳" level="3"/>
                <CLASS code="153" name="子供３人　最年少9～11歳　最年長18歳以上" level="3"/>
                <CLASS code="154" name="子供３人　最年少12～14歳" level="2"/>
                <CLASS code="155" name="子供３人　最年少12～14歳　最年長12～14歳" level="3"/>
                <CLASS code="156" name="子供３人　最年少12～14歳　最年長15～17歳" level="3"/>
                <CLASS code="157" name="子供３人　最年少12～14歳　最年長18歳以上" level="3"/>
                <CLASS code="158" name="子供３人　最年少15～17歳" level="2"/>
                <CLASS code="159" name="子供３人　最年少15～17歳　最年長15～17歳" level="3"/>
                <CLASS code="160" name="子供３人　最年少15～17歳　最年長18歳以上" level="3"/>
                <CLASS code="161" name="子供３人　最年少18歳以上" level="2"/>
                <CLASS code="172" name="子供４人以上" level="1"/>
                <CLASS code="173" name="子供４人以上　最年少0歳" level="2"/>
                <CLASS code="174" name="子供４人以上　最年少0歳　最年長0歳" level="3"/>
                <CLASS code="175" name="子供４人以上　最年少0歳　最年長1～2歳" level="3"/>
                <CLASS code="176" name="子供４人以上　最年少0歳　最年長3～5歳" level="3"/>
                <CLASS code="177" name="子供４人以上　最年少0歳　最年長6～8歳" level="3"/>
                <CLASS code="178" name="子供４人以上　最年少0歳　最年長9～11歳" level="3"/>
                <CLASS code="179" name="子供４人以上　最年少0歳　最年長12歳以上" level="3"/>
                <CLASS code="180" name="子供４人以上　最年少1～2歳" level="2"/>
                <CLASS code="181" name="子供４人以上　最年少1～2歳　最年長1～2歳" level="3"/>
                <CLASS code="182" name="子供４人以上　最年少1～2歳　最年長3～5歳" level="3"/>
                <CLASS code="183" name="子供４人以上　最年少1～2歳　最年長6～8歳" level="3"/>
                <CLASS code="184" name="子供４人以上　最年少1～2歳　最年長9～11歳" level="3"/>
                <CLASS code="185" name="子供４人以上　最年少1～2歳　最年長12歳以上" level="3"/>
                <CLASS code="186" name="子供４人以上　最年少3～5歳" level="2"/>
                <CLASS code="187" name="子供４人以上　最年少3～5歳　最年長3～5歳" level="3"/>
                <CLASS code="188" name="子供４人以上　最年少3～5歳　最年長6～8歳" level="3"/>
                <CLASS code="189" name="子供４人以上　最年少3～5歳　最年長9～11歳" level="3"/>
                <CLASS code="190" name="子供４人以上　最年少3～5歳　最年長12～14歳" level="3"/>
                <CLASS code="191" name="子供４人以上　最年少3～5歳　最年長15歳以上" level="3"/>
                <CLASS code="192" name="子供４人以上　最年少6～8歳" level="2"/>
                <CLASS code="193" name="子供４人以上　最年少6～8歳　最年長6～8歳" level="3"/>
                <CLASS code="194" name="子供４人以上　最年少6～8歳　最年長9～11歳" level="3"/>
                <CLASS code="195" name="子供４人以上　最年少6～8歳　最年長12～14歳" level="3"/>
                <CLASS code="196" name="子供４人以上　最年少6～8歳　最年長15～17歳" level="3"/>
                <CLASS code="197" name="子供４人以上　最年少6～8歳　最年長18歳以上" level="3"/>
                <CLASS code="198" name="子供４人以上　最年少9～11歳" level="2"/>
                <CLASS code="199" name="子供４人以上　最年少9～11歳　最年長9～11歳" level="3"/>
                <CLASS code="200" name="子供４人以上　最年少9～11歳　最年長12～14歳" level="3"/>
                <CLASS code="201" name="子供４人以上　最年少9～11歳　最年長15～17歳" level="3"/>
                <CLASS code="202" name="子供４人以上　最年少9～11歳　最年長18歳以上" level="3"/>
                <CLASS code="203" name="子供４人以上　最年少12～14歳" level="2"/>
                <CLASS code="204" name="子供４人以上　最年少12～14歳　最年長12～14歳" level="3"/>
                <CLASS code="205" name="子供４人以上　最年少12～14歳　最年長15～17歳" level="3"/>
                <CLASS code="206" name="子供４人以上　最年少12～14歳　最年長18歳以上" level="3"/>
                <CLASS code="207" name="子供４人以上　最年少15～17歳" level="2"/>
                <CLASS code="208" name="子供４人以上　最年少15～17歳　最年長15～17歳" level="3"/>
                <CLASS code="209" name="子供４人以上　最年少15～17歳　最年長18歳以上" level="3"/>
                <CLASS code="210" name="子供４人以上　最年少18歳以上" level="2"/>
            </CLASS_OBJ>
```

##Step2の別解：ターミナルからcurlコマンドを使ってe-Statのデータを取得する
１）先ほどの統計データ取得画面で、ダウンロードの代わりにパラメータ表示をクリックします。

![image](https://qiita-image-store.s3.amazonaws.com/0/114127/465c895e-b328-9c30-ac94-9aa2d2b04481.png)


２）表示されたURLをコピーする。

![fig2.png](https://qiita-image-store.s3.amazonaws.com/0/114127/88d549d1-549a-7856-66b4-e407f485c3b7.png)


３）ターミナルを開き、シェルから以下を入力する。

```
 >curl "http://（コピーした内容）" >output.xml
```

##備考
- 国勢調査からどのような統計が取得できるのか、キーワード検索以外に[統計データを探す](http://www.e-stat.go.jp/SG1/estat/GL08020103.do?_toGL08020103_&tclassID=000001034992&cycleCode=0&requestSender=search)からたどっていく方法もあります。xmlより分かりやすいです。
- 国勢調査には10年に一度の詳細版と５年に一度の簡易版があり、基本的な集計項目（年齢別人口など）は簡易版でも掲載されますが、詳細版でないと存在しない項目（例えば、市区町村別男女別学歴別人口など）があります。年次の比較をしたい場合はその点注意が必要です。
- 統計表の表名リストまでのたどり着き方：[ここ](http://www.e-stat.go.jp/SG1/estat/eStatTopPortal.do)から「統計データを探す」「主要な統計から探す」「国勢調査」→　提供統計一覧から「平成22年国勢調査」等を選ぶ。


人口等基本集計（男女・年齢・配偶関係、世帯の構成、住居の状態など）の全国結果
![image](https://qiita-image-store.s3.amazonaws.com/0/114127/69dae28f-db55-ef9f-c476-94a4797bdc39.png)