Lean Baseball

No Engineering, No Baseball.

Python本まとめ・2019年版 - Webとデータ分析を初心者が仕事にするまで

毎年恒例、Pythonの本と学び方のまとめ・2019年バージョンとなります.

※2021/1/11更新:2021年版あります

※2020/1/9更新:2020年版もあります, こちらもよろしくおねがいします!

※ちなみに昨年版はこちら

改めましてこんにちは、Pythonと野球を仕事にしています、@shinyorke(Python歴おおよそ8年)ともうします.

なお、Python その2 Advent Calendar 2018 12/24記事でもあります.

このエントリーはそこそこ長いので、「最初の方をサクッと読んで、残りはつまみ読み」してもらえると良いかもです!*1

※もちろん全部読んでも構いません!(それはそれで嬉しい)

サクッとまとめると

  • 入り口としての「独学プログラマー」は万人が読んだほうが良い名著
  • データ分析・解析やりたい人も、Webからやっておくと良いかも(特に前処理)
  • Webは基本と仕組みからDjangoなどに行く、データは仕事での活用イメージを掴んでからツールから学ぶと👍

おしながき

Python本・学び方まとめ2019 - 仕事にするまで

全体像

このエントリーを一枚の絵にするとこうなります.

f:id:shinyorke:20181223142251p:plain
Pythonを仕事にするまで、のイメージ

