2017-11-01 3 views
1

バイナリデータを持つデータフレームがあり、列間の依存関係があることがわかりました。私は依存する列を削除したいだけで、独立した列を残したいと思っています。例えば以下のように入力は次のとおりです。バイナリデータの次元を減らす方法は?

Test ,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P 
test1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1 
test2,1,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1 
test3,1,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1 
test4,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1 
test5,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1 

ここでは、(A,B,C,G,M), (D), (E,F), (H,I,J,K,L,P) and (N, O)は、グループが同じ値または依存列の列です、ご覧ください。最後に、私は、次の列を取得したい:私はPythonでPCAを使用しようとしているが、それを達成することができないのです

Test,A,D,E,H,N test1,0,0,0,1,1 test2,1,0,1,1,0 test3,1,0,1,1,0 test4,1,1,0,1,0 test5,1,1,0,1,0

。誰かがこれを達成する方法について私を導くことができますか?

EDIT:ここに私は

import pandas as pd 
import numpy as np 
from sklearn.decomposition import PCA 

df = pd.read_csv("TestInput.csv") 
print(df) 
pca = PCA() 

#Remote the header and the row names 
numDf = df.iloc[:,1:] 
print(pca.fit(numDf)) 
T=pca.transform(numDf) 

print("Number of unique columns are:", T.shape[1]) 
print(np.cumsum(pca.explained_variance_ratio_)) 

感謝を使用していますサンプルコードです。

+0

列には非常に類似していることが明示的に示されているので、PCAを使用する必要はありません。列の値を比較して重複する列を削除してみませんか? –

+0

@AnandCUこの例では、列の数は制限されていますが、私の元の問題では100000列と100000行です。このような大きなデータフレームで類似性テストを行うには時間がかかります。 –

+0

PCAを試しましたか?あなたはどこにいるのですか?また、この回答をhttps://stackoverflow.com/a/14985695/5026636で確認してください。試してみる。 –

答えて

0

this commentを回答に変換するには、重複する列を見つけて削除し、drop_duplicatesとします。

df = df.set_index('Test') 
df.T.drop_duplicates(keep='first').T 

     A D E H N 
Test     
test1 0 0 0 1 1 
test2 1 0 1 1 0 
test3 1 0 1 1 0 
test4 1 1 0 1 0 
test5 1 1 0 1 0 
関連する問題