- 积分
- 3632
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-10-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
'''
需求缘起:
工作中,经常遇到粗心的同事,在操作仪器时,把不同项目、不同次的监测数据都放在一起,
再加上预热仪器时的数据、随机查看时的数据,最后搞得我们不知道哪些数据是自己需要的。
于是,我写了一个函数,按采样时间的连续性,把监测数据分成段
'''
import pickle,os
from datetime import datetime,timedelta
import numpy as np
# t是一个datetime格式的ndarray
def division(t):
# 认为时间间隔超过以下值为不同次的监测:
limit_minutes=30
# 认为少于该时间长度的监测无效:
least=timedelta(minutes=30)
# 以下部分是固定不动的:
# 格式转换:
t=np.array(t)
# 排序:
p=np.argsort(t)
t=t[p]
# 时间点个数:
n=len(t)
t1=t[0:-1]
t2=t[1:]
dt=t2-t1 # 差的序列
# 找出超过limit_minutes的空隙的位置:
timegap=timedelta(minutes=limit_minutes)
p=np.where(dt>timegap)
p=p[0]
n=len(p)
# 断段的开头,也是整段的结尾:
a=[]
# 断段的结尾,也是整段的开头:
b=[]
for i in range(n):
a.append(t1[p[i]])
b.append(t2[p[i]])
# a追加t的结尾元素,这样a就是所有整段的结尾时间序列:
a.append(t[-1])
# t的开头元素加在b的开头,这样b就是所有整段的开始时间序列:
c=[t[0]]
c.extend(b)
b=c
n=len(a) # 整段的段数
# 以下开始做返回值:
t1=[] #整段的开头时间
t2=[] #整段的结尾时间
period=[] #每段的时长
for i in range(n):
if (a[i]-b[i])<least:
continue
t1.append(b[i])
t2.append(a[i])
period.append(a[i]-b[i])
# 舍去过短的片段后的段数:
n=len(t1)
#段之间的间隔时间,比t1,t2少一个数:
gap=[]
for i in range(n-1):
gap.append(t1[i+1]-t2[i])
result={'t1':t1,'t2':t2,'时长':period,'间隔':gap}
return result
|
|