• デジタル政府にアクセスしてみる

9月1日にデジタル庁が発足したらしい。21世紀に入ってから、日本の政府の「電子化」が進められ、これを電子政府と呼んでいたが、これからはデジタル政府というわけだ。というわけで、デジタル政府にちょっとアクセスしてみた。筆者が会社員をしていた20世紀には、都道府県別の人口や世帯数を調べるだけでも、書籍などの紙の資料を入手する必要があった。インターネットでそういう書籍や資料の販売ページや図書館の目録は探せたが、肝心の情報は紙の中だった。しかし、現在では、インターネット検索で簡単に情報が手に入るだけでなく、Web APIを介して、データを直接、表計算ソフトなどに取り込むことも可能になった。

デジタル政府から統計情報を得る

旧電子政府の施策により、政府の持つさまざまな情報がインターネットからアクセスできるように整備されてきた。役所というのは、縄張り意識が強いので、それぞれの省庁のページがあり、それぞれで情報を公開していたようだが、横断的に公開情報をまとめるサイトや、統一的にアクセスが行えるAPIなども整備されつつあった。しかし、どうもデジタル庁の発足前後で、サイトの統廃合が進みそうな感じもある。統計データではないが、政府CIOポータルがデジタル庁の発足に合わせて更新を停止するなど、今後、統廃合の動きもあるかもしれないので注意されたい。実際、いまのところ稼働している政府の公開統計情報とりまとめサイトには以下のようなものがある。

・e-Stat
https://www.e-stat.go.jp/
・jSTAT MAP
https://jstatmap.e-stat.go.jp/jstatmap/main/trialstart.html
・統計ダッシュボード
https://dashboard.e-stat.go.jp/

e-Statは、政府系データの総合サイト的な位置づけ、jSTAT MAPは、地図と統計データを組み合わせて表示できる。統計ダッシュボードは、統計データをグラフ化して表示できる。このうち、使いやすそうなのが「統計ダッシュボード」だ。これは、国や民間企業などが提供している統計データをグラフ化するのが主な役割なのだが、対象の統計データを1つのAPIで取り出すことができるため、多くの情報に簡単にアクセスできる。運営は、総務省統計局。ここが使いやすいのは、APIを使うのにユーザー登録もアプリIDの取得も不要な点である。欠点として、統計は確定したもののみで、調査終了後、速報値が出ていても必ずしも反映されていないことがある点だ。

APIに関しては、以下のページに記述があるが、残念ながら、この夏の暑い時期に読みたいと思えるようなものではない。

・統計ダッシュボード - API
https://dashboard.e-stat.go.jp/static/api

というわけで、筆者が理解した範囲で解説すると、統計ダッシュボードから統計情報を得るには、各種の統計情報を示す「系列コード」をURLに含めてhttpsでアクセスを行えばよい。受けとることができるデータの種類は3形式4種(CSV、JSON、XMLとJSON-Stat)である。なお、統計に関わるさまざまな関連情報(メタ情報)も入手可能だが、ソフトウェアで統計データの検索などを行う場合を除き使う必要はない。また、統計データに含まれる地域コード(都道府県コード、市町村コード、国名コード)などは、JIS(X 0402)やISO(3166-1)のコードなので、APIを使わずとも入手できる。

