スキップしてメイン コンテンツに移動

投稿

ブログお引越し

http://blog.itoshi.tv/ へお引っ越ししています。メインは新しいほうになります。RSS フィードは http://blog.itoshi.tv/feed/ になります。 最近、プライベートなことは twitter まかせになっていますが、その手のブログも復活させようかと思っています。tDiary は tDiary で気にいっているので、こちらでは、そういった使いかたもあるかな、と思い、こちらを更新する可能性も残していこうかと考えています。

ggplot2 は The Grammar of Graphics の実装

ggplot2 はほかの R パッケージにくらべて不思議な実装になっています。これには理論的な背景がちゃんとあります。そのあたりを勉強しながら tweet したものを集めました。 The grammar of graphics と オブジェクト指向グラフシステム 14:18 ggplot2が不自由なのでちゃんと勉強するわ... # 15:13 ggplot2 は「グラフはオブジェクト指向で書けるよ」と言った Wilkinson, L.: The Grammar of Graphics の実装なのか。グラフの表現は composite pattern っぽいし、レイヤーを重ねていくところは builder っぽい。 # 15:18 Grammar of Graphics では、Object oriented graph system (OOGS) を提案している。OOGSでは、グラフ作成には specification, assembly, display の3つのステージがある、とする # 15:23 グラフというのは(写真やビデオ)のような自然画像と違い、少ないルールの組み合わせから構成されている。これを指定するのが specification というステップ。 # 15:26 グラフ自体がグラフの組み合わせで構成されている場合もある。グラフのコンポーネント(あるいはレイヤー)を組み立てるステップが assembly # 15:27 グラフを display や画像、ビデオなどに出力するステップが display となる # 15:29 ggplot2 の場合は、assembly のステップが builder pattern のようにオブジェクトを + 演算子で加えていく部分になる。display の部分は単に print() になるんだね。 # グラフを specification するルールとは 15:33 さて、グラフにおいて、specification すべきルールってなに? って話になる。The grammar of graphics では 6つの statement から構成される、としている。 # 15:33 ここでミーティングの時間になってしまったので続きはあとで... # 19:26 ミーティングおわた #...

R + Rapache + brew + ggplot2 + RSQLite で作る遺伝子発現データベース

さて、新しいおもちゃを手に入れたら、遺伝子発現データベースを作ってみるというのは定石(主に俺の)なので、作ってみました。 SQLite に発現データをつっこんだデータを RSQLite で取り出して、ggplot2 でプロットし、brew でHTMLを出力しています。 Amazon EC2 上で動作しています。ggplot2 の描写が遅いため、かなりもっさりしていますねー。Amazon EC2 Small Instance は Xeon 1.0-1.2 GHz, 1.7 GB memory 相当らしいです。ggplot2 で画像を on the fly 生成するのは現実的ではなさそうですね。plot() などを使うか、Google Chart API を使うのが現実的かもしれません。また、時間があるときに、plotrix などほかのライブラリと速度の比較をしてみたいです。 Simple Gene Expression Database (R + Rapache + Brew + RSQLite + ggplot2 on Amaozn EC2) なんだか、 Brew, Rapache のなかのひとに褒められた .../// ちなみに、Amazon EC2 で一日 Ubuntu を動かしていると、 このぐらいの料金 になりました。 そのうち github にコードをアップしておきたいと思います。 参考: Ruby on Rails + Gruffを使って、11分で作る遺伝子発現データベース Google App EngineとChart APIを使って簡単な遺伝子発現データベースを作ってみた

Amazon EC2へドメインをひっこした

Joyent (textdrive) を解約して Amazon EC2 にすべてのコンテンツへ引っ越ししている。 wordpress の設定がだいたいできたので、ドメイン名 itoshi.tv を Amazon EC2 の elastic IP address へ割り当てた。 さらに、wordpress を blog.itoshi.tv でアクセスできるように、A Name の blog も amazon EC2 の elastic IP address に割り当て、apache2 のバーチャルドメイン機能で blog.itoshi.tv からのアクセスを wordpress へ rewrite するように設定した。 Amazon EC2 instance は reboot されると、elastic IP address が動的に変更されるが、ドメインを管理している enom.tv が提供している DNS は Dynamic DNS に対応しているので、DDNSクライアントさえ設定すれば問題ないらしい。 残るタスクは、旧ブログや Hiki などのコンテンツの移動だ。

Hello world!

ブログの引越し準備を検討中。試しに Amazon EC2 に Wordpress をインストールしてみている。 テーマいじったり、WP LaTeX plugin とか、SyntaxHighlighter を入れたり。 [latex]e^{\i \pi} + 1 = 0[/latex] or $latex e^{\i \pi} + 1 = 0$ syntax.

Rapache (mod_r) を使って R で CGI を書くよ。テンプレートエンジンBrew編

前回は寧n、いえ、なんでもないです、前回のコードでは、cat() を使ってがんばってHTMLタグを出力していました。これは気持ち悪いです。RのコードとHTMLのコードを分けておかないと、どちらかに変更があった場合に、お互いの影響に配慮しながら修正をしなければならなくなります。これは面倒ですね。 こんなときは、テンプレートエンジンを使って、HTMLを作る部分とRのコードをなるべく分けるのが良いですね。R にも Ruby でいうところの erb のようなテンプレートエンジンがあります。今回は、 brew というテンプレートフレームワークを使います。 brewのインストールと設定 まず brew をインストールします sudo R install.pakcages("brew") q() 次に apache の設定をします。 sudo mkdir /var/www/brew sudo jed /etc/apache2/sites-available/default RHandler に brew を設定します。 [html] # brew <Directory /var/www/brew> #SetHandler r-handler SetHandler r-script RHandler brew::brew </Directory> [/html] brew で実装し仕直す 前回のコードを brew を使って書き直してみます。まずメインのコードです。 cd /var/www/brew sudo jed index.r ほぼHTMLですね。プロット部分を別なファイル hist.r に追い出しています。brew() でこれを読み込みます。 [html] <% setContentType('text/html') %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd...

Rapacheを使ってRでCGI を書くよ。グラフ画像出力編

前回のつづきです。前回は rapache の設定と簡単なCGIを作ってみました。今度は画像を出力して表示する CGI を作ります。内容は、乱数を適当に作ってヒストグラムを作画するCGIです。画像はランダムなファイル名で保存します。 [html] # Functions header <- function(contenttype) { setContentType(contenttype) } html.head <- function(content) { cat("<head>\n") cat(content) cat("</head>\n") } html.body <- function(content) { cat("<body>\n") cat(content) cat("</body></html>\n") } randomFileName <- function(prefix, postfix) { filename <- paste( prefix, ...