Lean Baseball

No Engineering, No Baseball.

データを「飼いならしたい」人のための「Pythonではじめるデータラングリング」(書評)

久しぶりのブログになってしまった...こんにちは,野球データサイエンティストです.*1

最近はちゃんとワールドシリーズや日本シリーズを観る余裕ができて野球好きらしい生活できてます.*2

今日は野球の話...ではなく,最近読んだPython本で感動した書籍があるので紹介&簡単な書評を記したいと思います.

f:id:shinyorke:20171029173828j:plain

今年(2017)の4月に発行された「Pythonではじめるデータラングリング」という書籍です.

www.oreilly.co.jp

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

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

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

誕生日プレゼントとして友人*3から頂きました,誠にありがとうございます(._.)

仕事*4およびプライベート(主に野球)でよくデータラングリングをするので気になってたのですが,あまりにも面白いかつためになる本でした!*5

「Pythonではじめるデータラングリング」を3行で言うと

  • Pythonでデータを扱う・駆使する(ラングリングする)人は絶対読んでおくべき!
  • 初心者を抜け出す前くらいに読むがベスト,中級者もチラッと読むと良いかも,上級者が読む本ではない
  • データを扱う・駆使する順番やノウハウを整理するのにすごく良い&各々のベスプラは別の本や学び方をした方が良いかも

このエントリーの対象読者

大雑把に言えば「Pythonを使ってデータを扱ってる人,初心者にちょっと毛が生えたレベル以上上級者未満」という感じになります.

  • Pythonを使ってデータを取得・分析・可視化をする方.エンジニアかどうかは特に重要じゃないです.*6
  • Pythonを使ったプログラミングができる.わからないことは本やWeb,人に聞いて解決できるレベルの方.
  • 構造化されたデータ(JSON,XML,CSVなど)やAPI,ExcelやPDF相手にデータを取ろうとしたり分析しようとしたりしている方.

なお,(みんな大好き)機械学習・ディープラーニング・統計の具体的手法および,Python上級者が欲する内容ではありませんのでそちらを期待してる方はそっ閉じしてもらえると幸いです.

おしながき

どんな本なのか

データラングリング #とは ,本の目次,面白かったテクニック&ノウハウおよび私の所感・感想を紹介します.

そもそも「データラングリング」とは?

「データ(Data)」を「飼いならす(Wrangling)」,という意味だそうです.

公式サイト(オライリー・ジャパン)によると,

「ラングリング」(wrangling)とはもともと馬や牛を集めて飼いならすという意味があります。

データを「馬」や「牛」にたとえて,カウボーイ*7プログラマー・データ分析者として「データを飼いならす」道具としてPythonを使ったノウハウを紹介するよ!そんな本とのことです.

サイトの説明文の続きも,

