2018年12月21日金曜日

巨大CSVファイルの操作

5000万行以上の CSV データを取り扱い。

ファイルサイズは 13GB 程度。
ひとまず、手元の Ubuntu + Python + Pandas で読み込もうとしましたが、途中でメモリ実装分の 24GB を超えたため中止。何も指定せずに取り込んでも大丈夫だろうと安易に試行しましたが、ダメでしたね。
調べてみると、分割読み込み、for ループを利用した分割ファイルの一括操作など、メモリに載らない巨大データの取り扱い方法はありました。が、今回はWin10 に帰り EmEditor で不要な列を削除。半分程度の容量に落とし、再度 Python へ。
今度は読めました。

データフレームにしてしまえば、あとは速い。
describe で簡単な統計量を表示。最小値、最大値等で異常値を確認し、その値を含む行を削除。Nanを含む行も削除。それらのチェックを各列を対象に数度回繰り返せば、4000万行程度になりました。EmEditorだと削除だけでも時間かかりますからね。このあたりは Pyhton + Pandas 様サマ。ありがたい。

できたデータは hdf5 で保存。容量が減って、次回からのアクセスも早くなりました。
これ、今後のデフォにしましょう。

*****************************************************
20181230追記
DASK を試しました。
途中の表示は速いのですが、最後にcsv保存しようとすると、メモリーオーバー。
hdfだと時間はかかるものの保存できました。が、18GBに。なぜ?

0 件のコメント:

コメントを投稿