私自身の経験や、主催しているもくもく会(#rettypy)などで色んな方とのコミュニケーションを取った実感的なモノを元に作成しております.

おおまかに、

  • 初心者・初学者の内は独学プログラマーから入ると良さそう
  • データサイエンス・分析希望の人はWebもちょっとやるといいよ
  • 仕事もしくは趣味かで進み方・読む本が変わる

この大切さを簡単に紹介します.

「独学プログラマー 」-エンジニアの心得

f:id:shinyorke:20181223144001p:plain
まずは全体像と心得を知ろう

初心者じゃなくても、一度は立ち止まって読みたい、それぐらい独学プログラマーはオススメです!*2

普通の初心者本・プログラミング本は言語の使い方(インストール・設定方法含む)メインで他の事はオマケですが、

  • 絶対に避けられないBash、パッケージ管理、Git(バージョン管理)ほか、色んな事にもしっかり触れている*3
  • 仕事にするまでに必要な事(知識を身につける、データやアルゴリズム、プラクティスにチーム作業の心得)に触れている*4
  • 上記2つを段階ごとに、必要な順に過不足無く書かれている*5

などといった、「プログラミング以外はオマケ扱いではない、エンジニアリングに必要不可欠なんだぜ!」ってことがちゃんと書かれていてよかったです.

ここに書いてあることを根気よく、愚直に、計画的にやり切ることによりPython使い・エンジニアへの仕事に近づけると思います.

逆説的に言えば、独学プログラマーの内容をやりきれない(途中飛ばしOK)人は仕事にするのは多分無理です、別の方向に行くことも考えましょう!!!*6

さらに深く入りたい人は学びの効率や整理、言語化を促進する意味で「エンジニアの知的生産術」に入るといいのかなと思います.

データより先にWebを学ぶ

端的にいうと、

データ分析で少しでも”スクレイピング”というやつをやる!ってなった人はWebの基本から学びましょう!!!(断言)*7

フロー上で「止まれ」を置いてあるのはそういう意味です.

Pythonじゃなくても、RubyやPHPなどですでにWebをやってる人はそのままデータでも問題ないですが*8、「普段はエンジニアじゃないんだけど趣味で機械学習をやろうと思い〜」「仕事は組み込みのエンジニアで趣味で(以下同文)」といったように、そもそもWebをやったことない人は先にWebをやることをオススメします*9.

f:id:shinyorke:20181223144723p:plain
データやるならWebやっとけ、の絵

Webからやったほうが良い3つの理由

前処理する習慣作り、背景技術の習得および、インターネットに迷惑をかけない.

この3つです.

「前処理」する習慣作り

まず最初に断っておくと、

「今あなたがやってる本・学習サービス・Kaggleみたいな”きれいなデータ”を相手に仕事することは334%ありません!」*10

数々のデータ分析や機械学習などの本でも必ずと言っていいほど言及していますし、今年は「前処理大全」というまんまのタイトルの本が出た(そしてこれは良著!)ぐらい、重要視されています.

信じられないかもしれませんが、それがどこから来たものであれ、データは汚れているものです。

by 「入門 PySpark」第四章

正規化されていないDBテーブル*11、EXCEL方眼紙*12に、100以上のカラムがあるCSVファイル*13、書いた本人もよくわかってないHTMLやCSS*14など、だいたい汚れています*15.

いくら優れたアルゴリズムを使っても、データを適切に整形・加工することに勝るものはありません。現実の問題では多くの時間をここに取られます。

by 「仕事ではじめる機械学習」第一章

「汚れている」データを「きれいにお掃除」しないままで優れたアルゴリズムを使っても精度が出ません.*16

なお、「前処理」は「ドメイン知識を知った上でデータを整理・フィルタリングする*17」文脈もありますが、学んでいる時点では、

  • HTML・JavaScriptの構造を知る
  • DBやKVS(memcahedやRedisなど)のデータ構造・仕組み・ルールを知る
  • ちょっとしたSQLを書ける・動かせるようになる

これぐらいが丁度いいかなと思います*18.

実務向けの必須技術を習得

Webシステムを少しでもいいので作れるようになると、

  • フロントエンド(HTML・JS・CSS・etc...)
  • バックエンド(サーバーサイド・DB・etc...)
  • 基盤とか(クラウド・OS・CI・Git・etc...)

これらを「動かしながら」「順序良く」学ぶことができます.

これはデータ分析・解析の仕事を本気でやりたい方ほどオススメで、

  • 分析DB作り(既存サービス→DWH)
  • ダッシュボード運用(Redash, Tableauなど)

的な「データエンジニア」に必要なスキルが実践で身につけられるのでオススメです.*19

最終的には、ブルー・オーシャンな「データ基盤エンジニア」になってこういう仕事ができるかもしれません.*20

yuzutas0.hatenablog.com

インターネットに迷惑をかけない

インターネット、言い換えると他所様(ひとさま)に迷惑をかけない作法を学ぼう!ということです.

これは主にスクレイピング・クローリングに言えることで、

知らないままやると、「相手サイトを攻撃」など、思わぬ事故につながります!

一つの事例として、イベント中にうっかり相手のサイトに迷惑をかける等の事案・事故もあります(私が主催しているイベントでありました)*21.

shinyorke.hatenablog.com

この辺の本に書いてることも参考になりますが、ご自身でWebアプリを作って体験するとなお良いでしょう!*22

仕事 or 趣味という「分水嶺」

すべての人がPythonで仕事をしたい!という訳では当然無いので、

  • 仕事でPythonやりたい
  • 趣味・個人プロジェクトで...

っていう分水嶺(ぶんすいれい)は当然あると思いますので、それぞれの目的によって学び方・やり方を変えていいと思っています.*23

f:id:shinyorke:20181223154135p:plain
仕事か趣味か

仕事に行く方は、

  • 今の仕事をやりながら、Pythonで仕事を作る道筋を作る*24
  • Pythonで仕事をする機会が来るor機会を呼び込む用、プロ向け書籍を読む(エキPyPyプロなど)
  • 異動・転職に備えた活動(人脈つくり・発表など)*25

を中心にやるといいのかなと思います(もちろん他の道もあると思う).

また、こちらのスライドも参考になるかもです(個人的に大好きかつ、いい感じに言語化されています).

趣味の方は、特にフローには書きませんでしたが、

  • Pythonの求道者を目指す(エキPyPyプロなど)
  • 自分でサービスをつくる*26

など、思うがままに好きなようにやるのもいいかなと思います!

テーマ別「オススメ書籍+α」

おまたせしました、メイン・コンテンツです.

今回は「初心者」「Web」「データ」「仕事」のカテゴリーに分けています.

該当する所をつまみ読みしてもらえればと思います!

初心者

まず大前提として、本を読もうがWebで学ぼうが、 手元にPCは準備しましょう!!!!

MacでもWindowsでも、個人使用のPCでも会社用のモノでも構いません.*27

書籍で学ぶ

ホントの初心者は「スラスラわかるPython」

網羅的に学びたい人、辞書的に使いたい人は「みんなのPython」

オブジェクト指向を踏まえて、Webアプリから入る人は「独習Python入門」

がオススメです!

スラスラわかるPython

私の会社(ネクストベース)でのPython入門書にも採用しています.*28

Webの人もデータの人もおすすめです!!

スラスラわかるPython

スラスラわかるPython

みんなのPython第四版(+α)

第四版まで重なっている名著中の名著、辞書的に使うのにも最適です.

みんなのPython 第4版

みんなのPython 第4版

  • 作者:柴田 淳
  • 発売日: 2016/12/22
  • メディア: 単行本

また、Python3.4ベースのちょっと前の本ですが、「Pythonライブラリ厳選レシピ」も辞書的に使うのにかなりオススメです!*29

Python ライブラリ厳選レシピ

Python ライブラリ厳選レシピ

独習Python入門

オブジェクト指向からWebに入るのに最適.

独学プログラマーよりも、より実践チックかもしれません.

独習Python入門――1日でプログラミングに強くなる!

独習Python入門――1日でプログラミングに強くなる!

  • 作者:湯本 堅隆
  • 発売日: 2016/08/05
  • メディア: 単行本(ソフトカバー)

Webサービスで学ぶ - PyQ

Webからデータ分析までコース充実&Pythonに強い人達が作っているPyQが強くおすすめです!

pyq.jp

(私はPyQの回し者ではありませんが)無料キャンペーンもあるみたいなので、年末年始こたつの中で気軽に試してもいいかもしれませんね.

lpm.pyq.jp

なお、(ちょっと前のものですが)PyQの利用レポートもあるので気になる方はぜひ.*30

shinyorke.hatenablog.com

Web

続いてWebのオススメです.

Webの仕組みを知る(フロント・DB)

PythonでWebを作る前(か、作ると同時)にフロントやDBの事を学びましょう.

Webを網羅的に知る

まずは基礎を網羅的に知るのにこちらが良いかもです.

フロントエンドを知る

SPA(シングルページアプリケーション)や普通のWeb、どちらにしてもJavaScriptは避けて通れない必修科目です.*31

JavaScript全体を知るのにこちらがオススメです.

また、最近はフロントエンドの重要性が高まっており、Vue.jsやReactなど、色んなものがあります.

網羅的に把握しつつ、入門するのにこちらもオススメします.*32

この中でも最近はVue.jsが強いです(個人的な感想含む).

書籍では「Vue.js入門」が素晴らしい出来なので強くおすすめします!

※このブログにも書評エントリーあります.*33

DBを使う(SQLなど)

MySQL(MariaDB)もしくはPostgreSQL、SQL Serverにしても.

SQL基礎から学ぶとスムーズに進むかと思います.*34

これからはじめる SQL 入門

これからはじめる SQL 入門

実践編もあると良いでしょう.

SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus)

SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus)

  • 作者:ミック
  • 発売日: 2015/04/11
  • メディア: 単行本(ソフトカバー)

DjangoでWebアプリを作る

PythonでWebアプリはDjango以外にFlaskやbottleなど色々ありますが、一番事例が多いDjangoで学ぶのが良いかなと思います.

初心者向けとしては、プロ過ぎる執筆陣が「Python事始め」の為に優しくしっかり書いてる、Pythonエンジニアファーストブックがちょうどよいと思います.

また、これは発売前ですが、強いPython使いたちが書いてるDjango専門本にも注目です(個人的にメチャクチャ待ち望んでいます).*35

[asin:486354247X:detail]

データ

機械学習・ディープラーニング系は(一部を除き)たくさんあるので今回はスキップ.*36

データ分析の「仕事」を知る

まず、何があっても「仕事ではじめる機械学習」は外せません&他にも良著がありますのでご紹介.

仕事ではじめる機械学習

事例やサンプル、アルゴリズム解説も◎ですが、何よりも第一章に必要な価値が詰まっています.

仕事ではじめる機械学習

仕事ではじめる機械学習

(将来的に)機械学習を仕事にするつもりなら必読レベルです.*37

前処理大全

SQL/R/Pythonで前処理について色々と学べる本です.

Pythonをやる以前の業務やちょっとした分析の役に立つこと間違いなし!って意味でも一読することをオススメします!*38

