孟菊明,盧 靜,張 朔,張洪波,方美玉
(浙江外國語學院科學技術學院,浙江杭州310012)
中藥材是我國最具國際比較優(yōu)勢的產(chǎn)業(yè)之一,然而在傳統(tǒng)交易模式下,中藥材流通環(huán)節(jié)過多,流通標準體系不夠完善,質(zhì)量可控性差.這嚴重制約著我國中藥材產(chǎn)業(yè)的發(fā)展.近年來,我國中藥材電子商務平臺開始推廣,其中規(guī)模較大、運作較為成功的有中藥買買通、中藥材天地網(wǎng)、東方中藥材網(wǎng)等,這些電子商務平臺對于有效整合資源、完善中藥材流通產(chǎn)業(yè)鏈等具有積極作用.對于中藥材電子商務企業(yè)而言,怎樣確定藥物進貨比例是一個關鍵的問題.在這種背景下,我們構(gòu)建了一個中藥處方網(wǎng),采用Apriori挖掘算法預測藥材進貨比例以解決藥商進貨量預測難等問題.
本網(wǎng)站數(shù)據(jù)庫采用由Microsoft公司推出的關系數(shù)據(jù)庫系統(tǒng)SQLServer 2005;編程工具采用MyE-clipse7.1;WEB服務器使用開源的Apache Tomcat 6.0;網(wǎng)頁排版采用DIV+CSS技術.此外,網(wǎng)站采用Apriori算法預測消費者需要購買的熱門處方和中藥數(shù)量.
中藥處方網(wǎng)主要包括網(wǎng)站前臺、網(wǎng)站后臺、關聯(lián)規(guī)則挖掘工具和進貨量比控制等功能模塊,各模塊的邏輯關系見圖1.其中,網(wǎng)站前臺包括用戶注冊、登陸、在線購物、處方查詢、處方搜索、瀏覽藥方等功能;網(wǎng)站后臺包括用戶管理、處方添加、處方刪除、處方修改、處方插入、在線醫(yī)師等操作;關聯(lián)規(guī)則挖掘工具是一個建立在前臺用戶交易數(shù)據(jù)基礎上的數(shù)據(jù)分析工具;進貨量比控制模塊的輸入數(shù)據(jù)來源于關聯(lián)規(guī)則工具輸出的關聯(lián)規(guī)則.
圖1 中藥處方網(wǎng)總體功能圖及其邏輯關系
用例圖由參與者(Actor)、用例(Use Case)以及它們之間的關系構(gòu)成[1].中藥處方網(wǎng)的用戶和管理員都是網(wǎng)站參與者,其中管理員用例圖見圖2.管理員通過管理員界面登陸后實現(xiàn)商品管理、庫存管理、訂單管理和用戶管理、個人資料維護等管理功能.
圖2 管理員用例圖
考慮到需要實現(xiàn)商品管理和用戶管理,本網(wǎng)站數(shù)據(jù)庫包括用戶表、商品表、歷史記錄表等.用戶表包括用戶名、用戶ID、密碼、郵編、地址、聯(lián)系電話等字段;商品表包括商品名、商品編號、種類、庫存、單價等字段;歷史記錄表包括用戶ID、商品編號、數(shù)量、價格等字段.
本網(wǎng)站采用自主開發(fā)的挖掘工具(Association Rules Data Mining Tool,簡稱ARDMTool)收集用戶購買藥方的數(shù)據(jù),并對用戶數(shù)據(jù)進行挖掘,輸出關聯(lián)規(guī)則指導貨架上貨物的擺放規(guī)律.ARDMTool的基礎算法是Apriori算法.Apriori關聯(lián)規(guī)則挖掘算法的思想起源于啤酒與尿布的故事,在美國有嬰兒的家庭中,一般都是母親在家中照看嬰兒,年輕的父親前去超市購買尿布.父親在購買尿布的同時,往往會順便為自己購買啤酒,這樣啤酒與尿布這兩件看上去不相干的商品經(jīng)常會出現(xiàn)在同一個購物籃的現(xiàn)象[2].Apriori算法大致分兩步執(zhí)行:第一步,從事務數(shù)據(jù)庫中挖掘出所有頻繁項集.首先挖掘出頻繁1-項集;然后采用遞推的方式挖掘頻繁k-項集(k>1).第二步,在挖掘出候選頻繁k-項集(Ck)之后,根據(jù)最小置信度(Minimum Confidence)篩選得到頻繁k-項集,合并全部的頻繁k-項集(k>0)得到所謂的關聯(lián)規(guī)則[3].
挖掘工具ARDMTool以顧客購買處方的交易記錄作為基礎數(shù)據(jù),根據(jù)交易記錄中各種處方同時出現(xiàn)在一次交易行為中的概率為輸出依據(jù),輸出符合支持度和置信度的規(guī)則.挖掘工具ARDMTool首先創(chuàng)建兩個關鍵類,一個是Item類(處方類),另一個是Rule類(規(guī)則類).Item類包括兩個屬性,它們分別為處方編號item_no和處方名item_name;另外包括一些列處方操作的方法,如增加交易記錄addTransaction(intras_no:int)、獲取交易總條數(shù)getTransSet()等(見圖3).Rule類包括支持度和置信度兩個屬性;還包括一系列方法如規(guī)則的獲取、比較,置信度和支持度的修改等(見圖4).
圖3 Item類
圖4 Rule類
挖掘工具算法應用步驟如下:
(1)處方庫處方類型設定.網(wǎng)站將處方類型設置為以下類型:風寒型(感冒),風熱型(感冒),風寒襲肺型(咳嗽),風熱犯肺型(咳嗽),燥邪傷肺型(咳嗽),冷哮(發(fā)作期)(哮喘),熱哮(發(fā)作期)(哮喘),肺氣虧虛型(緩解期)(哮喘),脾氣虧虛型(緩解期)(哮喘),肝火犯肺型(咯血),陰虛火旺型(咯血),寒濕困脾型(泄瀉),腸道濕熱型(泄瀉),食積胃腸型(泄瀉),實熱便秘(便秘),氣滯便秘(便秘),陽虛便秘(便秘),胃熱熾盛型(吐血),瘀阻胃絡型(吐血),胃腸積熱型(便血),濕熱蘊結(jié)型(便血),肝膽濕熱型(黃痘),濕困脾胃型(黃痘),肝胃氣滯型(胃腕痛).
(2)設最小支持度(Minimum Support)為10%,最小置信度(Minimum Confidence)為70%.
(3)設有10條用戶交易明細(見圖5).
圖5 交易明細①
(4)輸出規(guī)則(見圖6).
(5)根據(jù)圖6的關聯(lián)規(guī)則,進貨量控制模塊自動計算進貨數(shù)量.風熱型(感冒)——風寒型(感冒)處方的購買支持度為10%,則從這條規(guī)則知道,如果當天進貨為10000副處方,則至少要有1000副風熱型(感冒).又因為挖掘出的規(guī)則風熱型(感冒)——風寒型(感冒)的置信度為100%,所以此風寒型(感冒)處方也至少要1000副.同理風寒型(感冒)處方為3000副,風熱犯肺型(咳嗽)處方為3000×0.75=2250副.總計,風熱型(感冒)處方1000副,風寒型(感冒)處方為4000副,風熱犯肺型(咳嗽)處方為2250副,其它2750副.
圖6 輸出規(guī)則
(6)根據(jù)用戶交易數(shù)據(jù)自動調(diào)整貨架處方擺放位置.由圖6的輸出規(guī)則知道購買風熱型(感冒)處方的購買者100%購買風寒型(感冒)處方,購買風寒型(感冒)處方的75%購買風熱犯肺型(咳嗽)處方,又計算得出風寒型(感冒)處方為4000副,風熱型(感冒)處方1000副,風熱犯肺型(咳嗽)2250副,因此顯示頁面的第一行顯眼陳列區(qū)域擺放風寒型(感冒)處方,中間擺放風熱型(感冒)處方,同時在最右側(cè)擺放風熱犯肺型(咳嗽)處方.當然第二天經(jīng)過交易之后交易明細產(chǎn)生了變化,挖掘規(guī)則也會因此發(fā)生變化,那么顯示頁面會自動隨著規(guī)則的不同而在前面幾行中藥陳列區(qū)域調(diào)整處方顯示順序.
利用JDBC技術進行數(shù)據(jù)庫連接是整個網(wǎng)站實現(xiàn)的關鍵步驟之一[4],如界面的藥品展示與查詢,后臺藥品的添加與刪除,挖掘工具規(guī)則的挖掘,原始數(shù)據(jù)的生成和輸出等.數(shù)據(jù)庫的連接分為以下五步:
第一步,加載SQLServer驅(qū)動,這里使用的是 Sqlserver2005,驅(qū)動名稱是com.microsoft.sqlserver.jdbc.SQLServerDriver,通過 Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”)來加載.
第二步,通過DriverManager類調(diào)用DriverManager.getConnection(url,用戶名,密碼)方法實現(xiàn)連接.
第三步,連接之后通過第二步返回的Connection連接對象con可以創(chuàng)建語句對象,為網(wǎng)站的數(shù)據(jù)庫查詢、插入、刪除等操作做準備.實現(xiàn)語句為:連接對象.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY).
第四步,第三步返回的語句對象stmt調(diào)用Statement的executeQuery(sql)執(zhí)行數(shù)據(jù)庫查詢操作.當然,如果是寫入操作,調(diào)用的操作方法為executeUpdate.
第五步,通過Resultset類的getString等方法獲取數(shù)據(jù)庫查詢到的記錄集合,并通過動態(tài)JSP頁面將結(jié)果呈現(xiàn)給用戶.
關聯(lián)規(guī)則需要獲取的參數(shù)包括處方名稱、交易條數(shù)、最小支持度和最小置信度.根據(jù)這些關鍵參數(shù),系統(tǒng)判斷交易處方的交易頻繁項集,如果大于最小支持度和最小置信度,則利用一個向量Vector將該處方追加到向量末尾,并且形成一條新的規(guī)則添加到規(guī)則向量,最后輸出規(guī)則庫中的所有規(guī)則.符合支持度和置信度的關聯(lián)規(guī)則形成過程的算法如下:
i從0到處方總條數(shù)-1循環(huán)
基于Apriori算法的處方挖掘工具通過收集用戶購買藥方的信息,對用戶交易數(shù)據(jù)進行挖掘,輸出商品關聯(lián)規(guī)則,有效控制了各種處方藥物的進貨量比和網(wǎng)站首頁的貨架處方排列規(guī)律.這不僅實現(xiàn)了藥物貨架處方的合理擺放,而且一定程度避免了處方短缺、藥品囤積過多、藥物過期浪費等現(xiàn)象.由于Apriori挖掘算法本身存在冷啟動、數(shù)據(jù)稀疏等問題,因此接下來需要對其進行優(yōu)化.
注釋:
①圖5為截屏所得,因此部分交易明細顯示不全.
[1]陳磊.用例圖到順序圖轉(zhuǎn)換的研究[D].西安:西安電子科技大學,2009:9-10.
[2]高勇.啤酒與尿布:神奇的購物籃分析[M].北京:清華大學出版社,2008:11-16.
[3]牛麗敏.Apriori算法分析與改進綜述[J].桂林電子科技大學學報,2007,27(1):27-30.
[4]鄭文娟.基于JSP的數(shù)據(jù)庫連接技術探索[J].湖北民族學院學報:自然科學版,2013,31(1):69-70.