王子炫,許林瑞,曾媛,黃晟祺,汪玉笳,李功權(quán)
(長(zhǎng)江大學(xué)地球科學(xué)學(xué)院,武漢430100)
在人們物質(zhì)生活不斷提高的今天,人們?cè)絹?lái)越關(guān)心自己的身體健康,去醫(yī)院檢查身體與看病的人越來(lái)越多。與此同時(shí),黨的十九大明確指出:“全面建立中國(guó)特色基本醫(yī)療衛(wèi)生制度、醫(yī)療保障制度和優(yōu)質(zhì)高效的醫(yī)療衛(wèi)生服務(wù)體系”。在進(jìn)入移動(dòng)互聯(lián)網(wǎng)時(shí)代后[1],“互聯(lián)網(wǎng)+”這種新的經(jīng)濟(jì)形態(tài)的飛速發(fā)展,以及“智慧醫(yī)療”這一概念的提出[2],使得各種基于互聯(lián)網(wǎng)的服務(wù)產(chǎn)品層出不窮,產(chǎn)生了眾多“互聯(lián)網(wǎng)+醫(yī)療健康”的智能醫(yī)療服務(wù)系統(tǒng)。加之微信公眾平臺(tái)在2012年開(kāi)放了第三方開(kāi)發(fā)接口,這就意味著應(yīng)用接口開(kāi)放了[3]。
在這樣的大環(huán)境下,團(tuán)隊(duì)開(kāi)發(fā)出了基于GIS的就醫(yī)無(wú)憂服務(wù)系統(tǒng),該系統(tǒng)是一個(gè)基于SSM框架的Web系統(tǒng),可以實(shí)現(xiàn)查詢、人流分析展示、顯示醫(yī)院模型、數(shù)據(jù)上傳、模擬預(yù)測(cè)等功能,具有操作方便靈活、圖形化信息屬性、顯示直觀清晰的特點(diǎn)。
醫(yī)院每天的就診人數(shù)是一個(gè)重要的數(shù)據(jù),該數(shù)據(jù)作為醫(yī)院業(yè)務(wù)水平的判斷標(biāo)準(zhǔn)之一,也間接反映了去醫(yī)院掛號(hào)排隊(duì)的時(shí)間。因此,在基于GIS的醫(yī)療服務(wù)系統(tǒng)中,開(kāi)發(fā)了數(shù)據(jù)上傳和模擬預(yù)測(cè)這兩大功能,可以看到某醫(yī)院前一周的歷史就診人數(shù)以及預(yù)測(cè)的未來(lái)7天的就診人數(shù)。這樣,人們就可以根據(jù)系統(tǒng)預(yù)測(cè)的醫(yī)院就診人數(shù)來(lái)計(jì)劃安排就醫(yī)或體檢的行程。該功能從已知的每日醫(yī)院就診人數(shù)出發(fā),通過(guò)建立數(shù)學(xué)模型來(lái)預(yù)測(cè)未來(lái)一周內(nèi)醫(yī)院的就診人數(shù)。
最為廣泛使用的便是最小二乘法,它通過(guò)尋找殘差平方和的最小值來(lái)尋找數(shù)據(jù)的最佳函數(shù)匹配[4]。最早使用最小二乘法是在1801年,天文學(xué)家朱賽普·皮亞齊發(fā)現(xiàn)第一顆小行星——谷神星,數(shù)學(xué)家高斯發(fā)明最小二乘法預(yù)測(cè)了谷神星的精確位置。之后,最小二乘法被應(yīng)用于機(jī)器學(xué)習(xí)與曲線擬合等諸多科學(xué)領(lǐng)域,具有簡(jiǎn)便高效、精準(zhǔn)性高等優(yōu)勢(shì)。
基于GIS的就醫(yī)無(wú)憂服務(wù)系統(tǒng)采用SSM框架,SSM框架包含Spring、Spring MVC以及MyBatis這3部分。Spring由IoC和AOP組成[5],用于程序的解耦;Spring MVC是Spring的一個(gè)子框架,用于簡(jiǎn)化Web開(kāi)發(fā);MyBatis封裝了JDBC,用于操作數(shù)據(jù)庫(kù)。這三者進(jìn)行整合便形成了SSM框架。
這三者之間的關(guān)系就是,用戶向Spring MVC發(fā)送請(qǐng)求,由Spring MVC判斷是否需要從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù),如果需要,MyBatis會(huì)獲取數(shù)據(jù)返還給邏輯層,之后Spring MVC將得到的數(shù)據(jù)交由Dispatcher進(jìn)行渲染,最后展現(xiàn)用戶界面。
傳統(tǒng)的數(shù)據(jù)管理模式都是將數(shù)據(jù)以文件形式存儲(chǔ),所有數(shù)據(jù)都被放在一個(gè)大倉(cāng)庫(kù)內(nèi),而關(guān)系數(shù)據(jù)庫(kù)將數(shù)據(jù)保存在不同的表中,這樣不僅提高了讀取速度,也讓數(shù)據(jù)庫(kù)具有較高的靈活性。MySQL是一個(gè)開(kāi)源的關(guān)系型數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)相對(duì)于其他數(shù)據(jù)庫(kù)來(lái)說(shuō)體積更小,并且具有很好的移植性[7]。
MySQL是一種在服務(wù)器上運(yùn)行的數(shù)據(jù)庫(kù)系統(tǒng),它幾乎可以在所有平臺(tái)上運(yùn)營(yíng),包括UNIX、Linux、Windows,而且體積小到甚至可以安裝服務(wù)器在自己的PC中,可靠、可拓展、運(yùn)行速度快,是目前為止在Web應(yīng)用方面最好的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)。
首先,獲取到數(shù)據(jù),這些數(shù)據(jù)包含兩個(gè)變量,即自變量x和因變量y,在坐標(biāo)系中將這些成對(duì)的數(shù)據(jù)表示成(x,y)的點(diǎn)。但是這些點(diǎn)成離散分布,依靠?jī)H有的相關(guān)關(guān)系并不能計(jì)算出經(jīng)過(guò)這些點(diǎn)的函數(shù),所以,需要引入函數(shù)f(x i,θ)近似模擬對(duì)應(yīng)關(guān)系[8]。當(dāng)真實(shí)值與計(jì)算值的差平方最小,即殘差的平方和最小時(shí),擬合效果最好,殘差的平方和用δ表示。當(dāng)θ的取值使得δ的值最小時(shí),f(x i,θ)就是根據(jù)數(shù)據(jù)擬合出來(lái)的回歸方程。

