RWordPressを試してみた

Rで書いた図を使ってブログを書きたいわけですが,どうやれば楽ができるか色々試しています。まずはRWordPressから。

RStudioでR Markdownの記事を書いて,knitrのknit2wp()で記事をwordpress.comに公開できます。思ったより簡単。

しかし,一度公開した記事を修正することはRWordPressではできないので,wordpress.com上で編集するしかないようです。これはちょっと残念。

開発者のyihuiさんも,

Once it is published, it is not straightforward to modify it (although you can), and that is why you, as a cool hacker, should blog with Jekyll instead of WordPress.

via WordPress: Publish blog posts from R + knitr to WordPress | knitr.

とおっしゃっていて,クール・ハッカーではない私も,なるほどそうなのか,などと思った次第です。

というわけて,Jekyll(ジキル)なるものについて調べることにしようと思ったのでした。

RWordPress Test

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

You can also embed plots, for example:

plot of chunk unnamed-chunk-2

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.

Rでleafletを使ってみる

RからLeafletの地図が作れるライブラリのleafletを試してみたら,すごく簡単に地図が作れたので,メモ。

library(readr)
library(leaflet)

# read data
f <- "http://ckan.open-governmentdata.org/dataset/28d0fa52-01c1-40c9-939a-4c0b0ca8b4ba/resource/81a329e4-8683-47e7-853c-2e7fc745b4ef/download/201409wifi.csv"
p <- read_file(f) %>% iconv("sjis", "utf8") %>% read_csv()
colnames(p) <- c("name", "address", "lat", "lng")

# leaflet
m <- leaflet(p) %>% addTiles() %>% addMarkers(~lng, ~lat, popup=~name)
print(m)

たったこれだけで,こんな地図ができる。素晴らしい。

Web地図はこちらから。

ちなみにでデータは福岡市オープンデータサイトから,福岡市無料公衆無線LANサービス『Fukuoka City Wi-Fi』を設置している位置情報等のデータを使用しました。こういう時にすごく便利だなと思うと同時に,最終更新が2014年9月25日(作成日と同じ)というのはちょっと残念。ぜひ更新して欲しいものです。

RでEurostatを使う

EurostatはEUの統計データを網羅した便利なサイトで時々使うのですが,Rのパッケージeurostatが公開されていたので使ってみました(奥村先生の「人口密度と出生率」と同じことをパッケージを使ってやってみた,というだけですが)。

library(eurostat)
library(ggplot2)
library(dplyr)

ftl.rate <- get_eurostat('tgs00100', time_format='raw')
colnames(ftl.rate) <- c('age', 'geo', 'time', 'ftl_rate')
pop.dens <- get_eurostat('tgs00024', time_format='raw')
colnames(pop.dens) <- c('geo', 'time', 'pop_dens')

dat <- merge(ftl.rate, pop.dens) %>% filter(time=='2012') %>% na.omit()

ggplot(dat, aes(x=pop_dens, y=ftl_rate)) + geom_point() + stat_smooth(method=lm) + labs(x='人口密度', y='出生率')
ggplot(dat, aes(x=pop_dens, y=ftl_rate)) + geom_point() + stat_smooth(method=lm) + scale_x_log10(breaks=10^(0:4)) + annotation_logticks(sides='b') + labs(x='人口密度', y='出生率')

 

Source: Eurostat

Safety in numbers

先日,”The More Cyclists In A Country, The Fewer Fatal Crashes” というForbesの記事が紹介されているのを見かけました。日本語に訳せば,「自転車に乗る人が多い国ほど,死亡事故が少ない」とでもなるでしょうか。

Interestingly, however, an OECD report actually suggests that when a country has more cyclists, it tends to have fewer fatalities. – via Forbes

本当にこんなことがあるのでしょうか。

グラフを見ると,青い折れ線グラフが ”Bicycle travel per inhabitant per year (km)(人口・年あたり自転車走行距離 (km))” を,黄色い棒グラフが “Cyclists killed per billion km of bicycle travel (自転車走行距離あたりサイクリスト死者数)” を表していることがわかります。たしかに,青い折れ線グラフは右肩下がりに,黄色い棒グラフは右肩上がりになっていますから,図の左側にある,自転車に乗る人多い国ほど死者数が少ないという関係があるように見えます。

