葉長青
摘要:該系統(tǒng)為電子商務(wù)網(wǎng)站提供一個(gè)銷售數(shù)據(jù)分析解決方案。系統(tǒng)保存電子商務(wù)網(wǎng)站的銷售數(shù)據(jù),可以隨時(shí)對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)計(jì)算,快速獲得結(jié)果。系統(tǒng)采用方差分析算法對(duì)數(shù)據(jù)進(jìn)行分析,利用分布式結(jié)構(gòu)和內(nèi)存數(shù)據(jù)庫進(jìn)行算法的計(jì)算,提高了計(jì)算的速度和便利性。
關(guān)鍵詞: 商務(wù)統(tǒng)計(jì);分布式;方差分析
中圖分類號(hào):TP311.5? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2021)36-0048-03
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
1 現(xiàn)狀和本系統(tǒng)的特點(diǎn)
隨著電子商務(wù)的發(fā)展,對(duì)分析工具的需求也在快速增長。本文通過分析銷售數(shù)據(jù),電子商務(wù)網(wǎng)站可以分析顧客的偏好,從而決定開發(fā)、營銷何種產(chǎn)品,反過來用戶可以隨時(shí)隨地查看、分析自己的數(shù)據(jù),并且可以通過電腦、手機(jī)、平板等各種終端。只要能連上網(wǎng)絡(luò),用戶就可以使用分析工具的功能。
盡管存在很多銷售數(shù)據(jù)分析工具,但是一般只是對(duì)某個(gè)數(shù)據(jù)的縱向比較,例如,將過去一年的銷售量以折線圖、餅圖等形式表示,僅可以將不同數(shù)據(jù)顯示在一張圖表上,不能指示各個(gè)數(shù)據(jù)間的關(guān)系。市面上缺少一種可以將各個(gè)數(shù)據(jù)橫向比較、分析各個(gè)銷售數(shù)據(jù)間關(guān)系的工具。目前,如果要做這樣的分析,分析人員只能將銷售數(shù)據(jù)導(dǎo)出,借助于專門的數(shù)學(xué)工具進(jìn)行計(jì)算。這種方法非常不便,而且門檻過高,該系統(tǒng)致力于簡化步驟、拉低門檻。
現(xiàn)有方法的另一個(gè)缺點(diǎn)是,統(tǒng)計(jì)學(xué)分析軟件如SPSS是桌面程序,計(jì)算過程需要在本機(jī)實(shí)現(xiàn),因此計(jì)算速度受到用戶計(jì)算機(jī)性能的限制。并且,它只能在特定的操作系統(tǒng)下運(yùn)行,沒有平臺(tái)擴(kuò)展性,更不必說在手機(jī)、平板等移動(dòng)設(shè)備上運(yùn)行。
該系統(tǒng)是一個(gè)便于使用的、一站式的銷售數(shù)據(jù)橫向比較工具。用戶通過系統(tǒng)提供的API,將該系統(tǒng)與電子商務(wù)網(wǎng)站整合,當(dāng)用戶需要分析時(shí),指定需要分析的相關(guān)數(shù)據(jù),系統(tǒng)就在后臺(tái)計(jì)算出結(jié)果。通過分布式的結(jié)構(gòu),將算法的計(jì)算工作分發(fā)到多個(gè)節(jié)點(diǎn)進(jìn)行同時(shí)運(yùn)行,提高同一時(shí)間能運(yùn)行的計(jì)算數(shù)量。響應(yīng)速度則對(duì)算法本身進(jìn)行優(yōu)化,提高單個(gè)算法的運(yùn)行速度。
2 系統(tǒng)架構(gòu)與開發(fā)技術(shù)介紹
2.1 系統(tǒng)架構(gòu)設(shè)計(jì)
系統(tǒng)大致分為三個(gè)部分:Web部分、計(jì)算部分、數(shù)據(jù)庫部分。Web部分提供對(duì)外(客戶端)的接口,計(jì)算部分處理算法的運(yùn)算操作,數(shù)據(jù)庫部分存儲(chǔ)電子商務(wù)網(wǎng)站的原始銷售數(shù)據(jù)和分析后的數(shù)據(jù)。每個(gè)部分可以是單個(gè)服務(wù)器,也可以是服務(wù)器集群,如圖1所示。
客戶端調(diào)用Web服務(wù)器提供的接口,導(dǎo)入、添加數(shù)據(jù),并且發(fā)出數(shù)據(jù)分析請(qǐng)求。Web服務(wù)器將原始數(shù)據(jù)寫入數(shù)據(jù)庫,并且將計(jì)算任務(wù)交給計(jì)算服務(wù)器。計(jì)算服務(wù)器從數(shù)據(jù)庫獲取數(shù)據(jù),計(jì)算完成后,再將結(jié)果寫入數(shù)據(jù)庫。計(jì)算服務(wù)器不通知Web服務(wù)器計(jì)算完成,客戶端向Web服務(wù)器請(qǐng)求結(jié)果時(shí),Web服務(wù)器向數(shù)據(jù)庫查詢,如果有結(jié)果則返回給客戶端,否則返回提示信息正在計(jì)算中。
2.2 開發(fā)環(huán)境介紹
2.2.1 Python
本系統(tǒng)主要采用Python語言開發(fā),Python是一種解釋型、面向?qū)ο蟆?dòng)態(tài)數(shù)據(jù)類型的高級(jí)程序設(shè)計(jì)語言,它具有很多專用的科學(xué)計(jì)算庫,比如:NumPy、SciPy和matplotlib,它們分別為Python提供了快速數(shù)組處理、數(shù)值運(yùn)算以及繪圖功能,十分適合本系統(tǒng)的開發(fā)和維護(hù)[1]。Python語言及其眾多的擴(kuò)展庫所構(gòu)成的開發(fā)環(huán)境十分適合工程技術(shù)、科研人員處理實(shí)驗(yàn)數(shù)據(jù)、制作圖表,甚至開發(fā)科學(xué)計(jì)算應(yīng)用程序[2]。
2.2.2 MongoDB
MongoDB是一個(gè)開源的、高性能、無模式的文檔型數(shù)據(jù)庫,它是介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫中功能最豐富的。它支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的json格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。它在許多場(chǎng)景下鍵/值可用于替代傳統(tǒng)的關(guān)系型數(shù)據(jù)庫或存儲(chǔ)方式[3]。Mongo是使用C++開發(fā),特點(diǎn)有高性能、易部署、易使用,存儲(chǔ)數(shù)據(jù)非常方便。Mongo最大的特點(diǎn)是它支持的查詢語言非常強(qiáng)大,其語法類似于面向?qū)ο蟮牟樵冋Z言,可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。
3 系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)
3.1 系統(tǒng)流程
系統(tǒng)流程如圖2:
(1)客戶端通過HTTP Basic方式提交密碼信息。
(2)Web服務(wù)器查詢數(shù)據(jù)庫,驗(yàn)證密碼是否正確。
(3)如正確,返回一個(gè)token,否則返回錯(cuò)誤信息,后續(xù)的請(qǐng)求都要包含這個(gè)token。
(4)客戶端發(fā)出請(qǐng)求,指定要分析的數(shù)據(jù)。
(5)Web服務(wù)器立刻返回一個(gè)地址,客戶端稍后可以去這個(gè)地址查詢結(jié)果。同時(shí),Web服務(wù)器對(duì)計(jì)算服務(wù)器發(fā)出計(jì)算請(qǐng)求。
(6)計(jì)算服務(wù)器計(jì)算完成后,將結(jié)果寫入數(shù)據(jù)庫。
3.2 計(jì)算結(jié)構(gòu)圖
計(jì)算服務(wù)器由一個(gè)控制器和若干個(gè)節(jié)點(diǎn)組成,如圖3,節(jié)點(diǎn)從控制器獲取任務(wù)后,計(jì)算并將結(jié)果寫入數(shù)據(jù)庫。同時(shí),節(jié)點(diǎn)會(huì)記錄每個(gè)算法的運(yùn)行時(shí)間,包括CPU時(shí)間與IO時(shí)間,以便于以后的調(diào)度。
控制器起到橋梁的作用,用來連接Web服務(wù)器和計(jì)算節(jié)點(diǎn)。其本身不進(jìn)行運(yùn)算,它將Web服務(wù)器發(fā)來的計(jì)算請(qǐng)求,分發(fā)給各個(gè)運(yùn)算節(jié)點(diǎn),由各個(gè)節(jié)點(diǎn)進(jìn)行具體運(yùn)算。
計(jì)算節(jié)點(diǎn)將包括兩個(gè)功能:
(1)任務(wù)調(diào)度(節(jié)點(diǎn)內(nèi))。
(2)對(duì)算法進(jìn)程使用資源情況進(jìn)行記錄。
控制器起到橋梁的作用,用來連接Web服務(wù)器和計(jì)算節(jié)點(diǎn)。其本身不進(jìn)行運(yùn)算,它將Web服務(wù)器發(fā)來的計(jì)算請(qǐng)求分發(fā)給各個(gè)運(yùn)算節(jié)點(diǎn),由各個(gè)節(jié)點(diǎn)進(jìn)行具體運(yùn)算。分發(fā)任務(wù)時(shí),控制器需要考慮各個(gè)節(jié)點(diǎn)間的負(fù)載平衡,并且要保證實(shí)時(shí)要求比較高的任務(wù)先得到執(zhí)行??刂破骱凸?jié)點(diǎn)、Web服務(wù)器之間的接口使用RMI的方式實(shí)現(xiàn)。控制器發(fā)布一個(gè)Control對(duì)象,節(jié)點(diǎn)和Web服務(wù)器可以連接到這個(gè)對(duì)象。
計(jì)算節(jié)點(diǎn)將包括兩個(gè)功能:
(1)任務(wù)調(diào)度(節(jié)點(diǎn)內(nèi))。由于算法可能涉及很大的數(shù)據(jù)量傳輸和計(jì)算,要充分利用計(jì)算節(jié)點(diǎn)的資源,把算法分為CPU密集型和I/O密集型。當(dāng)CPU空閑,優(yōu)先調(diào)度CPU密集型算法;當(dāng)CPU負(fù)載不高,調(diào)度I/O密集型算法;當(dāng)CPU負(fù)載過高,等待已有算法計(jì)算結(jié)束。
(2)對(duì)算法進(jìn)程使用資源情況進(jìn)行記錄。
4 數(shù)據(jù)分析算法
根據(jù)數(shù)據(jù)類型,算法需要分成很多種類,雖然目的類似,但算法完成過程不同。影響算法種類的因素很多,如參數(shù)的個(gè)數(shù)、參數(shù)的屬性(獨(dú)立的或是不獨(dú)立的,可衡量的或是不可衡量的)、數(shù)據(jù)的丟失等,目前該系統(tǒng)實(shí)現(xiàn)了一種算法,方差分析(Anova)[5]。
4.1 方差分析原理
本系統(tǒng)采用了方差分析來進(jìn)行銷售數(shù)據(jù)的計(jì)算分析,其原理闡述如下:
數(shù)據(jù)說明:數(shù)據(jù)有二列,第一列為固定因素A,第二列為觀察值Y,固定因素A有p個(gè)水平,每個(gè)水平重復(fù)試驗(yàn)了m次。
計(jì)算中間值PQR:
[P=1pm(i=1pl=1my2il)],[Q=1mi=1p(l=1my2il)],[R=i=1pl=1my2il]
計(jì)算SA、SE和ST:
[SA=Q-P],[SE=R-Q],[ST=R-P]
計(jì)算自由度和顯著性:
[fa=p-1],[fe=p(m-1)],[ft=pm-1],[Se=Se/fe],[Sa=SA/fa]
[F=Sa/Se],[p=1-fcdf(F,fa,fe)]
返回結(jié)果(result):
[來源 平方和 自由度 均方 F值 顯著性 A [SA] [fa] [Sa] [F] [p] Error [Se] [fe] [Se] Total [ST] [ft] ]
4.2 算法實(shí)現(xiàn)
本系統(tǒng)首先數(shù)據(jù)存儲(chǔ)在MongoDB數(shù)據(jù)庫,依靠數(shù)據(jù)庫自身攜帶的查詢函數(shù),快速準(zhǔn)確地計(jì)算出中間變量。最后,再對(duì)中間結(jié)果進(jìn)行運(yùn)算,計(jì)算出最終結(jié)果,并且存入數(shù)據(jù)庫,然后讓服務(wù)器處理用戶請(qǐng)求。MongDB數(shù)據(jù)庫自身帶有find、distinct、count函數(shù),尤其是mapReduce函數(shù),這是計(jì)算中間變量的關(guān)鍵,該算法在計(jì)算中間變量P、Q、R時(shí),并不將數(shù)據(jù)讀取到本地計(jì)算,而是采用數(shù)據(jù)庫的mapReduce方法,直接由數(shù)據(jù)庫計(jì)算出這三個(gè)中間變量。
5 小結(jié)
本系統(tǒng)目的是為電子商務(wù)網(wǎng)站提供一個(gè)一站式、易于使用的銷售數(shù)據(jù)分析工具。用戶可以向系統(tǒng)中導(dǎo)入過往的銷售數(shù)據(jù)、實(shí)時(shí)添加新的數(shù)據(jù),并且能發(fā)出數(shù)據(jù)計(jì)算請(qǐng)求,分析某幾項(xiàng)數(shù)據(jù)中的內(nèi)在關(guān)系。用戶還可以指定監(jiān)控某個(gè)分析結(jié)果,系統(tǒng)會(huì)定時(shí)根據(jù)新數(shù)據(jù)重新計(jì)算,一旦結(jié)果達(dá)到用戶的要求,便通知用戶。當(dāng)系統(tǒng)的運(yùn)算力不足時(shí),可以添加一臺(tái)或多臺(tái)服務(wù)器作為運(yùn)算節(jié)點(diǎn),通過分布式計(jì)算的方式提高響應(yīng)速度。采用方差分析作為數(shù)據(jù)分析的算法,并使用MongDB來進(jìn)行方差分析計(jì)算,提高系統(tǒng)的速度。
參考文獻(xiàn):
[1] Wes McKinney.利用Python進(jìn)行數(shù)據(jù)分析[M].北京:機(jī)械工業(yè)出版社,2010.
[2] Eric Matthes,Bradley N Miller. Python編程從入門到實(shí)踐[M].北京:人民郵電出版社,2012.
[3] 張?chǎng)┙?,蔡佳?MongoDB從入門到商業(yè)實(shí)戰(zhàn)[M].北京:電子工業(yè)出版社,2019.
[4] 李智慧.大型網(wǎng)站技術(shù)架構(gòu)核心原理與案例分析[M].北京:電子工業(yè)出版社,2013.
[5] 王松桂.線性統(tǒng)計(jì)模型線性回歸與方差分析[M].北京:高等教育出版社,2009.
【通聯(lián)編輯:代影】