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