当前位置:   article > 正文

地铁客流量分析可视化演示系统(附代码)_od客流可视化代码

od客流可视化代码

摘要

城市轨道交通客流预测是为轨道交通建设规模决策的主要依据,并在项目设计中起着重要作用。
随着我国轨道交通的建设发展,地铁已经成为公共出行的重要方式。在节假日、比赛、演出等重要事件发生时,地铁客流会面临巨大压力。郑州市某年8-11月各地铁闸机刷卡数据,从数据中可以根据交易类型提取出进出站状态。需预测12月1日-7日7天内每个站点的日客流量(交易类型为21、22次数之和),为节日安保、流控等提供预警支持。

1.引言

城市轨道交通工程是城市一项百年大计的工程, 因此必须要预知轨道交通未来年的客流规模,并对轨道交通工程规模充分预留,而不能仅仅是用来缓解现状的交通压力,因此客流预测就显得尤为重要。
毫无疑问,客流预测是城市轨道交通项目前期研究中最重要的专项,它决定了轨道交通设置规模、设施形式以及投融资等方方面面。然而,客流预测不像其它的研究专项,可以分析出对与错,它是对未来城市若干年后的预测,城市发展的复杂性和不确定性增加了客流预测的风险性。
目前,国内部分轨道交通方面的研究学者对客流预测并不重视(认为其技术性不高,误差很大),设计方案也往往根据其经验而定,然而,如此重要的专项研究太缺少我们的反思,到底客流预测为什么不准,是客流预测研究者出了问题,还是基础资料方面出了问题,或者还是我们的研究方法论(交通模型)出了问题。

2.国内外客流预测研究历程

2.1国内外客流预测研究历程
1962年美国芝加哥市发表的《Chicago Area Transportation Study》为标志,交通规划理论和方法得以诞生,并首次提出了四阶段预测理论。1962 年美国制订的联邦公路法规定凡5万人口以上城市,必须制订以城市综合交通调查为基础的都市圈交通规划,方可得到联邦政府的公路建设财政补贴。
目前,欧美主要发达国家非常重视交通预测模型的建立与维护,部分地方政府甚至通过颁布地方法规的形式对交通预测模型的地位、重要性,以及交通模型师的收入等进行了规定,主要城市均已建立一套适合本地区的成熟的交通模型,随着城市发展不断稳定与成熟,预测精度逐步提高。
2.2国内外客流预测研究对比分析
从国内外客流预测研究发展历程来看,国内外客流预测研究均有一个由简单、 误差较大到一个逐步完善、成熟的交通预测体系发展趋势。
国外客流预测研究初期误差仍然较大,简单分析可以由以下几个方面的因素:
(1)城市发展较快,基础资料特别是城市规划以及相关政策仍然存在不确定性
(2)交通预测理论尚不成熟,处于探索阶段;
(3)交通模型师对城市现状及未来客流发展趋势认识不足,对适合于本城市的交通模型参数修改及调整经验不足。
随着国外城市发展逐步稳定,城市规划稳定,交通模型理论的成熟以及交通模型师的经验成熟均为客流预测带来了可信度,预测结果误差越来越小。这也给地方主管部门带来了信心,甚至出台相关政策规定交通规划以及交通设施建设研究阶段必须要使用交通模型。

3.客流预测的复杂性分析