しかし,2つのグラフともに ”Bicycle travel (自転車走行距離)” という同じデータを使って作られていることに注意する必要があります。しかも,青い折れ線グラフは「一人当たりの走行距離」を表しているのに対して,黄色い棒グラフは「走行距離あたりの死者数」を表していますから,走行距離が増えれば,「一人当たりの走行距離」は大きくなりますし,「走行距離あたりの死者数」は小さくなります。つまり,そもそもこのグラフで使われている2つの指標は反比例する関係にあるわけです。

では,この記事が当たり前の事象を意味ありげに書いたデタラメなのかというと,決してそういうわけではありません。

次の図は,グラフから数字を抜き出して,横軸に一人当たりの走行距離を,縦軸に走行距離あたりの死者数をとった散布図です。一見して反比例の関係にあることがわかります。

さて,この関係を式で表すと,

\frac{D}{B}=\alpha\left(\frac{B}{P}\right)^{-\beta}

のようになります。図の赤い実線は,非線形回帰で上の式のパラメータを推計した曲線です。ここでDは死者数を,Bは自転車走行距離を,Pは人口を表しています。

さて,この式の両辺に\frac{B}{P}をかけると,

\frac{D}{P}=\alpha\left(\frac{B}{P}\right)^{1-\beta}

となります。この式の左辺は,人口当たりの自転車事故死者数を表すことになります。

この式をもとに,横軸に「一人当たりの自転車走行距離」を,縦軸に「人口当たりの自転車事故死者数」を取った図を描くと,次の図のようになります。先ほどと同じように,データから上式のパラメータ推計した結果を赤の実線で示していますが,上に凸の曲線になっています。

この図から言えることは,以下の2点です:

  • 一人あたり自転車走行距離が長い国ほど,自転車事故で亡くなる人の人口あたりの比率は高い。
  • ただしその比率は一人当たり自転車走行距離の増加にともなって逓減(増加率が減少)する。

もうちょっと意訳すると「自転車に乗る人が増えれば増えるほど自転車事故死者は増えるけど,自転車に乗る人が2倍になっても死者は2倍にはならない」という感じでしょうか。

 

LODとは何か

第3回BODIKトークに参加しました。

http://www.isit.or.jp/wg8/2014/08/18/talk3/

「オープンデータとLinked Open Data」というタイトルで,情報・システム研究機構の加藤文彦さんのお話を拝聴しました。Linked Open Data(LOD)については全く事前の知識がなかったのですが,何となくその概要が理解できた気がします。Linked Dataとは,簡単に言うと,データをネットワーク(ノードとリンクの集合)として構築しましょうということだとおもうんですけど,「データといえばスプレッドシート」と思っていた私のような人間には,最初ちょっと取っつきにくい概念でした。1時間の講演は盛りだくさんの濃密な内容だったのですが,なるほどこれがLODかと得心したのは,LODの国内事例として紹介していただいた「都道府県・市区町村コード情報」でした。

http://statdb.nstac.go.jp/system-info/api/api-spec/

地域のデータを時系列で揃えようとすると,市町村合併等で市域が変わっていて,昔のデータと今のデータとの整合をとるのが大変ということがよくあります。この「都道府県・市区町村コード情報」には合併の情報がネットワークの中に含まれているので,市域の変遷がきちんと追っかけられるわけです。

同じようなことが小地域データでできたらいいだろうなと思いました。町丁字なんてよく変わるので,5年前の国勢調査のデータと比較したいと思ってもできないことがあります。そんなときにLODとして小地域境界の変遷がデータ化されていたら…。と,思いましたが,構築にかかるコストを誰が負担するのか,誰かが負担したとして,コストに見合うメリットがあるのか,などいろんな課題がありそうだなとも思いました。

R と google chart API で日本の塗り分け地図

R から google chart API を使って日本の塗り分け地図を描画する関数を書いた。

三重大学奥村先生のいろいろな都道府県データのように、都道府県コード順に並んだデータを用意すれば、簡単に都道府県別の塗り分け地図をつくることができる。例えば、家電エコポイントの都道府県別発行件数(人口当たり)を地図にするには、

library(devtools)
source_gist("https://gist.github.com/kzktmr/0f8d492057d577411042")
googleChartJapanMap(eco)

とすればよい。すると、クリップボードに URL がコピーされるので、ウェブブラウザのアドレス欄にはりつければ地図が表示される。

あるいは、

googleChartJapanMap(eco, file="eco.png")

とすれば、ローカルに PNG ファイルが保存される。