suzukiyou blog

建築設計とかpythonとかその辺をとりあえずする

pandasをwhlで入れる

pythonのデータ保存の考え

pythonでデータを保存するには多分以下の方法のどれかを使うのが手っ取り早かろう。

  1. 関係データベースシステムRDBMSを問い合わせ言語APIのsqlite3で操作する
  2. 標準ライブラリのpickleを使ってdumps,loadする
  3. xml.etree.ElementTreeを使ってXML形式で保存読込する
  4. jsonを使ってJSON形式で保存読込する。
  5. xlrdなどでEXCEL形式で保存読込する。
  6. pandas等でcsv形式で保存読込する。
  7. なにか自分で入出力クラスを実装して保存読込する。

仕様によって向き不向きがあるので検討する

手っ取り早くやるときはまあなんでもいいと思うけど、データを保存するのだから、それをのちのち使うのだろう、と考えるのが自然だと思う。
この時は何を考慮する必要があるのか。

  • データの正規性

データが正規化されていると型処理が非常に楽。というかそのままsqlでぶち込めるし読める。何も考える必要が無い。
データが非正規的だと面倒さが加速する。

  • データの構造

木は極めて面倒。データだか実装だか全然わからん。いやわからんことはないが、実装がデータに依存してくるから、データを拡張すると実装が爆発的に加速。
カオスなコードになる。

  • データの拡張性

逆にxml等の半構造データベースは拡張が容易。例えばこのレコードだけ特殊なkeyを設けるとかできる。まあテーブルを分割しろよ、正規化していけ、と思わなくもないが、その結果隣接テーブルを作るはめになって死、が容易に想像できる。

  • データの一意性とか完全性とか

関係データベースは正規性を保っておけば一意性・完全性に関してかなり優位だし、どの本よんでもそう書いてある。
半構造データベースはその辺がほぼ無理。

  • データの検索性

csvとかjsonとか検索性あるのってレベル。必然的にpandasとか補助的なライブラリを使うこととなる。

  • 可読性・可視化性

excleとかで見れると非常に楽。csv,jsonテキストエディタで見れるしかなり楽。一方RDBは専用のツールが必要。pickleとか言うまでもない。

  • エンジンの入手性

簡単に操作環境を構築し直せる方が良い。標準ライブラリに入ってるものは簡単に環境を構築できる。
pickleは保存できるクラスがモジュールトップレベルじゃないとダメ~という縛りがあるから思ったよりその辺が面倒になる。

  • 書きやすさ

コードの生産性があるので、単に使い慣れてるもの使えばよいのでは、というのが基本。しかしそうであればオレオレ実装が一番楽となるが、オレが明日も同じ気持かというとそうではないのだ……
sqlクエリを書くのは、文字列操作じみた方法になってくるのでこれはこれでキモいところがある。

まとめるとこう。

実装 正規性 構造 拡張性 完全性 検索性 可読性 入手性 書きやすさ
sqlite3 × ×
pickle × × × ×
ElementTree ×
json × ×
excel × × ×
csv ×
人力 × × × ×

多分こんな感じ。気持ちをまとめるとこころにやさしい。

pandasを入れてなかった

のでwhlで入れます。
いつもどおりhttp://www.lfd.uci.edu/~gohlke/pythonlibs/からpy2.7-win64.whlを取ってきてpip install pandas~.whlでインストールする。