RとウェブAPIに関する本をちょっと書きました。

「Rによるスクレイピング入門」という本が3週間後に出る予定です。

日本のR界の出版王こと石田基広先生をはじめ、ホクソエム株式会社の名参謀・市川さん、人を死に至らしめる程のR力を誇るという瓜生さん、という豪華な著者陣に並んで、私もウェブAPIに関する節をいくつか担当させていただきました。

Rによるスクレイピング入門

Rによるスクレイピング入門

えっ、ウェブスクレイピングの本じゃないの?

と思ったかもしれませんが、この本は、ウェブスクレイピングの本でありウェブAPIの本でもあります。「広大なインターネット上のデータをRで扱う方法」みたいなことについて書かれた本です。たぶんタイトルでスクレイピングの本として認識する方が多いと思うので、ここでは私が書いた部分だけチラ見せすることで、あえてウェブAPIの本としての側面を紹介します。

RとHTTP

Rではhttrパッケージの力によって、とても楽にHTTPリクエストを扱うことができます。httrパッケージについては、nakamichiさんが翻訳してくださっているvignetteの説明がとてもまとまっています(すばらしい翻訳ありがとうございます!)。

このvignetteがすばらしいのは、

httrは,基礎となっているHTTPプロトコルと密接に対応するように設計されています.

ということで、httrについて学ぶだけでなく、HTTPプロトコルについてもそこそこ理解することができる、という点です。基本的にはこれを読んでおけばオーケーです。

しかし、ウェブAPIを扱っていると、HTTPプロトコルについての深い知識が要求される場面にしばしば遭遇します。そこで「Rによるスクレイピング入門」では、「httrの使い方」ではなく「HTTPプロトコルの説明」を主眼に置いた節を設けました。少し詳しめに書いたつもりです。

「細かすぎて頭に入ってこない…」と感じた場合は、この節はいったん飛ばして実践例の章を読み進めてみてください笑

あるいは逆に「物足りない! もっと細かいことが知りたい!」という場合は、HTTPのRFCを読みましょう*1。この本を書くにあたっても何度か読み返しました。

認証

RからAPIを使うときに欠かせないのが認証についても取り上げています。特に、httrのvignetteにはあまり詳しく説明されていないOAuth 2.0については少し細かく書きました。これもOAuth 2.0のプロトコルから説明することで、「oauth2.0_token()を実行するとブラウザが立ち上がるのなんでなの?」「アプリケーション登録って?」といった疑問に答えようと試みました。

実例に関しては、以下のhttrのdemoのコードが参考になります。

もちろん、「Rによるスクレイピング入門」にもOAuth 2.0認証の実例が豊富に登場しますよ。お楽しみに。

JSONの"rectangling"

ウェブAPIにはJSON形式でデータを返すものが多くみられます。JSONは、様々な階層に様々な個数の要素を持ちます。多くの場合、この構造をRでそのまま扱うことは難しいので、データフレーム、つまり行と列の2次元で表すことができる形式に変換する必要があります。

これを、RStudioのJenny Bryan氏は「rectangling」と表現しています。

思えば私のR歴は、深々とネストしたJSONとの死闘の歴史でした。その最たるものが、e-Stat APIでしょう。e-Stat APIは、扱っているデータが複雑なので、その扱いにはなかなか骨が折れます。ボキボキです。

「Rによるスクレイピング入門」では、e-Stat APIからデータを取ってきてrectangleする例を取り上げました。けっこうページ数を割いて、順を追ってやり方を説明しています(が、なにぶんデータがややこしいので、うまく説明できているか不安ではあります…)。ぜひこれを読んで、オレオレestatapiパッケージをつくれるようになってください。

さて、私が書いたのはe-Statについてだけですが、もちろん他のAPIについての実例も豊富です。例えば、

というタカヤナギ=サンのプロマイドがAPIに叩きつけられ、処理され、親指を立てて溶鉱炉に沈んでいくシーンは涙なしには見られません。ハンカチを手元に用意してから読んでくださいね。

さいごに

まずは、RでウェブAPIとかスクレイピング、という分野に興味があればぜひ読んでいただけると嬉しいです。よろしくお願いします。

あと、RでAPIを使うときのお悩み相談とか受け付けます。「このAPIがRからうまく使えない」「このデータをうまくdata.frameに変換できない」といったことがあればぜひご相談ください。こういう本を書いたり、このブログでもいろいろAPIを扱ってきたりしているわけですが、正直、実際のユースケースをあまり知らないと感じています。いろいろ実例を教えてもらって知見を深めたいです。

何かあればTwitterr-wakalangあたりで声をかけてください。

*1:RFCとは何か、ということに関してはJPNICの説明がわかりやすいです