方媛,詹凤,马多春
(马鞍山学院 经济与管理学院,安徽 马鞍山 243100)
居民出行调查是进行城市或农村交通规划、配套设施规划的重要参考依据。方便高效低成本的采集真实精准的调查数据是一项重要工作,也是一项重要研究内容,数据样本规模和质量直接关系到后续的数据建模分析。传统的居民出行调查方式一般通过居委会或者志愿者上门发放纸质问卷调查的方式,这种方式需使用大量的社会资源,成本高,且存在调查效率低下,获取数据样本有限,数据质量不高、人工整理数据容易出错等明显不足。在移动互联网技术高速发展的今天,使用移动应用来获取居民出行调查数据变得可能。但是使用独立APP 的方式推广使用难度过大,使用微信小程序是一个很好的选择,无须单独下载安装应用,人人都有微信,通过微信小程序填写问卷的方式可大大减少人力、物力、时间成本支出,同时充分利用手机定位结合地图技术,数据质量大大提升,高质量的数据为后续数据特征处理及分析提供有效支持,成为目前主要的调查方式。
居民出行调查系统分为前端小程序和后端管理系统。前端小程序是面向调查对象所设计的页面,调查对象只需通过扫描二维码即可进入小程序页面,进行问卷题目的展示和回答,回答完成后提交问卷,此次调查结束。填写问卷的页面如图1所示。
图1 居民出行调查小程序
后端管理系统是对完成一次调查所需的功能及数据的管理控制及维护,包含题库管理、调查活动管理、组卷管理、问卷数据、数据分析与可视化、系统管理六大模块,系统总体功能结构如图2所示。
图2 居民出行调查系统功能结构
该模块是对居民出行问卷的题目进行管理维护,根据调查方设计的问卷题目进行录入维护,也可为调查方提供历史调查题目参考。题库的类型为选择题、判断题、和主观题。为了调查的便捷性,原则上不出现主观题,必须有主观题的时候,尽可能少。
该模块对每次的调查活动进行管理维护。当需要调查时,在此模块增加一个调查活动,并设定调查活动名称、此次调查的目的、人群等信息,并设定调查活动的开始时间和结束时间、区域范围等配置信息。活动的开始时间和结束时间是指根据调查方指定的调查时间范围来设定小程序可工作的时间范围,超过时间,用户打开小程序时,应该提示“本次调查活动已结束”。区域范围是指根据调查方指定的本次调查地理位置范围,如经度、纬度在什么范围,用户进入小程序后,可通过获取手机定位数据判断用户是否在调查范围,不在区域范围给出友好提示并退出小程序,在该范围的可以进行问卷填写。
此模块根据题库生成某次调查活动的实际问卷,包括选取的题库中的哪些题目,题目的分类,题目的序号、是否必答等。
该模块可分页展示此次调查所采集到的数据。对数据提供综合查询、数据导出功能,以便后续利用数据进行高级的多维度数据处理和分析。
本模块可对调查的进展情况进行实时数据统计,并用柱状图、饼图、散点图、热力图等可视化图形输出展示。如日活人数,当前采集的数据量,每日采集数据量对比,每日中不同时段数据采集量对比,每道题不同选项分布图,区域调查对象分布热力图等基础统计分析结果。更个性化的数据分析可使用本系统导出数据功能后使用专业工具或者编写Python 程序处理。
系统管理包括用户管理、角色管理、权限管理、功能管理、系统日志等功能。用户管理是对使用本系统的所有用户进行管理,包括增加、修改、冻结用户、分配角色功能。权限管理是将系统中所有的功能操作权限进行统一管理。一个角色是不同的权限组合,一个用户可具备多个角色,即具有这些角色对应权限的总和。操作日志记录本系统的所有对数据变动的操作记录。服务。该平台总体架构如图3所示。
图3 系统总体架构
基于上述架构的居民出行调查系统的后端采用主流的编程语言Java 语言开发,基于Spring boot 框架搭建项目,采用典型的J2EE 三层架构,将整个业务分为表现层、业务逻辑层和数据访问层。表现层就是Web页面,在本项目中使用Vue.js 引擎渲染页面,业务逻辑层是对数据层的操作,对数据业务逻辑处理,在本项目中由service 组件提供;而数据持久层的任务是将经过业务处理的数据存储到数据库中去,在本项目中由Mybatis 组件提供数据持久化。整个项目采用MVC 设计模式,分别是模型层、视图层、和控制层,通过模型层与视图层的分离,实现各层之间的松耦合,减少层与层之间的依赖,提高代码复用性和扩展性,有利于项目开发的标准化,也便于程序开发人员明确分工,专注于各层的开发,各层之间通过接口调用完成业务功能。
问卷小程序运行在用户微信本地,这是一个基于浏览器内核完全重构的内置解析器,针对性做了优化,并使用微信自定义的标记语言wxml 和样式文件wxss,提升了微信小程序的性能,小程序架构如图4所示。
图4 微信小程序技术架构
本系统从运行环境角度分为微信小程序端、PC 端和服务器端,总体采用B/S 和C/S 混合的架构。后端管理平台运行在浏览器,服务器端统一为微信小程序和浏览器提供数据
居民出行调查一般需要在指定时间段内完成,所以该小程序具有时间段、用户访问量大的典型特征,如何解决短时大并发访问是重点关注的问题。本小程序在架构上采用基于无服务器架构的云函数机制来实现大并发访问。微信提供的云函数即在云端运行的一个Node.js 程序,一个功能即一个云函数,是一个可以独立运行的单元,独立部署,每个云函数分配一定的CPU 和内存计算资源,在云端使用docker 容器部署,易于伸缩,当用户访问量大的时候,可以启动多个云函数实例,当用户访问量下降的时候,可以自动关闭某些不再活跃的实例,达到自动伸缩的目的,云函数按照使用量计费,不使用无须付费,真正实现了云计算按需付费。将小程序前端需要和服务交互的功能全部拆分成一个个独立的小功能,每个功能做成一个云函数,由这些云函数的功能调用完成整个小程序和后端的交互功能,完成数据的持久化存储。通过任务拆分分别设计部署云函数来实现业务解耦,若干的云函数构成一个分布式微服务系统架构。从根本上解决大并发访问的问题。小程序云函数架构如图5所示。
图5 云函数架构
数据库居民出行调查系统的核心,是数据持久化存储的地方。数据库设计(Database Design)是指对于给定的一个业务场景,构建最优的数据库模式,建立数据库并在其基础至上开发应用系统,良好的数据库设计能够有效地存储数据,满足用户的数据处理要求。包括数据库概念结构设计、逻辑结构设计和物理结构设计。数据模型设计是系统开发的核心,数据库的设计若不合理,会导致系统开发运维的难度增大,数据处理性能达不到要求,数据冗余程度高,数据的一致性得不到保障,导致软件项目失败、程序不可用。本项目数据库的设计按照第三范式(3NF)要求,尽量减少冗余数据的产生,避免客户端统计数据、数据分页,在服务器端执行数据分页、存储过程计算,避免大表交叉运算,减少设计表外链接。
居民出行调查系统数据模型的设计重点是题库数据模型、调查任务数据模型、组卷数据模型、用户回答数据模型。题库数据模型记录题库的编号、题目、题目类型、题目选项等信息。调查任务数据模型包括调查编号、调查名称、起始日期、终止日期、题目数等信息。组卷数据模型是题库与调查活动的关联关系模型,包括调查编号、题目编号。调查数据模型存储用户的问卷答案,包括主键编号、用户微信openid、题目编号、选项等。数据库详细设计模型如表1至表4所示。
表1 题库数据模型
表2 调查活动数据模型
表3 组卷数据模型
表4 用户问题选项模型
随着移动互联网技术的快速发展,移动应用在社会生活的各行各业得到了广泛的应用,给各行各业注入了新的活力。小程序由于其具备的不用安装、随用随走的特性相比APP 应用更得到广大用户青睐。在居民出行调查场景尤其适合于小程序,相比于传统的调查方式而言基于微信平台的居民出行调查小程序系统具有高效、方便、快捷、成本低的特点。用户无须下载安装APP 应用,同时也使得调查活动宣传推广变得更简单,易于传播,只需将小程序的二维码推送给各居民小区、企业、学校群。通过微信小程序的调查可以在短时间内覆盖大量人群,获取第一手出行数据。结合手机定位和腾讯地图API,可以获得准确的位置信息,数据质量大幅提升,而且还能获得传统方式无法获得的数据。高质量的原始数据经过简单清洗后为后续的特征建模和数据分析提供坚实基础。本文结合实际需求设计了基于微信平台的居民出行调查小程序前端和后台功能,详细说明了后台管理系统和小程序的架构设计,并给出了核心数据模型设计,可据此实现系统程序的开发。