データサイエンティスト養成読本

また、生の話や全体像を把握、という意味ではこちらも外せません.*39

Pythonでのデータ分析

Pythonのデータ分析ライブラリはJupyterやpandasほか、たくさんあります.

機械学習やディープラーニング以前にこれらの書籍から学んで実践するといい感じかもしれません!

Jupyter・pandasほか

仕事ではこの辺をよく活用しています.*40

わかりやすいJupyter本に

こちらも待ち望んでいました、第二版

Pythonによるデータ分析入門 第2版 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 第2版 ―NumPy、pandasを使ったデータ処理

  • 作者:Wes McKinney
  • 発売日: 2018/07/26
  • メディア: 単行本(ソフトカバー)

データサイエンスハンドブックもいい感じです.

入門 PySpark

これは個人的なヒットでもあるのですが、PythonでSparkやるならこちらはバイブルです.*41

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

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

データボリュームやDataframeまわり、実践(前処理含む)まで網羅的に載ってていい感じです.

身近なDB・分析ツールから学ぶ

DB、特にSQLやビッグデータ系のモノ(BigQuery、Redshiftなど)から学ぶのにこれらのDB・分析本がオススメです.

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

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

また、Pythonで解析したりモノを作る前に、Webサービス(サイトやアプリ)を扱っている方はぜひツール類でサクッとレポートを作る(≒Pythonやプログラミングでデータ基盤を作る前の練習)をすることもいいと思います.

今年読んだ本ではこちらが参考になりました.*42

仕事

Pythonを仕事にする(今の仕事で入れる・進める、転職なり異動をする)にあたり、個人的に読んだほうがいいかも!という書籍です.

より深くPythonのプロになる

仕事での適用、Python言語そのものに関する深い・強い本です.

なお、どの本もいわゆる鈍器辞書的なサイズです!

エキスパートPython・第二版

今年(2018)は名著エキPy第二版が出て個人的にすごく嬉しい.*43

言語の事、活用する時に必要なことが網羅的に触れている&深いのでオススメ.

Pyプロ本・第三版

こちらも同じく待ち望んでいた第三版!

Python 3およびGit対応、CIやパッケージングについて詳しく載っています.

唯一、惜しい点があるとするならば機械学習プロジェクトの件は蛇足かな...*44

「仕事ではじめる〜」他、参考書籍を読むといいかもしれません.

Fluent Python

かなり重厚で読み応えがあります(少しずつ読んでます)*45

Fluent Python ―Pythonicな思考とコーディング手法

Fluent Python ―Pythonicな思考とコーディング手法

  • 作者:Luciano Ramalho
  • 発売日: 2017/10/07
  • メディア: 単行本(ソフトカバー)

Effective Python

Fluentほどでは無いですが、これも重厚

コードレビューとかする際の参考書籍としてオススメです!*46

今と未来の仕事に活かす

Pythonを仕事にしようがしまいが、

  • 今の仕事を良くしたい
  • モヤモヤしてる所をなんとかしたい
  • 無理だったらいい転職をしたい

という風に大体の人はなると思います.

独学プログラマーみたいに仕事に繋げるまでに、「言語化」「カイゼン」に関する書籍を読む・できることを実践するとより良いかな?と思います.

イシューからはじめる

言語化は言い換えると「イシュー化」ってやつで、こちらはぜひ「イシューからはじめよ」をぜひどうぞ!*47

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

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

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

カイゼンをすすめる