基本的に「統計データ」取得用のURL(https://dashboard.e-stat.go.jp/api/1.0/Json/getData?)と、統計を表す19桁の数値「系列コード」を組み合わせて、以下のようなURLを作る。Webフラウザで開けば、JSONデータが得られる(このURLだと、4万4千件、9メガのデータが来るので注意してほしい)。なお、Webブラウザで試すときには、データ形式を"Json"にして、「JSONビューアー」などのブラウザ拡張を入れておくと、データの構造を把握しやすい。

https://dashboard.e-stat.go.jp/api/1.0/Json/getData?IndicatorCode=0201010000000010000

系列コードは、統計ダッシュボードのAPIページにある「系列コード体系.xlsx」に記載されている(前記APIページ中黄色い枠の中)。上記の系列コード「0201010000000010000」は、日本の総人口を表す系列コードである。URL中の「Json」を「Csv」、「Xml」、「JsonStat」とすれば、それぞれ、カンマ区切りファイル、XML形式、JSON-Stat形式でデータが得られる。なお、統計ダッシュボードWeb APIでは、パラメーター指定に大文字小文字の区別があるので注意されたい。

データをファイルとして保存するなら、curlを使って「curl.exe -o ""」などとする。URLには、コマンドライン区切り文字などが含まれるため、コマンドラインで使う場合には、ダブルクオートなどでくくる必要がある。

ただし、前述のようにこのままだと、大量の対象データが来てしまうため範囲を限定する。URLに「&Cycle=3&RegionLevel=2」を追加して、年単位(Cycle=3)、日本全国(RegionLevel=2)としてデータ量を減らすことができる(このURLだと20キロバイトほど)。

https://dashboard.e-stat.go.jp/api/1.0/Json/getData?IndicatorCode=0201010000000010000&Cycle=3&RegionLevel=2

あるいは、「&TimeFrom=2000CY00&TimeTo=2021CY00」(西暦2000年から2021年まで)などとして、取り出す期間を限定することも可能だ。このあたりは、前記のAPIページの「Web APIの詳細仕様」からダウンロードできる ExcelファイルやPDFファイルに記載がある。ページ下部の表中、「統計データ取得」の「パラメーター・レスポンス」のファイルのみ見ればよい。

Excelなら「リボンのデータタブ→データの取得と変換→Webから」で上記のURLと同じパラメーター(CSV形式が簡単)直接データを読み込み、グラフ化することもできる(写真01)。PowerQueryで余計な行(CSVの場合、ファイル先頭に余計な情報が付加されている)を落とし、日付表記(yyyyCY00をyyyyのみにして列を日付とする)、数値(Valueが文字列として認識されるので10進数にする)を変換する必要がある(リスト01)。

  • 写真01: 統計ダッシュボードのWeb APIを使い、日本の人口を1920年から2020年まで取り出しExcelのテーブルにしてグラフ化

リスト01

let
    ソース = Csv.Document(Web.Contents("https://dashboard.e-stat.go.jp/api/1.0/Csv/getData?IndicatorCode=0201010000000010000&Cycle=3&RegionLevel=2"),[Delimiter=",", Columns=11, Encoding=65001, QuoteStyle=QuoteStyle.None]),
    変更された型 = Table.TransformColumnTypes(ソース,{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type text}, {"Column7", type text}, {"Column8", type text}, {"Column9", type text}, {"Column10", type text}, {"Column11", type text}}),
    削除された最初の行 = Table.Skip(変更された型,30),
    昇格されたヘッダー数 = Table.PromoteHeaders(削除された最初の行, [PromoteAllScalars=true]),
    変更された型1 = Table.TransformColumnTypes(昇格されたヘッダー数,{{"indicatorCd", Int64.Type}, {"unitCd", Int64.Type}, {"statCd", Int64.Type}, {"regionCd", Int64.Type}, {"timeCd", type text}, {"cycle", Int64.Type}, {"regionRank", Int64.Type}, {"isSeasonal", Int64.Type}, {"isProvisional", Int64.Type}, {"value", Int64.Type}, {"cellAnnotations", type text}}),
    削除された列 = Table.RemoveColumns(変更された型1,{"indicatorCd", "unitCd", "statCd", "regionCd", "cycle", "regionRank", "isSeasonal", "isProvisional"}),
    挿入された置換後のテキスト = Table.AddColumn(削除された列, "置換後のテキスト", each Text.Replace([timeCd], "CY00", "/1/1"), type text),
    並べ替えられた列 = Table.ReorderColumns(挿入された置換後のテキスト,{"timeCd", "置換後のテキスト", "value", "cellAnnotations"}),
    #"名前が変更された列 " = Table.RenameColumns(並べ替えられた列,{{"置換後のテキスト", "年"}, {"value", "人口"}, {"cellAnnotations", "注釈"}}),
    削除された列1 = Table.RemoveColumns(#"名前が変更された列 ",{"timeCd"}),
    変更された型2 = Table.TransformColumnTypes(削除された列1,{{"年", type date}, {"人口", type number}})
in
    変更された型2

Excelだと、似たようなURLによる問い合わせなら、シートをコピー(シートタブの右クリックから「移動またはコピー」を選択)して、クエリーのソースに入っているURLを書き換えるだけで、ほぼ同じテーブルが作られ、シート上のグラフも自動的に更新される。(写真02)は、日本の人口のシートをコピーしてURLを電話加入者に変更したものだ。URLを指定してデータを直接、表計算ソフトに読み込めるなど、便利な世の中になったものである。

  • 写真02: 日本の人口のシートをコピーして、コピーされたクエリーに含まれているソースURLを電話加入者の統計に書き換えたもの。統計が同じような構造なら、クエリーもほぼそのまま、グラフなども手を加える必要がない