Für jede der 3 Millionen IDs werden Daten im Wert von einem Monat erstellt Der Inhalt der Daten besteht aus einer erklärenden Variablen und einer objektiven Variablen. Mit anderen Worten, die Tabelle enthält drei Spalten: ID, erklärende Variable x und Zielvariable y. Die Anzahl der Datensätze beträgt 3 Millionen x 30 Tage - 90 Millionen
Zu diesem Zeitpunkt wurde für jede der 3 Millionen IDs eine einfache Regression der erklärenden Variablen und objektiven Variablen für 30 Tage durchgeführt. Ich möchte den Korrelationskoeffizienten, die Steigung und den p-Wert für jede ID als Ausgabe speichern.
Regressiert in einer for-Schleife 3 Millionen IDs und speichert die Ergebnisse als Liste Schließlich werden die Listen zu einem Datenrahmen zusammengefasst. Die Geschwindigkeit dieser Technik finden Sie hier
--EC2-Instanz (ubuntu: r5d.4xlarge)
Es braucht Zeit, um einfach die Datensätze abzufragen, die jeder ID aus dem Datenrahmen entsprechen (ca. 13 Sekunden pro ID).
code1.py
for id in id_list:
tmp_x = df[df.id == id].x
tmp_y = df[df.id == id].y
code2.py
df.index = df.id
for id in id_list:
tmp_x = df.loc[id].x
tmp_y = df.loc[id].y
code3.py
import dask.dataframe as dd
import multiprocessing
df.index = df.id
#In der aktuellen Umgebung CPU_count = 32
ddf = dd.from_pandas(df, npartitions=multiprocessing.cpu_count())
for id in id_list:
tmp_x = ddf.loc[id].x.compute()
tmp_y = ddf.loc[id].y.compute()
Es ist noch spät. Damit würde es zwei Monate dauern, bis alle Daten verarbeitet sind. ..
Derzeit werden 30 Datensätze für jede ID gespeichert. Durch Speichern von Daten im Wert von 30 Tagen in einer Zelle als Liste wird jedoch ein Datensatz für jede ID erstellt. Auf diese Weise besteht die Möglichkeit, dass die Verarbeitungsgeschwindigkeit verbessert werden kann, da die Einschlussverarbeitung für die Schleifenverarbeitung verwendet werden kann. (Wie lange dauert es jedoch, von 30 Datensätzen in einen Datensatz zu konvertieren? Ich möchte, dass Sie es mit pivot_table sagen.)
Recommended Posts