基于Python语言的高速公路通行费数据提取应用研究
2022-02-28晋春杰许宏勇陈念
晋春杰 许宏勇 陈念
摘要 目前各省高速公路通行费清分数据由部、省清分结算中心通过其清分系统提供给各高速公路运营单位,但因清分的复杂性和滞后性特点,导致各高速公路运营单位不能及时准确掌握清分数据及清分具体明细。文章为解决该问题,以某省某高速公路为例,基于Python语言完成高速公路门架日志通行费数据提取及Excel数据统计工作,实现完成每日本路段通行费数据的统计工作,为高速公路运营单位提供较为直观的通行费收入明细及参考。
关键词 高速公路通行费;Python语言;数据提取;Excel数据统计
中图分类号 U495 文献标识码 A 文章编号 2096-8949(2022)03-0004-03
0 引言
2018年全国推进取消高速公路省界收费站,实现收费数据的全国联网,进一步加大了ETC的发展,目前高速公路ETC用户也在逐年急剧增加,也进一步提高了高速公路通行效率[1]。高速公路车辆通行介质主要包括ETC卡及CPC卡,两种通信介质的信息写入和读取皆可由高速公路沿线建设的ETC门架天线、收费站车道天线及收费站车道读写器等硬件设备配合收费软件完成,可实现车辆行驶路线的确定和通行费的计算及统计。
随着取消高速公路省界收费站工作的完成,各大高速公路运营单位较为关注的则是部、省结算中心对通行费的清分结算问题。因各省份车道收费软件均由各省软件公司独立完成,同时又因全国高速公路路网的复杂性、读写设备的差异性及不稳定性,使得省份与省份、路段与路段之间清分结算的精确性存在较大困难。随着高速公路硬件及软件设备的不断更新和完善,目前各省清分结算数据已较为准确,但仍存在未知的缺陷问题,需各高速公路运营单位积极对清分结算数据进行人工校对并发现相关问题,从而为软件和硬件的更新提供数据基础,最终实现清分数据及明细的精确化。该文基于Python语言完成对某省某高速公路门架日志通行费数据的精准提取,并完成Excel通行费数据的统计工作,经过验证,应用Python语言程序自动提取的工作效率是人工提取效率的6倍,其统计结果可作为高速公路当天清分结算数据的参考,并对省内清分结算结果进行对比校验,具有一定的应用价值。
1 高速公路通行费数据分析
1.1 通行费数据来源
目前,高速公路取消省界收费站后,各高速公路沿线收费门架系统,满足对车辆的标记和计费要求,匝道收费站实现车辆上站记录和最终下站缴费的功能,即全过程实现车辆上站标记,途中计费,下站缴费的收费模式。随着全国高速公路路网规划的不断建设和完善,车辆行驶路径的可选择性和复杂性也大幅提高,因此,高速公路收费门架系统在作为车辆行驶收费单元的计费及路径的确定上起到至关重要的作用。其车辆在某路段行驶所产生的通行费也在收费门架日志中进行详细记录,因此通行费数据来源主要从门架收费系统的工控机日志内进行提取和统计。
1.2 通行费数据分析及手工数据提取
1.2.1 ETC门架系统日志分析
全国ETC门架系统日志中记录了所有通过该收费单元车辆的通行时间、车型、车牌、通行介质、应收金额、优惠金额及交易金额等。通过门架日志可较为清晰的分析出各个车辆的通行费及行驶路径。同时,门架系统日志以每日的0点为节点创建文本文件,便于对路段每日通行费进行统计。
该文所研究的某高速公路共有10个收费单元,同时有10套门架系统对该路段上下行行驶车辆进行标记,且覆盖所有收费单元。因收费门架系统具有路径和通行费的拟合功能,即在上层门架未标记,下层门架可对上层门架路径进行拟合,同时也将通行费核算到该下层门架进行标记计费,所以为计算所有车辆在该路段的通行费用,只需将10套门架系统车辆交易金额进行统计,便可统计出当日该路段通行费用,但因存在部分免费车辆,全程交易失败车辆等,免费车辆主要包括军警车、绿通车等,全程交易失败车辆主要包括ETC卡损坏、CPC卡损坏,故意屏蔽ETC及CPC卡等,其中全程交易失败车辆经与该省联网公司沟通确认为极少数用户存在,可忽略不计。因此免费车辆则主要影响部、省的清分结算与该方法计算出的通行费存在偏差,然而该差值的通行费难以统计,但是经过长期将清分结算数据与该方法统计数据进行对比分析,免费车辆所产生的差值将趋于均值,同时此方法也进一步了解了该路段免费通行率。
1.2.2 通行费数据的手工提取
ETC门架系统日志的获取可采用两种方式,一种方式为通过任意一台收费网络计算机远程进入门架工控机系统,即可下载每日的log文件。另一种方式则是通过远程控制软件,即可远程进入门架工控机系统下载log文件,该方法较为方便,只需首次将门架地址信息进行录入即可快速进入工控机,并进行数据下载,该文则采取该方法通过使用finalshell远程连接软件对该高速公路10套门架系统日志进行每日下载。
在下载的门架日志中,经研究发现日志中车辆的“交易金额”为“应收金额”与“优惠金额”之差,即为该车辆需收取的通行费数据,因此该文所提取的数据即为每辆车的“交易金额”。前期我们采用人工提取的方式则是将日志数据全部倒入Excel表中进行选择、分解、去重、提取及汇总等,最终将每日ETC门架总交易金额数据与省结算中心清分结算金额数据作长期对比,金额数据皆为相近,因此,此方式的通行费数据统计具有较高的参考价值。但是人工提取数据的方法步骤非常繁琐且耗时较高,据统计,该路段每日的数据统计工作长达2 h左右,因此,该统计方法的长期推广使用较为困难。
2 Python语言用于通行费数据的快速提取
因手工提取通行费数据的效率较慢问题,导致通行费数据统计工作难以持续开展,下面采用Python语言进行数据处理,其效率可大幅提升。
2.1 数据处理中编程语言的应用
Python语言在数据提取方面具有突出的优势,在计算機编程语言中常用到有JAVA语言、C++语言、PHP语言等。JAVA语言与Python语言相比,其在编程的过程中需要更多的程序语言作为辅助,而且在整个编程的过程中需要大量的代码,因此当我们具有新的需求时,需要对现有的代码进行大量的修改,从而对后续的使用带来较大困难[2],然而Python语言比较简洁明了,在修改程序时思路较为清晰,便于后期使用;C++语言与Python语言相比,C++语言功能虽然非常强大,但其学习难度也相对较大,在数据提取编程方面,需要花费较长时间进行相关的学习,从而使得编写的效率大大降低,然而Python语言就相对简单,易学及实用性较高[3];PHP语言与Python语言相比,PHP语言在现今编程语言中较为流行,主要表现出简单易用方面,但是其也存在一定缺点,该语法运用上不够严谨,容易出错,同时在处理大量数据上面程序运行速度十分缓慢,在用户使用的过程中需花费较多时间,从而不能表现出较好的用户体检。然而Python语言在简单易用的同时程序运行较快,更便于对数据的处理和提取。因此该文采用Python语言对ETC门架系统日志通行费数据进行提取。
2.2 Python下的通行费数据提取流程
2.2.1 ETC门架系统日志主要参数
对某省某高速公路进行实例研究。该高速公路共5对门架,即10套门架系统,分别标号规则为,从该高速公路地理位置北至南依次为“1号门架”,“2号门架”,“3号门架”,“4号门架”,“5号门架”;从该高速公路地理位置南至北依次为“6号门架”,“7号门架”,“8号门架”,“9号门架”,“10号门架”。每个ETC门架日志中有不同数量的通行费日志文件,车流量较大时,通行费日志文件数较多,车流量较小时,通行费日志文件数较少,上文已讲述,欲统计通行费金额,即统计每个通行费日志交易金额总额即可。这里以每个门架单元进行统计,并通过Python语言实现每个门架计费金额的统计,最终完成该路段总通行费金额的统计工作。
2.2.2 Python下通行日志交易金额数据提取
在编写Python语言的过程中需要建立3个文件夹[4]。第一个文件夹用于存储该路段10个门架的通行费日志,同时便于Python语言的读取和处理;第二个文件夹用于存储程序编写中对通行日志读取的规则;第三个文件夹为程序所读取并计算的交易金额数值进行存储,即Excel表格。
首先使用Python语言的网络爬虫对我们所制定地址下的通行日志内容进行搜索,然后将搜索的内容进行对比[5],找到我们所需要的“交易金额”,然后将所有得到的数值求和得出门架的通行费数据,同样,接着对下一个门架通行日志内容进行搜索,最终完成10个门架的通行费统计并将每个门架统计数据填写到制定的Excel表格中。该次Python语言的主程序源代码如下:
def 主功能():
path = input("请输入目录的完整路径:") or r"F:\开始研究门架数据筛查\05 其他\单独:门架\数据源\车流量" # 该路径为接收文件的路径。
print("★您输入的路径是:"+path)
门架列表 = ['1号门架','2号门架','3号门架','4号门架','5号门架','6号门架','7号门架','8号门架','9号门架','10号门架'] # 该列表为目录列表。
a = []
for i in range(0,10):
# 拼接成门架目录的路径。
门架路径 = path + '\\' + 门架列表[i]
files = os.listdir(门架路径) # os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
#print(type(files)) # <class 'list'>
#print(files) #['21_Transaction_20211024_001.log', '21_Transaction_20211024_002.log', '21_Transaction_20211024_003.log', '21_Transaction_20211024_004.log']
#
仓库列表 = []
for file in files:
if not os.path.isdir(file): # 判斷是否文件夹。
if file[-4:] == '.log': # 判断后缀名是否log。
文本句柄=open(门架路径+"\\"+ file,encoding='utf-8',errors='ignore'); # 打开文件
line = 文本句柄.readline() # 读取一行
while line:
if line.find('交易金额:')>=0:
结果序号 = line.find('交易金额:') # 返回的是序号
line2 = line[结果序号:] # 生成以"交易金额:"开头的为开头的新字符串。
# print(line2)
x = re.split(' |:', line2) # 通过“空格”和“|”对字符串line2进行分割。
y = x[1] # 0是空,1是金额。
#print(y) # 输出y
仓库列表.append(int(y))
line = 文本句柄.readline()
文本句柄.close()
仓库列表求和 = sum(仓库列表)
print(仓库列表求和)
a.append(仓库列表求和)
return a
通过Python语言程序对该高速公路某日10个门架系统通行费金额进行统计得出结果如表1所示,该结果与手工提取的金额数据作对比,数据完全一致,从而实现了在Python语言下对每个门架通行费数据的精确统计,同时该程序的运行只需要2~3 s时间,可完全省去手工提取通行费数据所需时间,只需人工下载每日ETC门架通行费日志,所需时间不足20 min,从而大大提高了高速公路完成每日通行费数据的统计工作效率。
同时,该方法通过3个月的实践应用,发现该省高速公路清分结算中心所提供的该路段清分金额占比该方法获取门架通行费金额的94%左右,从而说明该路段免费通行率约在6%左右,此数据为后期月度及年度清分通行费总金额提供了有力的数据参考。
3 结语
该文针对目前各高速公路运营单位存在不能及时准备掌握该路段通行费清分数据及具体明细的问题,提出了采用Python语言对ETC门架系统日志进行通行费金额数据提取和统计的方法,完成了对该路段总通行费金额的精确统计,其相对人工提取的方法,效率大大提高,该方法可推广至各高速公路使用,为各高速公路运营单位对部、省通行费清分结算的结果核对提供了较强的参考性,具有一定的长期运用价值。
参考文献
[1]梁贞.基于大数据的高速公路联网收费信用平台设计分析[J].中国设备工程,2021(20):194-195.
[2]周竞鸿.基于Python语言的大数据分析研究[J].数据库技术,2013(7):31-37.
[3]叶惠仙,游金水.Python语言在大数据处理中的应用[J].网络安全技术与应用,2021(5):51-54.
[4]王栋.Python 的计算机软件应用技术分析[J].科技论坛,2021(14):120-122.
[5]阿不都艾尼·阿不都肉素力.Python的计算机软件应用技术分析[J].软件研发与应用,2021(9):29-30.