『Pythonによるデータ分析入門』を献本頂きました

ちょっと早いクリスマスプレゼントを頂きました。こんな歳になってもサンタさんに出会えて感謝です。

表題の通り、オライリー・ジャパン様より献本頂きました。ありがとうございます。縁を感じる本です。

正式名称は『Pythonによるデータ分析入門――NumPy、pandasを使ったデータ処理』です。

Pandasのメインコミッターであり原著者のWesMcKinnery氏を初め、翻訳者のみなさん、編集や、この書籍に携わった全ての方々。お疲れ様でした。

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

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

まず、初めに

私自身は、

  1. Pythonはある程度不自由なく触れる。
  2. NumPy, Scipy, Pandasの名称は知っている、ないしは軽く使った程度。適度な興味もある。
  3. Rは使ったことない。
  4. 計算機科学の知識は独学でかじる。統計学数値計算科学は独学でかじる、ないしは未学程度。

目次

  • 1章 はじめに
  • 2章 Pythonによるデータ分析事例
  • 3章 IPython:対話的な開発環境
  • 4章 NumPyの基本:配列とベクトル演算
  • 5章 pandas入門
  • 6章 データの読み込み、書き出しとファイル形式
  • 7章 データ管理:データのクリーニング、変換、マージ、再結成
  • 8章 プロットと可視化
  • 9章 データの集約とグループ演算
  • 10章 時系列データ
  • 11章 金融と経済データへの応用
  • 12章 NumPy:応用編

各章にコメント

1章 はじめに

1章では、なぜPythonを選ぶのかに始まり、紹介されるライブラリの簡易概要、環境やカンファレンス、コミュニティの紹介、そして謝辞です。

2章 Pythonによるデータ分析事例

2章では、 github.comで公開されてるデータを具体的に読み込んで、処理をしていきます。
Pythonのリスト内包表記の説明がごく少ないことであったり、Rの配列とインデックスの始まりが違うこと(具体的にはRは1から、Pythonは0から)が明確に説明されていました。

データの基本的な集計から、Matplotlibによる表示も紹介されています。

気づいたこととしては、私が使う時はMatplotlibに対して、pandasのデータをプロットしていました。書籍ではpandasのオブジェクトにplotメソッドを使っています。これは知りません。便利ですね!
他にも気づいたこととしては、IPythonと対話的に行うことでした。経験として、もちろんIPythonやPythonインタプリタと対話しながらという場面はありますが、ファイルに書いて実行が常だよな。と思うところです。

2.2ではとってもよい機能がありました。pandasのDataFrameオブジェクトのmergeメソッドです。このメソッドはpandasのデータフレームオブジェクト同士を結合する機能です。あたかもRDBMSのテーブルを結合するかのように。

3章 IPython:対話的な開発環境

3章はなんとまるまる1章IPythonに割かれています。
IPythonの作られた文化背景や、如何に野心的で高機能であるかを知ることができました。Python標準インタプリタの対話機能をちょっと強化しただけだと認識して使ってた私はどうやら馬鹿です。

様々なIPythonのコマンドが紹介されています。特に、IPythonのコマンドで処理時間を計測を計測する%timeと%timeitは活躍しそうです。

Matplotlibとの連携機能もあまり知られていないのではないでしょうか。

また、3.5でIPythonノートブック(書籍中ではIPython HTML ノートブック)が紹介されていました。
IPythonをブラウザから実行できたりと手軽感があるので、ちょっと使うだけの方は試してみてください。

書籍では語られていませんでしたが、IPythonは並列実行をサポートしています、もし興味がある方は公式ドキュメントの"Using IPython for parallel computing"を参考にしてみて下さい。

4章 NumPyの基本:配列とベクトル演算

この章はまるまるNumPyについて割かれています。ちなみに12章はNumPyの応用編です。

NumPyのndarrayに各種方法によってアクセスした際に、値コピーであるか参照であるかという基本的な仕組みから、インデックスによる参照、スライシング、ソートなどの操作が解説されています。

4.1.1 ndarrayの生成において、ndarray.ndimが説明されることなく使われていますが、これのメソッドは多次元配列の次元数を表します。

追記: 訳注しっかり付いてました。訳者++。

5章 pandas入門

5章ではpandasが提供するデータ構造のSeriesとDataFrameをはじめとしたpandasの機能を説明しています。特に欠損値(NaN)の除外や穴埋めは、7章でふれるマージの機能ととともに使う機会が多そうです。

正直、ちょっと私には難しいですねー。

6章 データの読み込み、書き出しとファイル形式

6章ではpandasに特に注目して、データのファイル入出力を解説しています。

これを読むまでははcsvやtsvのデータを集計する際に、Python標準ライブラリのcsvPythonのコードで集計してました。これからは、pandasのread_csvとpandasのDataFrameを駆使すれば良さそうです。

7章 データ管理:データのクリーニング、変換、マージ、再結成

この章では、pandasのマージが紹介されています。left join、right join、outer join、inner joinとRDBMSでよく馴染みがある結合についてです。

それ以外にも、配列同士の連結(≒concat)やピポット(行から列へ、列から行への旋回)が紹介されています。

後半はPythonによる正規表現を学んだあとに、データの正規化(Normalize)についてです。ごめんなさい。ここは飛ばし読みしました。

8章 プロットと可視化

8章は"matplotlib"による可視化の話です。

気になったのは、2012 Google Summer of Codeプログラムの一環で学生さんがフルタイムで改修かけたので、一気に変わってるよ!てへぺろ。という文でしょうか。pandas公式オンラインドキュメントのコード例が先を行っている可能性があることが明記されていました。

9章 データの集約とグループ演算
10章 時系列データ
11章 金融と経済データへの応用
12章 NumPy:応用編

さてはて私感。

全体的にスムーズに読めてよい翻訳本でした。誤字脱字も少なくて良いです。

本家のドキュメントを除き、pandas、NumPy、SciPy、matplotlibのいずれを考えても日本語のドキュメント、書籍が多いとは言えず、この一冊が重要な情報源になると思います。

ライブラリとしては興味あるので、継続して学んでみようと思います。
けれども、そもそもの数値を扱う学や、明確な機会がないので、現状過ぎたる物ですね。。気長に行きます。

正誤情報

本家の正誤表かレポート先ができたら連絡する。念のため原著は確認ずみ。

p.110 np.sqrtの引数

o > In [135]: z = np.sqrt(xs ** 2 + ys ** 2)
x > In [135]: z = np.sqrt(xs 2 + ys 2)

p.288

o > グループキーにkey1だけを指定する代わりに、
x > グループキーにkey1をだけを指定する代わりに、

余談:この書籍に縁を感じた話

どうやら、2013年はNumPy, Scipy, Pandasと縁がある年でした。

ひとつは、今回献本頂いた書籍。

もうひとつは、先月(あれ、もしかして今月だってっけ...)購入した電子書籍が今回献本頂いた書籍の原本でした。英語書籍に挫折しててgrep用途となっていたのでした。

更にもうひとつは、7月初旬に行われたEuroPython2013の会場で購入して、帰りの空港、飛行機の中で読んでた書籍。ページ数が82ページと極薄なのでちょうどよい分量でした。(内容も軽い

そして最後は、業務において少なからずPandasとMatplotlibによって業務データをビジュアル化し、知識を活かすことができました。

この業務の時に活きたのは、書籍『データサイエンティスト養成読本』による"Pythonのによる機械学習"という章でした。ここではNumPy、Scipy、Pandasに触れられているので、興味ある方は中身を覗いてみてください。