2016-06-03 11 views
0

Ich habe zwei Sätze von Daten von zwei Messgeräten erstellt, jedes Instrument gibt eine Zeit Spalte und Spannung Spalte, während die beiden Datensätze gleichen Zeit (oder sehr nahe), sie darstellen werden in Arrays unterschiedlicher Größe gespeichert, da die Abtastzeiten unterschiedlich sind. Ich möchte die scipy.stats.pearsonr Koeffizienten erhalten, aber um dies zu tun, brauche ich die zwei Datensätze, die dafür die gleiche Größe haben.Fit Daten zu verschiedenen Array-Größe

Wie kann ich die Größe kleinerer der beiden Sätze auf die Größe des größeren der beiden Sätze skalieren, sodass dieselben Daten mit mehr Datenpunkten dargestellt werden?

Bearbeiten.

Entschuldigung, ich hätte ein Beispiel für die Daten geben sollen, ich habe nicht anfänglich, weil es eine zusätzliche Daten in den Dateien gibt und ich dachte, es würde die Aufmerksamkeit von dem Aspekt ziehen, dass ich es hatte.

Die Datei namens OOL_Drift.dat enthält Daten, die ich wissen möchte, wenn sie mit den Temperaturwerten korreliert, die in TemperatureChannels.txt und Room_Temperature.txt enthalten sind. Die erste Spalte jeder Datei ist die Zeit. Die zweite Spalte auf OOL_Drift.dat enthält die Daten, die ich vergleichen möchte. Die 4., 8., 12., 16., 20. Spalte in TemperatureChannels.txt enthält die zu vergleichenden Daten.

Hier sind die Dateien https://drive.google.com/folderview?id=0B_viQkcWo4Z2LUlyVG82eWpmUXM&usp=sharing

Wie ich viele Proben und die Messwerte ändern sich nicht sehr schnell sollte ich denke, es funktioniert.

Danke an alle gegeben haben Vorschläge

+0

Wenn Sie sicher sind, dass Sie das tun möchten, hat Ihnen @npielawski eine Idee gegeben, wie Sie das tun können. Ich glaube jedoch, dass Sie wirklich darüber nachdenken sollten, ob Sie alles machen wollen. Sie haben es selbst gesagt "die gleichen Daten werden mit mehr Datenpunkten dargestellt", was streng genommen unmöglich ist. Wenn beide Abtastfrequenzen viel höher sind als das Signal, das Sie vergleichen möchten, ist es (wahrscheinlich) in Ordnung. Aber wenn die Daten sehr laut sind oder Sie turbulente Messungen haben, ist das (wahrscheinlich) eine schlechte Idee.Vielleicht sollten Sie eine genauere Frage (mit den Daten) unter http://stats.stackexchange.com/ stellen. – StefanS

Antwort

0

Das ist schwer ohne eine gewisse Mindest Beispiel zu beantworten, was Sie genau tun, aber ein Ansatz, der ist funktionieren könnte es über pandas zu tun. Wenn Sie den Zeitpunkt der Messungen haben, könnten Sie zwei Datenrahmen mit Datetime-Indizes erstellen:

df1 = pd.DataFrame({"data":np.random.rand(6)}, index=pd.date_range("01:00:00","06:00:00", freq="H")) 

        data 
2016-06-03 01:00:00 0.436862 
2016-06-03 02:00:00 0.171859 
2016-06-03 03:00:00 0.273939 
2016-06-03 04:00:00 0.949059 
2016-06-03 05:00:00 0.434267 
2016-06-03 06:00:00 0.212041 

df2 = pd.DataFrame({"data2":np.random.rand(3)}, index=pd.date_range("01:00:00","06:00:00", freq="2H")) 

        data2 
2016-06-03 01:00:00 0.544233 
2016-06-03 03:00:00 0.253989 
2016-06-03 05:00:00 0.893227 

können Sie dann einfach die beiden auf den Indizes verbinden, die automatisch diese Beobachtungen ausrichten, die zur gleichen Zeit passiert, während die „fehlenden“ Beobachtungen im Array füllen, die weniger Beobachtungen mit NaN hat: diese NaN s füllen Pandas recht umfangreiche interpolate Methode können

df1["data2"] = df2.data2 

        data  data2 
2016-06-03 01:00:00 0.436862 0.544233  
2016-06-03 02:00:00 0.171859 NaN 
2016-06-03 03:00:00 0.273939 0.253989  
2016-06-03 04:00:00 0.949059 NaN 
2016-06-03 05:00:00 0.434267 0.893227  
2016-06-03 06:00:00 0.212041 NaN 

Sie dann vor den Korrelationskoeffizienten Berechnung - es ist wahrscheinlich, dass eine Interpolation routin sein Das ist sinnvoll für Ihre Anwendung.