牛を集めてうまく操るカウボーイ(wrangler)のように、データを自在に操るためのスキルを身につけた「データラングラー」になろうというコンセプトのもと、データ収集、処理、分析、利用に関わるテクニックとサンプルを(以下略

とあるので,データを集めていい感じにして何かしらのタスクをこなすorプロダクトを作る私たちに最適の本っぽいですね.

本の目次

章レベルで紹介します.

1章 Python入門

なぜPythonでやるのか?という解説からインストールや環境設定,エディタについて.

2章 Pythonの基礎

主にデータ型やデータコンテナ(変数・リスト・辞書)、データラングリングする上で約立つツールを紹介しています.

  • type(データ型を見る)
  • dir(持っている属性を見る)
  • help(ドキュメントを確かめる)

といった,データを扱う時に使うと良いものを中心に解説しています.*8

3章 機械が読み出すためのデータ

CSV,JSON,XMLといった構造化されたデータの解説&Pythonでインポート(読み込む)方法の解説.

ここはよく使うノウハウが多い.

4章 Excelファイルの操作

ExcelファイルをPythonで扱う方法について.

具体的には,

  • xlrd(Excel読み込みライブラリ)
  • xlwt(Excel書き込みライブラリ)
  • xlutils(Excelを扱うユーティリティ)

群の解説.

5章 PDFとPythonによる問題解決

この手のデータラングリングで一番厄介な「PDF」の取り扱いについての解説.

6章 データの獲得と格納

目的のデータを獲得したり,獲得したデータを格納する方法について.

ここで言う「格納」はMySQL・PostgreSQLといったRDBMS,NoSQLやクラウドストレージ(DropboxやGoogle Driveなど),ローカルストレージ(自分の鯖やPCに保存)と言った意味です.

7章 データのクリーンアップ:調査、マッチング、整形

一言で言うと「前処理」の話.

重複排除とか正規表現を使ったフィルタリングetc...

8章 データのクリーンアップ:標準化とスクリプト化

確定したクリーンアップ(前処理)をスクリプトにしてデータ保存までやる時のノウハウや例.

バッチ的なモノを作る人が読むべき章.

9章 データの探究と分析

分析やデータの検索を行うノウハウなど.

10章 データのプレゼンテーション

matplotlibやbokehを使ったプレゼンテーション...を紹介の前に,ストーリーテーリング(物語ベースのプレゼンテーション)の勘所について解説.

プレゼンの方法や公開方法(ブログ・Githubページ・Jupyter notebook)の紹介.

11章 ウェブスクレイピング:ウェブからのデータの獲得と保存

読んで字のごとく,ウェブスクレイピングについて(lxml, beautifulsoupなど)

12章 高度なウェブスクレイピング:スクリーンスクレイパーとスパイダー

ブラウザベースのスクレイピング(Selenium)やScrapyを使ったスクレイピング,スクレイピングの勘所など.

13章 API

Web API,主にREST APIからデータを取得する方法.

14章 自動化とスケーリング

ここまで学んだ・作ったものを自動化したりスケーリングする時のノウハウや例.

15章 終わりに

良いデータラングラーになるためのまとめ.

具体的なテクニック・ノウハウなど(抜粋)

読んでて「ああなるほど」となった箇所

PDFを読み込む&スクレイピングする(slateとpdfminer)

5章より.

PDFデータのパースを始める前に考えなければならないことがいくつかあります。

  • ほかの形式のデータを探しましたか。(以下略)

  • 文書内のデータののコピー&ペーストを試してみましたか。(以下略)

私は面倒くさいことはしたくないのでいつもほかの形式データorコピペを目論むのですが,とはいえ...っていう事象は発生するので,PDFのデータをPythonで扱うノウハウがまとまってるのはとても助かりました.

この辺はちょいと抑えたいなと思いました,例もわかりやすくて良かったです.

付録(コマンドライン入門・Pythonのなるほど・AWSの使い方)

書籍本体はデータラングリングの手法の説明に終始していて,読んでる人がハマりそうな,

  • コマンドラインの使い方
  • Pythonそのもののノウハウ
  • AWSで鯖ってどうやって立てるの?

とか,疑問に思うであろう

  • 他の言語(R/MATLAB/JS/Node.js/Ruty)との比較
  • どうやって学べばいいんじゃ!

といったあたりを付録で網羅的に触れているのはとても読者のためになっていて◎と思いました.

この本(Pythonではじめるデータラングリング)は比較的お値段が高い方に入る書籍かと思いますが,初心者を抜け出す〜中級者への道に入り始めている方はこの付録を読むだけでも価値があるかもしれません!

所感・感想

私が感じた所感・感想.

この本,正直レベルで言うとあと3年早く出てくれたらもっと楽できたのに!!!

個人的にはここ3〜5年で学んだノウハウや勘どころを4,000円しない金額で買えるのはホント美味しいと思いました.*9

なぜそう思ったか,は大きく分けてこの2つに分類されます.

データの入手〜処理〜分析〜プレゼンまで網羅的に触れているはじめてのPython本

入手(データのimportやウェブスクレイピング),処理(前処理・データ保存),分析にプレゼン(可視化)とそれぞれに必要な観点や勘どころ,使うべきライブラリや手法を網羅的に書いてるかつ,わかりやすい順序で書いてる本はいままでなかったと思います.

Jupyter notebookやpandasといった個別のライブラリに触れる本は多々あれど,それらはどちらかといえば「え,ライブラリ使うからには目的決まってるよね?」前提の本が多い感じでしたが,この本は「目的と手段はちゃんとまとめる,細かい各論は自分たちで調べてやってね」っていう方針で書かれているあたりにセンスを感じました.

実際,初心者〜中級者入り口の人って観点が欲しいと思っている派(私がそうだったから)なのでこのアプローチは嬉しかったです.

プレゼンテーション(見せ方)について触れている

データを集めて分析してプレゼンテーションをする人相手故に,プレゼンテーションの観点・見せ方についてページを割いて触れているのはとても良いと思いました.

データ分析・データサイエンスは常に手法や技術に興味が行きがちですが,最終的に重要なのは

「データを集めて分析した結果,ステークホルダー(雇い主やユーザーさんetc...)にとっての価値は?」

の問いに対して答えを出すこと,その一部がプレゼンテーションなので「作っておしまいじゃねーよ,プレゼンまで頑張れよ!」というあたりに触れていて良いと思いました.

元々データ分析やサイエンスをやられている方はこの辺の意識あるかと思いますが,出来るエンジニア・プログラマーでも案外この辺が希薄だったりする方もいるので,「苦手だな」「プレゼン必要なくね?」と思っている方はぜひこの本の「10章 データのプレゼンテーション」を熟読されると良いかと思います.*10

合わせて読んでおきたい本など

所感に書いたとおり,網羅的には触れているものの,具体的な方法はさっくりしか触れていないのでそれぞれの領域でオススメの本などを紹介します.

Pythonをもっと上手く書く

色々な初心者向け本やノウハウがありますが,個人的には「スラスラわかるPython」が親和性高いと思います.

スラスラわかるPython

スラスラわかるPython

あとはオンライン教育サービスの「PyQ」も良いかもしれません.

shinyorke.hatenablog.com

データの入手・準備

ここはやはりスクレイピング関連の本が強いです.

Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド

Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド

PythonによるWebスクレイピング 第2版

PythonによるWebスクレイピング 第2版

  • 作者: Ryan Mitchell,嶋田健志,黒川利明
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2019/03/26
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

分析

網羅的に触れてるのはこちら.

IPythonデータサイエンスクックブック ―対話型コンピューティングと可視化のためのレシピ集

IPythonデータサイエンスクックブック ―対話型コンピューティングと可視化のためのレシピ集

この辺でようやっと機械学習関連の書籍が出てきます.

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

Python機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)

