Ich möchte die Differenz (in Tagen) zwischen zwei Spalten in einem Datenframe (genauer gesagt in der Graphlab SFrame Datenstruktur) zu finden.Datetime in Python - Geschwindigkeit der Berechnungen - Big Data
Ich habe versucht, ein paar Funktionen zu schreiben, um dies zu tun, aber ich kann nicht scheinen, um eine Funktion zu erstellen, die schnell genug ist. Geschwindigkeit ist jetzt mein Problem, da ich ~ 80 Millionen Zeilen verarbeiten muss.
Ich habe zwei verschiedene Funktionen ausprobiert, aber beide sind zu langsam:
Die t2_colname_str und t1_colname_str Argumente sind die Spaltennamen, von denen ich verwenden möchte, und beide Spalten enthalten datetime.datetime Objekte.
For-Schleife
def diff_days(sframe_obj,t2_colname_str,t1_colname_str):
import graphlab as gl
import datetime as datetime
# creating the new column name to be used later
new_colname = str(t2_colname_str[:-9] + "_DiffDays_" + t1_colname_str[:-9])
diff_days_list = []
for i in range(len(sframe_obj[t2_colname_str])):
t2 = sframe_obj[t2_colname_str][i]
t1 = sframe_obj[t1_colname_str][i]
try:
diff = t2 - t1
diff_days = diff.days
diff_days_list.append(diff_days)
except TypeError:
diff_days_list.append(None)
sframe_obj[new_colname] = gl.SArray(diff_days_list)
Listenkomprehension
Ich weiß, dass dies nicht der beabsichtigte Zweck der Listenkomprehensionen ist, aber ich versuchte es nur um zu sehen, ob es schneller war.
def diff_days(sframe_obj,t2_colname_str,t1_colname_str):
import graphlab as gl
import datetime as datetime
# creating the new column name to be used later
new_colname = str(t2_colname_str[:-9] + "_DiffDays_" + t1_colname_str[:-9])
diff_days_list = [(sframe_obj[t2_colname_str][i]-sframe_obj[t1_colname_str][i]).days if sframe_obj[t2_colname_str][i] and sframe_obj[t1_colname_str][i] != None else None for i in range(len(sframe_obj[t2_colname_str]))]
sframe_obj[new_colname] = gl.SArray(diff_days_list)
Zusätzliche Hinweise
Ich habe mit GraphLab-Erstellen von Dato und ihre SFrame Datenstruktur vor allem, weil es die ganze Berechnung parallelisiert, die meine Analyse superschnell macht und es hat eine große Bibliothek für maschinelle Lernanwendungen. Es ist ein großartiges Produkt, wenn Sie es nicht schon ausgecheckt haben.
GraphLab User Guide finden Sie hier: https://dato.com/learn/userguide/index.html
Ich bekomme einen "Zugriff verweigert" -Fehler, wenn ich versuche, den verwendeten SFrame zu bekommen. Ist es offen für "Jeder" herunterzuladen? Ich wäre daran interessiert, damit zu spielen. –