富士市の人口密度

普段は仮想の空間(ケミカルスペース)とか多変量の解析ばかりしていて、リアルな地理情報を扱うようなエリアマーケティング的なところにはタッチしたことはなかったんだが、フジブログにインスパイアされてGISにも手を出し始めた。

やっぱ身近な話題は面白いね。データは政府統計のH12年国勢調査(小地域)をつかった。

library(maptools)
library(RColorBrewer)
library(classInt)
f <- readShapePoly("h12ka22210.shp")
pop <- f$JINKO / f$AREA * 1000
colors <- brewer.pal(9, "YlOrRd")
brks<-classIntervals(pop, n=10, style="quantile")
brks<- brks$brks
plot(f, col=colors[findInterval(pop, brks,all.inside=TRUE)], axes=F)

密度はf$JINKO / f$AREA * 1000で計算しているので単位面積あたりの人口ということになりますね。フジブログでは単純に人数をカウントしてるだけですが、実際には地域の何%が流出入したかをかんがえるべきかなと思います(予算配分的には人数でカウントするのが好ましいのかもしれないが)。

fuji pop

既にデータは国が出してんだからこういうのを小学校とか中学校のカリキュラムに取り入れれば、算数、地理、歴史の教育になっていいと思うんだけどなぁ。Rもオープンソースだしね。

rpy2+ggplot2

なぜグラフを描くのかと問われれば要約統計量を見やすい形で表現したいからであり、ヒトの目という不完全なデバイスを通してデータを認識するためにはグラフとよばれる表現手段を介したほうが効率が良いからである。

と考えるならば、分析のためにグラフを描くという行為は統計解析と切り離せないものであり、画像を描くためだけのライブラリを選択することはあまりよろしいことではないと思う。

そして望ましくは、適切に前処理されたマトリックスから望むグラフが作られるべきであり、グラフを描くためにデータを(ハッシュなんかに)加工するというのはあまりいいやり方とは言えないんじゃないかなぁと思っている。

これが、Rでグラフを描く大きな理由。データの前処理はRでやることはほとんどなくて、大体はperl,pythonを使うので、rpy2は重宝する。

import rpy2.robjects.lib.ggplot2 as ggplot2
from rpy2.robjects import r
from rpy2.robjects.packages import importr
base = importr('base')

datasets = importr('datasets')
mtcars = datasets.mtcars

pp = ggplot2.ggplot(mtcars) + \
     ggplot2.aes_string(x='wt', y='mpg', col='factor(cyl)') + \
     ggplot2.geom_point() + \
     ggplot2.geom_smooth(ggplot2.aes_string(group='cyl'), method='lm')

#pp.plot()
r['ggsave'](file="mypng.png", plot=pp)
#r['dev.off']()

これで、重量(x)と燃費(y)のプロットに対して、気筒毎に回帰直線と信頼区間を描くことができる。

ggplot2

分析手法をテンプレート化して自動的にレポートを出力したい時にはプログラミングできる手段があるといいのでrpy2は良いライブラリだと思う。

ProductName グラフィックスのためのRプログラミング
H. ウィッカム
丸善出版 / 4200円 ( 2012-02-29 )


ggplot2で綺麗なグラフを描く

ggplot2のためにRを覚えてもいいと思う。一度覚えてしまえば使い回しの効く技術だと思うんだけどなぁ。

ProductName グラフィックスのためのRプログラミング
H. ウィッカム
丸善出版 / 4200円 ( 2012-02-29 )


グラフィックス描画のための文法をRで実装したのがggplot2らしい。

ProductName The Grammar of Graphics (Statistics and Computing)
Leland Wilkinson
Springer / 8616円 ( 2005-08-30 )


Rクックブック

Rは普段からバリバリ使うわけでなくて、たまに必要に迫られて集中して使うという感じなので、データの前処理なんかはperlやpython使ってしまうので、こまかいところがなかなか覚えられない。

ProductName Rクックブック
Paul Teetor
オライリージャパン / 2940円 ( 2011-12-22 )


こっちは職場用に買った。

ProductName R言語逆引きハンドブック
石田基広
シーアンドアール研究所 / 4830円 ( 2012-01-26 )


ProductName グラフィックスのためのRプログラミング―ggplot2入門
H.ウィッカム
シュプリンガー・ジャパン株式会社 / 4200円 ( 2011-07-18 )


