采用python中日期时间的标准偏差

采用python中日期时间的标准偏差,python,datetime,average,standard-deviation,Python,Datetime,Average,Standard Deviation,我正在python程序中导入datetime库,并计算多个事件的持续时间。下面是我的代码: d1 = datetime.datetime.strptime(starttime, '%Y-%m-%d:%H:%M:%S') d2 = datetime.datetime.strptime(endtime, '%Y-%m-%d:%H:%M:%S') duration = d2 - d1 print str(duration) 现在我在变量“duration”中有了一个值。其输出将为: 0:00:15

我正在python程序中导入datetime库,并计算多个事件的持续时间。下面是我的代码:

d1 = datetime.datetime.strptime(starttime, '%Y-%m-%d:%H:%M:%S')
d2 = datetime.datetime.strptime(endtime, '%Y-%m-%d:%H:%M:%S')
duration = d2 - d1
print str(duration)
现在我在变量“duration”中有了一个值。其输出将为:

0:00:15
0:00:15
0:00:15
0:00:15
0:00:15
0:00:05
0:00:05
0:00:05
0:00:05
0:00:05
0:00:10
0:00:10
0:00:10
0:00:10
0:45:22
我想取所有持续时间的标准偏差,并确定是否存在异常。例如,00:45:22是一个异常,我想检测它。如果我知道datetime的格式,我可以这样做,但它似乎不是数字或任何东西..我在考虑从中拆分值:并使用中间的所有值,但可能有更好的方法

想法?

你有。它们具有
.microseconds
.seconds
.days
属性,全部为3个整数。
str()

可以对这些对象使用简单的算术运算。按预期对工作进行汇总和划分,例如:

>>> (timedelta(seconds=100) + timedelta(seconds=200)) / 2
datetime.timedelta(0, 150)
不幸的是,您无法将两个时间增量相乘,因此计算标准偏差变得很棘手(偏移量不平方)


相反,我会使用
.total_seconds()
方法,为您提供一个从天、秒和微秒值计算得出的浮点值,然后使用这些值计算标准偏差。

您得到的持续时间对象是timedelta对象。或从一个时间戳到另一个时间戳的持续时间。要将它们转换为微秒总数,请使用:

def timedelta_to_microtime(td):
    return abs(td.microseconds + (td.seconds + td.days * 86400) * 1000000)
然后计算标准偏差:

def calc_std(L):
    n = len(L)
    mean = sum(L) / float(n)
    dev = [x - mean for x in L]
    dev2 = [x*x for x in dev]
    return math.sqrt(sum(dev2) / n) 
因此:


您正在查看
timedelta
对象的字符串表示形式。是否尝试使用
from datetime import datetime
避免写入
datetime.datetime
。例如,使用
numpy.std(总秒数)
这里的X是什么?这是我设定的门槛吗?我希望阈值由标准值确定,它返回:“[(datetime.timedelta(0,1),1000000)]”我怎么才能得到一个正常的数字?
timedeltas = [your timedeltas here..]
microtimes = [timedelta_to_microtime(td) for td in timedeltas]
std = calc_std(microtimes)
print [(td, mstime) 
       for (td, mstime) in zip(timedeltas, microtimes)
       if mstime - std > X]