kokudosuuchikokudosuuchiは1年ほど前にCRANに公開したパッケージで、国土数値情報APIをRから使えます。ウェブサイトのHTMLテーブルなんかと死闘を繰り広げていたわけですが、そろそろ「ふん、今日はこの辺で勘弁しといてやるか...(肩で息をしながら」みたいな程度には終わったので、ブログに書きます。アップデート内容は主に以下の2つです。getKSJData()がsf形式でデータを読み込むようになりました。精度でメタデータを紐づけられるようになりました。国土数値情報ダウンロードサービスのAPIを使うための関数には変化はありません。インストール開発版はinstall_github()でインストールできます。devtools::install_github("yutannihilation/kokudosuuchi")注意点としては、次のバージョンからsfパッケージに依存するようになっています。Windowsユーザは何も考えずにインストールできますが、MacやLinuxの場合は依存ライブラリをあらかじめインストールする必要があります。以下の指示に従ってください。sfをインストールできない環境でkokudosuuchiパッケージを使っているので困る、という方は、このブログのコメント欄とかTwitterとかでご相談ください。利用規約kokudosuuchiパッケージを読み込むときにも出るように、国土数値情報ダウンロードサービスは利用約款を確認の上使いましょう。http://nlftp.mlit.go.jp/ksj/other/yakkan.htmlまた、データごとに利用上の注意とかがあったりもするので、各データの詳細ページについても読みましょう。そんなものどこにあるの?と思ったあなた、鋭い。そのことについてはあとで触れます。APIは、Shapefileを含むZIPファイルのURLを返してくれます。getKSJData()は、そのデータをsf形式で読み込むための関数です。ZIPファイルのURLを探すまずはURLを探します。台風も近づいているので、浸水想定区域を調べてみましょう。「浸水想定区域」に対応する識別子(identifier)を探すためにgetKSJSummary()を使います。3識別子はA31のようです。これを指定してgetKSJURL()でZIPファイルのURLを取得しましょう。choose_prefecture_code()はインタラクティブに都道府県のコードを選択するための関数です。チェックボックスにチェックを入れるとその都道府県のコードを返してくれます。今回は東京都に絞り込んでみます。http://127.0.0.1:7648結果は以下のようになっています。"2.53MB"データを読み込むその前にさて、これでもうZIPファイルのURLを指定すればデータを読み込めてしまうわけなんですが、このデータの利用規約は(国土数値情報全体の利用約款に加えて)データの詳細ページに書かれています。上の結果を見ても分かるように、なんと、データの詳細ページがどこにあるのかAPIは教えてくれません。そこで、getKSJData()はデータから推測して詳細ページのURLをサジェストしてくれます。いうことで、リンク先に従って原典を以下に明示します。上に貼ったような個別の「データの使用許諾条件」はこのデータにはないようです。第十一条第一項に基づき指定される洪水予報河川並びに水防法第十三条に基づき指定される水位周知河川のうち、各河川管理者より資料提供を受けられたもの。利用条件がデータによって微妙に違っていて確認が面倒なんですが、なるべく気を付けつつ使うようにしましょう。データの読み込みさて、さっきもう読み込んでしまいましたが、getKSJData()でデータを読み込めます。cache_dir引数は、ダウンロードしたZIPファイルを保存しておくディレクトリを指定します(指定しなければtempdir()が使われます)。ちなみに、getKSJData()にはURLだけでなく、ダウンロードしたZIPファイルや、それを展開したディレクトリを指定することもできます。getKSJData(zip_exdir)データの中身はこんな感じです。translateKSJData()さて、データは読み込めましたが、上のデータのままでは列名がA31_001、A31_002といった記号だし、中身もよく分からない数字だし、ぱっと見ではよくわかりません。これらの列や数字が何を表しているかは、さきほどの詳細ページに書かれています。A31_001の列が表す内容は以下の通りです。「浸水深ランクコード」というリンク先には、この列の数字とそれが表す意味の対応表があります。いうことで、正攻法としてはこれをひとつひとつ紐づけていくことなんですが、それはめんどくさいので、そこそこの精度で紐づけをやってくれる関数translateKSJData()をつくりました。具体的にはこんな感じです。だいたい人間が読める名前に変換されています。右にスクロールしてもらうとわかりますが、A31_006という列がそのままになっています。この列は、データ詳細のページにも載っていない謎の列です。可能な限りいい感じにメタデータを紐づけられるようにがんばったつもりなんですが、こんな感じの微妙におかしいデータがあったりして、必ず紐づけが成功するわけではありません。紐づけられていてもそれが正確とは限らないので(kokudosuuchiパッケージが間違っていることもあれば、元データが間違っていることもある)、紐づけた後でそれがあっているか確認をお願いします。あと、translateKSJData()の結果がおかしいときはお知らせいただけるとうれしいです。可視化このデータは例えば、GitHub版のggplot2を使って以下のように可視化できます。'maxpoints'感想どうでしょうか。メタデータの紐づけは思ったよりかなり難しかったです。ここ2週間ほど、元データのカオスっぷりに発狂しそうになりながら作業をしていました。死闘の日々は以下のレポジトリで垣間見れるので興味ある方はどうぞ。実はまだきれいにデータを取り出しきれないんですけど、もう精神的に限界なのでこのへんで終わりにすることにしました。APIがつらいと思ってたんですけど、あれは恵まれてたんだなあとしみじみしてしまいました。まとめデータをスクレイピングするとき、あなたの精神もまたデータにスクレイプされているのだ。APIを使うパッケージkokudosuuchiのsf対応Tweet広告を非表示にする関連記事2016-08-11estatapiパッケージ0.3.0をリリースしました夏ですね。Actionsでpkgdownサイトをビルドする月別アーカイブはてなブログをはじめよう!yutannihilationさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。