【書評】Pythonではじめるベイズ機械学習入門
はじめに
講談社サイエンティフィク様より、2022/05/24 発売、森賀新/木田悠歩/須山敦志・著の、『Pythonではじめるベイズ機械学習入門』を御恵投いただきました。ありがとうございます!!
非常に重厚な本なので、隅々まで精読できていないのですが、一通り目を通して、いくつかのコードを実行してみたので、感想を共有したいと思います。
タイトルから明らかなように、本書ではPythonにより、様々なベイズ統計モデリングや機械学習(例えば線形回帰モデル、階層モデル、状態空間モデル、ニューラルネットワーク回帰)を行う事例を紹介しています。シンプルなものはPyMC3というパッケージで、必要に応じて各種分析に適したパッケージを使用しています。
一方僕はこれまで同様の分析では、R言語上でStanを使用してきました。これは僕自身が長らくRユーザであることと、松浦健太郎・著『StanとRでベイズ統計モデリング』で主にベイズ統計モデリングを学習したことによります。
よって以下の書評では、時折これら2冊を比較しながら、本書『Pythonではじめるベイズ機械学習入門』の特長を紹介したいと思います。
本書の概要
上記のように、本書はPython上で確率的プログラミング言語を用いることで、ベイズ統計モデリングや機械学習を行うための、解説書です。
- 線形単/重回帰モデル
- 一般化線形モデル
- 階層ベイズモデル
などから導入し、数式・グラフィカルモデルとともにPyMC3のコード例を丁寧に解説しています。ここまでは『StanとRでベイズ統計モデリング』とも共通していますが、この直後に
- ガウス過程回帰モデル
の紹介が続くところが、面白いと思いました。ここで数学的には難易度が跳ね上がるので、「ええ、ここに書くんだ?!」と驚きました。『StanとRでベイズ統計モデリング』でもガウス過程について言及はありますが、恐らく難易度やコードの長さなどを考慮してか、コード例などは載っていません。
一方本書では、目的に応じて様々な確率的プログラミング言語を使い分ける方針を採用しているので、ガウス過程に特化したGPyTorchというパッケージを用いることで実装を試みています。
このあたりが、類書との違いだと思われます。
また別の章には、
ひいては深層学習モデルとして
- ニューラルネットワーク回帰モデル
- 畳みこみニューラルネットワークを利用したPixcelCNN
- 深層ガウス過程
などもたっぷり紙面が割かれています。これらまで盛り込んだ本は、そうそうないのではないでしょうか。
個人的には、時系列情報を扱う「状態空間モデル」の説明における、
ある時点tにおいて、GPSで車両位置を観測する。ただしこの観測値は真の車両位置から誤差がある
という例がとても分かりやすかったです。
類書との相違点
ベイズ統計モデリングを扱った書籍は色々とありますが、本書はいわゆる教科書のように初学者をゆっくりとスキルアップさせていくことを目的にしているというよりは、ある程度の知識・技術は習得済みであることを前提として、社会的問題にアプローチする際に必要となる可能性がある知識・技術を提供する、という位置づけなのだろうと思います。
実際、Pythonの基本的な書き方は習得済みであることを前提に、本書内では解説がありません。また書籍内で記載されている数式も、読者が線形代数に慣れていることを前提とした書き方で、『StanとRでベイズ統計モデリング』内での表記に比べるとだいぶ「難しそうに見える」と思います。
教育のことを考えると、あれやこれやと道具を使い分けるのは混乱を招きかねないので、例えばStan一本(松浦健太郎・著『StanとRでベイズ統計モデリング』)や、Rのbrmsパッケージ一本(馬場真哉・著『実践Data Scienceシリーズ RとStanではじめる ベイズ統計モデリング』)で解説を貫徹させることは意義が大きいと思います。実際にこれらの本では、非常に簡単な例からはじめ、ベイズ統計モデリングとは、データ生成メカニズムに想像を巡らせることであるということを、言葉を尽くして丁寧に説明しています。
一方で現実的なデータ分析業務を想定すると、効率的に目的を達成させられるツールを活用することも必要となるし、時には数学的にかなり難解な手法を採用するべき状況もあるでしょう。なので本書では、目的に応じてパッケージを使い分けるという立場を採用しているのだと思います。
これは著者らが全員、企業所属の研究者であることも関係しているのだろうと思います。まさに少し前に、著者らが主催する、以下のセミナーに参加したことがありました。
ここで、著者の一人である須山さんがおっしゃっていた
皆さんの中には、「企業は金を稼ぐもの」と思っている人がいるかもしれないが、その考えは古い。今の企業は、「社会的課題を解決しようとするもの」。我々はデータ分析の力を使ってそれに挑む。
という言葉が印象的でした(多少表現が違うかもしれません)。本書を読みながら、この言葉が何度も思い出されました。
なお誤解のないように言葉を補っておきますが、本書では初学者を置き去りにしているというわけではありません。むしろ、MCMCアルゴリズムや種々の確率分布について、数式や乱数発生シミュレーションによって丁寧に解説を行っており、教育的な利用にも適していると思いました。
おわりに
僕自身、勉強中の身であるし、普段はR言語を用いることが多いため、まだまだ本書を時間をかけて精読しなければなりません。特に後半の内容は初めて学ぶことも多く、読了後に改めてブログに追記するかもしれませんが、現時点で僕が読み進めた限りにおいて、上記のように非常に素晴らしい書籍だと思いました。
もちろん上記で引用した、類書である
などもおすすめです。
Enjoy!
【書評】PsychoPy/Pavloviaによるオンライン実験
本記事について
著者の十河宏行先生、出版社の朝倉書店様より、『PsychoPy/Pavloviaによるオンライン実験』をご恵投いただきました、ありがとうございます!!
本書は、心理実験作成用ソフトウェアPsychoPyの、Builderという機能を用いて実験を作成し、ひいてはサーバにアップロードすることによりオンライン実験を実現する方法を解説した本です。
一方、PsychoPyはCoderと呼ばれる機能を用いて、Pythonコードを書くことでも実験を作り上げることが出来ます(が、こちらは主に非オンライン実験を想定した作成方法)。Coderを用いたPythonプログラミングは、2017年発売の『PsychoPy心理学実験プログラミング』に詳しいので、これら2冊はセットで所持しておくと良いと思います。
また以前に、2020年発売の『PsychoPyでつくる心理学実験』もご恵投いただき、その際にも書評を書きましたので、こちらもご参照ください。
以下では、新刊である『PsychoPy/Pavloviaによるオンライン実験』について紹介します。
そもそもPsychoPy Builderとは?
心理学実験では、PCを用いてディスプレイ上に呈示する刺激の物理的特徴や呈示時間などを厳密に制御し、実験参加者の反応を精密に記録することが求められます。そのためにはプログラミングが重要になるのですが、当然ながら一朝一夕で習得できるものではありません。
そこで、GUIで実験を作成できるソフトウェアがあれば非常に嬉しいのですが、問題はそういったソフトウェアは有償で、簡単に入手できるものではないということです。筆者(私)自身、卒論でC言語を用いて心理実験を作成しようとしたものの挫折し、たまたま指導教員が持っていたSuperLabという有償ソフトウェアを用いて実験を行ったという過去があります。
一方、PsychoPyはオープンソースなので無料で使用できます。しかも、安かろう悪かろうではありません。実験を厳密に制御するための様々な設定が可能であるばかりか、今なお開発が進み、様々な刺激の呈示・反応の取得がどんどんやりやすくなっています。
また本書の著者である十河先生のご尽力により、インタフェースの日本語化も行われており、学習も容易です。実際、筆者(私)は実験実習でPsychoPy Builderを用いた心理実験の作成を指導していましたが、学生はすぐに習得し、その後ラボに配属された場合には速やかに卒研実験を作成していました。
本書の特長
さて、前置きが長くなりましたが、ここからは本書の特長を紹介します。そもそもPsychoPyの解説書自体が少ないので(特に日本語では)、それだけでもありがたいのですが、主に以下の3点が重要かと思います。
-
PsychoPy Builderの基本的機能の解説
- Pavloviaサーバへアップロードすることによるオンライン実験の実現
- 様々な職人技の紹介
以下では特に、2点目・3点目について紹介します。
オンライン実験の実現
「よく統制された実験室に参加者を招き、一人ずつ実験を行う」という従来の心理学実験は今なお重要ですが、それと同時に、「多くの人にインターネットブラウザ上で実験を体験していただく」というオンライン実験が近年注目されています。
オンライン実験を実現するためのプラットフォームは様々あり、例えばlab.jsというアプリケーションでも無料で・GUIでオンライン実験を作成・実施可能です。
一方、GUIによる「実験の作りこみ」においては、圧倒的にPsychoPy Builderに軍配が上がります。本書では、PsychoPy Builderで作成したプログラム(JavaScriptファイルが生成されます)を、Pavloviaと呼ばれる専用サーバにアップロードすることで、実験プログラムのオンライン実施やデータ保存を行う方法が丁寧に解説されています。
「GUIで実験を作ることはできる、でもサーバとかよくわからない...」という人は多いのではないでしょうか。本書では画像付きでPavloviaサーバの利用方法を解説しているため、心配無用です。
また、実はPsychoPy Builderでプログラムを作成したら、あとはアップロードするだけ...というわけにはいかず、いくつか工夫しなければならないことがあります。これは「3.5節 実験セッション開始前の工夫」などで取り上げられているのですが、様々なTipsが随所で紹介されているのも嬉しいです。
様々な職人技の紹介
上で「PsychoPy Builderは学習が容易」と書きましたが、実はここには「よほど複雑な実験を志向しなければ」という条件がつきます。これはGUI全般の宿命で、複雑な実験に対応するメニューを増やすとゴチャゴチャして分かりにくくなるので、仕方のないところです。複雑なことがしたければPsychoPy CoderでPythonコードを書き、作りこむのが良いかもしれません。
ただし、PsychoPy Builderでも工夫すればある程度柔軟に実験を作りこむことができます。例えば「5.4節 チュートリアル4:系列位置効果」では、複数の単語を記憶してもらう実験が紹介されています。単語記憶実験では、呈示するための単語リストを事前に用意することがありますが、
- 条件1では単語リストA
- 条件2では単語リストB
という割り当てを行うと、条件間で記憶成績が異なっても、それは条件の影響なのか単語リストの影響なのかが区別しづらいという問題があります。そこで条件と単語リストをうまくシャッフルすることが重要なのですが、それをGUIで実装するためには一手間がいります。そのような、実験実施上必須のテクニックを実例とともに解説されているのが、「実験心理学者が書いた本」の特長です。
おわりに
これは本書『PsychoPy/Pavloviaによるオンライン実験』、姉妹書『PsychoPyでつくる心理学実験』『PsychoPy心理学実験プログラミング』に共通することですが、「色々なことができる、だからこそ、網羅的に紹介できない」という事情は理解しておく必要があると思います。
つまり、「自分が作りたい実験とピンポイントに対応する記述がない、どうすればいいんだ」という悩みは必ず発生します。
十河先生のWebサイトに、膨大な解説があるので、まずはこちらから必要な情報を探すのがよいでしょう。
Enjoy!
【新刊案内】『改訂2版 RユーザのためのRStudio実践入門〜tidyverseによるモダンな分析フローの世界』
本記事について
2018年6月29日に、技術評論社様より、『 RユーザのためのRStudio実践入門〜tidyverseによるモダンな分析フローの世界』第1版を発売させていただきました。
ありがたいことにご好評をいただき、2021年5月11日現在、第1版は4刷まで発売されています。
そして3年の時を経て、2021年6月3日、いよいよ第2版となる、『改訂2版 RユーザのためのRStudio実践入門〜tidyverseによるモダンな分析フローの世界』が販売予定です(予約受付中)。
第1版は、「#宇宙本」の愛称でご案内させていただきましたが、第2版はデザインを一新し、それに伴い愛称も「#宇宙船本」と改めました。宇宙へいざ旅立とうというメッセージがあるとかないとか。
第1版と第2版の違い
1. 最新のRStudioや各種パッケージの機能を反映
これまで、第1版を重版する際にも、最新の内容をある程度は反映して加筆修正を行ってきました。しかし、重版ではページ構成を変えられないという制約があったため、原則として脚注でこっそり最新の内容に言及することしかできませんでした。
第2版では、まるっと書き換えても構わないということだったので、各章、多かれ少なかれ、内容が更新されています。
例えば
- RStudio 1.2から追加された、Jobsペイン(任意のスクリプトを、現在のプロセスの裏で実行できる機能)
- サポートが終了したパッケージの削除と、代替パッケージの紹介(特に第2章)
- パッケージのメジャーアップデートに伴う、新たな関数や記法の紹介(特に、第3章のdplyr/tidyrパッケージ)
などです。
僕は第4章(ggplot2を用いたデータ可視化)を担当しているのですが、実は第4章の修正点は少ないです。というのも、ggplot2パッケ―ジはちょこちょこバージョンアップしているとはいえ、根本的な部分はほとんど変化がないからです。そのぶん、第1版では紹介しきれなかった関数を新たに盛り込んだり、最近注目されている(そしてすぐにサポートが終了することはなさそうな)パッケージを新たに紹介したりしています。
主要な変更点を上げると、以下です。
position_dodge()とposition_dodge2()の細かい挙動や違いについて、説明を追加
棒グラフや箱ひげ図など、X軸に離散変数をマッピングした可視化を行う際に、position = position_dodge()
という引数が明示的/暗黙的に利用されることがあります。
実はggplot2でX軸に離散変数をマッピングするのは色々と面倒なことが多くて、引数を追加して細かな設定を行わなければいけないことがあります。今回の改訂では、position_dodge()
や類似したposition_dodge2()
という関数の挙動について、説明を追加しました。
複数のグラフを並べて表示するためのパッケージ
第1版でも3つのパッケージを紹介していましたが、近年ではpatchworkパッケージに注目が集まっています。実は第1版の時点でも(発売直後だったかも)patchworkパッケージはリリースされており、個人的には推したいと思っていたのですが、当時はまだCRANに登録されていなかったので、紹介を見送ったという経緯がありました。
現在ではCRANから容易にインストールが可能になったので、初心者にも安心して薦められます。patchworkの優れているところは、ggplotオブジェクトを+
などの演算子で繋ぐだけで容易に図を結合できる点と、レイアウトの自由度が高い点です。
日本語の解説記事もWeb上にはいくつか存在するので、ぜひ使ってみてください。
説明しなかったこと:地理空間システム(GIS)のデータの可視化
簡単に言えば、ggplot2で地図を描く方法です。近年のアップデートによって、これが容易に実現できるようになりました。
ggplot2の目玉の1つでもあるので、紹介しようか悩んだのですが、別途必要な知識が増えるので、あくまで本書は入門書であることを考慮し、触れないこととしました。
ただし、この機能について詳しく紹介している書籍(以下)を参考文献に追加しましたので、興味がある方はそちらもご参照ください。
2. 約50ページ、付録を追加
第1版を出版した当初から、「文字列処理には触れていないのかー」という声をいただいていました。そこで第2版では、
- stringrパッケージによる文字列データの処理
- lubridateパッケージによる日付・時刻データの処理
について、計50ページ近く内容を追加しました。僕はこのうち、stringrパッケージによる文字列データの処理を担当しました。自己満足かもしれませんが、かなりお気に入りの内容です。
本書の3章や4章では、一貫してmpg
データセットを用いて説明したように、1つの章の中で同じデータセットを使い続けるということは、読者の認知的な負担を減らすうえで重要だと考えています。
そのため、多様な文字列処理用の関数を適用可能な、文字列データを見つけてくる必要がありました。あーでもないこーでもない、と悩んだ結果たどり着いた答えは...ぜひ本書をお手に取って確かめてください!
またこのパートでは、正規表現についても簡単に紹介しています。正規表現は、Rに限らず様々なプログラミング言語で活用できる技術なので、今後R以外の言語の習得も目指している方にとって、有用だと思います。
ただしstringrパッケージ内で正規表現を用いる際には、少しだけ独特の書き方が必要になる場合があるので、注意してください。
最後に
第1版を持っているが、第2版も購入しようか迷っている方へ
これについては、他の著者がブログで言及してくださっているので、ご参照ください。notchained.hatenablog.com
僕個人の意見を言うとすれば...第3章のためだけでも、購入するメリットはあると思っています(僕が書いた章ではないんですが)。これは他の章が相対的に価値が低いということではなく、次の理由によります。
最近のバージョンアップによって、3章で紹介しているdplyrパッケージを用いてデータ整形する際の記法が、大きく変わりました。大きくと言っても、全くの別物という意味ではないのですが、across()
やwhere()
などの関数を駆使した、新たな書き方を覚える必要がでてきました。正直に言えば、僕自身はけっこう難しくなったという印象を持っています。これから初めて学ぶ人にとっても難しいだろうし、すでに昔の書き方が染みついている人が新たに覚えなおすうえでも難しいだろうと思っています。
※もちろん容易に移行できる人はたくさんいると思いますが
また3章では、第1版でほとんど紹介していなかったtidyrパッケージの関数についても、説明が大幅に増えています。
いずれのパッケージに関しても、図を用いながら挙動を丁寧に説明しているので、イメージが沸きやすいと思います。
「いや、そりゃ著者にとっては買ってほしいでしょうよ」と思われるかもしれませんが、そういう下心がなく上記のように言っているというのは、信じていただくしかありません。
改訂にあたっての、個人的な思い
発売から3年経っても、未だに購入してくださる方がいること、そして第2版を出版できたこと、本当に嬉しく思います。ありがとうございます。
僕以外の著者3名はいずれもR界隈では有名で、よくご存じの方も多いと思いますが、そんな中にcontributorでも勉強会主催者でも何でもない僕が参加させていただけたことは、この上ない幸運だったと思います。
著者がこんなことをいうのはどうかという気もしますが、執筆しながらも学ぶことが多く、僕自身は著者でありながら読者でもありました。第2版の表紙絵は、宇宙から宇宙船に変わりましたが、この宇宙船は、「皆さんを」乗せる船ではなく、僕自身がその乗客の一人であると思っています。
本書が「皆さんと」tidyverseを旅するきっかけになれば幸いです。
Enjoy!!
【Tokyo.R #91】Road to ggplot2再入門
ちょっと前のことになりますが、第91回Tokyo.Rで発表してきました。
今回は初心者セッションが充実した回だったので、ggplot2パッケージを用いた可視化について解説しました。資料は以下です。
Enjoy!
【書評】意思決定分析と予測の活用 基礎理論からPython実装まで
本記事について
著者の「Logics of Blue」馬場さんより、2021/02/25発売の「意思決定分析と予測の活用 基礎理論からPython実装まで」をご恵送いただきました。ありがとうございます!
経営工学やオペレーションズ・リサーチが専門の同僚がいるのですが、畑違いのためどういう専門領域なのかわかっておらず、理解したいなと思っていたところでした。本書の内容はまさにこれらの領域や、システム工学、決定科学などの領域で活用されるようです(本書p4より)。
初学者として拝読しましたが、非常に面白かったです。本書で取り上げられている例の一つに、「ベネフィットとコストを勘案すると、機械を何台稼働させればいいか」という意思決定問題があります。僕だったら漠然と「うーん、とりあえず、3台くらい動かしてみてから考えよっか」と決めたくなってしまいます。
でも好況不況や、それぞれの機械のランニングコスト、社会的需要などについての情報があれば、ある基準を最適化するような予測が導ける、ということが本書で解説されています。
考えてみればそりゃあそうで、僕自身の日常生活では意思決定のミスが起こっても、そこで生まれる金銭的損失はそんなに大きくありません。うっかり終電を逃してしまって、仕方ないからタクシー使うか、てへへ、くらいのもんです。
でも金融とか経営とか、動くお金が膨大になるような場面では、ほんの小さな選択肢の違いが、とんでもない利得/損失の違いに帰結することもありえますよね。そういった場面では感覚的に意思決定するわけにはいかないので、手元にある情報から計算して、ある基準を最適化する予測を導く必要があるということだと理解しました。
【追記】
「予測を導く」っていうのは、本書の内容を表す正確な表現じゃなかったかもしれません。色んな予測結果が得られているうえで、予測結果をどう活用するか、ということが本書の焦点のようです。
以下、簡単な書評です。
本書の特長
1. 簡単な事例で、豊富な理論を紹介
本書で解説されている内容は、基本的に「利得行列」と呼ばれる情報の一覧を手掛かりにしています。現実的な意思決定では、この利得行列が複雑になったり、状況を想像することが難しい場合もあるのだと思いますが、本書では非常にシンプルな事例を用いているため、本質的な部分が分かりやすいと思います。
本当に多くの理論や数式が紹介されるので、「この添え字jって何だっけ...」など混乱することもあると思いますが、事例がシンプルなのですぐに立ち戻って思い出すことができます。
対して、数式や理論は多く紹介され、かなり濃密な内容だという印象を受けました。例えば第2部のエントロピーの話などは難しい内容だと思います。この辺の内容は、(馬場さんの本ではありませんが)以下の書籍なども参考にするといいかもしれません。
第3部になると、さらに数式の難易度が上がります。数式だけを見ると、「ウッ...」と気後れしてしまう人もいるかもしれませんが、ちゃんと地の文を読むと、丁寧な解説が行われています。「この数式のこの部分、どういう意味なんだ...」と思ったらその近くには「これは~~という意味です」と解説がついています。数式パートは紙と鉛筆を用意して理解し、後述するプログラミングパートではPCで実装する、という学び分けが良いのではないでしょうか。
馬場さんは、他の書籍でもそうですし、実際に講演を拝聴したこともあるのですが、本当に読者/聴衆を置いてきぼりにすることがありません。躓きそうな石があったらちゃんと除いてくれる、そんな気遣いを感じます。
2. Pythonコード
馬場さんの本といえば、事例、数式、そしてプログラミングコードの3点セットでお馴染みです。恐らく本書で紹介されている全ての計算において、Pythonコードが掲載されていると思います。実際に手を動かしながら学べるので、自分が今何をやっているのか、理解しやすいと思います。
多くのライブラリを使いこなして計算するのではなく、numpyとpandasを組み合わせて、時には関数を自作して、数式を実装していく感じです。馬場さんの著書「Pythonで学ぶあたらしい統計学の教科書」の進め方に近いですね。
注意が必要なのは、本書はPythonそのものの解説書ではないということです。初めてPythonを使う人を想定して、関数の定義方法や、numpyのndarray、pandasのDataFrameなどの簡単な説明はありますが、必要最低限にとどめられています。
また、本書はコードをJupyter Notebook上で実行することを想定していますが、Jupyter Notebook自体の説明はありません。
ただし、これらは説明が不十分と捉えるべきではないと思います。本書があくまで伝えたいのは理論の部分であり、それらを丁寧に解説した結果すでに400ページ近くの分量になっています。ここでPython自体の説明も紙面を割いてしまうと、本当に伝えたいところを削らざるを得ないという判断だと思います。
サポートページはしっかりと用意され、そのURLは本書内に記載されていますし、有益な参考図書も多く紹介されているので、全く心配はいりません。
Python自体を初めて触る人は、適宜、他の参考図書なども併用しながら読むと良いと思います。
まとめ
僕自身、この書籍がターゲットとする内容が専門ではないので、踏み込んだ書評ができませんでしたが、初学者目線では非常に勉強になりました。第4部では、選好や効用関数など、経済学でお馴染みの内容が紹介されるので、経済学に関心がある人は、この辺りの内容も役に立つかもしれません。
僕自身、これから何度もこの書籍を読み返し、勉強していきたいと思います。
Enjoy!
【書評】データ分析のためのデータ可視化入門
本記事について
訳者の方々から、2021/01/26発売の、「実践Data Scienceシリーズ データ分析のためのデータ可視化入門」をご恵送いただきました。ありがとうございます!
本書は、「Data Visualization A practical introduction」の邦訳です。
原著は過去に私費で購入していたのですが(写真左)、自分で読むのも人に貸すのも、和書のほうが圧倒的に楽なので、たいへん嬉しいです。
以下、書評です。
本書の特徴
1. 「可視化という作業」自体の解説
タイトルからも分かるように、本書はRのggplot2パッケージを用いた可視化の入門書です。この手のソースは、事例集やハンズオン形式のコード紹介に注力したものが多いですが、本書ではまず最初に、なんと40ページ近くも費やして、「可視化って奥が深いんだぞ!」ということを熱弁しています。
可視化は統計的解析とセットで用いられることが多いと思いますが、可視化を怠ると、統計的解析において深刻な問題が発生しえます。有名なのは、「記述統計量(例:平均、分散)が同じだが、データの分布がまるで異なることがある」という事例ですね。
本書でも「アンスコムの四重奏」という事例から始まり、様々な観点で可視化の重要性を訴えています。
個人的に面白いと思ったのは、「ポップアウト」や「ゲシュタルト」など、知覚・認知心理学的な観点でも説明している点です。情報の取捨選択に係る能力を注意(attention)と呼びますが、「頑張って注意を払わないと情報が取得できないグラフ」もあれば、「注意をさほど払わなくても情報を選択できるグラフ」もあります。ヒトのことを理解したうえで、ヒトが効率的に情報を獲得できるように工夫しよう、というメッセージが込められていて、第1章はとても読みごたえがあります。
2. 丁寧な事例解説
ggplot2は、ひとたびクセを掴むと、かなりスラスラ書けます。それは可視化の文法(Grammar of Graphics)に基づいて設計されているからです。しかし、細かい調整をしようとすると、めったに使わない関数や記法が必要となり、とたんに難しくなります。
本書では、基本的なggplot2の使い方を丁寧に解説しているだけでなく、けっこうマイナーな書き方まで紹介しています。マイナーというのは、「そんなんいつ使うねん」という意味ではなく、「ちゃんと説明しようとすると難しいから、多くの書籍では恐らく回避されていたところ」という意味です。
原著の「A practical introduction」という副題の通り、実践的な用途において必要となる、痒いところに手の届く書き方まで詳しく解説されています。例えば第6章では「予測の図示」という方法が紹介されています。散布図に対して近似直線を引くだけなら簡単なのですが、予測というのは直線的関係だけに限りませんし、実用的には推定結果も点推定だけでなく区間推定まで行いたいものです。そういったところまでちゃんと解説されているのが嬉しいです。
3. 地理データの描画
これは訳者の一人、瓜生さんが何より得意とされている内容だと思います。ggplot2では、地理データの描画が可能です。例えば日本地図を、人口密度に応じて都道府県ごとに色を塗り分ける、などが可能です。最新のバージョンでは、geom_sf()
という関数が存在し、地理空間システム(GIS)データを扱いやすくなっています。
恐らく原著が出たタイミングでは、まだgeom_sf()
が実装されていなかったのだと思うので、本書では既存のgeom_polygon()
を用いて地理データが描画されています。しかし地理データの色を塗り分けたり、地理的な空間配置を考慮したグラフを描いたりする際に、本書の内容は最新のggplot2でも活用できると思います。
個人的には、地理データの描画はすごく苦手だったので、こうして体系的な解説が日本語で読めるというのは、非常にありがたいです。
4. 訳者の技量
僕は(もう閉会しましたが)Hijiyama.Rなど、西日本で勉強会に参加することが多く、Tokyo.Rなど東日本の勉強会に参加したことがありません。そのため実は、本書の訳者のお三方とは、直接の面識はないのですが、皆さん様々な解説記事・資料をインターネット上に公開されているので、日頃から「なんてすごい人たちなんだ」と思っていました。
そんな方々が翻訳されているので、日本語としての自然さや、訳語の適切さについては、言うまでもなく優れていると思いました。ただ何より僕が感動したのは、「翻訳者の判断で、原著とは違うコードを使用したこと」です。
tidyverseパッケージ群は、開発が盛んであるがゆえに、関数がコロコロ変わりがちです。335ページの脚注を見ると、「原著では(dplyrパッケージの)sample_n()
関数を使用していたが、dplyrバージョン1.0.0から追加されたslice_sample()
関数に書き換えた」とあります。最新の仕様をフォローしているからこそ出来ることですよね。
まとめ
上記のように、本書は単なる「ggplot2の解説書」ではなく、「ggplot2を用いた、可視化の解説書」になっています。識者の方々が翻訳を担当されたことにより、最新の仕様も考慮した訳書になっています。
本書はかなり詳しく書かれているぶん、上記のように深いところまで説明しているので、もしかしたら「うわああ、覚えることが多い~~」と焦ってしまう人もいるかもしれません。まず本書の第1章を読んで可視化の重要性について理解を深めたのち、いったん別の情報源でggplot2を簡単に学び、そのあとで本書に戻ってくるのでもよいかなと思いました。
Hadley Wickham著の「R for Data Science」はお勧めです。
あと、書評に拙著を紛れ込ませるのは下品だと思うのですが(本当にごめんなさい)、「RユーザのためのRStudio[実践]入門」も入門書としてお勧めです。現在、内容の刷新+内容の大幅追加を行った第2版の改訂作業を行っている最中ですので、遠からずご案内できると思います!
すいません、最後に宣伝をしてしまいましたが、「実践Data Scienceシリーズ データ分析のためのデータ可視化入門」は本当にお勧めです。皆さんも是非! Enjoy!
【書評】「Rで学ぶ統計的データ解析」
本記事について
講談社サイエンティフィク様より、データサイエンス入門シリーズ「Rで学ぶ統計的データ解析」を教科書見本としてご恵送いただきました。
実はデータサイエンス入門シリーズはほぼ全巻購入していて、大好きなシリーズです。
書評というと偉そうですが、この本も本当に良い本だなと思ったので、簡単に感想を書きたいと思います。
(フルカラーで3000円って破格ですよね...)
本書の特徴
1. 最小限のR環境
最近はもう、RはRStudio上で実行するのが標準的だと思いますし、tidyverse
パッケージ群(例えばデータフレーム操作はdplyr
、可視化はggplot2
)を活用することが増えてきたと思います。
個人的にはRStudio+tidyverse
パッケージ群が好きですが、導入はそれなりに面倒くさいとも思います。RStudioは多機能が故にどこを見ればいいか最初は分かりづらいし、tidyverse
パッケージ群はインストールに失敗することもあります。あと開発が盛んなので、関数が増えたり減ったり変わったりもしますし。
一方本書では、RStudioは使わず素R環境で説明が行われていますし、特別なパッケージのインストールもほとんど求めていません。実はRは、デフォルトでもかなり多くの計算用関数・可視化用関数があるんですよね。第1章・第2章で、baseのRだけで出来ることを、かなり詳しく紹介してくださっています。apply()
ファミリーなど、ちょっと癖があるけど使いこなしたら便利な関数もちゃんと説明されているのが嬉しいです。
特に第2章の「データの可視化と要約」のところは、かなり勉強になりました。僕はRを本格的に使い始めた直後からggplot2
を勉強したので、実はbaseのRで可視化する方法をほとんど理解していなかったんですが、「こんなに色んなことできたんだ...」と驚きました。
もちろんパッケージを全く利用していないという意味ではなくて、例えばクラスター分析でclustrd
パッケージを使うなど、要所要所で必要なパッケージの紹介もなされています。
2. 明確な道筋
データ分析の教科書には、色々な分析方法が紹介されていますが、初学者のうちはそれぞれの分析がどのような関係にあるのかを理解するのは容易ではないと思います。例えば「回帰分析」と「分散分析」は多くの教科書に載っていると思いますが、実際には互いに密接な関係があるにもかかわらず、これらの関係はあまり明確に言及されていないことも多いと思います。
一方本書では、
- 第3章:回帰分析
- 第4章:回帰分析(特に、正則化法を用いたリッジ回帰など発展的方法)
- 第5章:判別分析(被説明変数が質的変数の場合における回帰分析のようなもの)
- 第6章:ロジスティック回帰モデル(判別分析と関係した分析)
- 第7章:決定木に基づく判別モデル(判別分析やロジスティック回帰モデルとは違う強みがあることを紹介)
- 第8章:主成分分析(判別分析と似ているところはあるが、情報の圧縮という、別の目的のため)
- 第9章:クラスター分析(判別分析などと同様、分類が可能だが、教師あり/なしという違いがある)
という流れで、明確に筋の通った話が一貫して続いています。各章で全然違う分析を紹介しているという印象は全くなく、分析同士がどのような関係にあるのかが非常に明確に説明されていると思います。
また第10章以降は、ブートストラップ法やシミュレーションの実演が行われており、「こういう魔法みたいな手法/法則があるんだよ」ではなく、その挙動を実際に確かめられるようになっています。
3. 「まずは実行しよう、数理はそれからだ」という帯
帯に書いてあるコメントです。これだけ読むと、Rのマニュアルに特化した本なのかと思ってしまうかもしれませんが、全くそんなことはありません。プログラミング一辺倒でもなく、数式一辺倒でもなく、バランスよく両者が併記されていると思います。
バランスよくと書きましたが、これは分量の話です。
僕自身は数式をざっと眺めて「ふんふんなるほどね」と理解できるタイプの人間ではないので、これから1ページずつガシガシ鉛筆で書き込みしながら、丁寧に読んでいこうと思います。例えば110ページを開いてみると、文字の半分くらいが「X」なんですが、もしかしたら僕以外にも、これをみて「ウッ...」と感じてしまう人はいるかもしれません。
でも恐らく、本書ただ一冊を読んで完結するようなことは想定されていなくて、「データサイエンス入門シリーズ」の他の本も併せて読んで勉強することが想定されているのだと思います。それらも含めて丁寧に読み進めていけば、きっと怖くないと思うので、頑張って読んでいきたいと思います。
まとめ
決して阿っているわけではなくて、本当にいい教科書だなと思いました。時間をかけて、Rによるプログラミングと数理の勉強を並行していくタイプの書籍だと思いますので、ゼミなどで教科書として利用することが特に相性が良いかもしれません。
最後に...これは完全に個人的な話ですが、本書の査読者(原稿をチェックされた方々?)のお名前を眺めていたら、学部の同期がいました。何よりそれが一番の励みになりました。