今回は美しいグラフが手軽に作成できる、グラフィックパッケージを使ってみます。世界銀行のデータや、先日Wikileaksで流出して話題となっているアフガン戦争のデータを使い、可視化のほかデータの正統性の検証も行ってみます。
今回は前回の続きとして、オープン・データをプロットすることをテーマに取り上げます。前回はRの組込みのグラフ描画関数である、plotやts.plotのみを利用しましたが、今回は、外部グラフィックライブラリとして最近非常に注目されているggplot2パッケージを利用します。この連載でも今後、グラフ描画についてはggplot2を利用していく予定です。
また、今回はWebサービスを利用したデータ取得についても取り上げます。
ggplot2は、Rユーザーの間ではデファクトスタンダードのツールとなっているグラフィックパッケージです。
ggplot2の設計思想には、SYSTAT Software Incの計算機科学者 Leland Wilkinson氏が提唱する「グラフィック文法(The Grammar of Graphics)」というものがあります。この「グラフィック文法」は、見栄えの良いグラフを作るという非本質的な作業にユーザーに注力させるのではなく、データが本来持っている姿をグラフに反映させることを目指して提唱されているルールです。
ユーザーが自分の欲しい情報を特定すれば、自動的にソフトウェアが必要な処理をした上でグラフを作成するのが本来の姿で、ユーザーがわざわざグラフを作成したり、調整したりということをやらせない、というのが「グラフィック文法」が実現した形だそうです。Leland Wilkinson氏は、実際にこの「グラフィック文法」をSPSSベースのライブラリとして開発し、現在ではSPSSの標準機能となっています。「グラフィック文法」の詳細は以下の書籍にありますので、興味がある方は参考になさってください。
The Grammar of Graphics http://www.amazon.com/gp/product/0387245448/
このLeland Wilkinson氏の「グラフィック文法」の精神をRで実現するのが、Rice大学の計算機統計学者、Hadley Wickham氏が作成したggplot2です。ggplot2の特徴で、筆者が特に便利と感じているものは以下の通りです。
今回の記事でも色分け設定の自動化やファセットグラフを使います。
ここで本来ならばggplot2のチュートリアルとなるわけですが、このggplot2は巨大なライブラリであり、たとえ入門的な内容であっても、数回の連載では終わりそうにありません。そこで、初歩の初歩をサポートサイトに動画としてまとめましたので参考にしてください。また英語に抵抗がない方は、Hadley Wickham氏自身が講義しているビデオがありますので、それを参考になさってください。
Hadley Wickham's Data Visualization using ggplot2 short course http://blip.tv/file/3362248
リファレンスマニュアルはオンライン上にあります。使い方を一度習得すれば、このオンラインリファレンスマニュアルは非常に使い勝手がよいことが分かるはずです。
ggplot2 refrence manual http://had.co.nz/ggplot2/
また、Hadley Wickham氏の書いたggplot2の本もあります。
ggplot2: Elegant Graphics for Data Analysis http://www.amazon.com/gp/product/0387981403
さらにはブログ形式で、ggplot2による実例コードを提示しているサイトもあります。
Learning R http://learnr.wordpress.com/
以上のように、現在では書籍やオンライン上のリソースが非常に豊富ですので、初歩の使い方さえつかめば、あとは若干の探索と試行錯誤でどうにかなると思います。
さて、抽象的なことだけで終わるのもこの連載の主旨に反しますので、ここで具体的に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年の実質ベースでみた平均企業業績で均す」という比較的煩雑な解析まで踏み込めなかったことをご承知おきください。
Copyright © ITmedia, Inc. All Rights Reserved.