デジタル画像処理 (Rで学ぶデータサイエンス 11)

購入しようかどうか悩み中

ProductName デジタル画像処理 (Rで学ぶデータサイエンス 11)
勝木 健雄
共立出版 / 3885円 ( 2011-11-23 )


中を見てからかなぁ。

グラフィックスのためのRプログ​ラミング―ggplot2入門

待ちに待った日本語版

ProductName グラフィックスのためのRプログラミング―ggplot2入門
H.ウィッカム
シュプリンガー・ジャパン株式会社 / 4200円 ( 2011-07-18 )


楽しみだ。

Beanplotは密度を視覚的にわかりやすくしたBoxplotの亜種

まず、次のBoxplotを見てどういう分布か予想できるだろうか?(zは簡単かもしれないがyは難しいと思う)

boxplot

正解はこれ。xが一様分布、yが正規分布を二つあわせてbimodalにした分布、zが正規分布ですね。

x <- runif(200,min=-2,max=2)
y <- c(rnorm(100,mean=-1,sd=0.5),rnorm(100,mean=1,sd=0.5))
z <- rnorm(200,mean=0,sd=1)

Boxplotが密度を表現してないのが問題なのだが、これはBeanplotで解決できる。密度の形がさやみたいで、中のスキャッタープロットが豆みたいなのでBeanplotと名付けたらしい。

元のBoxplotを左に、Beanplotを右に並べてみた。

boxplot

library(beanplot)
g <- rnorm(200,mean=0,sd=1)
bm <- c(rnorm(100,mean=-1,sd=0.5),rnorm(100,mean=1,sd=0.5))
uni <- runif(200,min=-2,max=2)
d = data.frame(uni=uni,bm=bm,gaus=g)
par(mfrow = c(1,2))
boxplot(d, col = "lightblue")
beanplot(d, col = "lightpink")

この例では対称なプロットになっているが、左と右で群を変えて非対称なプロットもできる。

Rパッケージガイドブック

CPANといいCRANといいパッケージガイドが立て続けにでますな。

ProductName Rパッケージガイドブック
岡田 昌史
東京図書 / 3990円 ( 2011-04-09 )


ProductName Perl CPANモジュールガイド
冨田尚樹
ワークスコーポレーション / 2730円 ( 2011-04-08 )


このながれでPyPIやHackageも出ないかなぁ

R Cookbook

欲しい!最近はR使ってないけど。

ProductName R Cookbook
Paul Teetor
Oreilly & Associates Inc / 3413円 ( 2011-03-28 )


来週になったら所属が変わって「パソコンの電源を入れたり消したりするだけの簡単なオシゴトをするおじさん達」と一緒になるのだけど、まぁ、当然今やっている仕事はそのまま持っていくという話なので、給料据え置きでインフラまわりの仕事を上乗せされるだけなんだろうなぁ。チームごと移しているからそういう意図はビシビシと感じられるが、ここは空気を読まずに「給料上がんないってことはもちろんゼロサムですよね」という精神で明るくやっていこうと思う。

ちなみに今の上司は、(外資出身に総入れ替えしたという事情もあって)みなさん優秀で、僕も色々新しい事を学べて大変よかった。

Rによるバイオインフォマティクスデータ解析 第2版 -Bioconductorを用いたゲノムスケールのデータマイニング

献本ありがとうございます

内容はバイオインフォマティクスに限らずに割と広い内容をカバーした感じで、クックブックと逆引きの中間的なスタイルと言えば良いのだろうか?

Rのインストールから基本的な操作は(大体どの本にもあるように)載っていて

データマイニングとしては

  • PCA
  • ICA
  • PLS
  • MDS
  • SPE
  • k-means,Fuzzy cmeans
  • spectral clustering
  • NMF
  • SOM
  • decision tree
  • kNN
  • SVM
  • RF
  • LASSO
  • MARS

がサンプルコードとともに簡潔に説明されている。

8章はバイオ系データの解析、チップとか。odesolveを利用したシミュレーションのサンプルもあって、SBMLRは面白そうだなぁと思った。メカニズムがどうなっているのかはモデルと実験系の不一致をよく突き詰めて考えることでしかきちんとした理解は得られないと思っている。

最後のほうの章は統合環境、データベースの連携、サーバー構築あたりの話。

あと、twitteRを使って生体組織名をつぶやくとその組織の図が返ってくるという例が載ってた。ちなみにRでもPitがあります。