通常使用最小二乘法進(jìn)行擬合時(shí),要讓?duì)膶?duì)θ求偏導(dǎo),再使用迭代法計(jì)算出θ,但是在預(yù)測(cè)醫(yī)院就診人數(shù)這個(gè)模型中,數(shù)據(jù)關(guān)系較為簡(jiǎn)單,因此,我們引入的對(duì)應(yīng)關(guān)系為一元線性的,f(x i,θ)的形式變成了(1)式。
需要擬合的線性回歸方程:

其中,式(2)可化簡(jiǎn)成下式:

擬合出來(lái)的回歸方程是滿足殘差平方和最小的,這樣的回歸方程預(yù)測(cè)的結(jié)果最為準(zhǔn)確。
Quartz是一個(gè)完全由Java編寫的開(kāi)源作業(yè)調(diào)度框架,為在Java應(yīng)用程序中進(jìn)行作業(yè)調(diào)度提供了簡(jiǎn)單強(qiáng)大的機(jī)制。Quartz允許程序開(kāi)發(fā)人員根據(jù)時(shí)間的間隔來(lái)調(diào)度作業(yè),可以設(shè)置觸發(fā)器規(guī)定在相同的時(shí)間間隔內(nèi)運(yùn)行同一個(gè)模塊,并且實(shí)現(xiàn)了作業(yè)和觸發(fā)器的多對(duì)多的關(guān)系,還能把多個(gè)作業(yè)與不同的觸發(fā)器關(guān)聯(lián)。其12個(gè)包中組織有300個(gè)左右的Java類和接口,功能眾多。
Quartz框架的核心是調(diào)度器,調(diào)度器是負(fù)責(zé)管理Quartz應(yīng)用運(yùn)行時(shí)環(huán)境的重要工具。
將從網(wǎng)上獲取到的某醫(yī)院近10天的數(shù)據(jù)制成表1,為了計(jì)算方便,我們使用日期編號(hào)替代日期,3月1日編號(hào)為初始值1,3月2日編號(hào)為2,接下來(lái)以此類推。

