LoginSignup
5
3

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-03-20

e-Stat:政府統計の総合窓口から国勢調査をはじめとする様々な官庁統計がダウンロードできます。API機能を使って一気にデータを取得する初心者向けの方法を紹介します。

API機能の利点

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

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

準備

事前に利用登録を行ってアプリケーションIDを取得しておきます。

Step.1 取得したい統計表とその統計表コードを探します。

e-StatのAPI機能トップページから「開発者支援情報」→「API機能テストフォーム」をクリックします。
image

バージョン1.0とバージョン2.0がありますが、バージョン2.0の方をクリックしました。
image

1)API機能テストフォームの「統計表情報取得」をクリックします。
image

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

image

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

image

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

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">
 妻の年齢(5歳階級),子供の有無・数・年齢(121区分),夫婦の就業・非就業(4区分)(雇用者-特掲)別夫婦のいる一般世帯数及び一般世帯人員 全国,都道府県,人口50万以上の市区
</TITLE>

Step.2 統計データをダウンロードします。

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

image

2)統計表IDの欄に、<TABLE_INF id="0003052148">のコードを入力し、その他は何も入力せずに、データ形式をXML形式にして、ダウンロードをクリックします。
image

3)ダウンロードしたデータを確認します。
このままでは使えないので、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">妻の年齢(5歳階級),子供の有無・数・年齢(121区分),夫婦の就業・非就業(4区分)(雇用者-特掲)別夫婦のいる一般世帯数及び一般世帯人員 全国,都道府県,人口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="子供1人" level="1"/>
                <CLASS code="033" name="子供1人 0歳" level="2"/>
                <CLASS code="034" name="子供1人 1~2歳" level="2"/>
                <CLASS code="035" name="子供1人 3~5歳" level="2"/>
                <CLASS code="036" name="子供1人 6~8歳" level="2"/>
                <CLASS code="037" name="子供1人 9~11歳" level="2"/>
                <CLASS code="038" name="子供1人 12~14歳" level="2"/>
                <CLASS code="039" name="子供1人 15~17歳" level="2"/>
                <CLASS code="040" name="子供1人 18歳以上" level="2"/>
                <CLASS code="043" name="子供2人" level="1"/>
                <CLASS code="044" name="子供2人 最年少0歳" level="2"/>
                <CLASS code="045" name="子供2人 最年少0歳 最年長0歳" level="3"/>
                <CLASS code="046" name="子供2人 最年少0歳 最年長1~2歳" level="3"/>
                <CLASS code="047" name="子供2人 最年少0歳 最年長3~5歳" level="3"/>
                <CLASS code="048" name="子供2人 最年少0歳 最年長6~8歳" level="3"/>
                <CLASS code="049" name="子供2人 最年少0歳 最年長9~11歳" level="3"/>
                <CLASS code="050" name="子供2人 最年少0歳 最年長12歳以上" level="3"/>
                <CLASS code="051" name="子供2人 最年少1~2歳" level="2"/>
                <CLASS code="052" name="子供2人 最年少1~2歳 最年長1~2歳" level="3"/>
                <CLASS code="053" name="子供2人 最年少1~2歳 最年長3~5歳" level="3"/>
                <CLASS code="054" name="子供2人 最年少1~2歳 最年長6~8歳" level="3"/>
                <CLASS code="055" name="子供2人 最年少1~2歳 最年長9~11歳" level="3"/>
                <CLASS code="056" name="子供2人 最年少1~2歳 最年長12歳以上" level="3"/>
                <CLASS code="057" name="子供2人 最年少3~5歳" level="2"/>
                <CLASS code="058" name="子供2人 最年少3~5歳 最年長3~5歳" level="3"/>
                <CLASS code="059" name="子供2人 最年少3~5歳 最年長6~8歳" level="3"/>
                <CLASS code="060" name="子供2人 最年少3~5歳 最年長9~11歳" level="3"/>
                <CLASS code="061" name="子供2人 最年少3~5歳 最年長12~14歳" level="3"/>
                <CLASS code="062" name="子供2人 最年少3~5歳 最年長15歳以上" level="3"/>
                <CLASS code="063" name="子供2人 最年少6~8歳" level="2"/>
                <CLASS code="064" name="子供2人 最年少6~8歳 最年長6~8歳" level="3"/>
                <CLASS code="065" name="子供2人 最年少6~8歳 最年長9~11歳" level="3"/>
                <CLASS code="066" name="子供2人 最年少6~8歳 最年長12~14歳" level="3"/>
                <CLASS code="067" name="子供2人 最年少6~8歳 最年長15~17歳" level="3"/>
                <CLASS code="068" name="子供2人 最年少6~8歳 最年長18歳以上" level="3"/>
                <CLASS code="069" name="子供2人 最年少9~11歳" level="2"/>
                <CLASS code="070" name="子供2人 最年少9~11歳 最年長9~11歳" level="3"/>
                <CLASS code="071" name="子供2人 最年少9~11歳 最年長12~14歳" level="3"/>
                <CLASS code="072" name="子供2人 最年少9~11歳 最年長15~17歳" level="3"/>
                <CLASS code="073" name="子供2人 最年少9~11歳 最年長18歳以上" level="3"/>
                <CLASS code="074" name="子供2人 最年少12~14歳" level="2"/>
                <CLASS code="075" name="子供2人 最年少12~14歳 最年長12~14歳" level="3"/>
                <CLASS code="076" name="子供2人 最年少12~14歳 最年長15~17歳" level="3"/>
                <CLASS code="077" name="子供2人 最年少12~14歳 最年長18歳以上" level="3"/>
                <CLASS code="078" name="子供2人 最年少15~17歳" level="2"/>
                <CLASS code="079" name="子供2人 最年少15~17歳 最年長15~17歳" level="3"/>
                <CLASS code="080" name="子供2人 最年少15~17歳 最年長18歳以上" level="3"/>
                <CLASS code="081" name="子供2人 最年少18歳以上" level="2"/>
                <CLASS code="123" name="子供3人" level="1"/>
                <CLASS code="124" name="子供3人 最年少0歳" level="2"/>
                <CLASS code="125" name="子供3人 最年少0歳 最年長0歳" level="3"/>
                <CLASS code="126" name="子供3人 最年少0歳 最年長1~2歳" level="3"/>
                <CLASS code="127" name="子供3人 最年少0歳 最年長3~5歳" level="3"/>
                <CLASS code="128" name="子供3人 最年少0歳 最年長6~8歳" level="3"/>
                <CLASS code="129" name="子供3人 最年少0歳 最年長9~11歳" level="3"/>
                <CLASS code="130" name="子供3人 最年少0歳 最年長12歳以上" level="3"/>
                <CLASS code="131" name="子供3人 最年少1~2歳" level="2"/>
                <CLASS code="132" name="子供3人 最年少1~2歳 最年長1~2歳" level="3"/>
                <CLASS code="133" name="子供3人 最年少1~2歳 最年長3~5歳" level="3"/>
                <CLASS code="134" name="子供3人 最年少1~2歳 最年長6~8歳" level="3"/>
                <CLASS code="135" name="子供3人 最年少1~2歳 最年長9~11歳" level="3"/>
                <CLASS code="136" name="子供3人 最年少1~2歳 最年長12歳以上" level="3"/>
                <CLASS code="137" name="子供3人 最年少3~5歳" level="2"/>
                <CLASS code="138" name="子供3人 最年少3~5歳 最年長3~5歳" level="3"/>
                <CLASS code="139" name="子供3人 最年少3~5歳 最年長6~8歳" level="3"/>
                <CLASS code="140" name="子供3人 最年少3~5歳 最年長9~11歳" level="3"/>
                <CLASS code="141" name="子供3人 最年少3~5歳 最年長12~14歳" level="3"/>
                <CLASS code="142" name="子供3人 最年少3~5歳 最年長15歳以上" level="3"/>
                <CLASS code="143" name="子供3人 最年少6~8歳" level="2"/>
                <CLASS code="144" name="子供3人 最年少6~8歳 最年長6~8歳" level="3"/>
                <CLASS code="145" name="子供3人 最年少6~8歳 最年長9~11歳" level="3"/>
                <CLASS code="146" name="子供3人 最年少6~8歳 最年長12~14歳" level="3"/>
                <CLASS code="147" name="子供3人 最年少6~8歳 最年長15~17歳" level="3"/>
                <CLASS code="148" name="子供3人 最年少6~8歳 最年長18歳以上" level="3"/>
                <CLASS code="149" name="子供3人 最年少9~11歳" level="2"/>
                <CLASS code="150" name="子供3人 最年少9~11歳 最年長9~11歳" level="3"/>
                <CLASS code="151" name="子供3人 最年少9~11歳 最年長12~14歳" level="3"/>
                <CLASS code="152" name="子供3人 最年少9~11歳 最年長15~17歳" level="3"/>
                <CLASS code="153" name="子供3人 最年少9~11歳 最年長18歳以上" level="3"/>
                <CLASS code="154" name="子供3人 最年少12~14歳" level="2"/>
                <CLASS code="155" name="子供3人 最年少12~14歳 最年長12~14歳" level="3"/>
                <CLASS code="156" name="子供3人 最年少12~14歳 最年長15~17歳" level="3"/>
                <CLASS code="157" name="子供3人 最年少12~14歳 最年長18歳以上" level="3"/>
                <CLASS code="158" name="子供3人 最年少15~17歳" level="2"/>
                <CLASS code="159" name="子供3人 最年少15~17歳 最年長15~17歳" level="3"/>
                <CLASS code="160" name="子供3人 最年少15~17歳 最年長18歳以上" level="3"/>
                <CLASS code="161" name="子供3人 最年少18歳以上" level="2"/>
                <CLASS code="172" name="子供4人以上" level="1"/>
                <CLASS code="173" name="子供4人以上 最年少0歳" level="2"/>
                <CLASS code="174" name="子供4人以上 最年少0歳 最年長0歳" level="3"/>
                <CLASS code="175" name="子供4人以上 最年少0歳 最年長1~2歳" level="3"/>
                <CLASS code="176" name="子供4人以上 最年少0歳 最年長3~5歳" level="3"/>
                <CLASS code="177" name="子供4人以上 最年少0歳 最年長6~8歳" level="3"/>
                <CLASS code="178" name="子供4人以上 最年少0歳 最年長9~11歳" level="3"/>
                <CLASS code="179" name="子供4人以上 最年少0歳 最年長12歳以上" level="3"/>
                <CLASS code="180" name="子供4人以上 最年少1~2歳" level="2"/>
                <CLASS code="181" name="子供4人以上 最年少1~2歳 最年長1~2歳" level="3"/>
                <CLASS code="182" name="子供4人以上 最年少1~2歳 最年長3~5歳" level="3"/>
                <CLASS code="183" name="子供4人以上 最年少1~2歳 最年長6~8歳" level="3"/>
                <CLASS code="184" name="子供4人以上 最年少1~2歳 最年長9~11歳" level="3"/>
                <CLASS code="185" name="子供4人以上 最年少1~2歳 最年長12歳以上" level="3"/>
                <CLASS code="186" name="子供4人以上 最年少3~5歳" level="2"/>
                <CLASS code="187" name="子供4人以上 最年少3~5歳 最年長3~5歳" level="3"/>
                <CLASS code="188" name="子供4人以上 最年少3~5歳 最年長6~8歳" level="3"/>
                <CLASS code="189" name="子供4人以上 最年少3~5歳 最年長9~11歳" level="3"/>
                <CLASS code="190" name="子供4人以上 最年少3~5歳 最年長12~14歳" level="3"/>
                <CLASS code="191" name="子供4人以上 最年少3~5歳 最年長15歳以上" level="3"/>
                <CLASS code="192" name="子供4人以上 最年少6~8歳" level="2"/>
                <CLASS code="193" name="子供4人以上 最年少6~8歳 最年長6~8歳" level="3"/>
                <CLASS code="194" name="子供4人以上 最年少6~8歳 最年長9~11歳" level="3"/>
                <CLASS code="195" name="子供4人以上 最年少6~8歳 最年長12~14歳" level="3"/>
                <CLASS code="196" name="子供4人以上 最年少6~8歳 最年長15~17歳" level="3"/>
                <CLASS code="197" name="子供4人以上 最年少6~8歳 最年長18歳以上" level="3"/>
                <CLASS code="198" name="子供4人以上 最年少9~11歳" level="2"/>
                <CLASS code="199" name="子供4人以上 最年少9~11歳 最年長9~11歳" level="3"/>
                <CLASS code="200" name="子供4人以上 最年少9~11歳 最年長12~14歳" level="3"/>
                <CLASS code="201" name="子供4人以上 最年少9~11歳 最年長15~17歳" level="3"/>
                <CLASS code="202" name="子供4人以上 最年少9~11歳 最年長18歳以上" level="3"/>
                <CLASS code="203" name="子供4人以上 最年少12~14歳" level="2"/>
                <CLASS code="204" name="子供4人以上 最年少12~14歳 最年長12~14歳" level="3"/>
                <CLASS code="205" name="子供4人以上 最年少12~14歳 最年長15~17歳" level="3"/>
                <CLASS code="206" name="子供4人以上 最年少12~14歳 最年長18歳以上" level="3"/>
                <CLASS code="207" name="子供4人以上 最年少15~17歳" level="2"/>
                <CLASS code="208" name="子供4人以上 最年少15~17歳 最年長15~17歳" level="3"/>
                <CLASS code="209" name="子供4人以上 最年少15~17歳 最年長18歳以上" level="3"/>
                <CLASS code="210" name="子供4人以上 最年少18歳以上" level="2"/>
            </CLASS_OBJ>

Step2の別解:ターミナルからcurlコマンドを使ってe-Statのデータを取得する

1)先ほどの統計データ取得画面で、ダウンロードの代わりにパラメータ表示をクリックします。

image

2)表示されたURLをコピーする。

fig2.png

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

 >curl "http://(コピーした内容)" >output.xml

備考

  • 国勢調査からどのような統計が取得できるのか、キーワード検索以外に統計データを探すからたどっていく方法もあります。xmlより分かりやすいです。
  • 国勢調査には10年に一度の詳細版と5年に一度の簡易版があり、基本的な集計項目(年齢別人口など)は簡易版でも掲載されますが、詳細版でないと存在しない項目(例えば、市区町村別男女別学歴別人口など)があります。年次の比較をしたい場合はその点注意が必要です。
  • 統計表の表名リストまでのたどり着き方:ここから「統計データを探す」「主要な統計から探す」「国勢調査」→ 提供統計一覧から「平成22年国勢調査」等を選ぶ。

人口等基本集計(男女・年齢・配偶関係、世帯の構成、住居の状態など)の全国結果
image

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3