イシュー化したものを言語化し、実施(カイゼン)に移すぞ!って方は「アジャイルサムライ」「カイゼンジャーニー」は外せないと思います.

アジャイルサムライ−達人開発者への道−

アジャイルサムライ−達人開発者への道−

  • 作者:Jonathan Rasmusson
  • 発売日: 2011/07/16
  • メディア: 単行本(ソフトカバー)

趣味に走る人は...

多分、ここまで来てる人は自走できると思うので自走しましょう!

ぜひブログや発表などで楽しんじゃってください!!

【おまけ】個人的な2019年オススメ本・五冊

仕事および、趣味使いで「これは!!!」って思った五冊です.

エキスパートPythonプログラミング改訂二版

本当のホントに待ち望んでいた第二版.

Pythonの事を深く知る、良いコードを書くのに必要なバイブルです!

前処理大全

何度でもいいますが、前処理はホントに大切ですから!!!

イシューからはじめよ

純粋な技術書ではないですが、読んでて「おおっ!」と来た一冊.

自分は普段から「無駄なことはやらない」「やらないことを決める」を基本スタンスにして行動してますが、これがイシューだったんや!と.*48

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

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

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

エンジニアの知的生産術

インプット・アウトプットの繰り返しや学び方など、自分が無意識にやってたことを言語化してくれた感あったのと、これからやるべきこともあって納得の一冊でした.

読めば読むほど味が出る感じが良かったです.

(Pythonじゃないけど)野球とR(英語)

野球データを扱いたい、分析・解析したい方には必読の一冊です.

英語かつ、お値段がかなり張りますが現実のスポーツ・野球でエンジニアリングしたい方はこれの理解と実践はデフォだと思います!*49

最後は野球かよ!!!って感じですが今年のオススメはここまで.

2018年はもうすぐ終わり.

2019年のエンジニアリング・ライフがより良いものになることを祈りつつお別れしたいと思います.

また来年お会いしましょう!

*1:約10,000文字くらいのボリュームです汗

*2:原著は読んでないですが、監訳が清水川さんというのも大きいかもしれない.良い日本語で伝わっているのかな?とか.

*3:いざ実践!ってタイミングでハマるやつです.「え、これ本に書いてないよ!」的なのが大体書いてるのがこの本の強みかも

*4:単にPython書けたらゴール、それで終わりじゃないよ!って事をちゃんと書いてて偉い

*5:勢いで読むにしても、サクッと読むにしてもちょうどよいボリューム

*6:エンジニアリング・プログラミングは忍耐力と継続する力(と論理的思考力、想像力)、そしてこれらのストレスと付き合いながら自分のスタイルを作る人が向いてると思っています.って意味ではやっぱプログラミングは人によって合う合わないあるのは事実(私見).

*7:HTMLが読めない、、、以前にそもそもHTMLって何ですか?っていう所から入る場合もある.これは恥ずかしいことではないですが、物事には覚える順番があるっていう事が大切なんですよと

*8:個人的にもWebは別に何でやってもいいと思っています、言語やフレームワークしばりが出てくるのは言語特性というより、チーム・会社の型化や整合取るなど、全体最適化の文脈.

*9:基準として、「URLを叩いたらブラウザに何かでる」の「何かでる」仕組みがわかってない人はやりましょう.

*10:なんでや!在阪球団関係ないやろ!!(お約束)

*11:大企業でもベンチャーでも、数十カラムのテーブルや、プレフィックス・サフィックスにタイムスタンプ入ってるテーブルって少なくとも25個はあると思うよ、辛い

*12:こいつの処理が辛い

*13:ちなみにMLB(野球)のデータセット(一般公開されている)はいつもこんな感じです.CSVという構造データなだけマシとも言える.

*14:CSSセレクトにしてもX Pathにしても辛いやつ

*15:もちろん、PDFとかからやるパターンもある.

*16:前処理して適切なお掃除すると、簡単な統計で済むこともあるのよ.

*17:これはこれで重要なんですが、会社やチーム、個人差があること、何よりも「HTML」「JavaScript」といったそもそも構造的かつ汎用的なフォーマットを読める・解釈する用になってから語るべきことです.物事には順番ってものが(本日二回目)

