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