pandasのread_csv時にdtypeを指定してメモリの節約
Kaggleで大きいデータの取り扱い
Microsoft Malware Predictionというコンペに参加しています。 このコンペでは与えられたデータが大きく、普通にread_csvだとローカルPCではメモリに乗りきりません。 こんな時いくつか方法がありますが、今回はread_csvのdtype指定についてまとめます。データは4.08 GBです。
pandasのread_csv時にdtypeを指定
pandasの仕様上、read_csv時にdtypeを指定しないと、整数はint64 、小数はfloat64 が勝手に割り当てられるようです。なので、必要最低限の型を割り当てる必要があります。
dtypes = { 'MachineIdentifier': 'category', 'ProductName': 'category', ・ ・ ・ 'OsSuite': 'int16', 'OsPlatformSubRelease': 'category', 'Census_IsVirtualDevice': 'float16', 'Census_IsTouchEnabled': 'int8', 'Census_IsPenCapable': 'int8', 'Wdft_IsGamer': 'float16', 'Wdft_RegionIdentifier': 'float16', 'HasDetections': 'int8' }
df_train = pd.read_csv('../input/train.csv', dtype=dtypes)
ではそもそもメモリに乗らないデータのカラムごとの型をどう見極めればいいでしょうか。方法としてはいくつかあると思いますが、read_csv時に読み込む行数を少なくしてデータを確認して必要なデータ型を調べる方法です。
df_train = pd.read_csv('../input/train.csv', nrows=10000) df_train.head(10000)