Python機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)

プレゼンテーション

Jupyter notebook + pandas + matplotlib or bokehという組み合わせが多いかと思いますのでやはりこちらの書籍かな.

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

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

Pythonでデータを使う方にとって参考になれば幸いです!

*1:教育心理学Meetup, PyLadies Tokyo 3周年記念と仕事・プライベートでドタバタしてました

*2:個人的には横浜DeNAベイスターズが日本シリーズ進出で野球データサイエンティストとして予測,いい仕事できたと思ってます

*3:@chezouさんありがとうございました!

*4:最近は仕事でJupyter notebookとpandasあたりを駆使してそこそこのビッグデータと格闘してて楽しいです

*5:@TakesxiSximadaさんの技術監修で間違いはないと思ってましたが想像を超えていい本でした,すごい.

*6:Pythonを使う人の大半がノンプログラマーな今,エンジニアかどうかの縛りはいらないと個人的に感じてます

*7:余談ですが私の父は大昔にカウボーイ(町営牧場で牛や馬、羊を飼いならすお仕事)をしていました,私が生まれる前らしいですがw

*8:特にtypeやdirといったprintデバッグで使う辺りを解説してるあたりが良い

*9:2011年,コンサル時代にPythonを使い始めましたがこの辺ホント苦労しました...

*10:仕事の提案もそうですが,コミュニティ活動やカンファレンスでのCfPが通る・通らないもこの辺の差が出てくる領域です.喋る/書くが苦手でも何かしらの方法で乗り越えないとアカン壁です.