交通报警数据标准化处理并生成排序列表。标准化方法通常有标准化法、极值处理法、功效系数法,这里是用标准化法进行处理。
#coding=gbk
'''
Created on 2019年7月25日
@author: lenovo
'''
import pandas as pd
from audioop import avg
class MyClass:
'''
读取ali报警数据表,并计算标准化指标------------------标准化法
'''
def file_read(self,filename):
"""
读取数据文件并进行相关处理:增加一列存储标准化指标和,建立一张用来存储各个路口的标准化参数
"""
global data#原始数据表
global data_node#路口列表
global data_time#时间列表
global history_data
#读取。csv文件
data = pd.DataFrame(pd.read_csv(filename, encoding='utf-8'))
#在原始数据中添加一列用来存储alarm_index的标准化指标
data['stand_index']=None
#提取路口列表(不重复)
data_node=pd.DataFrame({"value":data['node_id'].unique()})#路口列表
#提取时间片列表(不重复)
data_time=pd.DataFrame({"value":data['time_point'].unique()})#时间列表
#各个路口的标准化参数表
history_data=pd.DataFrame({"node_id":data['node_id'].unique(),"max_index":None,"min_index":None})
def chu(self,dat):
#处理alarm_index得到标准化指标的的参数:均值、均方差,并存入标准化参数的历史数据表:history_data
#计算每个路口的alarm_index均值和均方差
i=0
while(i<len(dat)):
#提取某个路口的数据
data_test=pd.DataFrame(data.loc[data['node_id']==data_node.iloc[i].value])
#计算均值、均方差
avg=data_test["alarm_index"].max()
stand_dev=data_test['alarm_index'].min()
#存入:history_data
dat.iloc[i,1]=avg#均值
dat.iloc[i,2]=stand_dev#均方差
i=i+1
def road_alarm(self,data_alarm):
#对某一时间点的报警数据进行标准化指标排序
i=0
while(i<len(data_alarm)):
#从历史数据表:history_index中提取对应路口的参数值:均值、均方差
thenode=pd.DataFrame(history_data.loc[history_data['node_id']==data_alarm.iloc[i,0]])
#计算标准化指标:stand_index
da=(data_alarm.iloc[i,4]-thenode['min_index'])/(thenode['max_index']-thenode['min_index'])
data_alarm.iloc[i,5]=float(da)
i=i+1
#根据:stand_index进行排序,生成报警排序列表:报警等级由高到低
return_data=data_alarm.sort_values('stand_index',ascending=False)
return return_data
def time_alone(self):
#提取某一时间片的报警数据
#提取某一时间片的
i=4
data_alarm=pd.DataFrame(data.loc[data['time_point']==data_time.iloc[i].value])
return data_alarm
def alarm_output(self,data_alarm):
#生成特定格式的报警列表:node_id roadsect_id if_downstream stand_index
data_1=self.road_alarm(data_alarm)
data_2=pd.DataFrame({'node_id':data_1['node_id'],
'roadsect_id':data_1['roadsect_id'],
'if_downstream':data_1['if_downstream'],
'stand_index':data_1['stand_index']})
#print(data_1)
print(data_2)
def main(self):
filename = 'C://Users//lenovo//Desktop//阿里报警结果表//阿里报警结果表.csv'
time=''
self.file_read(filename)
self.chu(history_data)
self.alarm_output(self.time_alone())
if __name__ == '__main__':
alarm=MyClass()
alarm.main()