2020-04-26

"Python によるデータ分析入門" Wes McKinney 著

この酔いどれ天の邪鬼は、Ruby 信奉者である。いや、だった。それも仕事場ではなかなか受け入れてくれない。Ruby はもう死んだのか?やら、Rubyはまだ死んでいない!やらといった記事も見かけるけど...
近年、大人気と評判の Python なら受け入れられるようになったので使うようになったが、あくまでもスクリプト言語としての位置付けであって、まだまだ、Ruby の思考回路から抜けられないでいる。
しかしながら、Python 関連の書籍を漁っているうちに、こいつの本当の魅力は C 言語系との相性の良さではあるまいか、と感じ始めた。Cython プロジェクトなるものも耳にすれば、Visual Studio にも Python ツールを見かけるし...

実際、数値計算ライブラリや画像処理ライブラリには、C言語系の API が溢れている。OpenCV しかり、Dlib しかり、むかーしから愛用してきた LibTIFF しかり... 処理性能を求めれば、低水準言語で扱う場面が増え、ここにスクリプト言語との壁が生じる。その壁も随分と低くなってきてはいるが...
おいらの昔からの考えに、言語依存を避けるため、データの受け渡しにはテキスト形式で I/F するというのがある。テキスト形式であれば、エディタで直接編集できるし、痒いところにも手が届く。
そして、データ解析モデルや演算モデルに GNU Octave(数値演算言語)や Lisp、あるいは C++ を、これらの可視化ツールに gnuplot を、プロセッサや DSP の設計・検証に HDL(ハードウェア記述言語)を、そして、統合環境にスクリプト言語を用いるのが定番となっている。
ただ、受け渡しのための中間ファイルが巨大化する傾向があり、ずっと悩まされてきた。その都度圧縮したりと。ハードディスクも SSD に置き換わって高速化し、搭載メモリも大容量化してきたので、それほど目障ではなくなってきたものの、開発環境を一つの言語システムで完結できれば、それに越したことはない。こんなことは、三十年来、思い描いてきたことではあるけれど、人類の編みだす言語システムに完全で万能なものなんてありえないであろうし、用途によって、場面によって... 適した言語を、気に入った言語を... その都度選択するしかあるまい、というのが現実解だと考えている。否、儚い夢だからこそ追いかけていたい。
ここでは、そんな心を見透かすかのように、Python 上の統合環境を提案してくれる。やはり、蛇の道は蛇か...

本書は、科学計算パッケージ NumPy(Numerical Python)とデータ解析用ライブラリ pandas を話題の中心に据え、NumPy を基盤にした科学計算ライブラリ SciPy や、これらを可視化する描画ライブラリ matplotlib、さらには、これらを統合するシェル環境 IPython を紹介してくれる。

NumPy で注目したいのは、多次元配列オブジェクト ndarray である。モノは二次元配列だが、インデックスによる階層構造によって、見かけの次元を増やすことができる。配列上の操作関数も豊富で、線形代数演算、フーリエ変換、乱数の生成なども提供される。

pandas は、NumPy の高性能の配列計算機能と、表計算ソフトやリレーショナルデータベースの柔軟なデータ操作能力を併せ持つという。SQL との相性の良さも強調される。
当初は、金融分析用に設計されたツールだそうで、洗練されたインデックス付け機能を備え、データの再形成やスライス、ダイシング、集約、部分集合の選択が容易だという。
主要なオブジェクトは、二次元の表形式で、列指向のデータ構造をもつ DataFrame ってやつ。統計解析で知られる R 言語の data.frame オブジェクトに似たものらしいが、機能性は上回ると宣伝している。おいらは R 言語を見かける程度しか触れたことはないが、おかげで、R にも興味を持つ今日このごろであった。
データの受け渡しでは、JOSN や CSV のようなテキスト形式だけでなく、HTML や Web API を用いた読み書き、HDF5 形式を扱う HDFStore クラス、SQL データベースへの Import/Export の事例も紹介される。おいらが忌み嫌う ExcelFile クラスまでも..

SciPy は、これらのパッケージ群を眺めるだけでそそられる。

  • scipy.integrate: 数値積分ルーチンや微分方程式ソルバ
  • scipy.linalg: 線形代数ルーチンや、numpy.linalg で提供される機能を拡張した行列の分解機能
  • scipy.optimize: 線形計画法などの最適化アルゴリズムや、求根アルゴリズム
  • scipy.signal: 信号処理ツール
  • scipy.sparse: 疎(スペース)なデータを持つ行列や線形システムの解法
  • scipy.special: ガンマ関数のような一般的な数学の関数を実装した Fortran のライブラリ SPECFUN を使うためのラッパー
  • scipy.stats: 標準的な連続分布や離散分布(密度関数、サンプラー、連続分布関数)、様々な統計検定、その他の記述統計
  • scipy.weave: 配列計算の加速のために用いるインラインでの C++ コードを利用するためのツール

matplotlib は説明の必要がないほど、おいらの感覚に馴染めそう。ここでは、IPython との統合性が推奨される。
ちなみに、R の ggplot2 や trellis といったパッケージには見劣りするらしい。ますます、R に...

IPython は、いまや科学分野における Python のスタンダードになっているそうな。
ちなみに、著者のウェス・マッキニー氏は、pandas の開発者だけあって、ベストな開発環境を尋ねられたら、即「IPython + テキストエディタ」と答えるそうな...

0 コメント:

コメントを投稿