Bir veri çerçevesindeki iki sütun arasındaki farkı (gün cinsinden) bulmak istiyorum (daha spesifik olarak graphlab SFrame veri yapısı).Python'da Datetime - hesaplamaların hızı - büyük veri
Bunu yapmak için birkaç işlev yazmaya çalıştım ancak yeterince hızlı bir işlev oluşturmuyorum. Hızım şu an meselem şu an 80 milyondan fazla satır işlemek gerekiyor.
Ben iki farklı fonksiyon denedi ama hem çok yavaş:
t2_colname_str ve t1_colname_str argümanlar kullanmak istiyorum hangi sütun isimleri yoktur ve her iki sütun datetime.datetime nesneleri içerir. Döngü
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)
Liste Anlama
Bu liste comprehensions kullanım amacı olmadığını biliyoruz, ama sadece daha hızlı olsaydı görmeye çalıştı İçin
.
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)
Ek Notlar
bu benim analizi süper hızlı hale getirir tüm hesaplama parallelizes çünkü Dato ve çoğunlukla onların Sçerçeve veri yapısı ile GraphLab-oluşturma kullanıyorum ve bu büyük bir kütüphaneye sahiptirMakine öğrenimi uygulamaları için. Şimdiye kadar kontrol etmemişseniz harika bir ürün.
GraphLab Kullanım Kılavuzu burada bulabilirsiniz: https://dato.com/learn/userguide/index.html
Kullandığınız SFrame'yi almaya çalıştığımda "erişim engellendi" hatası alıyorum. İndirmek için "Herkes" açık mı? Onunla oynamak isterdim. –