从国内外客流预测发展历程来看,影响客流预测的因素主要可分为三个方面:客流预测基础资料、交通预测理论、交通模型师。三者组成客流预测复杂的系统,每项都是影响客流预测精度的关键要素。
3.1客流预测基础资料
客流预测基础资料是交通模型的输入源,很明显,如果把交通模型作为一个黑箱,那么如果输入源本身就有误差,那么客流预测结果也必然会产生误差。客流预测基础资料收集也相当复杂,主要分为四大类:
3.1.1基础信息类
基础信息类主要包括城市人口、就业以及社会经济等方面的数据信息。基础信息类数据有助于交通模型师研判历史变化趋势,并对未来年作出合理预测。主要包括未来年就业率、时间价值等。
3.1.2交通调查类
交通调查类主要包括居民出行调查、流动人口出行调查,城市对外出入调查等等,交通调查的目的,不仅仅可以用于分析现状城市的客流分布特征,以便于模型师判断城市未来客流发展特征及变化趋势,同时,有助于交通模型参数的标定,为建立适合本城市的交通模型。
3.1.3城市规划类
城市规划类主要包括城市总体规划、综合交通规戈划以及专项规划等等,这些规划主要对城市未来年的发展规模,城市空间结构、基础设施分布及规模进行了详细的论证和规划。
应该说,城市规划类的相关资料对未来年的交通模型的建立发挥举足轻重的作用,其规划的稳定性以及合理、可信性非常关键,决定了对未来年预测结果的误差。举个简单的例子,规划一个新区未来人口是50万人,然而规划年仅仅容纳了30万,这样必然导致客流预测结果的误差。
3.2客流预测理论
从国内外采用的预测方法来看,可以大致分为趋势外延法、吸引范围法和交通规划的四阶段法等三三种形式(趋势外延法、吸引范围法、四阶段法)。
前两种方法仅考虑了轨道线路及其吸引范围内客流的变化,没有考虑轨道交通系统作为整个城市交通骨干建成后,将导致整个城市客流在城市路网上分布状态的变化。在客流预测研究初期采用较多,目前已经很少使用。
3.3交通模型师
交通模型师不能游离于客流预测系统之外,因为他是交通数据分析、交通模型建立者,直接决定了客流预测的精度。事实上,不同的交通模型师,在同样的基础资料的前提条件下,客流预测结果必然会有差别,因此,交通模型师也是产生客流预测结果误差的主要原因。

4.客流预测的可控性分析

