2017-06-08 14 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 

このファイルには、3例が含まれています。第1の列は、3つの場合のそれぞれの目標を示す。すなわち、第1の場合は4、第2の場合は2、第3の場合は-1である。ターゲットの後には、各行にxの0でない要素が含まれます.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 

また、これは今ここに章2.

Manual fileに説明されている私の問題です。私はこのようなパンダのデータフレームを持っています:

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個の固有値がある場合、その行が特定のレビューアを表す場合は値が1で、それ以外の場合は100個のカラムを取得することを意味します。

他の列はすべて再フォーマットする必要はありません。したがって、これらの列の索引は列番号にすることができます。上記パンダデータフレームにおける

したがって、最初の3行は次のような出力に変換する必要がありますLIBFMで

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出力フォーマット。しかし、このプログラムは、この多くのコラムには対応していません。

これを行う簡単な方法はありますか?合計で100万行あります。

答えて

関連する問題