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

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 ミーティングおわた #
  • 19:36 specification の 6つの statement とは data, variable transformation, scale transformation, coordinate system, element, guide のこと #
  • 19:40 data はそのまんま、描画するためのデータのこと。 #
  • 19:50 データをプロットするために bin をとってサマライズしたり、ランクのデータに変換したりする必要があるが、この部分が variable transformation の部分です。 #
  • 19:50 ggplot2 の実装では statistical transformation と呼ばれていて、stat_hoge のアレがそうですね #
  • 19:52 scale transformation は単にログスケールにするとかそういう話 #
  • 20:06 coordinate system もまんまですね、極とかデカルトとかそういうこと #
  • 20:07 element ってのはグラフの種類やみための話で、ggplot2 でいう、geometric object に対応するはず。geom_hoge っていうアレですね #
  • 20:09 guide は軸とかレジェンドとかそういうやつ #

  • 20:11 以上のように、ggplot2 は The grammar of graphics の実装になっているわけです #

  • 20:18 ggplot2 を使うにあたって、The grammar of graphics 以外に知っておくべきこととして、データの mapping ぐらいかな? aes を使って軸にデータフレームのどのカラムを使うのかを指定する必要があります。 #



ggplot2の実装について



  • 20:25 str(ggplot()) するとオブジェクトの中身がだいたい The grammar of graphics で言っているような感じになっていますね #
  • 20:29 ggplot2 の具体的な話にはいる。qplot がお手軽総称関数で、これでプロットしておくとさっきの6つの statement をいいかんじにしてくれる。よって、The grammar of graphics とか知らなくてもいい。やたー #
  • 20:31 でも、色々細かいことを指定して、かっちょいーグラフを書くには The grammar of graphics を理解して、ggplot() を使わなきゃ。 #
  • 20:37 ggplot() を使うにしても、便利な geom_hoge() と stat_hoge() いうメソッドがあるので完全に一から組み立てる必要はない。GoF の デザパタで言うところの builder pattern っぽい感じですね #
  • 20:52 このあたりの話ってもう誰かブログに書いてたりすんだっけ? > ggplot2 #
  • 20:59 ggplot2 は S3 な Prototype object-based programming で書かれていますね... #
  • 21:02 Prototype object-based programming はよーわからんのよ、おいら #
  • 21:15 ソースみると、geom_.r というトップレベルのクラスがあってこれには draw method がある。いわゆる template method pattern みたいな感じで、geom-abline.r で draw() が定義されいてるわけか #
  • 21:20 stat_hoge() に関しても stat_.r の calculate() とか calculate_groups() を stat_hoge.r で定義すると。 #
  • 21:26 なんかいろいろなところ作った statement を plot.r のなかで構造体としてまとめる。+ で ggplot オブジェクトを加えていけるのは、plot-construction.r がミソか #
  • 21:30 plot.r で作られた ggplot オブジェクトは最終的に、plot-render.r に渡されて grid.draw {grid} で描画される #
  • 21:30 うん、これで ggplot2 はわかったね、みんな! #
  • 21:33 そして ggplot2 は pure R で実装されているのであった。そりゃ遅いさ。 #
  • 21:47 ggplot2 がゲシュタルト崩壊してきたのでそろそろ自重 #
  • 21:53 @ma_ko いや、プログラムのファイル名が "-" でメソッド名が "_" なのよ #
  • 21:54 一箇所、たしかにまちがっているところあるな #
  • 21:56 @ma_ko The grammar of graphics は Google Books でさっき読んだ bit.ly/7RW59X #



参考書籍:



結局、両方買っちゃいました。

コメント

このブログの人気の投稿

シーケンスアダプタ配列除去ツールまとめ

