第4回 Rによるオープン・データの可視化(2)
柏野雄太
バクフー株式会社
2010/9/2
今回は美しいグラフが手軽に作成できる、グラフィックパッケージを使ってみます。世界銀行のデータや、先日Wikileaksで流出して話題となっているアフガン戦争のデータを使い、可視化のほかデータの正統性の検証も行ってみます。
- - PR -
ggplot2という「デフォルト」グラフィックパッケージ
今回は前回の続きとして、オープン・データをプロットすることをテーマに取り上げます。前回はRの組込みのグラフ描画関数である、plotやts.plotのみを利用しましたが、今回は、外部グラフィックライブラリとして最近非常に注目されているggplot2パッケージを利用します。この連載でも今後、グラフ描画についてはggplot2を利用していく予定です。
また、今回はWebサービスを利用したデータ取得についても取り上げます。
ggplot2は、Rユーザーの間ではデファクトスタンダードのツールとなっているグラフィックパッケージです。
ggplot2の設計思想には、SYSTAT Software Incの計算機科学者 Leland Wilkinson氏が提唱する「グラフィック文法(The Grammar of Graphics)」というものがあります。この「グラフィック文法」は、見栄えの良いグラフを作るという非本質的な作業にユーザーに注力させるのではなく、データが本来持っている姿をグラフに反映させることを目指して提唱されているルールです。
ユーザーが自分の欲しい情報を特定すれば、自動的にソフトウェアが必要な処理をした上でグラフを作成するのが本来の姿で、ユーザーがわざわざグラフを作成したり、調整したりということをやらせない、というのが「グラフィック文法」が実現した形だそうです。Leland Wilkinson氏は、実際にこの「グラフィック文法」をSPSSベースのライブラリとして開発し、現在ではSPSSの標準機能となっています。「グラフィック文法」の詳細は以下の書籍にありますので、興味がある方は参考になさってください。
このLeland Wilkinson氏の「グラフィック文法」の精神をRで実現するのが、Rice大学の計算機統計学者、Hadley Wickham氏が作成したggplot2です。ggplot2の特徴で、筆者が特に便利と感じているものは以下の通りです。
- データの何に注目したいかを指定するだけで、デフォルトで美しいグラフを描くことができる
- データや表示の切り口指定を後から追加できるので、グラフ作成をしながらデータを探索できる
- レジェンド(凡例)と結び付いた色分け設定が自動である
- ボックスプロット、散布図、線グラフというグラフの見栄えを自由に変更できる
- ファセットグラフ(小さなグラフがタイル状に組み合わさったグラフ)を簡単に作成できる
- 複数のデータを1つのグラフにプロットするときでも、後から足し合わせればよい
- 時系列データであっても特別に時系列オブジェクトとして取り扱う必要がない
- 審美的(aesthetic)なグラフィック要素は、後から加えることができる
- デカルト座標も極座標も自在に切り替えることができる
- グラフィックテーマを設定できるので、見栄えをドラステックに切り替えることができる
今回の記事でも色分け設定の自動化やファセットグラフを使います。
ここで本来ならばggplot2のチュートリアルとなるわけですが、このggplot2は巨大なライブラリであり、たとえ入門的な内容であっても、数回の連載では終わりそうにありません。そこで、初歩の初歩をサポートサイトに動画としてまとめましたので参考にしてください。また英語に抵抗がない方は、Hadley Wickham氏自身が講義しているビデオがありますので、それを参考になさってください。
リファレンスマニュアルはオンライン上にあります。使い方を一度習得すれば、このオンラインリファレンスマニュアルは非常に使い勝手がよいことが分かるはずです。
また、Hadley Wickham氏の書いたggplot2の本もあります。
さらにはブログ形式で、ggplot2による実例コードを提示しているサイトもあります。
以上のように、現在では書籍やオンライン上のリソースが非常に豊富ですので、初歩の使い方さえつかめば、あとは若干の探索と試行錯誤でどうにかなると思います。
さて、抽象的なことだけで終わるのもこの連載の主旨に反しますので、ここで具体的にggplot2を利用して、その雰囲気をつかみたいと思います。前回の記事で取り上げた日本円の実質実効為替レートをデータとして使い、グラフ表示をしてみることにします。まず、標準パッケージでない、ggplot2をインストールする必要があります。以下のRのコマンドで、筑波大学をCRANミラーサイトで選びながらパッケージをインストールしてください。この手順について、サポートサイトの動画でも見ることができるようにします。
> install.packages("ggplot2")
データは前回と同様のGoogle Docsにあるものを利用します。
> data <- read.csv("http://spreadsheets.google.com/pub?key=0AlBuJgqcP5f3dExEQkZfem1MeXFPZTA1UUVaVVZud3c&hl=en&output=csv", header=TRUE, skip=1)
前回は、この実質実効為替レートのデータを一度時系列オブジェクトに変換してからts.plotで描画しましたが、ggplot2を利用する場合はその必要がありません。ただし、日付・時間を表すカラムかを日付オブジェクトに変換する必要があります。以下に、その指定をした後にプロットし、そのグラフを保存する手順を示します。
> data$yearmonth <- paste(data$yearmonth, "/01", sep="")
> data$yearmonth <- as.Date(data$yearmonth, "%Y/%m/%d")
> library(ggplot2)
> f <- ggplot(data = data, aes(x=yearmonth, y=1/stfx*100)) + geom_line(aes(colour="JPY")) + geom_hline(yintercept=1)
> f + xlab("Year") + ylab("Effective exchange rate index") + opts(title="Effective exchange rate index JPY") + scale_colour_manual(values=c("JPY"="darkblue"))
> ggsave("japanfx2.png", plot = f)
このコードの実行結果が次のグラフです。
グラフを見ると分かるように、Rのplotで作成するデフォルトのグラフよりもかなり見栄えのよい、きれいなグラフが描けることが分かります。
このコードの簡単な説明をします。1行目のpaste関数を利用して"/01"という文字列を「強引」に付け加えているのは、Rのdateオブジェクトには必ず日付要素が必要だからです。2行目では1行目で加工したものをdateオブジェクトに変換するために、as.Date関数を利用しています。3行目以降がプロットの実際です。コードを見ると分かるように、いろいろなオブジェクトを+記号で次々と加え合わせていっています。
まず、ggplot2をライブラリとして読み込みます。次に、ggplot関数でプロットするべきデータフレームと、プロットするべき変数を指定します。ggplot2では、目に触れるものはaes関数の中に書くことになっているので、x軸とy軸に何を表示するかという指定はこのaes関数で行います。aesという関数の由来は、“aesthetics(エステティクス、美的要素)”の略です。また、データ点を線で結ぶことを指定するのがgeom_line関数で、y=1.0の水平線を描くのが geom_hline関数です。geom_lineには、aes関数によって、線の色指定をしています。この色指定は実は変数を割り当てるだけで、実際の色は後ほどscale_colour_manual関数にて行っています。 geom_hlineでは、水平線のy切片を指定するのにyintercept引数を利用します。以上のプロットオブジェクトは、ggplot2オブジェクトとしてfという変数に割り当てることにしました。
次の行はx軸、y軸のラベル、グラフのタイトル、そして先ほどの色変数の色を“darkblue”として決定しています。関数名から明らかなので、あえて説明はいらないと思います。ポイントは、前の行で作成したggplot2オブジェクトfに後から追加的に指定をすればよい、ということです。最後の行はggsave関数でグラフィックを保存します。ファイルは拡張子により自動判定されてpngやjpg、pdfなどのフォーマットに保存することができます。
以上、簡単にggplot2の手習いをしました。これらの関数の詳細はggplot2のオンラインリファレンスマニュアルを見てください。実際、ある程度の利用方法を覚えれば、このオンラインリファレンスマニュアルだけで大体のことはできるようになります。
前回の記事で、齊藤誠さんの「競争の作法」という書籍を取り上げ、その論点の1つを検証しました。そのときの東証PER値のデータについて、十分に層化されていないのにもかかわらず、その時間変動を必要以上に取り上げた上で恣意的な解釈を施しているのはおかしいという批判があるようです。
これについては後日のサポートサイトで取り上げたいと思いますが、「競争の作法」ではそのことに対処するために、PER値を直接取り扱うのではなく、エール大学のRobert Shiller氏が提唱する方法を解説しています。それは、個々の企業や業界の収益の短期変動の影響を排除するために、過去10年の実質ベースでみた平均企業業績で当期株価水準の実質値を割った値を利用するという方法です。詳しい解説は「競争の作法」をご覧ください。ただ、この方法を利用しても「いざなみ景気」後半のPER値の高さは際立つという結果になります。また、前回の記事の主旨は、オープン・ソースのソフトウェアを利用して、自分の手でオープン・データを使いこなす初歩を示すことであるために、「過去10年の実質ベースでみた平均企業業績で均す」という比較的煩雑な解析まで踏み込めなかったことをご承知おきください。
| 前回の連載記事へ | 1/3 |
| Index | |
| Rによるオープン・データの可視化(2) | |
| Page1 ggplot2という「デフォルト」グラフィックパッケージ | |
| Page2 世界銀行のData Catalog | |
| Page3 Wikileaksのアフガン戦争ダイアリー ベンフォードの法則で検証 次回について | |
| Coding Edgeお勧め記事 |
| いまさらアルゴリズムを学ぶ意味 コーディングに役立つ! アルゴリズムの基本(1) コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう |
|
| Zope 3の魅力に迫る Zope 3とは何ぞや?(1) Pythonで書かれたWebアプリケーションフレームワーク「Zope 3」。ほかのソフトウェアとは一体何が違っているのか? |
|
| 貧弱環境プログラミングのススメ 柴田 淳のコーディング天国 高性能なIT機器に囲まれた環境でコンピュータの動作原理に触れることは可能だろうか。貧弱なPC上にビットマップの直線をどうやって引く? |
|
| Haskellプログラミングの楽しみ方 のんびりHaskell(1) 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう |
|
| ちょっと変わったLisp入門 Gaucheでメタプログラミング(1) Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう |
|
TechTargetジャパン
- 実例で学ぶRailsアプリのテスト方法 (2011/12/22)
具体的なWebアプリを例に簡単なテストを使ったリファクタリングについ
て解説する - Railsの人気テストフレームワーク6選! (2011/8/18)
今回からテストを使ったリファクタリングを解説する。まずはRailsで人
気のあるテストフレームワークをいくつか紹介する - ActiveRecordの更新系操作 (2011/6/27)
Railsのモデル層を担当するActiveRecordを使った登録、更新、削除
など、更新系の機能を中心に見ていきます - 実例アプリで学ぶ“Railsらしさ”の基礎 (2011/5/26)
Ruby on Railsで書かれた実例アプリを取り上げて、初心者が陥りがちなコードの書き方を指摘します。より「Railsらしい」コードとは?
|
|