*18:仮にデータ専任でいくにしても、仕事の種類によっては「自分で作ったモデルとか分析を自分でデモする」仕事はそれなりに起きるので、自分でできておいた方が良いです.余談ですが私がITコンサル時代に一緒に仕事をしていた研究者たちはそんな強い連中でした&その彼らから逆に教わったりの方が多かった.

*19:現実は簡単じゃないけどやらないよりは大分マシです.

*20:このブログの例はホント良くて、ここまで来るのは難しいと思うけど目指すモデルケースとしては最適

*21:個人的には今年一番キッツイ案件でした、この後泣きそうになりながら後始末をですね

*22:自分で作ったサイトを自分で倒す、とかやっておくと.その分には誰の迷惑でもない.

*23:ここまで行ける人はそもそもこのエントリー読む必要あるのかな?笑

*24:社内政治頑張れってことです.社内政治(に近しい)ニュアンスの大切なことはフェアレス・チェンジっていう本が詳しいです(これは素晴らしくオススメ)

*25:これも実はフェアレス・チェンジっていう本が(本日二回目)

*26:このブログの大半を占める、Pythonと野球のネタが物語っています(ちなみに今は仕事にして給料もらってます)

*27:去年も同じことを書く・促すくらい、地味に重要なこと.

*28:プログラミング経験ゼロ、Excelとパワポ触れます!ぐらいのウチの若者が三ヶ月ちょいでPython使いに変貌したくらいやりやすかったです.この辺のノウハウはどこかでブログにするつもり(本だけでなく、学習・教え方を工夫した)

*29:標準ライブラリ中心で使い勝手がよく、今でも手元にあります.

*30:このエントリーもそろそろリバイスしたい、画面が昔のやつだ...

*31:データ分析する人も、最終的にグラフをJavaScriptでWebアプリを...っていう可能性もあるのでやっておくと損は無いです.個人的にはPython以上にJavaScriptの方がプログラミング言語的に必修科目という認識でいます!

*32:React Nativeまで入っててかなりお得な一冊.

*33:この節は本を頂いたのでお礼代わりに書いた.結構な反響に驚きありました笑

*34:なお、ウチの会社(ネクストベース)ではSQL教育本として採用しています.

*35:著者の関根さん・新井さんはDjangoのプロ中のプロ.

*36:個人的にさほど機械学習やってないのと、本が多すぎてアレなので今回は「仕事」と「ツール」にしぼりました.

*37:よくわかってない偉い人や先輩、意識高い若者と戦う武器として最高に役立ちます(真顔)

*38:前処理は重要だよ!っていう文脈を知って、これらの事ができるようになるとサイエンティストとしてもエンジニアとしても強くなれます間違いなく.

*39:読み物?に近いですが実感値を得るのに役立ちます.

*40:ちょっとしたJupyterやpandas,BokehのことはJupyter本、他はオライリーの方と使い分けしてます.

*41:仕事での実戦投入はまだですが、環境構築とか利用シーン、お試しなどメチャクチャ約立ってる.

*42:Google Data Studio、使う用事が無いと読んでからわかった(まだ試していない)のでそれだけでも良かった、これも頂いた本でしたありがとうございました!

*43:最初が2011年とか?これもしばらく長く読めそうで良さげです.

*44:書いてることは正しい、やってることなので良いのですがちょっと内容が薄いというかAppendix・補足扱いだったら良かったのにと思いました.

*45:持ち歩くにしても重い!PDF版を買いますかね笑

*46:前職のRetty他ではそんな使い方してた

*47:技術書籍以外込みで、個人的なベストセラーでした.イシューからはじめるスタイル、もっと来てほしい.

*48:とある友達から、「中川さんはいつもイシューからはじめてエンジニアリングしてて偉い」と言われ、イシューからはじめよ、を読んでないことに気が付きすぐ購入→ハマりました

*49:チームや選手のファンであること、とは別のベクトルにおける野球愛と実践を試されます.