尽管客流预测系统非常复杂,涉及到方方面面,使得客流预测存在风险,存在不确定性,但是其风险是否可控值得进一步探讨。
在客流预测系统中, 三大因素决定其客流预测精度,其中交通预测理论目前已经较为成熟,这方面的风险与误差是可以度量的,目前还没有更好的、更先进的预测理论出现。
因此,只要控制了输入端(基础资料)以及使用端(交通模型师所带来的误差就能够较好地控制风险,事实上,这方面的风险是可控的。
在这里以南京地铁号线南延线、 二号线开通期客流预测为例说明风险的可控性。

5.地铁客流数据特征分析

特征分析从挖掘特征和两个维度区分:
首先从站点角度分析,每日客流变化跟前一同类型的日期大体相同,但是什么造成了波动。其次,从用户角度分析,大部分用户的行为轨迹应该具有重复性,即客流稳定性。对于两个维度,时间上,区分节假日、高峰时段带来的客流影响。 空间上,区分地理位置不同、功能属性不同带来的客流影响。 通过上述的两个角度和维度,总结出了四类特征,即基本特征,时间类特征,历史时间类特征和地理信息类特征。
5.1功能分析概述
(1)基本特征:常见特征是用于非特殊情况下客流预测的功能。本文常规特征的构建是利用当前研究中客流预测问题中常用的特点,根据经验判断客流预测,有效选择相关客流数据,量化相关定性特征。
(2)时间特点:正常客流的通勤特征。包括日期类型和高峰时间。数据类型包括工作日、周末和节假日,高峰时段包括和平时间、高峰时段和特殊高峰时段。
(3)历史客流特点:客流变化的持续关联。客流变化是一个动态的、连续的过程。任何时候的客流状况都是前一时刻客流状况的变化。
(4)地理信息特点:主要描述,可能影响客流的地理信息因素。
5.2基本功能
根据数据预处理过程中获得的基本信息,包括站ID、日、小时、分钟、周、时间切割、数字、数字。其中,在数字表示在此期间的入境人数,出数字表示在此期间的出站数量。
(1)基本特征:基础信息种类多。基本站、周、日、小时和分钟作为基本时间信息功能构建。
(2)时间:段变量t表示通过将一天除以10分钟获得的时间段的索引。本文的客观输出是反映10分钟内客流的预测。由于10分钟可以反映时间的变化,给车站运行管理以响应时间,因此10分钟是客流预测的细粒度。一天可分为144次部分。
t={0,1,2,……,143}
(3)周使用 W (t) 表示一周的一天。
在这里插入图片描述

5.3时间功能
对于城市轨道交通客流的预测,客流也会受到常见时间因素的影响。因此,有必要分析传统客流变化的时间影响因素,并在此基础上构建时间特征。时间特征的构建基础如下。
(1)日期类型:就时间类型而言,可分为三种类型,特别是工作日、周末和节假日(Bai 等人,2017 年)。根据下图中的显示,我们可以看到周末客流与普通客流之间存在巨大差异。因此,周末和平日应被视为不同的功能,这可以使功能提取更符合实际功能。
在这里插入图片描述

从下面的数字来看,第一天是假日,很容易看出假期的客流与平时的周末和普通工作日大不相同。
因此,工作日、周末和节假日应重新作为日期类型的特征。
根据日期类型,每天根据其类型分为三种类型:工作日、周末和节假日,它们由特征变量 F (t) 表示。
在这里插入图片描述
在这里插入图片描述

(2) 高峰时间
一天中的事件类型可能有高峰和周期。从下图可以看出,一天中通常有两个高峰,分别是早高峰和晚高峰。然而,值得注意的是,早高峰和晚高峰之间也有高峰。我判断这个高峰是一个特殊的高峰。
在这里插入图片描述

5.4历史客流特征
历史客流特征,即时间窗口特征。时间窗口功能是一个更强大的功能,因为一次的价值与前一次的价值密切相关。对于时间系列数据,构建了短时加权值。通过滚动时间窗口,将逐步生成不同时间的短时间窗口的功能。
(1)相邻时段
客流考虑到当前时间的交通信息与前后交通信息之间有一定的关系,以当前时段的前两个时段和最后两个时段的交通信息为特征。以inNums_before1、inNums_before2、inNums_after1、inNums_after2、outNums_before1、outNums_before2、outNums_after1、outNums_after2为相应时间客流特征。
(2)相邻日
客流最大值、平均值和最小值在一定程度上反映了数据的分布信息(Liu 等人,2017 年),因此以同一周进出港流量的最大值、平均值和最小值为特征添加。
(3)每周客流按前一顺序
分布特征也可通过使用同一站在同一周同一时间段和同一天(2017年罗),反映出站的客流。
5.5地理信息功能
地理信息的特点主要包括车站类型、车站属性、车站设备、客流稳定性等。地理信息功能在设计与地理信息相关的所有信息时都经过充分考虑。从地理位置、功能、属性和客流稳定性等方面,给予了充分的考虑。
(1)站类型
不同站种,如始发站、中转站、普通站。相邻车站的数量可以表示这些站的类型,因此相邻站的数量根据道路网络图计算,以指示每个站的类型。始发站只有一个相邻站,普通站由两个相邻站组成,换乘站有两个以上的相邻站。
(2)站属性
不同的站也有不同的属性。根据不同的属性,它可以分为商业属性、工作属性和住宅属性。根据数字17,不同车站之间的客流规律大相径庭。有些车站周末的客流量比平日多,因此可以判断它们为商业属性。
在这里插入图片描述
在这里插入图片描述

从下面的数字可以看出,一些车站平日的客流量比周末多得多,因此可以将其判断为住宅或工作属性。除了观察周末和工作日之间的客流差异外,一天内出入口的时间分布也值得注意。从以下两个数字可以看出,有些车站早上有相当大的进站客流,晚上有大出站客流,所以判断它们是工作属性。有些车站正好相反(Ni,2016年)。如果早上有大的出境客流,晚上有大的进港客流,那么它将被判断为住宅物业。
在这里插入图片描述
在这里插入图片描述

(3)车站设备的特点 考虑到刷卡装置的相关特性,每个站点的设备数量与该站点的人流有一定的关系,每个时期的设备数量也与流量有一定的关系。
(4)客流稳定
每天进出同一车站的人数比例占进站人数的比例。各站客流比例相对稳定,有的达到70%,日波动比较规律。可以认为,在乘坐地铁等公共交通工具出行的人中,住在地铁站附近的居民居多。也就是说,每天进出同一地点的人数中,很大一部分是同一个人。以客流稳定性表达这一特点。
在这里插入图片描述

5.6总结
在特征分析和特征提取方面,我们主要从两个角度挖掘特征,区分目标与两个维度,从而总结出四种类型的特征。
从两个方面来看,首先,从现场来看,每天的客流变化与前一天相同,但是什么导致了波动。其次,从用户的角度来看,大多数用户的行为轨迹应该是可重复的,即客流的稳定性。对于两个维度,及时区分节假日和高峰时段带来的客流影响。空间上,区分不同地理位置和不同功能属性造成的客流影响。通过上述两个角度和维度,总结了四种特征,即基本特征、时间特征、历史时间特征和地理信息特征。

6.代码分析

6.1字段分析
比赛数据给了41个字段的数值,用于预测每日客流量。从题目要求中可知我们所需要输出的预测结果只有“日期”,“TRADE_ADDRESS(刷卡地点编号)”和“预测客流量”三种数据。这意味着很多所给的字段可能是无用的。并且我们发现,预测客流量并不是一个直观的字段,因此需要我们自己对其进行整理。建立ipython文件Traffic_dataAnalysis。先用pandas库读取csv的数据:
在这里插入图片描述

客流量并没有出现在字段中,由题目要求得知,每个站点的日客流量是交易类型21,22之和,因此客流量实际上就是对应行的和。因此我们选择用python进行作图,来判断字段之间的联系和影响。
在这里插入图片描述

通过作图我们可以看出,每个月不同刷卡地点的客流量的变化趋势十分接近,因此可以知道刷卡地点TRADE_ADDRESS字段的数据拟合的非常好。
6.2数据清洗
通过分析我们字段我们得出结论,这是一个关于时序模型预测的问题。其余无关的属性字段对预测并没有帮助,可以去除。因为预测的数据单位为天(day),因此我们先将日期进行正则处理,只取年月日(Y-m-d):
在这里插入图片描述

增加字段TRADE_DATE_DAY:
在这里插入图片描述

通过dataframe的排序求和,我们获得对应日期对应刷卡地点的客流量字段VAL:
在这里插入图片描述

将重新整理的数据输出,此时便得到了用来训练时间序列模型的数据集。
6.3特征工程
新建ipython文件Traffic_modelNPre,对新输出的数据集进行操作。通过分析相关字段的客流量变化,可以看出其波动非常之大,这势必对模型的拟合产生影响,所以我们建立新字段VAL_LOG,对VAL进行指数转化,使变化值处于一个相对小的范围内。
在这里插入图片描述
在这里插入图片描述

针对整理好的数据,可以分析出:地铁客流的时间序列具有一定的连续性,以一周为单位,整段时间的客流情况会具有相似性。因此对于该题我们决定使用 时间序列模型 作为基本模型进行解答。这时开始继续分析数据:
在这里插入图片描述

该函数能提取相应TRADE_ADDRESS的时间序列数据,及每天的平均连接数。
在这里插入图片描述

绘图结果如下,可以看出有存在异常的天数。
在这里插入图片描述

所以需要写如下函数将异常的日子过滤掉,此处的过滤策略是:对每月特定时间段天数的数据求均值与标准差,然后将均值与标准差落在10%分位数以下和90%分位数以上的日子去除。
在这里插入图片描述

去除后序列如下:
在这里插入图片描述

将异常的天数筛选出来后,保留剩余的天数所对应的数据,并且将异常天数对应的日客流量取每月正常天数客流量的均值,使得模型能更好的拟合。这样我们便得到了新的数据集,保存在data_final文件夹中。这样,就完成了建立模型的前置工作。
6.4建立模型
数据都已经准备好,可以开始着手模型的构建了。因为地铁人流具有连续性的特征,我们使用ARMA来对预测进行一定的修正,模型如下:
在这里插入图片描述

我们选择了8-10月的数据作为临时训练集,将11月1-7日的数据作为验证集来测试模型拟合的好坏。通过计算得到,该时序模型的置信区间落在(2,0),因此我们的时间序列模型p,q数值的取值分别取2和0作为参数。
在这里插入图片描述

从结果图上来看,对于时间序列趋势的预测还算不错,但仍存在部分偏差。模型基本构建完成,可以开始进行预测了。
6.5结果预测
按照要求的表格形式,输出成dataframe,
在这里插入图片描述

进行输出就完成了预测数据:
在这里插入图片描述

我们将训练模型保存,用9月1日-9月7日作为测试集进行预测,与实际数据比对,最终得到的MAE=4135.218。
在这里插入图片描述

7.结语

本文从轨道交通客流预测的复杂性与可控性进行分析,分析我国目前客流预测主要的误差来源,以及可以控制的相关因素。随着国内对城市交通模型越来越重视,交通模型队伍的培养与壮大,城市规划的不断稳定,相信客流预测的精度将更上一个台阶。

参考文献

[1]史金余,杨泽宇,谢兄.基于模糊决策的随机森林算法[J].计算机工程与设计,2020,41(08):2207-2212.
[2]周森鑫,李超,吴德成.贝叶斯网络在预测银行信贷风险中的应用[J].鸡西大学学报,2014,14(10):42-43+63.
[3]王远帆,施勇,薛质.基于决策树的端口扫描恶意流量检测研究[J].通信技术,2020,53(08):2002-2005.
[4]李恺,谭海波,王海元,解玉满,黄红桥,卜文彬,谈丛,彭潇,郭光,刘谋海,陈浩.一种基于决策树的主网线路状态检测方法、系统及介质[P].湖南省:CN111612149A,2020-09-01.
[5]郝小伟,宋豪琦.互联网金融下中小企业融资的分析与研究[J].经济管理文摘,2020(17):35-36.
[6] 陈淑珍. 基于网络客流大数据可视化优化城轨行车组织. 2019 ,第000卷 ,第4期
[7] 宋晓悦. 基于Spark的城市轨道交通客流分析平台研究. 2017
[8] 安居,陈锋. 基于大数据的城市轨道交通运营网络评估技术研究. 2020
[9] 钟罡. 基于手机大数据的城市综合客运枢纽乘客出行行为分析方法研究. 2019
[10] 席洋. 基于AFC数据的城市轨道交通乘客聚类及客流分配研究.

附录

数据清洗

1.	#筛选掉异常的天数
2.	#对每个月特定时间段的数据求均值和标准差,然后将均值与标准差落在10%分位数以下和90%分位数以上的日子去除
3.	def TrueFalseListCombine(TFlist1,TFlist2):
4.	    return [l1 and l2 for l1,l2 in zip(TFlist1, TFlist2)]
5.	def Exceptoutlier(ds_list):
6.	    Mean=pd . DataFrame( [np.mean(i) for i in ds_list])
7.	    mean_low=Mean > Mean.quantile(0.1)
8.	    mean_up=Mean < Mean. quantile(0.9)
9.	    TF=TrueFalseListcombine(mean_low.values , mean_up.values)
10.	    mean_index=Mean [TF] .index.values
11.	    std=pd.DataFrame([np.std(i) for i in ds_list])
12.	    std_low=std > Std.quantile(0.1)
13.	    std_up=std < std.quantile(0.9)
14.	    TF=TrueFalseListCombine(std_low.values,std_up.values)
15.	    std_index=Std[TF].index.values
16.	    valid_index=list(set(mean_index)&set(std_index))
17.	    return valid_index
18.	    #return ds list

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

每月不同闸机的客流量分布

1.	import matplotlib.pyplot as plt
2.	#分析每个月份不同闸机的客流量分布
3.	plt.title("address count per month")
4.	plt.plot(address_08,color="g",label="08")
5.	plt.plot(address_09,color="blue",label="09")
6.	plt.plot(address_10,color="r",label="10")
7.	plt.plot(address_11,color="y",label="11")
8.	plt.legend()
9.	plt.grid()
10.	plt.show()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

每月不同日期的客流量分布

1.	#分析每个月份不同日期的客流量分布
2.	fig=plt.figure(figsize=(12,8))
3.	ax1=fig.add_subplot(2,2,1)
4.	plt.plot(trade_date_08,color="g",label="08")
5.	plt.legend()
6.	ax2=fig.add_subplot(2,2,2)
7.	plt.plot(trade_date_09,color="b",label="09")
8.	plt.legend()
9.	ax3=fig.add_subplot(2,2,3)
10.	plt.plot(trade_date_10,color="r",label="10")
11.	plt.legend()
12.	ax2=fig.add_subplot(2,2,4)
13.	plt.plot(trade_date_11,color="y",label="11")
14.	plt.legend()
15.	plt.show()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

绘制柱状图,不同月份每周客流量

1.	#绘制柱状图,不同月份每周客流量
2.	fig=plt.figure(figsize=(12,8))
3.	ax1=fig.add_subplot(2,2,1)
4.	x_data=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
5.	y_data=[data_08_weekday["Monday"],data_08_weekday["Tuesday"],data_08_weekday["Wednesday"],data_08_weekday["Thursday"],data_08_weekday["Friday"],data_08_weekday["Saturday"],data_08_weekday["Sunday"]]
6.	#绘图
7.	plt.bar(x=x_data,height=y_data,label='08',color='r',alpha=.8)
8.	plt.title("Count per week")
9.	plt.legend()
10.	ax2=fig.add_subplot(2,2,2)
11.	x_data=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
12.	y_data=[data_09_weekday["Monday"],data_09_weekday["Tuesday"],data_09_weekday["Wednesday"],data_09_weekday["Thursday"],data_09_weekday["Friday"],data_09_weekday["Saturday"],data_09_weekday["Sunday"]]
13.	#绘图
14.	plt.bar(x=x_data,height=y_data,label='09',alpha=.8)
15.	plt.title("Count per week")
16.	plt.legend()
17.	ax3=fig.add_subplot(2,2,3)
18.	x_data=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
19.	y_data=[data_10_weekday["Monday"],data_10_weekday["Tuesday"],data_10_weekday["Wednesday"],data_10_weekday["Thursday"],data_10_weekday["Friday"],data_10_weekday["Saturday"],data_10_weekday["Sunday"]]
20.	#绘图
21.	plt.bar(x=x_data,height=y_data,label='10',color='g',alpha=.8)
22.	plt.title("Count per week")
23.	plt.legend()
24.	ax4=fig.add_subplot(2,2,4)
25.	x_data=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
26.	y_data=[data_11_weekday["Monday"],data_11_weekday["Tuesday"],data_11_weekday["Wednesday"],data_11_weekday["Thursday"],data_11_weekday["Friday"],data_11_weekday["Saturday"],data_11_weekday["Sunday"]]
27.	#绘图
28.	plt.bar(x=x_data,height=y_data,label='11',color='y',alpha=.8)
29.	plt.title("Count per week")
30.	plt.legend()
31.	plt.show()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

对每个月特定时间段的数据求均值和标准差,然后将均值与标准差落在10%分位数以下和90%分位数以上的日子去除

1.	def TrueFalseListCombine(TFlist1,TFlist2):
2.	    return [l1 and l2 for l1,l2 in zip(TFlist1,TFlist2)]
3.	def ExceptOutlier(ds_list):
4.	    Mean=pd.DataFrame([np.mean(i) for i in ds_list])
5.	    mean_low=Mean > Mean.quantile(0.1)
6.	    mean_up=Mean < Mean.quantile(0.9)
7.	    TF=TrueFalseListCombine(mean_low.values,mean_up.values)
8.	    mean_index=Mean[TF].index.values
9.	    Std=pd.DataFrame([np.std(i) for i in ds_list])
10.	    std_low=Std > Std.quantile(0.1)
11.	    std_up=Std < Std.quantile(0.9)
12.	    TF=TrueFalseListCombine(std_low.values,std_up.values)
13.	    std_index=Std[TF].index.values
14.	    valid_index=list(set(mean_index)&set(std_index))
15.	    return valid_index
16.	    #return ds_list

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

以天为单位进行预测

1.	import numpy as np
2.	import pandas as pd
3.	def make_mean(c):
4.	    log=c["VAL_LOG"].values
5.	    val=c["VAL"].values
6.	    log_mean=np.mean(log)
7.	    val_mean=np.mean(val)
8.	    return log_mean,val_mean
9.	
10.	def loop(c,valid):
11.	    #print(c)
12.	    #print(type(valid[0]))
13.	    log=c["VAL_LOG"].values
14.	    val=c["VAL"].values
15.	    day=c["TRADE_DATE_DAY"]
16.	    add=c["TRADE_ADDRESS"].values
17.	    log_mean,val_mean=make_mean(c)
18.	    time=[]
19.	    all_log=[]
20.	    all_val=[]
21.	    for i in day:
22.	        tmpd=int(i[8:])
23.	        time.append(tmpd)
24.	    Len=len(day)
25.	    for i in range(1,Len+1):
26.	        if(i in valid):
27.	            all_log.append(log[i-1])
28.	            all_val.append(val[i-1])
29.	        else:
30.	            all_log.append(log_mean)
31.	            all_val.append(val_mean)
32.	    frame={
33.	          "TRADE_DATE_DAY":c["TRADE_DATE_DAY"],
34.	         "TRADE_ADDRESS":c["TRADE_ADDRESS"],
35.	        "VAL":all_val,
36.	        "VAL_LOG":all_log
37.	        
38.	       
39.	    }
40.	    fram=pd.DataFrame(frame)
41.	    return fram

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
1.	import pandas as pd
2.	import numpy as np
3.	def Violent():
4.	    t=np.array([pd.datetime(2015,9,1),pd.datetime(2015,11,30)])
5.	    address=[]
6.	    tmp=121
7.	    while(tmp<161):
8.	        address.append(tmp)
9.	        tmp+=2
10.	    #ds_list=DsList(151,Time)
11.	    #ExceptOutlier(ds_list)
12.	    #df_01=data_train[data_train['TRADE_ADDRESS']==151]
13.	    #c=df_01.iloc[ExceptOutlier(ds_list)]
14.	    frame=[]
15.	    for i in address:
16.	        tmp=DsList(i,t)
17.	        df_tmp=data_11_train[data_11_train['TRADE_ADDRESS']==i]
18.	        c=df_tmp.iloc[ExceptOutlier(tmp)]
19.	        #loop(df_tmp,ExceptOutlier(tmp))
20.	        c=loop(df_tmp,ExceptOutlier(tmp))
21.	        #print("_________________________")
22.	        #print(ExceptOutlier(tmp))
23.	        frame.append(c)
24.	    #data_frame=frame[0]
25.	    #del (frame[0])
26.	    valid_day=ExceptOutlier(tmp)
27.	    data_frame=pd.concat(frame,axis=0,ignore_index=True)
28.	    return data_frame
29.	arr=Violent()
30.	arr

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

时间序列模型

1.	import datetime
2.	
3.	def Do_ARMA(TRADE_ADDRESS,TrainTime,PredictTime,p,q,Draw=False):
4.	    Tag_Time_Series=GetTimeSeries(TRADE_ADDRESS)
5.	    ARMA_Time=[PredictTime[0]-timedelta(30),PredictTime[0]-timedelta(1)]
6.	    #ARMA_Time=[pd.datetime(2015,10,31),pd.datetime(2015,11,30)]
7.	    Tag_Time_Series=Get_Part_of_TimeSeries(Tag_Time_Series,ARMA_Time)
8.	    #ARMA model
9.	    from statsmodels.tsa.arima_model import ARMA
10.	    arma_mod=ARMA(Tag_Time_Series,(p,q)).fit()
11.	    Predict=arma_mod.predict(start=str(PredictTime[0]),end=str(PredictTime[1]))
12.	    if Draw==True:
13.	        plt.rc('figure',figsize=(12,8))
14.	        plt.plot(arma_mod.fittedvalues,'r')
15.	        plt.plot(Tag_Time_Series,'b')
16.	        plt.plot(Predict,'g-')
17.	    return Predict

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

模型预测

1.	  Est_TrainTime = np.array([pd.datetime(2015,month,8),pd.datetime(2016,month,15)])
2.	    Est_PredictTime = np.array([pd.datetime(2015,month,1),pd.datetime(2015,month,7)])
3.	    y = Get_Part_of_TimeSeries(GetTimeSeries(TRADE_ADDRESS_List[i]),Est_PredictTime)
4.	    prey0 =Imitate1(TRADE_ADDRESS_List[i],Est_TrainTime,Est_PredictTime)
5.	    prey1 =Imitate2(TRADE_ADDRESS_List[i],Est_TrainTime,Est_PredictTime)
6.	    prey2=Do_ARMA(TRADE_ADDRESS_List[i],Est_TrainTime,Est_PredictTime,0,1)
7.	    prey3 = Combine(TRADE_ADDRESS_List[i],Est_TrainTime,Est_PredictTime,Ratio_Dict)
8.	    y.plot()
9.	    prey0.plot()
10.	    prey1.plot()
11.	    prey2.plot()
12.	    prey3.plot()
13.	    plt.legend(['real','imitate1','imitate2','arma','combine'])
14.	    title = ('2015-'+str(month))
15.	    plt.title(title)[0]

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

欢迎大家加我微信学习讨论
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/87765?site
推荐阅读
相关标签
  

闽ICP备14008679号