トップ画像イメージ

無料で使えるデータが欲しい?ビジネスがしたい?税金払ってるんだし、自治体のオープンデータを使おうぜ!!

はい。 元公務員の筆者です。

今回は、タイトルの通りですが、意外と知られていない自治体のオープンデータについてのお話と、その取得例についておしらせしたいと思います。

オープンデータって何?

定義は色々ありますが、筆者は「機械判読ができる形で、商用も含めて次利用がしやすいオープンなデータ」と考えています

ここでいう機械判読がしやすいというのは、 PDFのようなグラフや色がついた人間が見やすい形ではなく、CSVやJSON形式といった、プログラムなどからの取り込みや、取得が容易な形というところです。

JSON形式といえば、サーバー側とフロント側のデータのやり取りも含めて、色々なWebAPIで利用されている形式ですね。

今回は、オープンデータの例として、佐賀県のオープンデータカタログサイトを拝見しました。

例えば、佐賀県が公開しているオープンデータのサイトをみてみましょう。

なお、筆者は佐賀県とは何の関係もありません。九州の地方公務員でしたので、何となく選びました

佐賀県オープンデータサイトイメージ

このように、自治体で公開できる(自治体でしか公開できないようなデータ)を公開してくれています。

今回は、 人気のデータセットと教えてくれていますので、Wi-Fiスポットのデータを覗いてみたいと思います。

佐賀県オープンデータサイトイメージ2

データの説明とともに、どういう形(データ型)でデータを公開しているか、どのようなルールで利用をして良いのか、ライセンスという形で示しています。

今回のデータはCSVの形でデータを提供していることが分かる他、ライセンスのリンクを踏んで確かめてみると、CC-BYというかなり自由度の高いライセンスで公開されていることがわかります。(データによっては、PDFでしか公開できないもの、厳し目のライセンスでしか公開できないものがありますので、ライセンスを確認して利用しましょう)

ちなみにCC-BYとは、こちらのサイトによると、

その代表的な権利が、クリエイティブコモンズ表示(CC BY)です。CC BYは、作者名を使った作品から分かる場所に明示さえすればOKという、クリエイティブコモンズの中でも最もゆるいライセンスとなります。

という事だそうです。

ということで、早速データの中身をみて行きたいと思います。

データのプレビュー画面はこんな感じです

佐賀県オープンデータ イメージ3

画面の下の方にで、データのプレビュー画面があります。

その他、埋め込み用のhtmlを提供してくれていますが、今回の肝はこちらに記載されているデータAPIという項目です。

こちらをクリックすると、データをAPIで取得するための、説明が記載されています。 勿論、CSVでダウンロードをしても良いのですが、APIを使って、json形式でデータを取得するようにしておけば、定期的に最新のデータを取得したり、データの必要な部分だけをあらかじめ決められた形にすぐに加工することができるので、とても便利です。

今回は手軽にGoogleAppScriptでjson形式でデータを取得し、グーグルスプレッドシートにデータを転記してみたいと思います。

GASのコードがこちら

function myFunction() {
  //オープンデータ を取得するためのurl(今回は10件だけ取得するようにオプションを付与)
  var url = 'http://data.bodik.jp/api/action/datastore_search?resource_id=261c3374-2d32-43e2-85db-d861944f148f&limit=10'
  var response = UrlFetchApp.fetch(url).getContentText();
  var jsonData = JSON.parse(response);
  //グーグルスプレッドシートのシートを取得
  var SS = SpreadsheetApp.openByUrl("ご自分のグーグルスプレッドシートのurlを記入して下さい");
  var sheet = SS.getSheetByName("test1");
  //APIで取得したデータのヘッダー(項目部分)とデータ部分の取得
  var header = jsonData["result"]["fields"];
  var records = jsonData["result"]["records"];
  //recordのシートへの書き込み
  var row = 2;
  var headers = [];
  //recordの行数分だけfor
  for (var n = 0 ; n < records.length;n++){
    //1レコードの各属性についてループしながら書き込みを行う
    for (var s  = 0 ; s < header.length; s ++){
      //最初の行だけヘッダーを埋めながら、値の埋め込み
      if (n == 0){
        sheet.getRange(1, s + 1).setValue(header[s].id);
        headers[s] = header[s].id
        sheet.getRange(row, s + 1).setValue(records[n][headers[s]])
      }else{
        sheet.getRange(row, s + 1).setValue(records[n][headers[s]])
      }
    }
    row = row + 1;
  }
}

たった、これだけのコードでデータを取得できます。 今回はデータは10件だけ取得するようにしてみました。

取得したデータはこちらです。

データ参照元:佐賀県オープンデータカタログサイト

で、結局オープンデータの何が良いのか?

自治体が公開しているオープンデータの良さは、

  • 民間では出せないようなデータを取得できる
  • 公務員が公開しているので、信憑性が高い
    • 無論人間だから間違うこともあるけど、優しく教えれば直してくれるはず
  • 商用も含めて自由にできるデータが沢山あるんですよ
    • アプリ開発に使っても良いし、ポートフォリオのネタにもなる・・・はず・・・

というところです。

今度筆者もオープンデータを活用したウェブアプリでも開発してみようかな〜と思っています。

このようなオープンデータは自治体が手間をかけて公開しています。それは、誰かがこのデータを使って、少しでも地方の役に立てば良いし、眠っているだけのデータという資産を有効活用して欲しいというメッセージでもあります

多くの人にとって重要ではないかもしれませんが、利用したい人にとっては宝のようなデータもあるかもしれません。

別に「地方創生!」とか「福祉の心!」とか気を張る必要はありません。

こういう物を自治体が公開していて、自由(ルールはありますが)に使って良いんだなぁ・・・という風に認識していただいて、誰か一人でもデータを役に立ててくれれば、自治体の担当職員も報われるのではないかなぁ・・・と思います。