2016-06-22 20 views
1

Ich habe einen Datenrahmen in Pandas und seine Form ist (136, 1445). Ich versuche, Korrelation (Pearson) Matrix für meine 136 Zeilen zu erstellen. Also im Ergebnis brauche ich eine Matrix mit der Größe 136x136.Pearson Korrelation für alle Zeilen in Datenrahmen Pandas

Ich habe zwei verschiedene Möglichkeiten versucht, aber ich kann keine Ergebnisse von ihnen erhalten, oder wenn ich eine 136x136 Korrelationsmatrix erstelle, verlor ich den Spaltennamen des Datenrahmens.

Zuerst

gene_expression = pd.read_csv('padel_all_drug_results_original.csv',dtype='unicode') 
gene_expression = gene_expression.convert_objects(convert_numeric=True) 
gene_expression.corr() 

Dadurch wird die Spalte basierte pearson Korrelationsmatrix gibt (1445 * 1445), und wenn ich versuche, meinen Datenrahmen zu transponieren und dann versuchen, Korrelation zu finden, ist die Struktur des Datenrahmen gebrochen (wie der Spaltenname ist verloren oder ich bin mir nicht einmal sicher, ob die Korrelationen korrekt sind oder nicht).

Zweitens

distance = lambda column1, column2: pearsonr(column1,column2)[0] 
result = gene_expression.apply(lambda col1: gene_expression.apply(lambda col2: distance(col1, col2))) 

Was soll ich tun 136x136 pearson Korrelationsmatrix zur Berechnung des ursprünglichen Datenrahmen nicht ändern?

Auch habe ich eine 1445 Funktionen und einige der Spalten fast voll von Nullen. Also habe ich diese Spalten fallen gelassen, weil sie laute Spalten sind, aber hast du eine andere Idee, um eine Neuerung zu machen?

Vielen Dank im Voraus

Antwort

2

Um die Korrelationsmatrix enthält paarweise Korrelation zwischen allen Zeilen zu erhalten, können Sie:

gene_expression.T.corr() 

ein Spielzeug Beispiel verwenden:

df = pd.DataFrame(np.random.randint(0, high=100, size=(5, 10)), index=list(string.ascii_lowercase[:5])) 

mit 5 markierten Zeilen und 10 Spalten:

df.info() 
Index: 5 entries, a to e 
Data columns (total 10 columns): 
0 5 non-null int64 
1 5 non-null int64 
2 5 non-null int64 
3 5 non-null int64 
4 5 non-null int64 
5 5 non-null int64 
6 5 non-null int64 
7 5 non-null int64 
8 5 non-null int64 
9 5 non-null int64 
dtypes: int64(10) 
memory usage: 440.0+ bytes 

df.T.corr() 

ergibt im

  a   b   c   d   e 
a 1.000000 0.209460 -0.205302 -0.294427 0.353803 
b 0.209460 1.000000 -0.530715 -0.117949 0.775848 
c -0.205302 -0.530715 1.000000 -0.245101 -0.344358 
d -0.294427 -0.117949 -0.245101 1.000000 0.058302 
e 0.353803 0.775848 -0.344358 0.058302 1.000000 
+0

Ich weiß nicht, warum, aber in meinem Datenrahmen der Änderung des Spaltenindex zum 1,2,3,4 .... 135 ist. Aber in jedem Fall ist Ihr Vorschlag richtig, danke. –

+0

Nach set_index auf die erste Spalte meiner Pandas behoben. –