2016-06-01 5 views
3

私はyelpデータセットからアイテムベースの推奨システムを構築しようとしています。私は一定の州のレストランを見直したすべてのユーザーから与えられた格付けをどこまでデータを処理することができましたか。最終的には、1つの軸にレストランを、もう1つにユーザーを配置し、評価(1-5)を中間(評価が不足している場合はゼロ)に設定しています。2d評価マトリックスを作成するためにパンダのデータフレームを再編成する

今のDFは、次のようになります。

   user_id    review_id    business_id stars 
0 Xqd0DzHaiyRqVH3WRG7 15SdjuK7DmYqUAj6rjGowg vcNAWiLM4dR7D2nwwJ7nCA  5 
1 Xqd0DzHaiyRqVH3WRG7 15SdjuK7DmYqUAj6rjGowg vcNAWiLM4dR7D2nwwJ7nCA  5 
2 H1kH6QZV7Le4zqTRNxo RF6UnRTtG7tWMcrO2GEoAg vcNAWiLM4dR7D2nwwJ7nCA  2 
3 zvJCcrpm2yOZrxKffwG -TsVN230RCkLYKBeLsuz7A vcNAWiLM4dR7D2nwwJ7nCA  4 
4 KBLW4wJA_fwoWmMhiHR dNocEAyUucjT371NNND41Q vcNAWiLM4dR7D2nwwJ7nCA  4 
5 zvJCcrpm2yOZrxKffwG ebcN2aqmNUuYNoyvQErgnA vcNAWiLM4dR7D2nwwJ7nCA  4 
6 Qrs3EICADUKNFoUq2iH _ePLBPrkrf4bhyiKWEn4Qg vcNAWiLM4dR7D2nwwJ7nCA  1 

が、私はそれはもう少し、このようになりたいと思います:

(×5人のユーザー4つのレストラン)

0 4 3 4 5 
3 3 3 2 1 
1 2 3 4 5 
0 5 3 3 4 
+1

ここにコピー可能な例を含めるとよいでしょう。ピボットのようなものが必要ですが、yelpデータセットは実際にはまばらなので、メモリの問題が発生する可能性があります。この構造はより適切であり得る。 – ayhan

+0

画像へのリンクの代わりに?私はどうすればよいか分かりませんが、試してみることができます – mmera

+0

'df = pd.DataFrame({'A':['a'、 'b'、 'c'、 'c']のようなダミーデータを持つサンプルがベストだと思います。 、 'B':['g'、 'h'、 'f'、 'p']、 'C':[7,8,9,1]}) '、必要に応じて修正してください。また、希望の出力を追加するのを忘れないでください。 – jezrael

答えて

3

私はあなたが必要と思いますpivotfillna

print (df.pivot(index='business_id', columns='user_id', values='stars').fillna(0)) 

の場合:

ValueError: Index contains duplicate entries, cannot reshape

はその後pivot_tableを使用します。

print (df.pivot_table(index='business_id', columns='user_id', values='stars').fillna(0)) 
user_id     H1kH6QZV7Le4zqTRNxo KBLW4wJA_fwoWmMhiHR \ 
business_id               
vcNAWiLM4dR7D2nwwJ7nCA     2     4 

user_id     Qrs3EICADUKNFoUq2iH Xqd0DzHaiyRqVH3WRG7 \ 
business_id               
vcNAWiLM4dR7D2nwwJ7nCA     1     5 

user_id     zvJCcrpm2yOZrxKffwG 
business_id         
vcNAWiLM4dR7D2nwwJ7nCA     4 

しかしpivot_tableaggfuncを使用して重複している場合、デフォルトはaggfunc=np.meanです。サンプルでのより良い説明はheredocsです。

+0

私はこれを試して、カーネルがクラッシュしました。データセットは確かに大きかった。私は最後にhead()を追加して、これが機能するかどうかを調べるつもりです。 – mmera

+0

または 'df_small = df.head(100)'のテストを試してみてください – jezrael

+0

これは私が必要としているものだと思っていますが、まだそれほどではありません。代わりに私はビジネスをy軸として欲しい。理論的には2番目の答えはうまくいくはずですが、今は「ValueError:インデックスに重複したエントリがあり、再形成できません」というエラーメッセージが表示されます – mmera

関連する問題