Lean Baseball

No Engineering, No Baseball.

データサイエンス・機械学習をやるためのエンジニアな本まとめ - 2019年版

ここ1〜2年くらいで、業務やプライベートのデータ分析・データサイエンスで参考にした本(と一部本じゃないもの)をまとめてみました(注:もちろん全部読んでいます).*1.

なお, あくまでワタシ個人(@shinyorke)の見解に基づいた独自解釈であり、所属組織・チームの意向とは関係ありません(とだけ最初に断っておきます).

サクッとまとめると

おしながき

対象読者&執筆者について

主に,

データサイエンス・機械学習をこれから仕事にする・既に仕事にしている人

となります(ただし研究者*2を除く). レベル的には「PythonやRをそれなりに触れる初心者〜中上級者」を想定しています*3が, 「プログラミングこれからやります」「Pythonやりたい」レベルだと辛いことだけはご了承ください.*4

また, (ワタシがやってない・苦手としている)画像処理・分類系は基本的に触れておりません, あしからず.

ちなみに執筆者(ワタシ)は,

  • データ基盤をやっているエンジニア(だがフロントからインフラまで何でもやる)
  • データサイエンスとエンジニアリング両方やるけどどっちかといえばエンジニア
  • Python歴8年か9年くらい, 他の言語も色々触る, マネジメントとかCTOもやってました.*5

という立ち位置です(のでガッツリ現場・実務の人間と思っていただければ幸いです).

全体像と考え方

f:id:shinyorke:20191022162315p:plain
データサイエンス・エンジニア本まとめ(全体像)

このエントリーで言いたいことのサマリーです, 言うたらこれがすべてです!

言いたいことは実にシンプルでして,

  • あなた自身が「エンジニアな」事を学びたいか, それとも「理論・数学等, データサイエンスの基礎」を学びたいかで書籍を分ける
  • 実務にしていて, 基礎を抑えている人も学ぶべきテーマで書籍を分ける
  • エンジニアから行っても, 理論から攻めても, 両方必要ですからね!

と, (苦い失敗談含めて)経験上思っています.

コラボレーションする所から入る

エンジニアから行っても, 理論から攻めても, 両方必要ですからね!

の理由は凄くシンプルで,

エンジニアとデータサイエンティストの得意領域と範囲は異なる. 故にコラボレーションして仕事をすすめる.

からです*6(もちろん全てとは言いません, その辺は次の章にて).

(組織・会社・チームによって温度感・役割は違うと思いますが)大抵の場合,

  • データサイエンティスト・機械学習だけやるマンは, 獲得したデータセットを元に試行錯誤してモデルを作って使える状態にする
  • エンジニアな人は, そんなデータサイエンティストに元データを渡したり, 何かしらの方法でモデルをもらってサービスに組み込む

と役割が分かれています(雑ですがだいたいそんな感じでしょう).

これは「セキュリティ・会社のルールの都合上, 別れざるを得ない*7」「複数のプロジェクトを横断して兼任*8」というあたりが理由かなと思います(これは企業の大小, 歴史の有無関係なくあります*9).

何が言いたいかと言うと,

  • (自分がスキル・体力的に両方できるスーパーマンじゃない限り)実務で一人で全部やるのは最初から想定しない, やれるところをやる
  • 自分がエンジニアならデータサイエンティスト, データサイエンティストならエンジニアとコミュニケーションを取るためのお互いの事を少しでも知る

と, 割り切って学んじゃったほうが上達は早いんじゃないかなと思います.

エンジニアだったらエンジニアとしての仕事を, データサイエンティストならデータサイエンティストとして仕事で経験を積み, 残ったほうを趣味なり独学なりで積んでチャンスを待つのが良いのかなと思います*10.

キャリア的にも両方あると最高

なお, (上記の手のひら返しになりますが)昨今の状況だと,

  • 若手の人・学生を中心に最初から両方できる(もしくは両方をやる為の準備が整っている)人が増えている
  • ちゃんと手が動く(≒理屈マンじゃない)ベテランエンジニアも両方できるようになってきた
  • 企業の大小問わず、両方できる人は両方を横断的にやるようになってきている*11

という状況も(私の観測範囲内で)見えてきています.*12

先の繰り返し, 大切なので二度言いますが,

エンジニアだったらエンジニアとしての仕事を, データサイエンティストならデータサイエンティストとして仕事で経験を積み, 残ったほうを趣味なり独学なりで積んでチャンスを待つ

のも一つのあり方として良いですし, 趣味で結果が出る(≒異動・転職などで仕事で無事希望が叶う, ブログなり発表なりで大きなエンゲージメント得るなど)頃にはいい感じに両方それなりにできるのではと思っています.

これからやる人へ

というわけで, ここから書籍の紹介です.

  • これからやる人
  • もう経験している・実務でやっている人

の順にご紹介します.

※マトリクスでいうと, 左下(プログラミング基礎固め)から反時計回りです.

プログラミング基礎固め

ここは基本的に,

