王子炫,許林瑞,曾媛,黃晟祺,汪玉笳,李功權(quán)
(長江大學(xué)地球科學(xué)學(xué)院,武漢430100)
在人們物質(zhì)生活不斷提高的今天,人們越來越關(guān)心自己的身體健康,去醫(yī)院檢查身體與看病的人越來越多。與此同時,黨的十九大明確指出:“全面建立中國特色基本醫(yī)療衛(wèi)生制度、醫(yī)療保障制度和優(yōu)質(zhì)高效的醫(yī)療衛(wèi)生服務(wù)體系”。在進(jìn)入移動互聯(lián)網(wǎng)時代后[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)。加之微信公眾平臺在2012年開放了第三方開發(fā)接口,這就意味著應(yīng)用接口開放了[3]。
在這樣的大環(huán)境下,團(tuán)隊開發(fā)出了基于GIS的就醫(yī)無憂服務(wù)系統(tǒng),該系統(tǒng)是一個基于SSM框架的Web系統(tǒng),可以實(shí)現(xiàn)查詢、人流分析展示、顯示醫(yī)院模型、數(shù)據(jù)上傳、模擬預(yù)測等功能,具有操作方便靈活、圖形化信息屬性、顯示直觀清晰的特點(diǎn)。
醫(yī)院每天的就診人數(shù)是一個重要的數(shù)據(jù),該數(shù)據(jù)作為醫(yī)院業(yè)務(wù)水平的判斷標(biāo)準(zhǔn)之一,也間接反映了去醫(yī)院掛號排隊的時間。因此,在基于GIS的醫(yī)療服務(wù)系統(tǒng)中,開發(fā)了數(shù)據(jù)上傳和模擬預(yù)測這兩大功能,可以看到某醫(yī)院前一周的歷史就診人數(shù)以及預(yù)測的未來7天的就診人數(shù)。這樣,人們就可以根據(jù)系統(tǒng)預(yù)測的醫(yī)院就診人數(shù)來計劃安排就醫(yī)或體檢的行程。該功能從已知的每日醫(yī)院就診人數(shù)出發(fā),通過建立數(shù)學(xué)模型來預(yù)測未來一周內(nèi)醫(yī)院的就診人數(shù)。
最為廣泛使用的便是最小二乘法,它通過尋找殘差平方和的最小值來尋找數(shù)據(jù)的最佳函數(shù)匹配[4]。最早使用最小二乘法是在1801年,天文學(xué)家朱賽普·皮亞齊發(fā)現(xiàn)第一顆小行星——谷神星,數(shù)學(xué)家高斯發(fā)明最小二乘法預(yù)測了谷神星的精確位置。之后,最小二乘法被應(yīng)用于機(jī)器學(xué)習(xí)與曲線擬合等諸多科學(xué)領(lǐng)域,具有簡便高效、精準(zhǔn)性高等優(yōu)勢。
基于GIS的就醫(yī)無憂服務(wù)系統(tǒng)采用SSM框架,SSM框架包含Spring、Spring MVC以及MyBatis這3部分。Spring由IoC和AOP組成[5],用于程序的解耦;Spring MVC是Spring的一個子框架,用于簡化Web開發(fā);MyBatis封裝了JDBC,用于操作數(shù)據(jù)庫。這三者進(jìn)行整合便形成了SSM框架。
這三者之間的關(guān)系就是,用戶向Spring MVC發(fā)送請求,由Spring MVC判斷是否需要從數(shù)據(jù)庫中獲取數(shù)據(jù),如果需要,MyBatis會獲取數(shù)據(jù)返還給邏輯層,之后Spring MVC將得到的數(shù)據(jù)交由Dispatcher進(jìn)行渲染,最后展現(xiàn)用戶界面。
傳統(tǒng)的數(shù)據(jù)管理模式都是將數(shù)據(jù)以文件形式存儲,所有數(shù)據(jù)都被放在一個大倉庫內(nèi),而關(guān)系數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,這樣不僅提高了讀取速度,也讓數(shù)據(jù)庫具有較高的靈活性。MySQL是一個開源的關(guān)系型數(shù)據(jù)庫,該數(shù)據(jù)庫相對于其他數(shù)據(jù)庫來說體積更小,并且具有很好的移植性[7]。
MySQL是一種在服務(wù)器上運(yùn)行的數(shù)據(jù)庫系統(tǒng),它幾乎可以在所有平臺上運(yùn)營,包括UNIX、Linux、Windows,而且體積小到甚至可以安裝服務(wù)器在自己的PC中,可靠、可拓展、運(yùn)行速度快,是目前為止在Web應(yīng)用方面最好的關(guān)系數(shù)據(jù)庫管理系統(tǒng)。
首先,獲取到數(shù)據(jù),這些數(shù)據(jù)包含兩個變量,即自變量x和因變量y,在坐標(biāo)系中將這些成對的數(shù)據(jù)表示成(x,y)的點(diǎn)。但是這些點(diǎn)成離散分布,依靠僅有的相關(guān)關(guān)系并不能計算出經(jīng)過這些點(diǎn)的函數(shù),所以,需要引入函數(shù)f(x i,θ)近似模擬對應(yīng)關(guān)系[8]。當(dāng)真實(shí)值與計算值的差平方最小,即殘差的平方和最小時,擬合效果最好,殘差的平方和用δ表示。當(dāng)θ的取值使得δ的值最小時,f(x i,θ)就是根據(jù)數(shù)據(jù)擬合出來的回歸方程。
通常使用最小二乘法進(jìn)行擬合時,要讓δ對θ求偏導(dǎo),再使用迭代法計算出θ,但是在預(yù)測醫(yī)院就診人數(shù)這個模型中,數(shù)據(jù)關(guān)系較為簡單,因此,我們引入的對應(yīng)關(guān)系為一元線性的,f(x i,θ)的形式變成了(1)式。
需要擬合的線性回歸方程:
其中,式(2)可化簡成下式:
擬合出來的回歸方程是滿足殘差平方和最小的,這樣的回歸方程預(yù)測的結(jié)果最為準(zhǔn)確。
Quartz是一個完全由Java編寫的開源作業(yè)調(diào)度框架,為在Java應(yīng)用程序中進(jìn)行作業(yè)調(diào)度提供了簡單強(qiáng)大的機(jī)制。Quartz允許程序開發(fā)人員根據(jù)時間的間隔來調(diào)度作業(yè),可以設(shè)置觸發(fā)器規(guī)定在相同的時間間隔內(nèi)運(yùn)行同一個模塊,并且實(shí)現(xiàn)了作業(yè)和觸發(fā)器的多對多的關(guān)系,還能把多個作業(yè)與不同的觸發(fā)器關(guān)聯(lián)。其12個包中組織有300個左右的Java類和接口,功能眾多。
Quartz框架的核心是調(diào)度器,調(diào)度器是負(fù)責(zé)管理Quartz應(yīng)用運(yùn)行時環(huán)境的重要工具。
將從網(wǎng)上獲取到的某醫(yī)院近10天的數(shù)據(jù)制成表1,為了計算方便,我們使用日期編號替代日期,3月1日編號為初始值1,3月2日編號為2,接下來以此類推。
表1 2021年3月1日—3月10日某醫(yī)院就診人數(shù)
從數(shù)據(jù)中可以看出,隨著時間的變化,醫(yī)院的就診人數(shù)有著增加的趨勢。我們將日期編號作為x軸,將就診人數(shù)作為y軸。制作出就診人數(shù)—日期散點(diǎn)圖。
圖1 2021年3月1日—3月10日就診人數(shù)—日期散點(diǎn)圖
根據(jù)散點(diǎn)圖,使用最小二乘法進(jìn)行擬合,計算出線性回歸方程。將數(shù)據(jù)代入求出的值分別是8.78和520.33。
由此,我們得到關(guān)于日期和就診人數(shù)的回歸方程:
知道最小二乘法的原理后,需要在系統(tǒng)中實(shí)現(xiàn)預(yù)測功能。在后端中,我們使用Java語言進(jìn)行代碼的編寫,創(chuàng)建LineRegressionUtils類來存放最小二乘這個功能。聲明calCoefficientes方法用于計算(4)式中的各項值,聲明train方法計算數(shù)據(jù)總量并調(diào)用calCoefficientes方法,最后聲明predict方法輸出計算結(jié)果,即:
僅僅有一個類是不夠?qū)崿F(xiàn)對醫(yī)院就診人數(shù)預(yù)測這個功能的,我們使用了開源作業(yè)調(diào)度框架Quartz構(gòu)建了一個觸發(fā)器,使得該程序在每天的零點(diǎn)執(zhí)行一次,來預(yù)測今后幾天的醫(yī)院就診人數(shù)。
整個數(shù)據(jù)上傳與模擬預(yù)測的流程是先使用Calendar.getInstance方法獲取日歷數(shù)據(jù),之后使用.add(Calendar.DATE,-8)方法獲取當(dāng)日前7天的日期數(shù)據(jù),并將其轉(zhuǎn)化成double型數(shù)據(jù)類型,使用predictService.findMemberCountByDays方法來根據(jù)傳入的日期查詢相對應(yīng)的就診人數(shù),并將其轉(zhuǎn)化成double型數(shù)據(jù)類型。有了這些數(shù)據(jù)后調(diào)用之前的編寫的LineRegressionUtils.train(x,y)方法計算回歸曲線。之后按照同樣的方法獲取與處理后7天的日期數(shù)據(jù),并通過Dubbo遠(yuǎn)程調(diào)用服務(wù)實(shí)現(xiàn)預(yù)測數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫。
在本文中,基于GIS的就醫(yī)無憂服務(wù)系統(tǒng)采用最小二乘法對醫(yī)院未來7天的就診人數(shù)進(jìn)行了模擬預(yù)測。醫(yī)院的就診人數(shù)是一個不確定的量,但是可以根據(jù)往日的數(shù)據(jù),使用最小二乘法尋找到就診人數(shù)與日期的相關(guān)關(guān)系,從而以此為根據(jù)進(jìn)行預(yù)測。