晉春杰 許宏勇 陳念

摘要 目前各省高速公路通行費清分數據由部、省清分結算中心通過其清分系統提供給各高速公路運營單位,但因清分的復雜性和滯后性特點,導致各高速公路運營單位不能及時準確掌握清分數據及清分具體明細。文章為解決該問題,以某省某高速公路為例,基于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.