Python(か他の言語)なりデータベース(SQL)なりを自在に操るレベルになる

事を目標にするとちょうど良いかと思います.

これはメチャクチャよい指針となる本がありまして,

前処理大全[データ分析のためのSQL/R/Python実践テクニック]

前処理大全[データ分析のためのSQL/R/Python実践テクニック]

Python, R, SQLなどでデータを意のままに操る為のノウハウが載っている前処理大全がまさにその指針になるかなと思います.

また, ちょっと前の本ですが,

Pythonではじめるデータラングリング ―データの入手、準備、分析、プレゼンテーション

Pythonではじめるデータラングリング ―データの入手、準備、分析、プレゼンテーション

  • 作者: Jacqueline Kazil,Katharine Jarmul,嶋田健志,長尾高弘
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2017/04/26
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

もこれに当たりますし, 以前このブログでも取り上げた,

shinyorke.hatenablog.com

こちらも一つの指針になると思います.

なお, Pythonに限った話ですが, 少なくとも独学プログラマーに書いてあることのレベルは理解・実践必須かなと思います.

独学プログラマー Python言語の基本から仕事のやり方まで

独学プログラマー Python言語の基本から仕事のやり方まで

基礎から理論を学ぶ

機械学習や統計など理論を基礎から学ぶ過程です.

数学・機械学習のベースを理解する・使えるようになる

事が一つの指針になりそうです.

この目線でオススメは,

見て試してわかる機械学習アルゴリズムの仕組み 機械学習図鑑

見て試してわかる機械学習アルゴリズムの仕組み 機械学習図鑑

  • 作者: 秋庭伸也,杉山阿聖,寺田学,加藤公一
  • 出版社/メーカー: 翔泳社
  • 発売日: 2019/04/17
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

機械学習図鑑は図表とコードでわかりやすくホントに図鑑として使えます(&装丁が良いので紙書籍がオススメ)*13.

また, 良質なデータ分析ブログを通じて事例を公表しているGunosyの中の人達が執筆した,

現場で使える! Python機械学習入門 機械学習アルゴリズムの理論と実践 (AI & TECHNOLOGY)

現場で使える! Python機械学習入門 機械学習アルゴリズムの理論と実践 (AI & TECHNOLOGY)

機械学習図鑑と比べると読み応えがありますが, その分クオリティが高いのでこちらもおすすめです.

両方やりたいです!という方向け

この領域だと「両方やりたいぜ!」っていう人もちょいちょいいると思います.

その場合は書籍じゃないですが, PyQをやってみるのも手かもしれません.

pyq.jp

「機械学習」「統計」「数理」等のコースがそろっているかつ, 実務系やWebアプリをやるコースも充実かつ, 何より運営・作っている中の人たちがプロ中のプロなので良いと思います.

また, 書籍だと「試して学ぶ機械学習」が両方網羅できていい感じです.

試して学ぶ 機械学習入門

試して学ぶ 機械学習入門

こちらは実際に予測モデルを作って簡易的なアプリを作る, という流れをAWSなど使って実践的にやっています.

正直, 写経・真似をするのにまあまあハードルが高いですが, エンジニア・データサイエンス両方を攻めるのにちょうどよい一冊かと思います.*14

実務で活かす人へ

この先は,

実務でやってます, でも色々と煮詰まってるので参考になる書籍プリーズ!

という方向けの本になります.

実務でデータサイエンス

複数のモデルを理解し目的に合わせて使いこなす

という, まさに実務で起こり得るシチュエーションにおける処方箋となるものです.

個人的にはこの目線ですと,

機械学習・ディープラーニングをしないことも選択肢に入れる

というのも重要な視点かなと思っています.

となると, 真っ先に思いつくのが

仕事ではじめる機械学習

仕事ではじめる機械学習

この一冊ですね. 特に第一章は必読です.*15

また, 最近出た本かつお気に入りなところだと,

機械学習のための特徴量エンジニアリング ―その原理とPythonによる実践 (オライリー・ジャパン)

機械学習のための特徴量エンジニアリング ―その原理とPythonによる実践 (オライリー・ジャパン)

  • 作者: Alice Zheng,Amanda Casari,株式会社ホクソエム
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2019/02/23
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

ひとまず特徴量だそう!というフェーズであれば, こちらを参考にしてやるとちょうどよい感あります.*16

データ基盤エンジニア

実務で複数のデータ・サービスから基盤を作る

をミッションにした場合に抑えたほうが良い書籍です.

こちらはちょっと指向がかわり,

  • データを扱うエンジニアリング・プログラミングのあり方(設計的な意味で)
  • インフラやデータストア・プラットフォームのノウハウ
  • チーム設計も含んだマネジメント・組織論

となります.

これはちょっと流行っていて読まれている方もいるかと思いますが,

データ指向アプリケーションデザイン ―信頼性、拡張性、保守性の高い分散システム設計の原理

データ指向アプリケーションデザイン ―信頼性、拡張性、保守性の高い分散システム設計の原理

  • 作者: Martin Kleppmann,斉藤太郎,玉川竜司
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2019/07/18
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

データ指向アプリケーションデザインはまさに, 「データを扱うためのアプリ・プログラミングなデザイン」の書籍で, データサイエンティストが作ったモデルをサービスに実装するとか, 基盤のパイプライン設計などに役に立ちそうです.

また, インフラやデータストア・基盤関連だと,

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

  • 作者: 澤田武男,関根達夫,細川一茂,矢吹大輔,Betsy Beyer,Chris Jones,Jennifer Petoff,Niall Richard Murphy,Sky株式会社玉川竜司
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2017/08/12
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログ (1件) を見る

入門 監視 ―モダンなモニタリングのためのデザインパターン

入門 監視 ―モダンなモニタリングのためのデザインパターン

SREや監視といった定番のインフラ本だったり,

入門 PySpark ―PythonとJupyterで活用するSpark 2エコシステム

入門 PySpark ―PythonとJupyterで活用するSpark 2エコシステム

最近使われることが多いPySpark本とかも選ぶアーキテクチャ次第で生きてきそうです.

また, これらを必要とする頃には,

  • データ基盤の安定稼働
  • 運用する・利用するチームや人の座組・ルール作り

等のマネジメント・統制もテーマになるかなというのもあり,

データマネジメント知識体系ガイド 第二版

データマネジメント知識体系ガイド 第二版

  • 作者: DAMA International,DAMA 日本支部,Metafind コンサルティング株式会社
  • 出版社/メーカー: 日経BP
  • 発売日: 2018/11/30
  • メディア: 単行本
  • この商品を含むブログを見る

値段も大きさもゴツい本ですが, 組織に一冊あってもいいかもしれません.

また, これはブログですが,

yuzutas0.hatenablog.com

データ基盤・Opsの実践者で経験豊富な@yuzutas0さんのブログはウォッチするといいかなと思います(過去記事含めて).*17

長文となりましたが, データサイエンティスト・機械学習およびデータ基盤エンジニアの方の助けになれば幸いです!

*1:ちゃんと数えてはいませんが年間でそこそこ書籍読んでいます. データサイエンス以外のものも含め, noteの方にまとめあるのでご興味ある方はぜひそちらも.

*2:応用研究の一環でプロトタイプ作る, とかなら参考になりますが基礎研究に近い場合は参考にならないかと思います.

*3:ちなみに社会人か学生か、エンジニアかエンジニアじゃないかは問いません. 言葉の通り受け取ってください.

*4:これからPythonやるぞ!という方は手前味噌ですが, Pythonはじめる人向けの本まとめを書いてるのでこちらをどうぞ.

*5:今はSenior Engineerとして...っていう話はちょっと前のエントリーをご覧ください.

*6:この先の本文にはエンジニアな私目線で色々書いてますが, データサイエンティストな人前提の視点ではRetty岩永さんの文章が参考になりますので気になる方はぜひご一読を.

*7:データサイエンティストだからといって好き放題データを触らせるわけにはいかない, と考えるのが普通かなと.大きいサービス・企業であるほどリスクあるからです.

*8:データサイエンティストはデータほげほげ部に所属してプロジェクトに派遣される, 的なやつ.人数がそこそこいたりするとありますし, 純粋に適材適所とも言えます.

*9:トラディショナルなカンパニーは言うまでも無く, かなって思いますが, ベンチャー・スタートアップでも役割分担やタスクの優先度などの理由により別れざるを得ない時があります.

*10:というのも私はずっとエンジニア一辺倒で学んで, 趣味の野球分析(後に仕事になる)を経てポジションを掴みました(3年ちょいで). これが全てじゃないにしても一つのモデルケースかなと.

*11:スタートアップでCTOとかエンジニアCEOの人は両方で価値だしている人ちょいちょいいますし, 上記の有望若手・ベテランを適切に採用できたチームはわざわざ分業する必要すらない事もあります.

*12:組織のあり方もありますが, 機械学習界隈も色んなFWのおかげで生産性が上がっている, エンジニアな方に挑戦するにもWebアプリを中心にエコシステムが発達してるからかなと

*13:基本電子書籍派ですがこの本に限り紙で所有しています.

*14:余談ですが, 著者の一人である竹野氏は私の元同僚であり, エンジニアと機械学習両方できるマンなのでそのノウハウの一部が書籍で読めるのは美味しい, とだけ宣伝しておきます笑. 本文の通り真似するのにハードルはやや高いですが.

*15:このブログで何度も紹介していますが,それぐらい良い本です.

*16:翻訳・執筆が同じところってのもありますが, 「前処理大全」とセットで使うとより威力あります,と日本語版にもありました.

*17:私自身の仕事がデータ基盤エンジニアになる前からyuzutas0さんブログは興味深く拝見しています. 組織運営も含めた考察が結構参考なります&上記のデータマネジメント本はyuzutas0さんの発表にあったので真似して買って読みました.