2017-06-08 90 views
3

我想將python中的Pandas數據幀轉換爲LIBFM格式的稀疏矩陣txt文件。將Pandas DataFrame轉換爲LIBFM格式的txt文件

這裏的格式需要是這樣的:

4 0:1.5 3:-7.9 
2 1:1e-5 3:2 
-1 6:1 

此文件包含三種情況。第一欄列出了三種情況中每一種的目標:即第一種情況爲4,第二種情況爲2,第三種情況爲-1。在目標之後,每行包含x的非零元素,其中像0:1.5這樣的條目讀取x0 = 1.5和3:-7.9意味着x3 = -7.9等。這意味着INDEX:VALUE的左側表示索引在x內,而右側表示x的值。

在總從示例中的數據描述了以下設計矩陣X和目標向量y:

1.5 0.0 0.0 −7.9 0.0 0.0 0.0 
X: 0.0 10−5 0.0 2.0 0.0 0.0 0.0 
    0.0 0.0 0.0 0.0 0.0 0.0 1.0 

    4 
Y: 2 
    −1 

這在Manual file下章2.

現在,這裏還解釋是我的問題:我有一個熊貓數據框,如下所示:

overall reviewerID  asin  brand   Positive Negative \ 
0 5.0 A2XVJBSRI3SWDI 0000031887 Boutique Cutie  3.0  -1 
1 4.0 A2G0LNLN79Q6HR 0000031887 Boutique Cutie  5.0  -2 
2 2.0 A2R3K1KX09QBYP 0000031887 Boutique Cutie  3.0  -2 
3 1.0 A19PBP93OF896 0000031887 Boutique Cutie  2.0  -3 
4 4.0 A1P0IHU93EF9ZK 0000031887 Boutique Cutie  2.0  -2 

    LDA_0  LDA_1  ... LDA_98  LDA_99 
0 0.000833 0.000833 ... 0.000833 0.000833 
1 0.000769 0.000769 ... 0.000769 0.000769 
2 0.000417 0.000417 ... 0.000417 0.000417 
3 0.000137 0.014101 ... 0.013836 0.000137 
4 0.000625 0.000625 ... 0.063125 0.000625 

其中「overall」是目標列,其他所有105列都是要素。

需要將'ReviewerId','Asin'和'Brand'列更改爲虛擬變量。所以每個獨特的'ReviewerID','Asin'和品牌都有自己的專欄。這意味着如果'ReviewerID'具有100個唯一值,那麼您將獲得100列,其中值爲1(如果該行表示特定審閱者,否則爲0)。

所有其他列不需要重新格式化。所以這些列的索引可以只是列號。

所以在上面的熊貓數據幀中的第一3行需要被變換爲下面的輸出:

5 0:1 5:1 6:1 7:3 8:-1 9:0.000833 10:0.000833 ... 107:0.000833 108:0.00833 
4 1:1 5:1 6:1 7:5 8:-2 9:0.000769 10:0.000769 ... 107:0.000769 108:0.00769 
2 2:1 5:1 6:1 7:3 8:-2 9:0.000417 10:0.000417 ... 107:0.000417 108:0.000417 

在LIBFM]包有,可以改變用戶的程序 - 物品 - 分級插入LIBFM輸出格式。但是這個程序無法與這麼多列相處。

有沒有簡單的方法來做到這一點?我總共有100萬行。

回答

相關問題