宋小滿,黃 鑫,王懷相
(1.中國鐵道科學(xué)研究院集團(tuán)有限公司 運(yùn)輸及經(jīng)濟(jì)研究所,北京 100081;2.中國鐵路總公司 貨運(yùn)部,北京 100844)
近年來,隨著鐵路貨運(yùn)價(jià)格市場化步伐的加快,鐵路運(yùn)輸企業(yè)非常重視對競爭對手——公路貨運(yùn)價(jià)格數(shù)據(jù)的采集與分析,而通過人工去獲取數(shù)據(jù)需要花費(fèi)大量的人力、財(cái)力、時(shí)間,容易出現(xiàn)數(shù)據(jù)采集成本高、應(yīng)用不及時(shí)等問題,難以應(yīng)對快速變化的市場環(huán)境。隨著互聯(lián)網(wǎng)的快速發(fā)展,以及企業(yè)網(wǎng)站的逐步建立和完善,網(wǎng)絡(luò)上大量與公路貨運(yùn)價(jià)格有關(guān)的信息,可以運(yùn)用科學(xué)的計(jì)算機(jī)技術(shù)去實(shí)現(xiàn)信息的采集,以有效地節(jié)省人力、物力,提高數(shù)據(jù)的采集效率,降低數(shù)據(jù)采集成本。同時(shí),鐵路價(jià)格管理人員也可以將更多的精力用于分析數(shù)據(jù)、利用數(shù)據(jù)進(jìn)行決策,從而提高企業(yè)管理人員的管理決策水平[1]。
目前,政府機(jī)構(gòu)、行業(yè)協(xié)會(huì)、公路貨運(yùn)企業(yè)在網(wǎng)絡(luò)上公布了大量的公路貨運(yùn)價(jià)格信息[2],主要的公路貨運(yùn)價(jià)格信息如下。
(1)政府機(jī)構(gòu)的網(wǎng)絡(luò)公開信息。國家發(fā)展和改革委員會(huì)和交通運(yùn)輸部分別在其官網(wǎng)上公布了系列的公路貨運(yùn)價(jià)格信息。其中,國家發(fā)展和改革委員會(huì)在“36個(gè)大中城市服務(wù)收費(fèi)平均價(jià)格表”[3]中公布了“省際、定期定線、整車”和“省內(nèi)、定區(qū)不定線、零擔(dān)”的公路貨運(yùn)價(jià)格;交通運(yùn)輸部在“全國道路貨運(yùn)價(jià)格與成本監(jiān)測信息”[4]中公布了公路普貨整車、集裝箱運(yùn)價(jià)指數(shù)。
(2)中國采購與物流聯(lián)合會(huì)的網(wǎng)絡(luò)公開信息。公開信息顯示,中國采購與物流聯(lián)合會(huì)從2013年1月開始每周發(fā)布全國主要節(jié)點(diǎn)城市間的9.6 m整車、13.5 m整車、17.5 m整車、零擔(dān)重貨、零擔(dān)輕貨的公路貨運(yùn)價(jià)格數(shù)據(jù)[5]。主要節(jié)點(diǎn)城市名稱如表1所示。
表1?主要節(jié)點(diǎn)城市名稱Tab.1 Name of main city
(3)內(nèi)蒙古煤炭交易市場的公開信息。公開信息顯示,內(nèi)蒙古煤炭交易市場從2014年1月每周發(fā)布煤炭短途、中途、長途“點(diǎn)到點(diǎn)”的公路貨運(yùn)價(jià)格[6]。短途運(yùn)輸主要是監(jiān)測鄂爾多斯地區(qū)礦區(qū)到火車站之間的公路運(yùn)輸價(jià)格;中途運(yùn)輸主要是礦區(qū)至省內(nèi)電廠、鋁廠等煤炭消耗地的運(yùn)輸價(jià)格;長途運(yùn)輸主要是通過公路運(yùn)往其他省市的運(yùn)輸價(jià)格。
(4)其他公路貨運(yùn)價(jià)格信息。德邦物流在其官網(wǎng)上公布了快遞、零擔(dān)不同運(yùn)輸產(chǎn)品的報(bào)價(jià),在阿里巴巴物流服務(wù)平臺(tái)上可以查詢主要線路不同物流企業(yè)貨運(yùn)(大件)、快遞(小件)、整車的公路貨運(yùn)報(bào)價(jià),也可以在其他物流企業(yè)如佳吉快運(yùn)的企業(yè)網(wǎng)站上查詢不同起訖點(diǎn)不同產(chǎn)品的公路貨運(yùn)報(bào)價(jià)。
網(wǎng)絡(luò)數(shù)據(jù)的采集技術(shù)主要有網(wǎng)絡(luò)爬蟲(Web Spider)和基于API二次開發(fā)包的方式[7]。網(wǎng)絡(luò)爬蟲技術(shù)是一個(gè)實(shí)現(xiàn)自動(dòng)提取網(wǎng)頁信息的程序,一般的實(shí)現(xiàn)過程為:從一個(gè)初始的URL集出發(fā),將這些URL全部放入到一個(gè)有序的待采集隊(duì)列里。而采集器從這個(gè)隊(duì)列里按順序取出URL,通過Web上的協(xié)議,獲取URL所指向的頁面,然后從這些已獲取的頁面中提取出新的URL,并將其繼續(xù)放入到待采集隊(duì)列里,然后重復(fù)上面的過程,直到采集器根據(jù)自己的策略停止采集[8]?;贏PI二次開發(fā)包的方式,主要包括目前主流的網(wǎng)絡(luò)地圖服務(wù)商,如百度、谷歌、高德等。通過調(diào)用地圖服務(wù)商提供的二次開發(fā)API相關(guān)函數(shù),獲取其數(shù)據(jù),并進(jìn)行保存[9]。
(1)采集需求。在公開的公路貨運(yùn)價(jià)格信息中,中國采購與物流聯(lián)合會(huì)公開的信息量大,公開的信息較多。為此,通過開發(fā)軟件對中國采購與物流聯(lián)合會(huì)公開公路運(yùn)價(jià)信息,包括起點(diǎn)、訖點(diǎn)、運(yùn)輸方式(9.6 m整車、13.5 m整車、17.5 m整車、零擔(dān)重貨、零擔(dān)輕貨)、發(fā)布日期、運(yùn)輸價(jià)格進(jìn)行采集,存儲(chǔ)到本地文件中,并對采集的數(shù)據(jù)進(jìn)行格式轉(zhuǎn)換和圖表展示。
(2)實(shí)現(xiàn)流程。需要實(shí)現(xiàn)的功能包括:數(shù)據(jù)采集、格式轉(zhuǎn)換和圖表展示。通過開發(fā)軟件實(shí)現(xiàn)上述功能,網(wǎng)絡(luò)數(shù)據(jù)采集的基本流程如圖1所示。首先,通過開發(fā)的程序?qū)撁嬷械闹付〝?shù)據(jù)進(jìn)行采集;其次,將采集的數(shù)據(jù)存到數(shù)據(jù)中心;最后,利用相關(guān)控件對采集的數(shù)據(jù)進(jìn)行格式轉(zhuǎn)換和圖表展示。
為實(shí)現(xiàn)上述采集需求,采用ASP.NET Framework 4.0作為開發(fā)環(huán)境,使用visual C#作為程序語言進(jìn)行軟件開發(fā)。同時(shí),為了實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)換、圖表展示的功能,還需要利用相關(guān)控件,包括運(yùn)用第三方控件NPOI組件進(jìn)行格式轉(zhuǎn)換,分別運(yùn)用DataGridView控件、Chart控件進(jìn)行表格展示和圖形展示。
軟件采用模塊化的設(shè)計(jì)結(jié)構(gòu),根據(jù)各模塊完成的任務(wù)將其劃分為參數(shù)設(shè)置模塊、參數(shù)過濾模塊、數(shù)據(jù)采集模塊、數(shù)據(jù)分析模塊、數(shù)據(jù)存儲(chǔ)模塊、數(shù)據(jù)導(dǎo)出模塊和數(shù)據(jù)展示模塊,其中,前5個(gè)模塊主要實(shí)現(xiàn)數(shù)據(jù)采集、存儲(chǔ)的功能。網(wǎng)絡(luò)數(shù)據(jù)采集主要功能模塊及關(guān)鍵技術(shù)如圖2所示。
圖1?網(wǎng)絡(luò)數(shù)據(jù)采集的基本流程Fig.1 Basic process of network data acquisition
圖2?網(wǎng)絡(luò)數(shù)據(jù)采集主要功能模塊及關(guān)鍵技術(shù)Fig.2 Main function modules and key technologies of network data acquisition
(1)參數(shù)設(shè)置模塊。參數(shù)設(shè)置模塊主要是收集中國采購與物流聯(lián)合會(huì)發(fā)布的公路運(yùn)價(jià)有關(guān)信息,包括城市名稱、運(yùn)輸方式信息,運(yùn)用程序算法生成運(yùn)輸路線中的起點(diǎn)和訖點(diǎn),將收集的運(yùn)輸方式信息和生成的運(yùn)輸路線信息存儲(chǔ)到指定的數(shù)據(jù)表中。
(2)參數(shù)過濾模塊。參數(shù)過濾模塊是將待抓取的運(yùn)輸路線參數(shù)存放在隊(duì)列中,根據(jù)條件讀取數(shù)據(jù)庫中未采集的運(yùn)輸路線信息,并存放到運(yùn)輸路線參數(shù)隊(duì)列,再根據(jù)需要讀取參數(shù)隊(duì)列中的運(yùn)輸路線信息,數(shù)據(jù)采集對運(yùn)輸路線信息使用完成后會(huì)及時(shí)彈出該條運(yùn)輸路線信息出列并同時(shí)更新數(shù)據(jù)庫中的該條運(yùn)輸路線信息;然后會(huì)從數(shù)據(jù)庫中獲取新的運(yùn)輸路線參數(shù),繼續(xù)放入運(yùn)輸路線隊(duì)列;運(yùn)輸路線參數(shù)隊(duì)列中初始存放指定的運(yùn)輸路線參數(shù)。參數(shù)過濾模塊在讀取運(yùn)輸路線信息的同時(shí)也讀取了運(yùn)輸方式并存放到其他隊(duì)列中。參數(shù)過濾模塊是軟件運(yùn)行中一項(xiàng)關(guān)鍵的步驟,由于進(jìn)行網(wǎng)頁抓取主要消耗時(shí)間的地方在于網(wǎng)絡(luò)交互中,因而需要采取一定的手段避免重復(fù)的網(wǎng)絡(luò)交互。
(3)數(shù)據(jù)采集模塊。數(shù)據(jù)采集采用多線程定時(shí)器的方式實(shí)現(xiàn)頁面數(shù)據(jù)的自動(dòng)采集工作。具體實(shí)現(xiàn)為:當(dāng)啟動(dòng)數(shù)據(jù)采集模塊的同時(shí)啟動(dòng)多線程定時(shí)器,軟件根據(jù)需求啟動(dòng)WebBrowser控件進(jìn)行指定的頁面瀏覽,多線程定時(shí)器根據(jù)用戶設(shè)置的參數(shù)向頁面提交參數(shù)過濾模塊隊(duì)列中的運(yùn)輸路線和運(yùn)輸方式,用于啟動(dòng)系統(tǒng),當(dāng)系統(tǒng)正常運(yùn)行后讀取存放在城市運(yùn)輸路線參數(shù)隊(duì)列中的參數(shù)和運(yùn)輸方式隊(duì)列中的參數(shù),直到所有的運(yùn)輸路線隊(duì)列和運(yùn)輸方式隊(duì)列為空時(shí)程序終止。軟件對同一條運(yùn)輸路線的不同運(yùn)輸方式分別采集。軟件開發(fā)過程中,為提高頁面采集效率,根據(jù)運(yùn)輸路線參數(shù)的相關(guān)度、權(quán)重等特點(diǎn)采取排序算法,對待采集頁面中的運(yùn)輸路線參數(shù)進(jìn)行最優(yōu)處理。
(4)數(shù)據(jù)分析模塊。數(shù)據(jù)分析模塊是對數(shù)據(jù)采集模塊采集到的大量數(shù)據(jù)進(jìn)行分析,提取有用信息后,對數(shù)據(jù)加以分析的過程。該模塊采用ASP.NET框架中正則表達(dá)式分析類庫進(jìn)行數(shù)據(jù)分析和挖掘,再利用C#正則表達(dá)式類庫中的Match類和MatchCollection類進(jìn)行匹配。
(5)數(shù)據(jù)存儲(chǔ)模塊。數(shù)據(jù)存儲(chǔ)模塊是將數(shù)據(jù)采集和分析完成的數(shù)據(jù)儲(chǔ)存到本地JSON文件格式的過程,在文件存儲(chǔ)的過程中使用了File類方法。
(6)數(shù)據(jù)導(dǎo)出模塊。數(shù)據(jù)導(dǎo)出模塊將存儲(chǔ)在本地的數(shù)據(jù)通過相關(guān)算法把數(shù)據(jù)導(dǎo)出成Excel文件,存儲(chǔ)到本地Excel文件中。其中需要將本地的JSON格式文件讀取到服務(wù)器內(nèi)存中并進(jìn)行數(shù)據(jù)處理,將JSON數(shù)據(jù)轉(zhuǎn)換成DataTable數(shù)據(jù)格式,然后使用NOPI類庫將數(shù)據(jù)導(dǎo)出。
(7)數(shù)據(jù)展示模塊。數(shù)據(jù)展示模塊是通過表格、圖表的方式進(jìn)行數(shù)據(jù)展示。表格展示使用了DataGridView 控件,通過程序算法將DataTable數(shù)據(jù)源進(jìn)行數(shù)據(jù)處理,達(dá)到指定的表現(xiàn)形式。圖表展示方式使用Chart控件。
通過開發(fā)軟件實(shí)現(xiàn)了對指定數(shù)據(jù)的采集、格式轉(zhuǎn)換、圖表展示的功能,最終形成的數(shù)據(jù)表格展示界面和數(shù)據(jù)圖形展示界面分別如圖3、圖4所示。
隨著互聯(lián)網(wǎng)的逐步發(fā)展以及公路貨運(yùn)規(guī)模的不斷擴(kuò)大,網(wǎng)絡(luò)中的公路貨運(yùn)價(jià)格信息在逐步增加,運(yùn)用傳統(tǒng)的數(shù)據(jù)采集方法難以滿足日常管理中快速響應(yīng)的需要,而網(wǎng)絡(luò)采集技術(shù)可以很好地克服傳統(tǒng)采集方法的缺點(diǎn),快速獲取批量數(shù)據(jù),提高效率。通過運(yùn)用ASP.NET技術(shù)可以實(shí)現(xiàn)對指定網(wǎng)頁的指定數(shù)據(jù)進(jìn)行抓取,并根據(jù)網(wǎng)站新發(fā)布的數(shù)據(jù)進(jìn)行更新。軟件擁有很好的實(shí)用性、較好的穩(wěn)定性和較優(yōu)的性能,可以為后續(xù)的分析研究提供基礎(chǔ)數(shù)據(jù)。在使用過程中,收集了160萬余條的公路貨運(yùn)價(jià)格信息數(shù)據(jù),表明該技術(shù)能很好地滿足數(shù)據(jù)采集工作。運(yùn)用的采集方法也可運(yùn)用于其他網(wǎng)站數(shù)據(jù)的采集,為其他數(shù)據(jù)的批量獲取提供參考。
圖3?數(shù)據(jù)表格展示界面Fig.3 Data form display interface
圖4?數(shù)據(jù)圖形展示界面Fig.4 Data graphic display interface