pandasについて

(概要)
pandasは、Rのデータフレームのようなものを
python上で、動かすライブラリ。

(詳細)
Rの場合、さらに進化しているので
それに比べると、pandasは
少し洗練されていない感がある。

例えば、下記等。
(1)dplyrライブラリの様には、メソッドチェーンを実行できないこと。
(2)関数型言語で言う所の、flatmapが無く、追加要望のプルリクエストは否決されている。
  (なんとなく、この部分は作成者の後進性にも見える。)

しかしながら、pythonの前処理では
現状デファクトスタンダードであるので
無視することはできない。

より良いライブラリが登場するまでは
工夫して使用していくしかない。

また、pythonでは、daskという並列処理に得化した
データフレームのライブラリがある。
使用できるapiが少なくなるので
そのままポーティングできる訳ではないが
チューニング時の逃げ道にはなる。

以下、工夫した点について書いていく。



(工夫点)
(1)欠損値について
 数値で、欠損値が出た場合に、「nampy.nan」が当てられてしまう欠点がある。
 「日にち」や「実行回数」など、浮動小数点数では本質的に表せない数値があり
 後続の処理によっては、「nampy.nan」は不都合である。
 まずいことに、「nampy.nan」が当てられると、その列の他の有効値が整数でも
 すべて、floatに変換されてしまう。
 (例えば、「5」→「5.0」となるが、これが後続処理で、繰り返し5回の意味だとすると、ループ構文でエラーとなる。)
 
 この欠損値が発生するパターンは、2通りある。
 ・入力レコードリストに、元々欠損値がある場合。
 ・margeで外部結合した場合に、マスターに結合キーに当たるレコードが存在しない場合。

 欠損値は、デフォルト値で埋める等するが
 この場合の回避策として考えられることを以下に上げる

  (a)pythonの言語機能で処理する
   速度を落とさないように、pythonの内包表記などを使用して
   前処理の前処理を作成する。

   その場合に辞書を使用すると、外部結合相当の処理の
   1レコード分の結合の計算量はO(1)となる。
   つまり、ハッシュ計算だけで直接アドレスから値取得可能となる。
   逐次処理となるが、daskを使用した場合と遜色ない速度がでると予想される。
   (実験で確かめるべきだが、次の課題とする。)

  (b)作業用の列を作成し、あくまでもpandasで処理する。
   (あ)すべてのキーを作成して、それから作業用データフレームを作る
   (い)作業用データフレームで、デフォルト値を対象列にセットする
   (う)作業用データフレームを駆動表として、入力値のデータフレームを結合する
   (え)入力値のデータフレームの値がある列値のみ、対象列にコピーする


 上記(b)の方法は、少し難しい点がある。
 上記(b)の方法は、少し煩雑であることがネックである。

 人によっては、「floatに変換されてしまう」問題自体に対し
 腹落ちするまでの理解が、中々得られないこともある。
 (データサイエンスを志向する人たちの、集団で問題提起しても
 大部分の人は、何が問題なの ? というふうである。
 まあ、本処理が統計処理ならば問題にならないので
 そう思ってしまうのも無理はないですが。)

 あまりレベルが高くない人の場合
 実装者中途半端な理解で実装してしまい
 (b)の実装法は面倒くさい、あるいは汚い実装に思えてしまい。
 注意指摘したとしても、ノーガードで
 margeをしてしまう実装に改悪してしまいう
 誘惑があるようです。
 (人は、分からないものは、見えないものと考え
 見えないものは、存在しないものと考え
 結果無視することが多々あります。)

 ノーガードの実装は、後続処理が
 整数を求めているならばバグ実装なので
 間違いであるが、事は簡単ではない。
 他人の視野の狭さを矯正するのは
 中々難しいので、自分を変えるしか
 方法はないと思われます。

 (結論)
 上記理由で、(a)の前処理中の前処理を実装するのが得策と見える。

 (おわり)


 (実装例を挟みながら、レポートを書いたほうが良いが
 今回 ~~は~~も、時間がないので省略する。追記するかもしれない。)



 ところで、黒川先生訳本が出版される予定。
 https://www.amazon.co.jp/dp/425412242X

 黒川先生だから、よさげに見える。


 下記のような本も出るみたい。
 原題が「Pandas for Everyone」だから
 直訳すると、「みんなのPandas」になるけど
 https://www.amazon.co.jp/Pythonデータ分析/機械学習のための基本コーディング!-pandasライブラリ活用入門-impress-top-gear/dp/4295005657/ref=sr_1_5?s=books&ie=UTF8&qid=1546782535&sr=1-5&keywords=pandas