レコード数が300万ぐらいのログデータがあります。
以下の集計したい項目のほかに、urlや時間などの項目もあります。。
id item
aaa 002
aaa 005
bbb 006
ccc 003
これをpandasのread_csvで読み込み、indexを「id」、columnsを「item」として、
データ数をカウントしたいと思っております。
下記2つの方法を試しましたが、うまくいきませんでした。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
・1通り目:pivotで集約
pivot_tableで集約しようとすると、次のようなエラーが出ます。
python
1df.pivot_table('url',index='id',columns='item',aggfunc='count')
「ValueError: negative dimensions are not allowed」
ネットで検索した結果、「サイズの大きく、かつ、スパースなndarrayを操作すると発生する」ようです。
なので、pivotでは集計が難しいでしょうか…?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
・2通り目:for文で地道に計算
下記のようなに集計しようとすると、PCがフリーズしてしまいます。
python
1df=pd.read_csv('logdata.csv') 2df1 = DataFrame(index=df['id'].unique(),columns=df['item'].unique()) 3for i in range(len(df['id'])): 4 df1.ix[df.iloc[i,0],df.iloc[i,1]]=1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
いずれの方法でも、データ量が1万程度なら問題なく動くことを確認しています。
1通り目に関してのpivotでのエラーの回避方法、もしくは別の方法などのお知恵をいただければ幸いです。
回答2件
あなたの回答
tips
プレビュー