方媛,詹鳳,馬多春
(馬鞍山學(xué)院 經(jīng)濟與管理學(xué)院,安徽 馬鞍山 243100)
居民出行調(diào)查是進(jìn)行城市或農(nóng)村交通規(guī)劃、配套設(shè)施規(guī)劃的重要參考依據(jù)。方便高效低成本的采集真實精準(zhǔn)的調(diào)查數(shù)據(jù)是一項重要工作,也是一項重要研究內(nèi)容,數(shù)據(jù)樣本規(guī)模和質(zhì)量直接關(guān)系到后續(xù)的數(shù)據(jù)建模分析。傳統(tǒng)的居民出行調(diào)查方式一般通過居委會或者志愿者上門發(fā)放紙質(zhì)問卷調(diào)查的方式,這種方式需使用大量的社會資源,成本高,且存在調(diào)查效率低下,獲取數(shù)據(jù)樣本有限,數(shù)據(jù)質(zhì)量不高、人工整理數(shù)據(jù)容易出錯等明顯不足。在移動互聯(lián)網(wǎng)技術(shù)高速發(fā)展的今天,使用移動應(yīng)用來獲取居民出行調(diào)查數(shù)據(jù)變得可能。但是使用獨立APP 的方式推廣使用難度過大,使用微信小程序是一個很好的選擇,無須單獨下載安裝應(yīng)用,人人都有微信,通過微信小程序填寫問卷的方式可大大減少人力、物力、時間成本支出,同時充分利用手機定位結(jié)合地圖技術(shù),數(shù)據(jù)質(zhì)量大大提升,高質(zhì)量的數(shù)據(jù)為后續(xù)數(shù)據(jù)特征處理及分析提供有效支持,成為目前主要的調(diào)查方式。
居民出行調(diào)查系統(tǒng)分為前端小程序和后端管理系統(tǒng)。前端小程序是面向調(diào)查對象所設(shè)計的頁面,調(diào)查對象只需通過掃描二維碼即可進(jìn)入小程序頁面,進(jìn)行問卷題目的展示和回答,回答完成后提交問卷,此次調(diào)查結(jié)束。填寫問卷的頁面如圖1所示。
圖1 居民出行調(diào)查小程序
后端管理系統(tǒng)是對完成一次調(diào)查所需的功能及數(shù)據(jù)的管理控制及維護(hù),包含題庫管理、調(diào)查活動管理、組卷管理、問卷數(shù)據(jù)、數(shù)據(jù)分析與可視化、系統(tǒng)管理六大模塊,系統(tǒng)總體功能結(jié)構(gòu)如圖2所示。
圖2 居民出行調(diào)查系統(tǒng)功能結(jié)構(gòu)
該模塊是對居民出行問卷的題目進(jìn)行管理維護(hù),根據(jù)調(diào)查方設(shè)計的問卷題目進(jìn)行錄入維護(hù),也可為調(diào)查方提供歷史調(diào)查題目參考。題庫的類型為選擇題、判斷題、和主觀題。為了調(diào)查的便捷性,原則上不出現(xiàn)主觀題,必須有主觀題的時候,盡可能少。
該模塊對每次的調(diào)查活動進(jìn)行管理維護(hù)。當(dāng)需要調(diào)查時,在此模塊增加一個調(diào)查活動,并設(shè)定調(diào)查活動名稱、此次調(diào)查的目的、人群等信息,并設(shè)定調(diào)查活動的開始時間和結(jié)束時間、區(qū)域范圍等配置信息。活動的開始時間和結(jié)束時間是指根據(jù)調(diào)查方指定的調(diào)查時間范圍來設(shè)定小程序可工作的時間范圍,超過時間,用戶打開小程序時,應(yīng)該提示“本次調(diào)查活動已結(jié)束”。區(qū)域范圍是指根據(jù)調(diào)查方指定的本次調(diào)查地理位置范圍,如經(jīng)度、緯度在什么范圍,用戶進(jìn)入小程序后,可通過獲取手機定位數(shù)據(jù)判斷用戶是否在調(diào)查范圍,不在區(qū)域范圍給出友好提示并退出小程序,在該范圍的可以進(jìn)行問卷填寫。
此模塊根據(jù)題庫生成某次調(diào)查活動的實際問卷,包括選取的題庫中的哪些題目,題目的分類,題目的序號、是否必答等。
該模塊可分頁展示此次調(diào)查所采集到的數(shù)據(jù)。對數(shù)據(jù)提供綜合查詢、數(shù)據(jù)導(dǎo)出功能,以便后續(xù)利用數(shù)據(jù)進(jìn)行高級的多維度數(shù)據(jù)處理和分析。
本模塊可對調(diào)查的進(jìn)展情況進(jìn)行實時數(shù)據(jù)統(tǒng)計,并用柱狀圖、餅圖、散點圖、熱力圖等可視化圖形輸出展示。如日活人數(shù),當(dāng)前采集的數(shù)據(jù)量,每日采集數(shù)據(jù)量對比,每日中不同時段數(shù)據(jù)采集量對比,每道題不同選項分布圖,區(qū)域調(diào)查對象分布熱力圖等基礎(chǔ)統(tǒng)計分析結(jié)果。更個性化的數(shù)據(jù)分析可使用本系統(tǒng)導(dǎo)出數(shù)據(jù)功能后使用專業(yè)工具或者編寫Python 程序處理。
系統(tǒng)管理包括用戶管理、角色管理、權(quán)限管理、功能管理、系統(tǒng)日志等功能。用戶管理是對使用本系統(tǒng)的所有用戶進(jìn)行管理,包括增加、修改、凍結(jié)用戶、分配角色功能。權(quán)限管理是將系統(tǒng)中所有的功能操作權(quán)限進(jìn)行統(tǒng)一管理。一個角色是不同的權(quán)限組合,一個用戶可具備多個角色,即具有這些角色對應(yīng)權(quán)限的總和。操作日志記錄本系統(tǒng)的所有對數(shù)據(jù)變動的操作記錄。服務(wù)。該平臺總體架構(gòu)如圖3所示。
圖3 系統(tǒng)總體架構(gòu)
基于上述架構(gòu)的居民出行調(diào)查系統(tǒng)的后端采用主流的編程語言Java 語言開發(fā),基于Spring boot 框架搭建項目,采用典型的J2EE 三層架構(gòu),將整個業(yè)務(wù)分為表現(xiàn)層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層。表現(xiàn)層就是Web頁面,在本項目中使用Vue.js 引擎渲染頁面,業(yè)務(wù)邏輯層是對數(shù)據(jù)層的操作,對數(shù)據(jù)業(yè)務(wù)邏輯處理,在本項目中由service 組件提供;而數(shù)據(jù)持久層的任務(wù)是將經(jīng)過業(yè)務(wù)處理的數(shù)據(jù)存儲到數(shù)據(jù)庫中去,在本項目中由Mybatis 組件提供數(shù)據(jù)持久化。整個項目采用MVC 設(shè)計模式,分別是模型層、視圖層、和控制層,通過模型層與視圖層的分離,實現(xiàn)各層之間的松耦合,減少層與層之間的依賴,提高代碼復(fù)用性和擴展性,有利于項目開發(fā)的標(biāo)準(zhǔn)化,也便于程序開發(fā)人員明確分工,專注于各層的開發(fā),各層之間通過接口調(diào)用完成業(yè)務(wù)功能。
問卷小程序運行在用戶微信本地,這是一個基于瀏覽器內(nèi)核完全重構(gòu)的內(nèi)置解析器,針對性做了優(yōu)化,并使用微信自定義的標(biāo)記語言wxml 和樣式文件wxss,提升了微信小程序的性能,小程序架構(gòu)如圖4所示。
圖4 微信小程序技術(shù)架構(gòu)
本系統(tǒng)從運行環(huán)境角度分為微信小程序端、PC 端和服務(wù)器端,總體采用B/S 和C/S 混合的架構(gòu)。后端管理平臺運行在瀏覽器,服務(wù)器端統(tǒng)一為微信小程序和瀏覽器提供數(shù)據(jù)
居民出行調(diào)查一般需要在指定時間段內(nèi)完成,所以該小程序具有時間段、用戶訪問量大的典型特征,如何解決短時大并發(fā)訪問是重點關(guān)注的問題。本小程序在架構(gòu)上采用基于無服務(wù)器架構(gòu)的云函數(shù)機制來實現(xiàn)大并發(fā)訪問。微信提供的云函數(shù)即在云端運行的一個Node.js 程序,一個功能即一個云函數(shù),是一個可以獨立運行的單元,獨立部署,每個云函數(shù)分配一定的CPU 和內(nèi)存計算資源,在云端使用docker 容器部署,易于伸縮,當(dāng)用戶訪問量大的時候,可以啟動多個云函數(shù)實例,當(dāng)用戶訪問量下降的時候,可以自動關(guān)閉某些不再活躍的實例,達(dá)到自動伸縮的目的,云函數(shù)按照使用量計費,不使用無須付費,真正實現(xiàn)了云計算按需付費。將小程序前端需要和服務(wù)交互的功能全部拆分成一個個獨立的小功能,每個功能做成一個云函數(shù),由這些云函數(shù)的功能調(diào)用完成整個小程序和后端的交互功能,完成數(shù)據(jù)的持久化存儲。通過任務(wù)拆分分別設(shè)計部署云函數(shù)來實現(xiàn)業(yè)務(wù)解耦,若干的云函數(shù)構(gòu)成一個分布式微服務(wù)系統(tǒng)架構(gòu)。從根本上解決大并發(fā)訪問的問題。小程序云函數(shù)架構(gòu)如圖5所示。
圖5 云函數(shù)架構(gòu)
數(shù)據(jù)庫居民出行調(diào)查系統(tǒng)的核心,是數(shù)據(jù)持久化存儲的地方。數(shù)據(jù)庫設(shè)計(Database Design)是指對于給定的一個業(yè)務(wù)場景,構(gòu)建最優(yōu)的數(shù)據(jù)庫模式,建立數(shù)據(jù)庫并在其基礎(chǔ)至上開發(fā)應(yīng)用系統(tǒng),良好的數(shù)據(jù)庫設(shè)計能夠有效地存儲數(shù)據(jù),滿足用戶的數(shù)據(jù)處理要求。包括數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計、邏輯結(jié)構(gòu)設(shè)計和物理結(jié)構(gòu)設(shè)計。數(shù)據(jù)模型設(shè)計是系統(tǒng)開發(fā)的核心,數(shù)據(jù)庫的設(shè)計若不合理,會導(dǎo)致系統(tǒng)開發(fā)運維的難度增大,數(shù)據(jù)處理性能達(dá)不到要求,數(shù)據(jù)冗余程度高,數(shù)據(jù)的一致性得不到保障,導(dǎo)致軟件項目失敗、程序不可用。本項目數(shù)據(jù)庫的設(shè)計按照第三范式(3NF)要求,盡量減少冗余數(shù)據(jù)的產(chǎn)生,避免客戶端統(tǒng)計數(shù)據(jù)、數(shù)據(jù)分頁,在服務(wù)器端執(zhí)行數(shù)據(jù)分頁、存儲過程計算,避免大表交叉運算,減少設(shè)計表外鏈接。
居民出行調(diào)查系統(tǒng)數(shù)據(jù)模型的設(shè)計重點是題庫數(shù)據(jù)模型、調(diào)查任務(wù)數(shù)據(jù)模型、組卷數(shù)據(jù)模型、用戶回答數(shù)據(jù)模型。題庫數(shù)據(jù)模型記錄題庫的編號、題目、題目類型、題目選項等信息。調(diào)查任務(wù)數(shù)據(jù)模型包括調(diào)查編號、調(diào)查名稱、起始日期、終止日期、題目數(shù)等信息。組卷數(shù)據(jù)模型是題庫與調(diào)查活動的關(guān)聯(lián)關(guān)系模型,包括調(diào)查編號、題目編號。調(diào)查數(shù)據(jù)模型存儲用戶的問卷答案,包括主鍵編號、用戶微信openid、題目編號、選項等。數(shù)據(jù)庫詳細(xì)設(shè)計模型如表1至表4所示。
表1 題庫數(shù)據(jù)模型
表2 調(diào)查活動數(shù)據(jù)模型
表3 組卷數(shù)據(jù)模型
表4 用戶問題選項模型
隨著移動互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,移動應(yīng)用在社會生活的各行各業(yè)得到了廣泛的應(yīng)用,給各行各業(yè)注入了新的活力。小程序由于其具備的不用安裝、隨用隨走的特性相比APP 應(yīng)用更得到廣大用戶青睞。在居民出行調(diào)查場景尤其適合于小程序,相比于傳統(tǒng)的調(diào)查方式而言基于微信平臺的居民出行調(diào)查小程序系統(tǒng)具有高效、方便、快捷、成本低的特點。用戶無須下載安裝APP 應(yīng)用,同時也使得調(diào)查活動宣傳推廣變得更簡單,易于傳播,只需將小程序的二維碼推送給各居民小區(qū)、企業(yè)、學(xué)校群。通過微信小程序的調(diào)查可以在短時間內(nèi)覆蓋大量人群,獲取第一手出行數(shù)據(jù)。結(jié)合手機定位和騰訊地圖API,可以獲得準(zhǔn)確的位置信息,數(shù)據(jù)質(zhì)量大幅提升,而且還能獲得傳統(tǒng)方式無法獲得的數(shù)據(jù)。高質(zhì)量的原始數(shù)據(jù)經(jīng)過簡單清洗后為后續(xù)的特征建模和數(shù)據(jù)分析提供堅實基礎(chǔ)。本文結(jié)合實際需求設(shè)計了基于微信平臺的居民出行調(diào)查小程序前端和后臺功能,詳細(xì)說明了后臺管理系統(tǒng)和小程序的架構(gòu)設(shè)計,并給出了核心數(shù)據(jù)模型設(shè)計,可據(jù)此實現(xiàn)系統(tǒng)程序的開發(fā)。