前提・実現したいこと
Pythonのコードに関する質問です。Pandasのread_csvで400万レコード近くのcsvファイルを読み込もうとしているのですが、
種々のキャラクタが入り込んでしまうこと、またshift_jisであることから、Codecsを使っています。
###csvのサイズ
csvは約2GBです。
### 該当のソースコード import pandas as pd import codecs file1="xxxxxx" with codecs.open(file1, "r", "cp932", "ignore") as file: mylist = [] for chunk in pd.read_csv(file,sep=",",chunksize=10000,engine="python"): mylist.append(chunk) df = pd.concat(mylist)
補足情報(FW/ツールのバージョンなど)
読み込むだけで40分から60分かかってしまい、もっと短時間に読み込む方法がないか
をググるなどで調べているのですが、解決法が見つかりません。
Windows10
第5世代 core i5
メモリ 8GB
・コードは「コードの挿入」で記入しましょう。
・csvファイルのサイズは何GBですか?
修正依頼に対して、記述しました。
read_csv()の際に適切なデータ型を指定することで使用メモリを削減できるので、試してみてください。
pandasはメモリ使用量が多いと言われていますので、ご使用の環境では厳しいかもしれません。
読み込めても操作途中でメモリエラーが発生する可能性が高いと思います。
カラムの数は多いのですが、実は、カラム名に対して、objectなど、結構な数の型は定義して処理をしています。メモリの問題だとしたら、16GB、あるいは32GBのメモリにすることで処理が格段に速くなるでしょうか。
会社のPCなので、なかなかよりハイスペックのマシンを購入することが難しいとは思うのですが。。
メモリ30GBのサーバーで3GB程度のcsvファイルをpandasで処理した場合で、15GB程のメモリ使用でした。(環境によって変わりますので参考です)ファイルを開くのにかかる時間は数分です。
スクリプト実行中のメモリを監視してみると良いかと。
chunksizeの指定をしているのはメモリサイズの問題でしょうか? 可能であればcsv自体を何らかの規則で分割した方が良い気がします。
ありがとうございます。実は、csvファイルの作成は、sasのプログラマーが作成しており、3か月分のあるデータを構築してもらっています。chunksizeは念のためにプログラムがハングしないための予備的な措置です。しかし、今AIとかビッグデータと言っていて、そのメインのプログラムがPythonだと思うのですが、400万レコード程度で1時間もかかってしまうのが信じられません。daskというライブラリーを使うと早くなるというのも試してみたのですが、あまりオプションが豊富でないようで、やり方がわかりません。こちら質問としてあげていただくことはできないでしょうか。
すみません。修正依頼になっているのですが、質問としてまだアップされていない状態なのでしょうか?初心者なのでお手数かけます。
どのような処理をしたいのか分かりませんが、メモリが足りない場合にはchucksize毎に処理をしてアウトプットを出す、という方法があります。
メモリ不足が原因の場合、メモリ増強が難しいのであれば、クラウドサービスの利用を検討されてはいかかでしょうか?
※ズバリの回答が難しいためこの欄に書いております。
すみません。会社のPCで会社のデータを利用しているために、すぐにメモリの増設とかクラウドとかという話になると、なかなか許可がおりません。
どういう処理が必要かというと、会社のKPIを入力のcsvファイルから算出し、csvに落とし、BIツールで可視化するということが最終目標なのですが、一番時間がかかっているプロセスがこの読み込みの部分なのです。
chucksize毎に処理をしてアウトプットを出すについては、、コードの中で実装しているつもりで、chunksizeを10000に設定して、それぞれのリストをデータフレームにconcatしています。
daskで高速化は難しいでしょうか。
何卒、よろしくお願い申し上げます。
あなたの回答
tips
プレビュー