以前Dan Luuが、Against essential and accidental complexityで言及してたThe Grammar of Graphics。
自分はSpringerの40%オフの時に買った。たまにもっと安いセールもやっているが、そういうのを待っているとなかなか買えないので、欲しいものがあれば40%オフくらいで買ってしまって良い気はしている。
一度挫折したが、【書籍】ggplot2、ElegantGraphicsForDataAnalysisを読み終わって理解を深めたので再チャレンジ。
なお、このページではThe Grammar of GraphicsをGoGと略す事もある。
2.2から読み直し。
2.2の最後まで読む。最後のパイチャートの例が出ている。 今読んで曖昧に感じるのはCOORDの指定でdim2の意味する所(横にgenderで並べるという意味か?)と、ELEMENTのpositionの意味。 他は割と理解出来るな。
2.3を見るとpositionはaesの一種っぽいな。なるほど。
以前読んだ時は細部にとらわれて何を言いたいか全然分からなかったが、 今回はセクションのタイトルとグラフとspecification見て分らない所だけ見直す感じで読むと良く分かる。
MOLAP とかの話は飛ばす。積極的に飛ばしていかないとすぐ何を言ってるか分からなくなる本だよなぁ。
specificationのdataに着目して読んでいけば何書いてあるのかは良く分かるな。 一方で読む側が気をつけないと何言いたいのか分からなくなるのは、やはり記述が良くない気はする。 まぁ他が無いのだから読む側が頑張るしか無い訳だが。
要点だけ読むとそんな時間もかからないので四章も読んでしまった。 個々の変換の意味とかは置いといてTRANSで何するのか、を追うだけなら難しいことは無いね。
集合論的なcross, nest, blendの3つの演算の定義があって、これがなす代数の話が少し続く。
5.1.4から具体的なExpressionの話が始まって、algebraic formとorderというのが出てくる。 ようするに全部展開した上で、一番大きな項の次数に合うように1を掛けて揃えて、 それらが各座標を表す、という話のよう。なるほど。
ただ、A*C/B
のorderは2と書いてある。nestはorderには含まれない、というのはいまいちよく分かってないな。
というかnestをよく分かっていない。
A/Bと書いた時、これはBがタグとして扱われるんだよな。 例えば複数のグラフのcolorとかがこれに相当すると思うんだよな。Aは線を表す集合でBがfacetじゃないが複数のAについてのタグになっているという。
5.1.4.2に優先順位がある。上から、以下のようになっている。
5.2で具体例が出てくる。いや、先に書いてよ…
1980年と2000年で色を変えているが、color指定の所ではp1980+p2000となっていて、これがpop1980とどう対応しているかが分からない。
普通に考えればpop1980にはp1980のフィールドが、pop2000にはp2000のフィールドがある、とかそういう必要があると思うが、 別段そういう事は書いていない。
単純にpointに2つ項があればそれぞれ別の色に書く、というルールがあるのか?
5章は無駄に数学的で分かりにくい部分もあるけれど、 一方で数学的なわかりやすさもあって、この本に期待されていたような内容になってきた気はする。 意味の分からない所もあるけれど、3つの演算の組み合わせで過去にあったさまざまなグラフが記述出来る、 というのはこの本の一番重要な貢献とも思う。
あまりわかりやすくは書かれていないので読む側が適宜飛ばしたり戻ったりしながら重要な所を掴む必要がある。 それは本としての出来は悪いという事だと思うけれど、発明の本質的価値が高くて他の本で解説されていない事なので、 読むに値する事だとは思った。ggplot2本とは重視している所が違うのでこの本を読む価値はあると思う。
序盤の定義は抽象的だが未定義の変数がいろいろ出てきていまいちちゃんと追う気が起こらないので、 6.1.3.1くらいまで読み進めると、具体例っぽいものが出てくる。
これらのナイーブな分類が十分でない、として話は進むのだが、こうした具体例をもとに話を見ていく方が、 最終ゴールまでの道を見失わなくて済む気がする。
よく分かってなかったScale transformationとcoordinate transformationの区別などが書かれている。
なるほど、理解した気がする。なんでscaleのあとにstats操作があるのか、と疑問に思っていたが、 例えばlogにすると線形の関係がある、という場合は、logにしたあとにstatsの操作が行われる必要がある。 こういう事をする為にscaleのあとにstatsの操作になっているのだな。
もちろん、logにしたあとにされては困る統計操作もありえるが、そういう場合に適切な統計操作になるように設計するのは、 グラフを作る人の責任な訳だな。そりゃそうか。
scaleをlogにするとtickはそれに応じて10, 100, 1000と振られるが、 coordの方にlogをすると、tickはscaleに応じて5, 10, 15と振られて、それが端に依る感じになる、との事。なるほど。 なお、scaleの手前の変数にlogを適用すると、log(income)のようなラベルになり、tickは普通に5, 10, 15となるる、とも書かれて いる。これもなるほど。
6.2.1から先だけ読む方がこの章はわかりやすいんじゃないか、という気がする。 6.1は既存の研究との関連などの歴史的経緯だよなぁ。 結論だけに興味があるのなら、6.2.1以降を見てから6.1を解釈する方が良い気がする。
6章を読み終わって、この本は読み方を気をつけないと挫折しがちと感じた。 まず章の最初がどうでもいい話(ギリシャ語ではXXが起源で〜とか)とか、 抽象的な話が続くが、これらはのちに来る具体例を見る方が分かりやすい事が多い。 だから序盤であまり時間を使いすぎるのは良くない。
一方で具体例が出てきた時にどこに気をつけて見るべきか、 という事を知る為に、序盤を見ておく事自体は必要。 序盤は分からない所を頑張って理解するのではなく、分からない所をはっきりさせる為に読む感じで進むのが良い。
後の具体例は逆に細かすぎる話が続く事が多いが、その項目自体がGoG的な理解からはあまり重要では無い、 実装が面倒だが使う分には細かい事を気にする必要が無い項目などは、積極的に飛ばす方が良い。 また、概念的に並列に並べられる物の説明が続く事が多いが、一つを理解すれば、 あとはこれと同じ概念が続くのね、と読み飛ばしても問題無い事が多い。 むしろ個々の項目の詳細を読んでいくとなんの話をしているかわからなくなっていくので、 積極的に飛ばす方が良い。
そういう感じでさらさら読んでいく方が理解も深まるし速く楽に読めるので、そう読むべき本だと思う。
point(position(summary.mean(gov*birth)))
とあった時の、positionの意味がよくわからなくなってきたな。
これはあとで出てくるのかな?
たぶんどれがcolorを表していてどれがpositionを表すのか、とかを区別する為かな?
とするならこれはaes?aesの章まで行けばわかるだろうから先に進もう。
追記: 7.2からの例を見ていたら自分の推測は正しい気がしてきた。
7.2の後半は飛ばす。statisticsが何なのか分かれば十分だろう、という事で。だいたい理解出来たと思うので次に行こう。
この辺まで来ると割と全体を理解出来ている感じだな。 この本で読みにくいのは、未定義の変数などが出てくる所だが、なれてくるとそういうのが入っていても意味は読み取れるようになる。 数学的な厳密な記述とあいまいな記述が混ざっているのが読みづらい所だが、慣れればいける。
ほとんどさまざまな座標変換の話をしているだけで、ここまで来た読者的には個々の変換はあまりしっかり見る必要も無いのでさらさら読んで良さそう。
Coordinateとその変換がどういうものか理解したらあとはどんなのがあるのかを眺めるだけで飛ばし読みする。
序盤が延々と人間の知覚の癖とどうマップするのが適切かについての様々な議論が紹介されている。 が、結論として採用しているのはそういうの全部無視した簡単な物なので、なかなか間の議論を読むのはかったるい。 でも確かにこういう話を理解しておく方が実際に使う時にも良いだろうし、GoGがどうしてこうなっているのかを理解するのにも良いとは思う。 ただ顔の形で多次元を表現する、みたいな全然使わないものにこんなに紙面を割かれてもなぁ…
10章の終わりまで読む。ここまででThe Grammar of Graphicsの全容はちゃんと理解出来た気がする。 stringのblendみたいなのはこれまで出てきてよく分からないなぁ、と思ってた所だが、ちゃんと理解出来たと思う。
この章の説明の7割くらいは面白グラフだが使わないよな、みたいなものなので、その辺は読み飛ばした。 こういう事も出来るという事さえ理解していれば細かい説明はいいだろう。
facetsは直感的に分かりやすいのであまり真面目に読まなくてもいいかもしれないが、 一応目を通しておく。
nestが出てくるので見直す。p 64 5.1.2.2 Nestのあたりがその定義。 まず感覚的にはnestは/の右側でタグ付けするようなもので、グルーピングの一種と思われる。 それを念頭に、もうちょっと厳密な定義を見直しておく。
これらの定義はVarsetに対して行われている。varsetの定義はp30 2.1.9。 VからO~へのmappingのトリプレットをvarsetと呼ぶ。variableのinverse。 O~は複数のO~から同じVへのmappingがありうるので、個々の要素はbag of objectsとなる。
まずcrossから見ていく。まずVの方では、単純にproductとなっている。 一方でABの方ではred, 5が存在しない。 ABは合成されたmappingを表していると思うので、Vとしては存在してもfが存在しないケースがある、という事だな。
一方でnestの方はVの定義が違う。Vが必ず、mappingが存在するものしか存在しない。 イメージとしてはcrossがdomainがproductであるのに対して、nestの方はproductの次元の間をくねくね移動する折れ線のようなもの、という感じだろうか。一次元とは限らないが、独立に自由には動けない。
以上を踏まえて11.2のnestとcrossの違いの説明を読む。 abが二次元だが、a/bは一次元と言っている。 これは結果のテーブルにといて、abが2x2で縦と横に並んでいるのに対して、 a/bが横一列に並んでいる事を言っているのだと思う。
J, MとB, Jが独立じゃないので、2つをセットにインデックスづけされていると考える訳だよな。 それはまた、JとMでカラーリングされているが、B, J, Bであるとも考えられるべき、という事なのだろう。
そのあとの結婚とgenderの組み合わせと妊娠とgenderのくみあわせの話は分かりやすい。 結婚は男女ともしうるのでcrossだが、妊娠は、男性は妊娠してない、の一択となる。 だから (woman, preg), (woman, nonpreg), (man, nonpreg)の3つと考えるべきで、 manとwomanを並列に並べてpregとnonpregをcrossさせると考えるのは適切じゃない、という事だな。
crossでmappingが存在しないケースは観測されていないだけと考えるが、nestではそもそもそういうケースが論理的に存在しない、との事。この区別も分かりやすいな。なるほど。
mirrorはその次の例を見ないとよく意味が分からなかったが、一度理解してしまえば割とstraight forward。 なかなか簡潔に書けて分かりやすいなぁ。 次のシカゴマラソンの例との違いもわかりやすくて良い。
こういうのはGrammar of Graphicsの偉大さだよなぁ。
Guideの章を読み終わり、Part 1の終わりまで来たようだ。 これでGoGの構成要素の説明がすべて終わった事になる。Part 2からは各グラフの意味的な説明が行われるようだが、 GoGを知りたいという自分のモチベーションからすればPart 1で知りたい事は終わっていそうな気がする。
Guideまで読むと、最初の頃よく分からなかったScaleとGuideの違いなども分かりやすくなっていて、理解が深まっている事を体感出来る。 また、途中にいろいろ出てきた既存の研究的な話からどういう事はグラフを提示する時に避けるべきか、 という事も構成要素をまたがって効いてきていて、 グラフを使って何かを示すという事に対する理解が深まっているのを感じる。 正しいグラフの書き方(軸を書けとか単位を書けとか)は大学の一年とかに簡単にはやるが、 その後の人生での使われ方を思えばまったく足りていないよな。 この本は逆に必要以上にそうした事を学べるので、グラフの描き方を学ぶという面でも既存の研究の良いまとめになっていると思う。
不要に読みにくいし難解だと思うけれど、理解出来るようになってしまえば良く書けた本であるのは認めざるを得ない、という感じの本だな。 グラフを書いて他人に見せる人は、読むに値する本だと思う。 データ分析の人などは読んだ方がいい気がするし、 プログラマでもベンチマークとかでグラフ書く事多い人は読んだ方がいいよな。 私のように良く経済の統計からグラフ書く人も読んだ方がいいやね。
一方で、一般の人向けにはもうちょっと分かりやすく書いた本の方がいいよなぁ、とも思う。 グラフを書く時に使われるデータの最初5行を表示するだけで全然読みやすさが違うだろうに。 crossやnestも良くあるSQLの本みたく具体的なテーブル相手に書けば良いのにね。 そしてオブジェクト指向についての謎の語りは全部削除すべき。
あと毎回出てくる用語の由来のギリシャ語の提示は…これはあってもいい気もするが、これのせいで読みにくくなってもいるんだよなぁ。
空間をどうマップするか、という話で様々な空間の例が出ているんだが、なんでそんな話をしているかいまいち見えてこない。 表示されているグラフの、ありうる空間的な意味を列挙している、という事なんだろうか。 でもそれを列挙して何をしたいのかがいまいち良く分からない。
流れとしてはPart 2はsemanticsを扱うという事なので、表示しているグラフの元の空間を見る事でその意味を理解する、という事なのだろうが…
例えばツリーをグラフ理論の元に定義したりしているが、そうする事でツリーの図に対する理解が深まったといえるのだろうか? いまいち列挙するありがたみが分からない。 他にも普通の人は書かないようなへんてこな図(グラフ理論のグラフとややこしいので図と表記)を持ってきて、 これは距離空間になってない、と指摘する事に何か意味があるんだろうか? 感覚的な理解で十分な問題に対して過度に抽象的に扱って、無理やり抽象的に扱う意味がある例を絞り出しているようにしか見えない。 ほとんどの人が使わないグラフの意味を定義する事にこんなに紙面を使う意味はあるんだろうか? 多くの人が使う普通のグラフの意味や理解を深めるなら意味があると思うんだが…
なんか数学的な定義がいろいろあって読むの苦労する割には得るものが無いなぁ。 次の14章も同じ感じだったらもうちょっと読み飛ばしていこう。
14章と15章もサラサラと読んでみて、ちょっとPart 2をどう読むべきかを理解出来てきた気がする。 Part 2の各章は、
という構成になっているのだが、1と2の結果3になっている訳では無い。 1と2は現時点での理解がまとめられていて、その結果なんだ、という結論にはなっていない。 既存の論点や研究などを外観する程度の理解で良さそう。
そして3の具体例もそれほどシステマティックな話では無いので、関連するトピックがこんなふうに表出するんだな、程度で良いと思う。
1とか2を真面目に理解してもその分野を研究する気が無ければあまり意味が無い。 それよりは1と2でどういうトピックが扱われているかに集中して、中身自体はそれほど気にせずに進む方が良さそう。 3の具体例でもあまりそれの表す事などを考えずに、1と2の関わりを眺めるくらいでサラサラ先に進む方がいい気がする。
そういうふうに14章と15章を読んだら、割と言いたい事が理解出来た気がする。
読み終わった〜!結構根気の要る本だったが、頑張った。
Part 2は読み飛ばした所も多いけれど、これは正しい読み方と思う。 さすがに「そこでXMLですよ!XMLならパーサーもあるしツールも揃っているし(ry」とか今さら言われてもねぇ。
ただナポレオンマーチとかの当たりの話はなかなか良い。ここまでの集大成という感じでもあるし、記述もシンプルですぐに理解出来て強力さがわかる。 そのあとの蝶々の例も、グラマーに基づいて記述をする事でツリーでは無いというのは説得力のある話で、 このアプローチの正当性を示せている気がする。
最後まで読むとGrammar of Graphicsで分からない所は残っていないので、良く理解出来た事がわかるし、 最後の所に書いてあるパイチャートがpolarでstackなintervalのGraphicsだとかそういう話は確かにちゃんと理解出来るようになっていて、 この本から多くを学び取った事が自覚出来る。
せっかくなのでブログにしてみた。