政府統計e-Stat APIを使うための事前知識

政府統計の多くがインターネット上で公開されており、[e-Stat](https://www.e-stat.go.jp/)というサイトで検索することができます。さらに、API機能というものを使うことで欲しいデータを一気にダウンロードできたり直接利用できたりして便利です。しかし、特に他のサービスなどでAPI機能を利用したことが無い人にとってはe-StatのAPI機能はとっつきにくく感じるかと思います。ここでは、e-Stat APIを使い始めるにあたって知っておくと役に立つな単語などについて解説します。e-Stat APIの利用を考えている方の足がかりになれば嬉しいです。

なおe-Stat APIの使い方の詳細は、いくつかの記事ですでに書かれているのでそれらを参照していただければと思います。ここでは、それらのサイトに書いてあることを理解するための、事前知識のようなものを書いていきます。

#### e-Stat APIの使い方を解説しているサイト

- kushikotaさんによる「[e-Stat(政府統計)のAPI機能をつかってpythonでグラフを書いたりしてみる](https://qiita.com/kushikota/items/eed1d2b26e710fdc60f8)」
- mima_itaさんによる「[政府統計の総合窓口(e-Stat)のAPIを使ってみよう](https://qiita.com/mima_ita/items/44f358dc1bc4000d365d)」
- nkmkさんによる「[Pythonでe-Stat APIを使って政府統計データを一括ダウンロード](https://note.nkmk.me/python-e-stat-api-download/)」
- e-Stat公式の「[政府統計の総合窓口（e-Stat）のAPI 仕様 3.0版](https://www.e-stat.go.jp/api/api-info/e-stat-manual3-0)」

それでは内容に入っていきます。

#提供されているデータの形式

政府の統計データを検索していると、「データベース」と「ファイル」の大きく2つに分類されていることがわかると思います。
![db_file2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454054/5c785d32-b0af-14d3-c599-27eb65490387.png)
それぞれの調査のデータセット一覧を見ると、「データベース」はDB、APIの形式でデータが提供されており、「ファイル」はPDF、EXCEL、CSV、DBなどの形式でデータが提供されていることが確認できます。
![csv db.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454054/db0282a2-691a-87c8-c3a1-b2c85a02e819.png)
![db_api.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454054/8e4ae7ee-8557-aa62-bc71-6982adb20da9.png)
![excel.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454054/bd8a7198-6728-f069-baca-6f0bb4232097.png)
DB形式の提供が「データベース」と「ファイル」の両方で見られますが、どのような区別がされているのかは私もよくわかりません。

さて、いろいろ単語が出てきたので一旦解説します。
#### DB
DBとは、データベースの略です。データベースというのは奥が深い単語で、ここでは深入りせず表面的な説明を書きます。例えば、シートが10個あるエクセルのファイルが10個、合計100枚のシートが手元にあった場合、管理が大変です。これら100枚のシートを簡単に参照・管理できるようにしたのがデータベースだと思えば大丈夫です。データベースでは複数のエクセルのシート(のような、セルでできた表)の名前と、お互いとの関係性などが記録されています。

データセット一覧のページで、DBのボタンをクリックすると新しい画面でエクセルを開いたかのような画面が出てきます。この画面の右側にある「ダウンロード」というボタンをクリックすることで、CSV形式やXLSX(エクセル)形式でダウンロードすることが可能です。またDBはAPIを通じてアクセスできるようになっています。

#### API
APIも奥が深い単語です。ここではAPIを、データベースへの入り口として理解しておけば問題ないかと思います。私のイメージでは、扇風機がパソコンだとすると、コンセントの差込口がAPIで、電線がデータベース、電流がデータ、といった感じです。2021年3月現在、e-Statでは以下の[7つのAPI](https://www.e-stat.go.jp/api/api-info/e-stat-manual3-0#api_1)が提供されています。

- 統計表情報取得API
- メタ情報取得API
- 統計データ取得API
- データセット登録API
- データセット参照API
- データカタログ情報取得API
- 統計データ一括取得API

#### PDF
PDFは文書の保存方法としてよく見られるファイル形式ですね。政府統計では、それぞれの調査の概要や図などがPDFで提供されているようです。
#### EXCEL
EXCELはエクセルのことです。.XLSXという拡張子で保存されます。
#### CSV
CSVとは、エクセルのような縦と横のセルの並びを文字だけで再現した、カンマ区切りのデータ形式です。文字のデータなので、直接エクセルを送りあうよりもCSVを送りあったほうがデータ容量が少なく済みます。CSVはエクセルや他の表計算ソフトで開くこともできます。

# APIを通じてデータを取得する
ここまでで、ほしいデータを手動で入手する手順はわかったかと思います。しかし、複数のデータを合わせて見たい場合、それぞれを手動でダウンロードするのはかなりの手間になります。そんなときに便利なのがAPIです。

統計データ取得APIを通じてデータを取得する際の大まかな流れは以下のようになっています。

1. アプリケーションIDを取得する
2. 統計表情報取得APIを通じて統計表情報を取得する
3. 統計表情報に含まれている統計表IDを使い、統計データ取得APIを通じて統計データを取得する

手順2と3の統計表IDの取得に関しては、[kushikotaさんの記事](https://qiita.com/kushikota/items/eed1d2b26e710fdc60f8)のように手動で統計表IDを取得することも可能です。

最初は、これらの手順で使われる用語の意味がわからず混乱してしまうかと思います。ですのでここでは単語の意味を確認していきます。また、理解を助けるためのサイトも作ったので、そちらを参照しつつ読みすすめると良いかと思います。

サイト：「[e-Stat API Viewer](https://mtoyokura.github.io/estat-api-viewer/)」

#### アプリケーションID
e-StatのAPI機能を利用するには、e-Statで[ユーザ登録](https://www.e-stat.go.jp/mypage/user/preregister)を行い、さらにAPI機能を使用する[アプリケーションの登録](https://www.e-stat.go.jp/mypage/view/api)をする必要があります。アプリケーションIDはその際に配布される個別のIDのことです。APIを使用する際はappIdというパラメータにアプリケーションIDを渡します(パラメータについては後ほど説明します)。e-StatのAPI機能を利用するためにはアプリケーションIDを取得している必要があります。

#### 統計表情報
統計表情報とは、政府が提供している統計についてのあらゆる情報(調査の名前、統計表の名前など)が書かれているものです。APIを通じて取得する際、[複数のパラメータ](https://www.e-stat.go.jp/api/api-info/e-stat-manual2-1#api_3_2)を用いることで統計表情報として出力される情報を絞り込むことができます。

#### 政府統計コード
統計表情報を取得する際に用いるパラメータの一つです。8桁の数値で、[e-Statのページ](https://www.e-stat.go.jp/api/api-info/api-data)で一覧が見れます。政府統計の[ヘルプページ](https://www.e-stat.go.jp/help/stat-search-3-5)でも一覧を見ることができます。APIを使用する際は、statsCodeというパラメータに政府統計コードを渡します。ただし、statsCodeは政府統計コードの他に、[作成機関の5桁の数値](https://www.stat.go.jp/info/guide/public/code/code.html)も受け付けることができます。ややこしい！

#### 統計表ID
一つ一つの統計表に与えられている識別番号です。APIを使用する際はstatsDataIdというパラメータに統計表IDを渡します。

#### 統計データ
統計表と同義であると私は認識しています。厳密な使い分けがあるのかもしれませんがよくわかりません。本記事では統計表と統計データは同義のものとして扱います。

## e-StatのAPIの使い方
冒頭でも書きましたが、APIの具体的な使い方は他の記事で詳しく書かれています。ここでは、HTTPリクエストとパラメータについて少し解説します。

### GETメソッド
インターネットを通じて私達が何か情報を受け取りたい場合、まず最初に私達のコンピュータから相手のコンピュータ(厳密にはサーバー)にHTTPリクエストと呼ばれるものが送られ、それを受け取った相手のサーバーがHTTPリクエストをもとに私達が求めた情報を送ってくれます。このHTTPリクエストには主にGETメソッドとPOSTメソッドの2つがあります。GETメソッドによるHTTPリクエストは皆さんもおなじみのURLです。(POSTに関してはこの記事では扱わないので端折ります。)この記事にアクセスする際も、まず皆さんのブラウザから送られてきたGETメソッドであるURLをQiitaのサーバーが受信し、Qiitaのサーバーがこの記事を皆さんのブラウザに送信し、この記事が画面に表示されます。

HTTPリクエストに関して詳しく知りたい人は「HTTP リクエスト」などのキーワードで検索していただけたらと思います。

さて、e-Statの統計表情報取得APIと統計データ取得APIは、HTTPリクエストのGETメソッドを使います。例えば統計表情報取得APIを通じて統計表情報をJSON形式で取得したい場合、

`http(s)://api.e-stat.go.jp/rest/<バージョン>/app/json/getStatsList?<パラメータ群>`

というURLへアクセスします。<バージョン>に関しては特殊な事情がない限り最新バージョンの数字(2021年3月時点では「3.0」)を入力しておけば大丈夫でしょう。<パラメータ群>には、いままで出てきたappIdやstatsCodeといったパラメータを指定します。パラメータを指定してURLに入れることで、ほしいデータの条件をサーバーに伝えることができます。パラメータの指定の仕方は、

`?<パラメータ1>=<指定したい数字や文字>&<パラメータ2>=<指定したい数字や文字>&...`

というように、パラメータと指定したい数字や文字を`=`で結び、各パラメータの間に`&`をつけて書きます。例えば国勢調査(政府統計コード: 00200521)の統計表情報を取得したい場合、

`http://api.e-stat.go.jp/rest/3.0/app/json/getStatsList?appId=<自分のアプリケーションID>&statsCode=00200521`

というURLにアクセスすることで取得できます。なお、このURLをGoogle Chromeなどのブラウザからアクセスすることでも統計表情報を取得することは可能ですが、通常JavaScriptやPythonといったプログラミング言語を使ってURLにアクセスし、取得したデータを保存したり処理したりします。

パラメータの種類とその内容は[e-Statの仕様](https://www.e-stat.go.jp/api/api-info/e-stat-manual2-1#api_3_2)に書かれています。また、実際のデータベースでパラメータがどの部分に該当するかについては、先程紹介した「[e-Stat API Viewer](https://mtoyokura.github.io/estat-api-viewer/)」で実際に統計表情報を取得して照らし合わせるとわかってくると思います。

### XML、JSONについて
[e-Statの仕様](https://www.e-stat.go.jp/api/api-info/e-stat-manual3-0#api_2)を読むと、統計表情報取得API、メタ情報取得API、統計データ取得APIのいずれにおいてもXML、JSON、JSONP、CSVの形式での取得ができると書かれています。どの形式でデータを取得するかは、何のソフトを使ってデータを処理するかによって変わります。自分が使うソフトにあった形式でデータを取得しましょう。

ごく簡単に紹介すると、XML、JSONはどちらもデータの「書き方」で、データをパソコンのフォルダのように入れ子構造として表すことができます。XMLとJSONについて、ちょっとした例を書いておきます。

#### XML
XMLは、マークアップ言語の一種です。HTMLに似ています。

```XML:XMLの例
<userlist>
  <user>
    <name>John Doe</name>
  </user>
  <user>
    <name>Jane Doe</name>
  </user>
</userlist>
```

#### JSON
JSONはJavaScriptのオブジェクトの表記を基にしたファイル形式です。

```JSON:JSONの例
{
  "userlist": {
    "user": [
      { "name": "John Doe" },
      { "name": "Jane Doe" }
    ]
  }
}
```

## おわり
いろいろ説明していく中でいまいちまとまりがない文章になってしまいましたが、この記事を読みつつ冒頭で紹介した記事などを合わせて読むことでe-Stat APIが使えるようになっていくのではないかと思います。

<a rel="license" href="https://creativecommons.org/licenses/by/4.0/deed.ja"><img alt="クリエイティブ・コモンズ・ライセンス" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/88x31.png" /></a>
この記事は[クリエイティブ・コモンズ 表示 4.0 国際 ライセンス](https://creativecommons.org/licenses/by/4.0/deed.ja)の下に提供されています。

※2021年3月16日に、政府統計APIで取得できるデータが見られるサイトを大幅にアップデートし、公開しました。公開に合わせて記事も少し更新しました。
※2024年10月13日に、政府統計APIで取得できるデータが見られるサイトを作り直したものを公開しました（[e-Stat API Viewer](https://mtoyokura.github.io/estat-api-viewer/)）。以前とURLが異なることにご留意ください。