Lineare regression mit pandas dataframe
Ich habe einen dataframe in pandas, die ich verwende, um zu produzieren ein Streudiagramm, und möchte eine Regressionsgerade für die Handlung. Jetzt versuche ich, dies zu tun mit polyfit.
Hier ist mein code:
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
from numpy import *
table1 = pd.DataFrame.from_csv('upregulated_genes.txt', sep='\t', header=0, index_col=0)
table2 = pd.DataFrame.from_csv('misson_genes.txt', sep='\t', header=0, index_col=0)
table1 = table1.join(table2, how='outer')
table1 = table1.dropna(how='any')
table1 = table1.replace('#DIV/0!', 0)
# scatterplot
plt.scatter(table1['log2 fold change misson'], table1['log2 fold change'])
plt.ylabel('log2 expression fold change')
plt.xlabel('log2 expression fold change Misson et al. 2005')
plt.title('Root Early Upregulated Genes')
plt.axis([0,12,-5,12])
# this is the part I'm unsure about
regres = polyfit(table1['log2 fold change misson'], table1['log2 fold change'], 1)
plt.show()
Aber ich bekomme die folgende Fehlermeldung:
TypeError: cannot concatenate 'str' and 'float' objects
Weiß jemand, wo ich bin läuft hier falsch? Ich bin mir auch nicht sicher, wie Sie die Regressionsgeraden zu meinem Grundstück. Andere Allgemeine Kommentare, die auf meinen code wäre auch äußerst geschätzt, ich bin noch Anfänger.
in welcher Zeile bekommst du den Fehler?
sicher, es gibt keine NaN-Werte in den Tabellen? da pylab.scatter-nur nicht der plot die x -, y-Punkte, an denen x oder y NaN (was bedeutet, dass es nicht geben Fehler), aber vielleicht polyfit doesnt wissen, dass? (nur zu raten, wo das problem sein könnte, hier - wie not-a-number-Werte gespeichert, die in Ihrer csv-Datei?)
Nope kein NaN-Werte. Die einzige not-a-number-Werte " #DIV/0!', die habe ich entfernt
was ist der Typ von table1['log2 Falten change misson'] und table1['log2 fold change'] ? (soweit ich weiß sollen Sie sein numpy.array mit float als dtype (und beide sollten die gleiche Form haben))
regres = polyfit(table1['log2 fold change misson'], table1['log2 fold change'], 1)
sicher, es gibt keine NaN-Werte in den Tabellen? da pylab.scatter-nur nicht der plot die x -, y-Punkte, an denen x oder y NaN (was bedeutet, dass es nicht geben Fehler), aber vielleicht polyfit doesnt wissen, dass? (nur zu raten, wo das problem sein könnte, hier - wie not-a-number-Werte gespeichert, die in Ihrer csv-Datei?)
Nope kein NaN-Werte. Die einzige not-a-number-Werte " #DIV/0!', die habe ich entfernt
was ist der Typ von table1['log2 Falten change misson'] und table1['log2 fold change'] ? (soweit ich weiß sollen Sie sein numpy.array mit float als dtype (und beide sollten die gleiche Form haben))
InformationsquelleAutor TimStuart | 2013-10-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Statt ersetzen '#DIV/0! " von hand, erzwingen Sie die Daten numerisch sein. Dies macht zwei Dinge auf einmal: es sorgt dafür, dass das Ergebnis numerisch ist (nicht str), und es ersetzt
NaN
für alle Einträge, die nicht analysiert werden, wie eine Zahl. Beispiel:Diese Fehler beheben sollten Sie Ihre Fehler. Aber, auf das Allgemeine Thema der fitting eine Linie zu Daten, halte ich praktisch zwei Möglichkeiten, dies zu tun, die ich mag besser als polyfit. Der zweite von den beiden ist stabiler (und möglicherweise zurückkehren, viel mehr detaillierte Informationen über die Statistiken), aber es erfordert statsmodels.
Zeichnen, tun Sie etwas, das wie
Einige NaNs, oder alle NaNs? Können Sie das problem reproduzieren mit einer kleinen Teilmenge der Daten, und teilen Sie, hier?
Sorry, war ein Fehler von mir, es funktioniert jetzt. Weißt du, wie ich hinzufügen würde, dies als eine Linie, um meine scatterplot?
Siehe unten meine Antwort. Wenn es nicht zeigen, bis in der gleichen Grundstück, versuchen Sie das keyword argument
ax=plt.gca()
implot
.Kein problem! Bitte beachten Kennzeichnung meine Antwort als akzeptiert.
InformationsquelleAutor Dan Allan