FASTQ/A file からシーケンスアダプター配列やプライマー配列を除くためのプログラムをまとめてみる。 まず、配列の除去には大別して2つの方向性がある。ひとつは、アダプター配列を含む「リード」を除いてしまう方法。もうひとつは除きたい配列をリードからトリムする方法である。後者のほうが有効リードが増えるメリットが、綺麗に除ききれない場合は、ゲノムへのマップ率が下がる。 気をつける点としては、アダプター/プライマーの reverse complement を検索するかどうか。paired end の際には大事になる。クオリティでトリムできるものや、Paired-end を考慮するものなどもある。アダプター/プライマー配列の文字列を引数として直接入力するものと、multi fasta 形式で指定できるももある。 From Evernote: シーケンスアダプタ配列除去ツールまとめ TagDust http://genome.gsc.riken.jp/osc/english/software/src/nexalign-1.3.5.tgz http://bioinformatics.oxfordjournals.org/content/25/21/2839.full インストール: curl -O http://genome.gsc.riken.jp/osc/english/software/src/tagdust.tgztar zxvf tagdust.tgz cd tagdust/ make sudo make install rehash 使いかた: tagdust adapter.fasta input.fastq -fdr 0.05 -o output.clean.fastq -a output.artifactual.fastq 解説: 入出力形式は fastq/a が使える。リード全体を除く。速い。アダプター配列を fasta 形式で入力できるのが地味に便利で、これに対応しているものがなかなかない。Muth–Manber algorithm (Approximate multiple

DNAを増幅するサーマルサイクラーを自作してみたよ

DNAをPCR法で増幅するために必要なサーマルサイクラーを自作してみました。自作と言っても、いわゆる、PCの自作と同じでパーツを組み立てていく感じです。購入から組み立ての様子を簡単に紹介します。 モチベーション ラボには様々なレクリエーションがあります。例えば、単にどこかに遊びに行ったり、スポーツ大会したり、ひたすら合宿形式でプログレスのプレゼンをするミーティングするなどがあります。それもよいのですが、せっかくなので、普段の研究時間ではトライできないが、研究に関わる hack を行う、というイベントを企画してみました。夏休みの自由研究や社会科見学的なノリです。   うちのラボでは、PCRを使ったウェットの実験技術の開発をしてきました。しかし、サーマルサイクラーのハードウェアの仕組みを体験的に理解している訳ではありません。そこで、サーマルサイクラーを作ってみました。   欧米で始まっている、自宅のガレージやキッチンでバイオロジーを行うムーブメント、バイオパンク、DIYbio を体験しておきたいというのもありますし、Arduino などオープンハードウェア、Maker のムーブメントを体験するのも目的の一つです。ハードウェア開発が思っているほどハードルが下っていることを体験できて、かつ、将来、ウェットの開発だけでなく、装置開発などもできたら、ラッキー、ぐらいの気持ちでやってみました。   購入 今回作ったのは、組み立て式で、かつ、仕様などや設計図が公開されているOpenPCRというサーマルサイクラーです。ハードウェアの仕様・設計図、制御ソフトウェアなどの情報がすべて公開されており、部品からも自作することが可能です。今回は、「設計図から部品や回路のパーツを作り、それらを組み立てる直前のもの」を購入しました。   ChaiBio https://www.chaibio.com/   OpenPCR https://www.chaibio.com/products/openpcr   なぜか http://openpcr.org/  で購入できなかったので、eBay にある ChaiBio で買いました。   OpenPCR - eBay http://www.ebay.com/itm/111096418574   本体価格は

大学の研究室でアカデミックプランが使えるICTツール

自分らでサーバ管理したくないので、SaaS系とローカルで動くソフトのみ。ローカルで動くソフトに関しては、Mac or Docker で動くもののみ。 無償 G Suite for Education  (ドキュメント共有、カレンダーなど) GitHub Education  (ソースコード管理) esa.io アカデミックプラン  (知識共有) Tableau  (データ可視化) Scrapbox  (知識共有) GROWI.cloud  (Wikiなど) 割引 Slack の教育支援プログラム  (ビジネスチャット) Dropbox Education  (ファイル共有、ドキュメント共有) Office 356  (オフィスソフト) Adobe Creative Cloud  (画像編集) AutoDesk for Education  (CADなど) これから申し込んでいくところなので、本当に使えるかはわかりせん。使えた使えないなどの情報やほかのツールでお勧めがあれば教えてもらえると嬉しいです。 アカデミアでなくても無料で使えるツールのうち、うちで使うであろうものは以下に列挙していく。 Google Colaboratory  (データ解析) Overleaf  (論文執筆) Rstudio  (開発, データ解析) VS code (開発)