繁体   English   中英

在Python中获取日期时间的标准偏差

[英]take standard deviation of datetime in python

我在我的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.timedelta()对象 它们具有.microseconds.seconds.days属性,均为3个整数。 str()字符串表示形式可根据需要将它们表示为[D day[s], ][H]H:MM:SS[.UUUUUU] ,以适合所有存在的值。

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

>>> (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) 

所以:

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] 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM