| 
 
	积分3625贡献 精华在线时间 小时注册时间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
 
 
 
 
 
 | 
 |