Lean Baseball

No Engineering, No Baseball.

Pythonを学ぶときに読むべき本2020年版 - 初心者からプロになるために

毎年恒例, Python本と学び方の総まとめです!*1

プログラミング, エンジニアリングに機械学習と今年(2019年)もPythonにとって賑やかな一年となりました.

今年もたくさん出てきたPythonの書籍や事例などを元に,

  • 初心者向けの書籍・学び方
  • 仕事にする方(中級者)へのオススメ書籍
  • プロを目指す・もうプロな人でキャリアチェンジを考えている方へのオススメ

を余す所無くご紹介します.

来年(2020年)に向けての準備の参考になれば幸いです.

※ちなみに過去に2019, 2018, 2017と3回ほどやってます*2.

このエントリーの著者&免責事項

  • Shinichi Nakagawa(@shinyorke
  • 株式会社JX通信社 シニア・エンジニア, 主にデータ基盤・分析を担当.
  • Python歴はおおよそ9年(エンジニア歴20年), データサイエンスからWeb, インフラなどほとんどの事でPythonを使ってます(公私ともに)

なお, このエントリーの内容は@shinyorkeの私的見解・意見であり, 現在および過去に在籍したチーム・組織とは無関係です.

今, 読んでおきたいオススメ本

まず書籍ですが, もういきなり紹介します.

数行のコメントと共に紹介しますが, この後の本文に色々背景とか書いているのでそちらもお読みいただけると嬉しいです!*3

独学プログラマー

手元に一冊ほしい名著です!

昨年(2018年)出版, 何版も重刷されてておなじみかなと思います.

Python言語に限らない, プログラマーとしてエンジニアとして大切な,

  • Git, パッケージ管理, Bashなどの周辺的な道具(かつ絶対使うもの)
  • データやアルゴリズムなど, 情報を扱うモノの初歩な考え方
  • チーム開発, 学び続ける姿勢などの大切さ

をまんべんなくかつ, レベル感に合わせて紹介しているのがすごく良いです.

なお昨年もこちらでオススメさせてもらいましたので興味ある方は読み返すと良いかもです.

shinyorke.hatenablog.com

Python実践データ分析100本ノック

Pythonを使ったデータなお仕事では必読・マストな一冊.

「本書は入門書ではありません」とある通り,

  • Pythonを言語として使いこなせる
  • が, 実務に活かすのってイメージが...

という方向けに,

  • データ加工から機械学習, 言語処理や画像処理を10本ずつのノック⚾形式で紹介
  • サンプルデータ使って真似して学ぶ

事により,「いつまでもirisとかタイタニックやっていても?」的な所から抜け出すのには良い本かなと.

また, 私のようにすでに仕事にしている人にもTipsやレシピ的に使えるのですごく便利でありがたい一冊です!

機械学習図鑑

きれいなサンプル図やコードを元に無理なく学べる機械学習の本です.

sciket-learnなどを使っていて初心者にも無理なく読めそう...というあたりはこちらのエントリーでも紹介させてもらいました.

shinyorke.hatenablog.com

さきほどの「Python実践データ分析100本ノック」と合わせてマストハブアイテムな感あります, ぜひこれもご一読を!*4

特徴量エンジニアリングと前処理

実務で特徴量エンジニアリングをする方必読.

レベル的にはちょっと上級者向きかもですがいい本です.

想定されるパターンごとのエンジニアリングのコツとか上手く乗ってて読みやすいですし実際参考になります.

ちなみに, 前処理大全も合わせて読むとなおベストです!

目次

Pythonの本と学び方2020

というわけで本題です.

なお対象読者は,

  • Pythonでプログラミングをはじめた人
  • ひとまず仕事でPythonを使い始めた人
  • 既にプロフェッショナルなんだけど, マネジメントや教育などで初心者な人との接点がある人

のいずれかを想定しています.

全体像

今回紹介する全体像です.

f:id:shinyorke:20191221163152p:plain
Python本と学習2020年版

プログラミング およびソフトウェア・エンジニアリングといえば, Webエンジニアリング, 機械学習, スマホアプリ開発・組み込み開発etc...とたくさんありますが, (この記事を読んでいる)大多数の方はおそらく,

  • 何かしらのデータを受け取り, 処理をすること.
  • なにかの仕組み・普段の仕事(≒退屈なこと)を効率化すること.

に特化していると思います.

というのは, 今年流行ったこちらの書籍でも明確かなと思います.

というわけで今年のこのエントリーでは,

  • 「そもそもプログラミング・Pythonをはじめてデータを触る人」がLv1
  • 「今のお仕事でPythonをデータで触り始めた!ガンガンやってる!!人」をLv2
  • 「色々馴れて, データサイエンスやWeb開発やってるよ!」をLv3

と分けて, 「いい感じにデータなエンジニアリングをするための歩み方」を紹介します.*5

なお,

  • 必要な箇所のみ読む
  • 何かをしながら雑に読む

などの流し読み・ながら読みをメッチャ推奨します!*6

Lv1:基礎を学ぶ・使いこなす

物事をはじめる際はやはり「急がば回れ」で, コツコツと基礎を伸ばす所からかなと.

ということで, 独学からコミュニティ参加, 何かを成し遂げる, Webと書籍を行き来するあたりから紹介します.

独学からコミュニティへ

まず, プログラミングの学習方法として,

  • 一人で本を読む・Webで調べるといった学び方. いわゆる「独学」
  • 人が集まる勉強会やイベントで情報を仕入れながら学ぶ, いわゆる「コミュニティ」

この2つがあると思います.

個人的にはどちらの学び方も長所短所があり, 組み合わせて使うとベストなのですが,

まずは一人でこもって学び(つまり独学), いい感じに慣れてきたらコミュニティに出かけるのがオススメです!

今までお会いした(元)初心者の方で特にプログラミングを覚えて結果を出してる人は,

  • まずは自主的に学び, 何かをやりきる・成し遂げる(後述)
  • やりきる・成し遂げるちょっと前くらいに外に出る

ことを自主的に, 計画的にやってる人がほとんどでした(サンプル数:おおよそ3名)

この辺の考えおよび自分が伴走して教えたときのノウハウはこちらにまとめてますので気になる方は見ていただくとして.

スラスラ教える・教わるPython - 押し付けない・楽しむプログラミング学習のカタチ - Lean Baseball

  • 独学だけでは, わからないことや知らないことに詰まり, 辛くなるので外に出る
  • 外に出る(勉強会・イベントに参加する)ことにより, 多くの知見やモチベーションを得る
  • どちらかに偏りすぎない. 独学ばっかりで進まないのも, 外に出てばっかりで学ぶ時間がなくなるのも本末転倒.

というのをやりつつ・気をつけながらいい感じにするのがコツかなと思います!

なお, この辺をいい感じにやる書籍としては独学プログラマーも良いですが, 個人的にはスラスラわかるPythonが推しです.

スラスラわかるPython

スラスラわかるPython

何かをやりきる・成し遂げる

明確に作るもの・やりたい事の目標を作ってそこまで一直線にやる!成し遂げる!!が大事です.

よくあるキッカケとして,

  • 流行ってるからPythonやりたい
  • 機械学習・データサイエンスかっこいい
  • 今の仕事がつらいのでエンジニアに

と色々あると思うし別になんでもよかったりする*7のですが,

  • 明確にやりたいことを決め
  • 期限・時間を作ってやりきり
  • 何かしらの形で成果を人に見せる

事を目標にやる人はやりきってる感あるし, はじめたキッカケそのままの人は続かない感あったりもします.

スラスラとPythonを教わっていた私の生徒は,

  • 仕事で現状のツール(EXCEL)に限界を感じた
  • ひとまずツールの代替をPython(プログラミング)でできるのでは?
  • 仕事のアウトプットとして使えたらゴール

を明確に決めた結果, 3ヶ月程度でちゃんと使えるようになってました.

ので,

  • Webアプリを作る, なにかの分析をするでもいいので目標を決める
  • 人に見せる. 仕事だったら同僚や上司, プライベートだったらブログや発表に
  • 期間・期限を設ける. 締め切り・アウトプット駆動でやる

を計画的にやるときっといつか結果でるので頑張ってみましょう.

Webと書籍を行き来する

学び方ですが, 勿論書籍もありますがWebラーニングもかなり良いです.

これも毎年推してますが個人的にはPyQがメッチャ好きです.*8

pyq.jp

年々コースが増えているのと, 操作性もすごく良いです.

個人的には力を伸ばしたかった数学・統計力を高めるのに久々にその手のクエスト・写経をやりましたが結果も出ましたしいい感じでした.

そして並行して独学プログラマー100本ノックをこなすとかがちょうどよいと思います(推しの理由は最初に書いたとおり).

また, このタイミングで機械学習にちょっと触れるのもアリです, 個人的には先ほど紹介の機械学習図鑑もベストですが,

基礎からじっくり学ぶのにこちらも最高だったので合わせてオススメです.

Lv2:仕事にする・物事を解決する

自分で調べたり, 人に聞きながらある程度目的のことができるようになったら仕事にしましょう.

その際にはぜひ, 現状のお仕事から.

できる仕事から場数を踏む

これは断言レベルで言い切りますが,

今やっている仕事の効率化・退屈なことを追い出す事からやる, 本数をこなすが上達への近道

です!

自分の周りでもちょっとプログラミングやPythonに馴れ始めた頃に,

  • いい感じに使えるようになったし機械学習エンジニアになるぞ!
  • Webサービスの企業とかで経験積めるかも...よっしゃ転職(異動)だ!
  • なお, 上手く行かない模様

という方が結構いますし話も聞きます.

一方, 成功している方は,

  • 覚えたプログラミング・スキルをまず現状の仕事に活かす
  • 仕事の効率化に活かし結果を出し続ける
  • やったことを言語化・体系化し自分のキャリア・レジュメに活かす

事によって転職したり異動したりに成功しています*9.

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

スキル(Python)が使えるようになるのはスタートラインで, 実績を積む今がスタートだよ!

ってことです.*10

退屈なことをやらせる

というわけでこの段階では,

  • 何度も続く手作業
  • 誰でもできること
  • 自分の手からさっさと手放したい作業

といった,

「回数が多く, 属人性が少ない」退屈なことをPythonにやらせる

事に注力するといくつでもテーマがみつかるかつ, 仕事の場合は成果も出るのでオススメです.

書籍的にはこちらの2冊なのですが,

これらの書籍をチェックしつつ, 退屈なことを見つける・定義するといったあたりはこちらも参考にすると良いと思います(手前味噌).

shinyorke.hatenablog.com

この手の「退屈なこと」を100本とまでいかなくても10本20本と実績を積む頃にはきっといい感じに仕事になってるかと思います.

前処理とデータを扱う訓練

機械学習やデータサイエンスを志向する方は,

  • データを扱うための道具・言語を覚える. 具体的にはSQLなど.
  • データの取得から前処理, クレンジングといったあたりを抑える. いわゆる「特徴量エンジニアリング」力を磨く.

をこの頃からやると良いでしょう.*11

データベースをゼロから扱うという方は,

これからはじめる SQL入門

これからはじめる SQL入門

ビッグデータ分析・活用のためのSQLレシピ

ビッグデータ分析・活用のためのSQLレシピ

この辺の書籍の内容を理解し実践できると最高だと思います.*12

また, データの前処理・クレンジングも100本ノック的に訓練するのもこの頃かなと.

100本ノックの本を抑えつつ,

改訂版 Pythonユーザのための Jupyter[実践]入門

改訂版 Pythonユーザのための Jupyter[実践]入門

Kaggleで勝つデータ分析の技術

Kaggleで勝つデータ分析の技術

前処理大全やJupyter実践入門, 最近来ているKaggle本*13の内容を押さえながら学習したり訓練するとすごくいいと思います.

Lv3:プロフェッショナルになる

この頃にはおそらく,

  • 望み通りエンジニアやデータサイエンスの仕事をしている
  • WebとかデータサイエンスでPythonを活用

してるようなプロフェッショナルかなと思います.

このタイミングを上手く過ごしいい感じにするための話です.

機械学習もWebも使いこなす

少なくともWeb関連のサービス・プロダクトを扱っている方は両方ともあったほうが後々幸せです.

Webやアプリの事に精通していてもデータの扱い・意味がわからないとデータでなにかするのは夢のまた夢ですし, いくら数学やデータサイエンスに精通していてもサービス・プロダクトの事, Webの事を何も知らなければトンチンカンな提案・仕事しかできません(っていう両方の例はきっと皆さん思い当たる節があるでしょう*14).

という大切さは名著「仕事ではじめる機械学習」などで学ぶことができますのでこれも必読です.*15

仕事ではじめる機械学習

仕事ではじめる機械学習

私はデータサイエンス由縁というより, 業務システム・Webアプリのエンジニアとしてのキャリアを踏んでから今に至るのですが,

  • 野球データの統計・データ分析の分野である「セイバーメトリクス」を趣味・ライフワークとしてやっており, 後に仕事にもした.
  • コンサルタントをやってた頃にR&Dのプロジェクトで特徴量エンジニアリングを嫌というほどやっていた
  • 元々の仕事がWebとか業務系だったのでプロダクト・サービス開発・運用のノウハウもあった

事により今の仕事(後述するデータ基盤エンジニア)もいい感じにすることができてます.

この視点でちょうど折り合うポイントはいくつかありますが, 個人的にはWebスクレイピングを攻めるのが丁度いいかなと思っています.

お仕事や学習のバランスを見ながらいい感じに学べると楽しいのでオススメです.

データ基盤エンジニアという生き方

また, 昨今では

  • 社内にある大量のデータを事業に活かしたいというニーズが多数
  • これらのデータがただ積まれてるだけなのでなんとか管理・運用できるようにしたい

という仕事・ニーズが結構あり, そのせいか「データ基盤エンジニア」というポジションが脚光を浴びています(いい切っちゃうけど多分間違いない).

※かくいう私もデータ基盤エンジニアの一人です.

データ基盤エンジニアは,

  • 分析・解析という視点でデータサイエンス・機械学習なスキル・知見・スタンス
  • データを集める・運用する視点でエンジニアリング(主にインフラやデータベース)なスキルセット
  • 両方を知った上でビジネスにつなげる・装着するようなビジネス的な能力やドメイン知識

を存分に活かせる良い仕事です.

今年になって, そんなデータ基盤エンジニアの定義・ガイドラインや役割を示すような書籍「ビッグデータ分析のシステムと開発がこれ1冊でしっかりわかる教科書」がでたり(この本は超いい本です!必読),

以前からデータ基盤エンジニアとして活躍されている@yuzutas0さんのブログや, プロのデータ基盤エンジニア@takegueさんのアドベント・カレンダーにも色々乗ってたりします.

yuzutas0.hatenablog.com

qiita.com

Webから行ってもデータサイエンスから入ってもイケる仕事だと思うのでキャリアの目標にしていいかもしれません.*16

プロとして価値を創る

これはエンジニアリングに閉じないもっと広い話&私個人の私見ですが,

  • サービスやプロダクトおよびチームが成長するためには何をすべきか
  • そもそもやろうとしてる事はサービスやプロダクト, チームにとってホントに価値あることか?
  • プログラミング言語や技術の選び方ってこれでいいんだろうか?

という局面に当たることが多くなると思います*17.

この辺については,

  • まずはISSUEを見極める. 課題の本質はなにか?なぜ起きてるのか??etc...
  • 現代のビジネスという意味でのアジャイル的な進め方や考え方を学ぶ.
  • 言語やアジャイルのプラクティス・手法にブレない軸を持つ. やり方は柔軟に, 複数選択して価値を出せるのがホントのプロ.*18

であるかなと思います.

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

ホントのプロになるころにはプログラミングだけやっていれば・できればエエってもんじゃないぞ!

ってことです.

賛否両論はあると思いますが徐々にアジャイルやサービス志向も学ぶとよりベストかなと.

イシューからはじめよ――知的生産の「シンプルな本質」

イシューからはじめよ――知的生産の「シンプルな本質」

  • 作者:安宅和人
  • 発売日: 2010/11/24
  • メディア: 単行本(ソフトカバー)

個人的には「イシューからはじめよ」が大のおすすめです.

ちなみに自分の仕事では正にそんなISSUEと戦っており, 会社の技術ブログにも書かせてもらいました.

tech.jxpress.net

この辺はもうちょっと色々やりながら学びたいですね.

結び

というわけで2020年に読むべきPythonの本(と付随するいろんな考えやポエム)を紹介させてもらいました.

Pythonに限らず, プログラミングやエンジニアリングで業務や社会の課題を解決したり, 趣味的なモノをエンジョイする機会は今後ますます増えると思います.

このエントリーがそんな世の中の役に立つといいなと思うと同時に, あくまでも個人のイチ意見なので読まれている皆様はぜひ自分を信じて楽しいPython, プログラミングな生活を送ってもらえると幸いです.

最後までお付き合いいただきありがとうございました!

【付録】個人的なオススメ本

これも恒例のオマケです.

自分のnoteで読書ログなるマガジンをやっているのですが, こっちは技術書以外も多いので技術書, 特にPython・データサイエンスに特化した本年のオススメ3冊を.

※本編で紹介した書籍を除く.

試して学ぶ 機械学習入門 ~Pythonで作って、動かして身につける~

試して学ぶ 機械学習入門 ~Pythonで作って、動かして身につける~

機械学習を覚えながら一気にアプリを作る, AWSなどを使いこなすなど攻めた内容.

これの内容をできるようになるといい感じな機械学習エンジニアになれると思います.*19

実際のデータ活用という意味で興味深く読ませてもらった一冊.

現実が生々しくわかるという点では色々考えさせられました, 年末年始の読み物としてもすごくおすすめ.

所属するJX通信社 がサーバレス・アーキテクチャ主体の会社なので予習とお遊び程度に読みました.

サーバレスでアプリを作るという当たりがすごくわかりやすくて良著でした, 初心者から中級者に上がるあたりで読めると良いかも.*20.

*1:ちなみにこのエントリーはPython Advent Calendar 2019の24日目となります.

*2:リンクは都度更新していますが可能な限り最新版(つまりこのエントリー)をご覧頂くのが一番幸せです.

*3:オススメ本を早く知りたいニーズにお答えして要約から作ってみました. が背景を知るとより幸せかと思いますのでどうぞ最後までお楽しみください.

*4:電子・紙どっちでもいいですがコンセプトおよび装丁を考えると紙の方が推しです.

*5:Webをやるにもデータサイエンスをやるにも, データと向き合うことが大半なので今年はデータエンジニアリングにテーマを振り切りました. PythonそのものやWebの話は機会あれば来年またやりたい.

*6:例年通りこの先長いと思いますので流し読みぐらいがちょうどよいかなと思います.

*7:けれども, 流行りや憧れ駆動だと上手く行かない時にぶち当たると続かないので明確な目的を(とこの後に書いてます)

*8:ちなみに他のサービスやってないので比較しての優越はコメントできないです. PyQじゃなくても手に馴染んでる・いいなって思うものがあればそれを続けるのがベストかと思います.

*9:未経験の状態でも社内での異動や転職で職を得るケースもありますが, 大抵の場合忙しかったり割とソルジャーな環境が多いとだけ言っておきます. ソルジャーな仕事をこなして力を伸ばす人も中には居ますが向き不向きある&心身ともに後々きっついので個人的にはあまりオススメしません.

*10:ようするに謙虚になりましょう, スキルだけでデキる仕事じゃないことを覚えましょう!ってことです.

*11:「機械学習タスクの8割は前処理」と言われるくらいこの辺重要かつエンジニア的な創意工夫や純粋な実力はこのタスクで磨かれると私は思っています.

*12:これからはじめるSQLの方はホントの初心者レベルの方にオススメ, ビッグデータ分析・活用は知識をつけつつレシピ的に使えるので実践な人にオススメです.

*13:コンペ本と思いきや実践的な内容も多く普通に参考になりました.

*14:両者のスキルやスタンスはたしかに異なりますが, 折り合いながら仕事をする・価値を出すならお互いの事を知っておくべきだと思いますし世の中両方できる人もいます.

*15:毎年推してますがそれぐらい良い本です.

*16:とはいえかなりなハイスキルが要求されるので「やってました」レベルだけだと辛いってことは一応補足しておきます.

*17:し, 局面に当たらないのは微妙だし「考えたこともない」に至っては正直プロじゃない気もします.

*18:プログラミング言語はPythonがいいのか他がいいのか, アジャイルとスクラムどっちがいいのか(これはトンチンカンな例ですが), っていうのは個人的にはどうでも良くて「眼前のISSUEや課題に対して適切な解決策で前のめりに取り組めるか?」が最も重要で, プロフェッショナルはその中で「選択肢が複数あってチョイスできること」かなあと思っています.

*19:が, 真似するのには多少難易度が高いので本編のオススメからは外しました. とはいえすごく良い本です. 余談ですが著者の一人は先程紹介した@takegueさんです&一冊頂戴しありがとうございました!

*20:なお, こちらは誕生日プレゼントで著者のお二方からいただきました, ありがとうございます!