一連の日時オブジェクトがあり、それらの間の平均デルタを計算したいと考えています。
たとえば、入力が(2008-10-01 12:15:00, 2008-10-01 12:25:00, 2008-10-01 12:35:00)
の場合、平均デルタは正確に 00:10:00、つまり 10 分になります。
Python を使用してこれを計算する方法に関する提案はありますか?
アルゴリズムに関する限り、それは簡単です。最大日時と最小日時を見つけて、差を取り、見た日時の数で割ります。
日時の配列がある場合は、次のことができます。
mx = max(a)
mn = min(a)
avg = (mx-mn)/(len(a)-1)
平均差を取り戻すために。
編集:オフバイワンエラーを修正
a
あなたのリストだと言う
sumdeltas = timedelta(seconds=0)
i = 1
while i < len(a):
sumdeltas += a[i-1] - a[i]
i = i + 1
avg_delta = sumdeltas / (len(a) - 1)
これにより、実際にデルタが平均化されます。
あなたの例では、時刻 1 と 3 の間の 20 分のデルタを捨てているように見えるので、日時のリストをソートし、隣接する時刻間のデルタを合計してから、n-1 で除算する必要があります。
共有できるコードはありますか?デバッグをお手伝いします。
連続する各日付を前の日付から差し引くことができます (その結果、日、秒の差を表す timedelta オブジェクトが生成されます)。次に、timedelta オブジェクトを平均して答えを見つけることができます。
小さな説明
from datetime import timedelta
def avg(a):
numdeltas = len(a) - 1
sumdeltas = timedelta(seconds=0)
i = 1
while i < len(a):
delta = abs(a[i] - a[i-1])
try:
sumdeltas += delta
except:
raise
i += 1
avg = sumdeltas / numdeltas
return avg