表1 2021年3月1日—3月10日某醫(yī)院就診人數(shù)
從數(shù)據(jù)中可以看出,隨著時(shí)間的變化,醫(yī)院的就診人數(shù)有著增加的趨勢(shì)。我們將日期編號(hào)作為x軸,將就診人數(shù)作為y軸。制作出就診人數(shù)—日期散點(diǎn)圖。

圖1 2021年3月1日—3月10日就診人數(shù)—日期散點(diǎn)圖
根據(jù)散點(diǎn)圖,使用最小二乘法進(jìn)行擬合,計(jì)算出線性回歸方程。將數(shù)據(jù)代入求出的值分別是8.78和520.33。
由此,我們得到關(guān)于日期和就診人數(shù)的回歸方程:

知道最小二乘法的原理后,需要在系統(tǒng)中實(shí)現(xiàn)預(yù)測(cè)功能。在后端中,我們使用Java語(yǔ)言進(jìn)行代碼的編寫,創(chuàng)建LineRegressionUtils類來(lái)存放最小二乘這個(gè)功能。聲明calCoefficientes方法用于計(jì)算(4)式中的各項(xiàng)值,聲明train方法計(jì)算數(shù)據(jù)總量并調(diào)用calCoefficientes方法,最后聲明predict方法輸出計(jì)算結(jié)果,即:

僅僅有一個(gè)類是不夠?qū)崿F(xiàn)對(duì)醫(yī)院就診人數(shù)預(yù)測(cè)這個(gè)功能的,我們使用了開(kāi)源作業(yè)調(diào)度框架Quartz構(gòu)建了一個(gè)觸發(fā)器,使得該程序在每天的零點(diǎn)執(zhí)行一次,來(lái)預(yù)測(cè)今后幾天的醫(yī)院就診人數(shù)。
整個(gè)數(shù)據(jù)上傳與模擬預(yù)測(cè)的流程是先使用Calendar.getInstance方法獲取日歷數(shù)據(jù),之后使用.add(Calendar.DATE,-8)方法獲取當(dāng)日前7天的日期數(shù)據(jù),并將其轉(zhuǎn)化成double型數(shù)據(jù)類型,使用predictService.findMemberCountByDays方法來(lái)根據(jù)傳入的日期查詢相對(duì)應(yīng)的就診人數(shù),并將其轉(zhuǎn)化成double型數(shù)據(jù)類型。有了這些數(shù)據(jù)后調(diào)用之前的編寫的LineRegressionUtils.train(x,y)方法計(jì)算回歸曲線。之后按照同樣的方法獲取與處理后7天的日期數(shù)據(jù),并通過(guò)Dubbo遠(yuǎn)程調(diào)用服務(wù)實(shí)現(xiàn)預(yù)測(cè)數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)。
在本文中,基于GIS的就醫(yī)無(wú)憂服務(wù)系統(tǒng)采用最小二乘法對(duì)醫(yī)院未來(lái)7天的就診人數(shù)進(jìn)行了模擬預(yù)測(cè)。醫(yī)院的就診人數(shù)是一個(gè)不確定的量,但是可以根據(jù)往日的數(shù)據(jù),使用最小二乘法尋找到就診人數(shù)與日期的相關(guān)關(guān)系,從而以此為根據(jù)進(jìn)行預(yù)測(cè)。