数模-汽车行驶工况构建(2019D-研赛)(研究了一部分)
采样时间
上面的采集总时长计算:拿文件一为例->因为数据总量为185725行 采样频率为1HZ 也就是1s采集一次
所以185725/2600=51.59个小时
另外用Python计算两个事件相差的小时:
from dateutil.parser import parse
a = parse('2017-12-18/13:42:13')
b = parse('2017-12-24/13:37:49')
print((b-a).total_seconds()/3600)
经纬度->文章中写出大致地区
pandas库pd.read_excel操作读取excel文件
除了使用xlrd库或者xlwt库进行对excel表格的操作读与写,而且pandas库同样支持excel的操作;且pandas操作更加简介方便。
首先是pd.read_excel的参数:函数为:
pd.read_excel(io, sheetname=0,header=0,skiprows=None,index_col=None,names=None,
arse_cols=None,date_parser=None,na_values=None,thousands=None,
convert_float=True,has_index_names=None,converters=None,dtype=None,
true_values=None,false_values=None,engine=None,squeeze=False,**kwds)
表格数据:
常用参数解析:
- io :excel 路径;
import pandas as pd
#定义路径IO
IO = '文件1.xlsx'
#读取excel文件
sheet = pd.read_excel(io=IO)
#此处由于sheetname默认是0,所以返回第一个表
print(sheet)
#上述列表返回的结果和原表格存在合并单元格的差异
关于更多pandas库pd.read_excel操作读取excel文件 可看下面这个博客
Python之pandas库pd.read_excel操作读取excel文件
去加速度异常值代码
import numpy as np
import pandas as pd
import datetime
import copy
speedU=[] #加速不合要求 Vup>100/7
speedD=[] #减速不合要求 Vdn>28.8
data1 = pd.read_excel('C:\\Users\\lijun78\Desktop\\D题\\文件1.xlsx') #原始数据
data1 = pd.DataFrame(data1)#DataFrame的单元格可以存放数值、字符串
data1 = np.array(data1)#转化为数值型
然后创建原始数据副本(记录处理后最终数据)
data1_out=copy.deepcopy(data1) #原始数据副本(记录处理后最终数据)
寻找断续时间节点
将data1中日期的那一列转为标准型
找两行数据之间时间差
接下来就是遍历输出断续时间节点
#寻找断续时间节点
for i in range(data1.shape[0]-1): #data1.shape[0]-1是数据的行数
date1=datetime.datetime.strptime(data1[i][0].replace('.000.',''),'%Y/%m/%d %H:%M:%S')
#datetime.datetime.strptime:万能的日期格式转换
#data1[i][0]对应日期那一列
date2=datetime.datetime.strptime(data1[i+1][0].replace('.000.',''),'%Y/%m/%d %H:%M:%S')
ss=(date2-date1).seconds
if ss!=1:
time_inc+=[[i,ss]]
time_inc=np.array(time_inc)
time_inc=time_inc+np.array([1,0]*time_inc.shape[0]).reshape([time_inc.shape[0],2])
time_inc=pd.DataFrame(time_inc)
time_inc.to_excel('C:\\Users\\lijun78\Desktop\\D题\\time_inc.xlsx') #输出断续时间节点
下面是具体代码的展示
缺失数据补充(仅补充间隔 1 秒)
测试代码:
最终代码
#缺失数据补充(仅补充间隔 1 秒)
ff1=[] #过渡列表,给原始数据补充 1 秒缺失数据
i=0
j=data1_out.shape[0]-1 #跟踪待补充数据表维度
data1_out=data1_out.tolist() #向量转列表
while(i<j):
date3=datetime.datetime.strptime(data1_out[i][0].replace('.000.',''),'%Y/%m/%d %H:%M:%S')
date4=datetime.datetime.strptime(data1_out[i+1][0].replace('.000.',''),'%Y/%m/%d %H:%M:%S')
ss=(date4-date3).seconds
if ss==2:
ff1=[(date3+datetime.timedelta(seconds=1)).strftime('%Y/%m/%d %H:%M:%S')] #在date3的基础上增加1s
ff1=ff1+(1/2*(np.array(data1_out[i+1][1:])+np.array(data1_out[i][1:]))).tolist()
data1_out.insert(i+1,ff1)
j=j+1
i=i+1
新数据中寻找加减速异常数据
#新数据中寻找加减速异常数据
for i in range(len(data1_out)-1):
date5 =datetime.datetime.strptime(data1_out[i][0].replace('.000.',''),'%Y/%m/%d %H:%M:%S')
date6 =datetime.datetime.strptime(data1_out[i+1][0].replace('.000.',''),'%Y/%m/%d %H:%M:%S')
ss=(date6-date5).seconds
if (data1_out[i+1][1]-data1_out[i][1])/ss>100/7:
speedU.append(i+1)
if (data1_out[i][1]-data1_out[i+1][1])/ss>28.8:
speedD.append(i+1)
data1_out=np.array(data1_out)
#剔除异常数据
data1_out=np.delete(data1_out,speedU,axis=0)
data1_out=np.delete(data1_out,speedD,axis=0)
#数据导出,加减速异常数据节点
speedU=np.array(speedU)
speedD=np.array(speedD)
print(speedU)
speedU=speedU+np.ones([1,speedU.shape[0]])
speedD=speedD+np.ones([1,speedD.shape[0]])
print(speedU)
speedU=pd.DataFrame(speedU.T)
speedD=pd.DataFrame(speedD.T)
speedU.to_excel('C:\\Users\\lijun78\Desktop\\D题\\speedU.xlsx') #输出加速异常节点
speedD.to_excel('C:\\Users\\lijun78\Desktop\\D题\\speedD.xlsx') #输出减速异常节点
目前的代码如下:
import numpy as np
import pandas as pd
import datetime
import copy
data1 = pd.read_excel('D:\\Project_Encyclopedia\\2019年中国研究生数学建模竞赛赛题\\2019年中国研究生数学建模竞赛D题\\原始数据\\文件1.xlsx') #原始数据
data1 = pd.DataFrame(data1)#DataFrame的单元格可以存放数值、字符串
data1 = np.array(data1)#转化为数值型
data1_out=copy.deepcopy(data1) #原始数据副本(记录处理后最终数据)
time_inc=[] #时间不连续节点
#寻找断续时间节点
for i in range(data1.shape[0]-1): #data1.shape[0]-1是数据的行数
date1=datetime.datetime.strptime(data1[i][0].replace('.000.',''),'%Y/%m/%d %H:%M:%S')
#datetime.datetime.strptime:万能的日期格式转换
#data1[i][0]对应日期那一列
date2=datetime.datetime.strptime(data1[i+1][0].replace('.000.',''),'%Y/%m/%d %H:%M:%S')
ss=(date2-date1).seconds
if ss!=1:
time_inc+=[[i,ss]]
time_inc=np.array(time_inc)
time_inc=time_inc+np.array([1,0]*time_inc.shape[0]).reshape([time_inc.shape[0],2])
time_inc=pd.DataFrame(time_inc)
time_inc.to_excel('D:\\Project_Encyclopedia\\2019年中国研究生数学建模竞赛赛题\\2019年中国研究生数学建模竞赛D题\\原始数据\\time_inc.xlsx') #输出断续时间节点
#缺失数据补充(仅补充间隔 1 秒)
ff1=[] #过渡列表,给原始数据补充 1 秒缺失数据
i=0
j=data1_out.shape[0]-1 #跟踪待补充数据表维度
data1_out=data1_out.tolist() #向量转列表
while(i<j):
date3=datetime.datetime.strptime(data1_out[i][0].replace('.000.',''),'%Y/%m/%d %H:%M:%S')
date4=datetime.datetime.strptime(data1_out[i+1][0].replace('.000.',''),'%Y/%m/%d %H:%M:%S')
ss=(date4-date3).seconds
if ss==2:
ff1=[(date3+datetime.timedelta(seconds=1)).strftime('%Y/%m/%d %H:%M:%S')] #在date3的基础上增加1s
ff1=ff1+(1/2*(np.array(data1_out[i+1][1:])+np.array(data1_out[i][1:]))).tolist()
data1_out.insert(i+1,ff1)
j=j+1
i=i+1
speedU=[] #加速不合要求 Vup>100/7
speedD=[] #减速不合要求 Vdn>28.8
#新数据中寻找加减速异常数据
for i in range(len(data1_out)-1):
date5 =datetime.datetime.strptime(data1_out[i][0].replace('.000.',''),'%Y/%m/%d %H:%M:%S')
date6 =datetime.datetime.strptime(data1_out[i+1][0].replace('.000.',''),'%Y/%m/%d %H:%M:%S')
ss=(date6-date5).seconds
if (data1_out[i+1][1]-data1_out[i][1])/ss>100/7:
speedU.append(i+1)
if (data1_out[i][1]-data1_out[i+1][1])/ss>28.8:
speedD.append(i+1)
data1_out=np.array(data1_out)
#剔除异常数据
data1_out=np.delete(data1_out,speedU,axis=0)
data1_out=np.delete(data1_out,speedD,axis=0)
#数据导出,加减速异常数据节点
speedU=np.array(speedU)
speedD=np.array(speedD)
speedU=speedU+np.ones([1,speedU.shape[0]])#python是从0索引开始的 所以+1
speedD=speedD+np.ones([1,speedD.shape[0]])
speedU=pd.DataFrame(speedU.T)
speedD=pd.DataFrame(speedD.T)
speedU.to_excel('D:\\Project_Encyclopedia\\2019年中国研究生数学建模竞赛赛题\\2019年中国研究生数学建模竞赛D题\\原始数据\\speedU.xlsx') #输出加速异常节点
speedD.to_excel('D:\\Project_Encyclopedia\\2019年中国研究生数学建模竞赛赛题\\2019年中国研究生数学建模竞赛D题\\原始数据\\speedD.xlsx') #输出减速异常节点
转载请注明出处,欢迎讨论和交流!