[关闭]
@HUST-SuWB 2017-02-18T06:46:50.000000Z 字数 47390 阅读 393

基于Mahout的科研管理决策支持系统的设计与实现

其他


摘 要

随着科研管理信息化的持续发展,各类科研数据在近年来迎来了井喷式地增长,随之而来的是对数据分析的急切需求,而传统的人工分析方式和半自动化的管理工具已经无法有效地处理海量数据下的数据分析工作。以统计分析、数据挖掘为代表的现有数据分析方法,均能很好地展示数据某个维度下的特征和价值,然而,这些分析方法往往相对独立,不能很好地支撑决策支持的工作。为了实现对科研管理的决策支持,本课题将数据仓库、联机分析处理、数据挖掘、模型库等技术理念相结合,设计了一个科研管理决策支持系统。
本文首先对国内外决策支持系统的现状进行调研,分析现有系统中存在的不足,并结合科研数据的实际情况,梳理出科研管理决策支持系统的需求;然后,以Oracle数据仓库、SSH框架、Lucene全文检索引擎、OLAP数据统计、前端JS可视化插件等相关技术为基础,以开源的机器学习和数据挖掘框架Mahout为核心,研究了主流的数据挖掘算法,以此为基础实现了一套基础性的决策支持框架,并在科研管理中进行了应用;最后,对科研管理决策支持系统的各个模块进行了详细的测试,以验证功能的准确性和系统的健壮性。本系统完全基于开源框架开发,除开发效率提升外,还有利于系统后续的扩展和维护。
以科研管理决策支持系统为基础,通过对高校、学科以及研究人员的数据分析,辅以简洁直观的可视化界面,系统大大提高了科研管理的效率,同时,也为各类科研决策的制定提供了科学的保障。

关键字: Mahout;科研管理;决策支持

Abstract

With the sustainable development of the informatization of scientific research management, all kinds of scientific research data ushered in the blowout type growth in recent years, along with the urgent need for data analysis, and the traditional manual analysis and semi-automated management tools has been unable to effectively processing the data analysis in massive data.The existing data analysis method, like statistic analysis and data mining, can well display the value and characteristics of data in some dimension, however, these methods tend to be relatively independent, can not stand decision support very well. In order to implement the decision support for scientific research management, this topic combining data warehouse, on-line analysis processing, data mining and model base, designs a decision support system for scientific research management.
Firstly, the paper conducts a research for the status of decision support system at home and abroad, analyzes the existing issues of these systems, combines with the actual situation of scientific research data, sorts out the needs of scientific research management decision support system. Then, based on data warehouse on Oracle, SSH framework, full-text search engine on Lucene, OLAP data statistics and data visualization tools, combining mahout, an open-source machine learning and data mining framework, as the core technique, the paper studies the mainstream of data mining algorithms, implements a basic framework for decision support and has applied in scientific research management. Finally, the paper conducts a comprehensive testing and analysis apply to all parts of the system to verify the accuracy and robustness. This system is based on the open-source framework, which not only promotes the efficiency, but also conducive to the expansion and maintenance of the system.
Based on the decision support system for scientific research management, by doing the data analysis on universities, disciplines as well as researchers, combined with simple and intuitive visual pages, the system can greatly improve the efficiency of scientific research management, and also provides scientific guarantee for all kinds of scientific decision making.

Keywords: Mahout, Scientific Research Management, Decision Support

1 绪论

近年来,受益于信息化的发展,科研管理进展迅速,科研数据也快速累积。数据即价值,面对日益增长的科研数据,如何将其利用起来为科研管理与决策过程提供服务和支撑,就成为了一个新的难题。
本章首先介绍本课题的研究背景及来源,然后对决策支持系统的国内外发展现状作简要分析,接着阐述本课题的研究内容及意义,最后简单介绍本文的组织结构。

1.1 课题背景及来源

随着互联网时代的不断推进,信息化的不断发展,各类业务管理系统如雨后春笋般出现在诸如企业、银行、高校等单位。这些业务管理系统不仅将管理人员从复杂的业务处理中解脱出来,也让业务管理从手工纸面处理走向了规范统一的自动化处理,显著地提高了工作效率。然而,面对管理方式的自动化、数据来源的复杂化、数据增长的快速化,人们希望有更好的方式可以将这些积累的数据利用起来。以高校为例,目前全国各大高校均在推广信息化建设,各类科研管理系统也在逐渐部署,伴随着这些系统的使用,肯定会累积大量的历史数据。这些数据蕴含着很多反映我国各大高校科研管理的规律、模式、知识等待被挖掘。如何对这些数据进行深入的分析和挖掘,并将提炼出的规律、模式、知识用于决策制定的过程,帮助管理人员定量分析,以达到决策支持的目的,就是一个待解决的问题。出于科研管理过程中科学决策的需要,通过先进的计算机技术搭建科研管理决策支持系统并实现典型的应用实例,就是本课题的主要研究背景。
本课题的研究基于教育部重大委托课题(NO.10JZDW004)、教育部专项委托课题(NO.11JF005)以及华中科技大学自主创新研究基金项目(NO.2013WZ020、NO.2011WA001)。本课题旨在为科研管理中的决策过程提供科学性指导,更好地推进我国科研信息化的建设,利用科研管理数据库构建数据仓库、并基于数据仓库开展在线的数据分析与数据挖掘工作、将分析结果提炼成对应的模型,最终以分析与决策报告的形式为科研管理提供决策支持服务。

1.2 课题现状及分析

1.2.1 国内外研究概况

决策支持系统最早是由Gorry和Scott在1971年提出的一个概念[1],当时的定义是:一种基于数据和模型的交互计算机系统,用以帮助决策者解决非结构化问题。后来,夏威夷大学的Sprague.R.H教授对决策支持系统的概念进行了扩充,他认为,一切对决策的制定有所贡献的信息系统,都可以称为广义上的决策支持系统[2]。近半个世纪以来,决策支持系统经历了从最初数据库阶段到后来的数据仓库阶段再到最近的商业智能阶段,每个阶段都代表着一次构成原理的发展和理论基础的完善。
作为一门融合多个学科技术的交叉学科[3],决策支持系统的理论体系主要由以下几个部分构成:
1) 管理科学:管理科学处理结构化问题时使用的观点和方法广泛应用于包括决策支持系统在内的信息系统;
2) 计算机技术:计算机技术为决策支持系统的实现提供了多样化的手段和工具;
3) 信息论:信息论理论奠定了整个现代化通信技术,自然也推动着决策支持系统的发展;
4) 人工智能:将智能和知识处理技术应用于决策支持系统大大提高了系统解决问题的能力;
5) 行为科学:即以面向用户的观点,通过人机接口和可视化技术表现决策支持系统的结果。
国外对决策支持系统的研究已久,并且早已在各个行业中得到了应用。Walus.Y.E通过在南非的工作资料研究了决策支持系统在医疗领域的应用,并且对决策支持系统未来的发展提出了自己的看法[4]。Pinto.T基于支持向量机开发了一个决策支持系统以实现对电力市场的价格预测,并研究了这种方式与人工神经网络的优劣[5]。Ltifi.H提出了一种通用的交互式可视化方案,希望利用决策支持系统的技术解决医生在重症监护病房发生感染的问题[6]。Costa.A.L研究了高铁建设过程中的问题,并探索了引入决策支持系统解决大型复杂工程的可行性[7]。Murla.D意识到强降雨期间污水排放问题的严重性,于是提出了环境决策支持系统来控制和减少污水泄露失控[8]
国内对决策支持系统的研究虽然晚于海外学者,但成效显著。李倪等人研究了现代的飞机制造过程,提出了基于人工智能、数据挖掘等技术的决策支持系统以实现达到预期性能的同时降低成本和风险的目的[9]。孙晓燕等人考虑到桥梁维修的复杂性,引入了决策支持系统实时地评估故障风险等指标,期望能通过更精准的实施桥梁维护从而降低碳排放,为环境保护作出贡献[10]。孙培芬等人为了推进我国农业产业的信息化转型,研究了决策支持系统在施肥和农业生产计划过程中的应用[11]。姬成敏等人为了解决军事物流决策过于复杂的问题,提出了以新型决策支持系统来辅助决策的方式[12]。李玮瑶等人为了实现在短时间内对于突发事故的可靠决策,在电网运行中引入了决策支持系统的概念[13]。张明晖通过对消防决策支持系统现状和存在不足的研究与分析,提出了消防决策支持系统,以预测火灾事故的发展趋势[14]
随着决策支持系统的不断发展,近年来也涌现了几种新型决策支持系统,其中最流行的就是综合决策支持系统。综合决策支持系统通常由三个主体组成[15],第一个主体是提供模型计算的数据库系统和模型库系统;第二个主体是提炼综合数据和信息的数据仓库和OLAP技术;第三个主体是辅助知识推理和决策支持的数据挖掘和专家库系统。本课题的基础架构就来源于综合决策支持系统。

1.2.2 重难点问题分析

决策支持系统发展至今已经近半个世纪,其概念也经过了数次演变,国内外的研究者们在各类业务系统中的试验都证明了决策支持系统的价值。然而,决策支持系统与科研管理的结合,还鲜有人尝试。为了将决策支持系统引入科研管理流程,以辅助管理人员进行科研决策,本课题必须解决以下几个重难点问题:
1) 决策支持系统的架构设计
如上文所述,决策支持系统的概念几经转变,如今的决策支持系统早已变成跨学科、多技术融合的综合决策支持系统。那么,如何基于数据仓库技术,以统一的架构将联机分析处理、数据挖掘、模型库等技术理念相结合,设计一套基础性的框架以实现决策支持系统的整合,就是本课题首先需要解决的问题。
2) 模型库的设计
为了实现算法模型的统一管理和后续算法的便利扩展,系统必须搭建一套通用的模型库管理系统,以解耦具体的业务处理和底层的算法应用之间的联系,便于算法模型在不同业务之间的移植和扩展。
3) 数据挖掘算法在科研管理中的应用
数据挖掘的技术日趋完善,具体的算法实现可以借助开源的框架,然而,系统必须找到将数据挖掘算法与科研管理业务相结合的方式,探索数据挖掘技术在这个新领域的应用。
4) 科研管理决策支持系统的结果呈现
作为基于B/S框架的Web系统,如何将最终的分析结果呈现给用户是直接影响用户体验的重要问题。数据可视化是数据分析与挖掘过程中非常流行的解决方案,借助于数据可视化的技术,结合包括图片、表格在内的多种呈现方式,前端的结果呈现可以为用户带来最直观的感受。

1.3 研究内容及意义

1.3.1 研究内容

本课题的研究内容包括:
1) 深入分析系统需求,研究决策支持系统的总体架构设计;
2) 广泛调研相关技术,确定决策支持系统的底层技术选型;
3) 研究数据挖掘技术,了解各类算法特点,确定数据挖掘算法的应用方案;
4) 结合科研管理特性,确定具体功能模块设计;
5) 基于各类开源框架,编程实现系统所有功能应用;
6) 研究可视化技术,确定最终分析结果的呈现方式;
7) 完成全面系统测试,分析测试结果。

1.3.2 研究意义

科研管理决策支持系统旨在解决科研数据纷繁复杂,大量数据无法发挥出价值,科研管理低效,数据无法有效支撑管理决策的问题,通过建立统一的决策平台,充分挖掘出科研数据中蕴含的价值,在各类分析与决策中为管理人员提供清晰直观的数据服务。因此,它的开发和部署具有重大的实际意义,以下仅通过几个代表性的用例作简要描述。
研究人员是高校科研的主力军,而每年研究人员在进行项目申报时都会涉及到与其他研究人员之间的合作,那么,基于决策支持系统给出的个性化推荐结果就可以帮助研究人员做出决策;管理人员组织专家做项目评审时,基于决策支持系统的研究人员报表可以为管理人员在专家取舍决策上提供参考;各大高校的管理人员在制定发展策略时,通常需要考虑本校的科研情况,而基于决策支持系统的高校报表,能够帮助管理人员详细地了解本校科研开展的情况,辅助决策制定;国家在宏观制定研究领域、发展趋势的新变化时,可以以决策支持系统的热点分析结果为依据来进行深入调研和决策参考;高校、学科代表为国家支持太少而争论不休时,决策支持系统的高校、学科报表就可以给出真实情况,用数据说话,定量分析;教育部思考改革和发展新方向时,基于决策支持系统的报表也可以提供新的思路和理论支撑。

1.4 论文的组织结构

本文包含六个章节,相关内容简介如下所述:
第一章:绪论。该章节首先介绍了本课题的研究背景及来源,并对决策支持系统的国内外现状做了简单总结,分析了本课题的重难点问题,然后论述了主要的研究内容与意义,最后介绍了论文的组织结构。
第二章:相关技术简介。该章节选取本课题需要用到的主要技术进行介绍,包括Web开发框架、数据仓库、联机分析处理、全文检索、数据挖掘、数据可视化以及文档导出框架等。
第三章:系统分析与设计。该章节分别从总体需求、总体架构、基础框架、应用模块等层面对科研管理决策支持系统进行了详细地分析与设计。其中,总体需求分析结合了科研数据的实际情况、科研管理的真实需求和决策支持系统的技术理念;总体架构设计包括设计架构、技术架构和功能架构;基础框架设计包括数据仓库设计、联机分析处理设计、数据挖掘设计以及模型库设计;应用模块设计包括功能设计和接口设计。
第四章:系统实现。该章节首先介绍了本课题的开发环境和框架配置,然后依次阐述了科研管理决策支持系统的基础框架实现和应用模块实现,辅以相关的代码示例和实现示意图,详细介绍了其实现过程。
第五章:系统测试。该章节分模块对系统各个应用模块的业务功能和响应时间进行了测试,并对测试结果进行了分析。
第六章:总结与展望。该章节总结了本课题的主要研究内容,并展望了系统未来的发展方向。

2 相关技术简介

科研管理决策支持系统是一套基于B/S架构的Web系统,开发过程主要涉及到Web开发框架、数据仓库、联机分析处理、全文检索、数据挖掘、数据可视化、文档导出框架等技术。Web开发框架是系统的基础,支撑着其它的功能开发;数据仓库是决策支持的基础,为数据分析与挖掘工作提供服务;联机分析处理是多维数据分析的手段;全文检索是文本分析和热点检索的工具;数据挖掘是提炼数据中的模式、知识的技术;可视化是最终的结果呈现方式;文档导出框架是系统主体功能的扩展。本章将依次对上述相关技术进行简要介绍。

2.1 Web开发框架

Web是一种分布式应用框架,旨在共享网络上各个Web服务器中互相链接的信息,它采用B/S架构,基于HTTP协议通信。上世纪八十年代至今,Web开发经历了从最初的传统服务器模式到后来的各种动态展现技术[16],如今已经有了多种开发方案。本课题基于Java开发,因此笔者选择了一套最流行的SSH(Struts2+Spring+Hibernate)框架作为Web开发的后端框架。

2.1.1 Struts2

Struts2[17]是Java Web中非常成熟的MVC框架,它的工作原理如图2.1所示。客户端请求经过转发处理后到达Struts2,首先会通过一系列的Filter过滤器,需要调用Action则会继续向下请求至ActionProxy,ActionProxy通过创建ActionInvocation实例调用具体的Action,这个过程还会涉及到一系列Interceptors的调用,最后的请求响应会由Response返回至Servlet Filters[18]

2.1.2 Spring

Spring[19]是Java Web的一站式开发框架,它的分层设计大大简便了开发流程。Spring有两个最基础的特性:IoC和AOP。IoC[20],Inversion of Control,即控制反转。简单地说,IoC的意思就是由传统的自己管理对象的方式转为交由容器进行管理,对于开发者而言,就从以前的事必躬亲变成了现在的享受服务,这种控制权的反转就是IoC的核心设计理念。AOP[21],Aspect Oriented Programming,即面向切面编程。AOP的概念相对而言更容易理解,对于软件开发过程中的通用且与具体业务无关的事务,如日志管理、安全控制等,可以通过模块化的方式进行封装,把它们转化为组件,达到与核心业务解耦的目的,这类事务就被称为横切点。

2.1.3 Hibernate

Hibernate[22]是一个ORM框架,提供对JDBC的轻量级封装,有了Hibernate的支持,开发者可以摆脱冗长而重复的JDBC代码,以对象的形式直接操作数据库。Hibernate通过一种称为HQL[23]的查询语句进行数据的增删改查操作,HQL在语法上与SQL类似,因此,学习的代价非常小。Hibernate有很多特性[24],如数据缓存、事务管理、拦截、分页等,这些特性也让Hibernate成为了目前全世界最流行的ORM框架。

2.2 数据仓库

数据仓库是一种数据资源架构[25],通常情况下,数据仓库中的数据来自多个异构数据源,经过数据的清洗后汇聚至同一个数据仓库中。数据仓库发起于上个世纪九十年代,其定义由创始人Inmon.W.H提出:数据仓库是面向主题的、集成的、稳定的、不同时间的数据集合[26]
1) 面向主题:数据仓库的数据是基于数据集合组织的,这些数据集合就是主题。只有以主题为依据规划数据的组织,才能保证数据仓库中数据的有用性,保证数据是决策者做决策时所关心的数据。
2) 集成:数据仓库中的数据来自不同的数据源,因此,这些遍布于不同数据源的异构数据在进入数据仓库前需按既定的策略加工,最终才能以一个整体集成到数据仓库中。
3) 稳定:不同于日常数据需要经常变化以满足业务需求,数据仓库中的数据相对稳定,它反映的是历史数据的内容和历史趋势的变化,一般情况下,进入数据仓库中的数据是很少会进行删除、修改、更新等操作,只会隔一段时间根据需求再去抽取新的数据。
4) 不同时间的数据集合:数据仓库的稳定是相对的,即在分析过程中数据不会更改,但这不代表会一直一成不变。随着时间的变化,数据仓库中的数据也会不断的添加、删除和修改。

2.3 联机分析处理

联机分析处理,即OLAP,是一种基于数据仓库的分析技术,它可以根据不同的需求对大量数据做复杂的分析,并能非常灵活地进行各种组合,有利于迅速找出数据的内在规律[27]。OLAP的定义最早是由Codd.E.F提出的,他被称为现代关系数据库之父,同时他还给出了OLAP的12条准则[28],这些准则主要描述了OLAP的五个特征,它们是快速性、可分析性、多维性、信息性与共享性[29]
OLAP的核心是多维分析技术,在多维分析中,数据模型由维和事实定义,事实与维往往是一对多的关系。其中,维指代的是一个属性集合,包含不同的层次,维的成员则是该维度属性的一个具体值。多维分析的主要操作有切片、切块、钻取、旋转[30]等。
1) 切片:切片就是选定某一维的成员,其目的是为了降低维度,通过切片的操作,可以使观察角度更细致。
2) 切块:与切片不同,切块是选定多个维的成员,可以形象地理解为将多个切片叠加在一起。
3) 钻取:钻取是为了改变维的层次,分为上钻和下钻。以下钻为例,可以将年度分析数据钻取为具体的四个季度,这就实现了对更细节数据的分析。
4) 旋转:旋转是为了改变维的方向,提供多种分析角度。

2.3.1 MDX

MDX[31]是一种查询语句,广泛应用于OLAP中的多维查询。在语法上,MDX与SQL类似,都是由简单的SELECT子句、FROM子句和WHERE子句组成。然而,在具体的应用上,两者却有很大的区别。SQL的查询对象一般是关系实体,MDX则是多维数据立方体。这个差异也决定了MDX有着比SQL更为强大的查询能力,而不是基于SQL的简单扩展。不仅如此,MDX的语法非常丰富,有强大的函数库支持,还能自定义函数,能提供开发者灵活操作数据和深入分析数据的能力。现在,MDX已经得到了越来越多OLAP服务器的支持,俨然成为了OLAP查询语言的标准,因此,本课题选择MDX作为多维数据查询语言。

2.3.2 Mondrian

Mondrian[32]是一个基于Java的开源OLAP引擎,是商业智能开源项目Pentaho版块中的一部分。通过将标准MDX语句解析成SQL语句后在关系型数据库中进行查询是包括Mondrian在内的ROLAP服务器的工作原理。Mondrian的架构设计上有四个大的部分,被称为Schema Manager、Session Manager、Dimension Manager和Aggregate Manager。其中,Session Manager是最重要的一部分,也是Mondrian运行的核心,MDX语句的解析、查询、结果组装、结果返回等都是在Session Manager中处理的。基于Mondrian的开源特性以及它在功能性、扩展性上的优势,本课题最终选择Mondrian作为OLAP服务器。

2.4 全文检索

全文检索是搜索技术中最核心的概念,根据用户的一系列检索条件,帮助人们在大量的数据中快速方便地检索出所需要的信息。全文检索的过程可以总结为四个步骤:创建文本库、建立索引、接收检索请求、结果返回[33]

2.4.1 Lucene

Lucene[34]是一个基于Java的开源全文检索引擎,它以优异的性能、高度的扩展性和跨平台的特性成为了目前使用最广泛的开源检索引擎工具包,因此笔者选择了Lucene作为本课题的全文检索工具[35]。它的工作原理如图2.2所示。


在Lucene执行全文检索的过程中,最重要的部件就是索引。Lucene索引的数据结构由Segment、Document、Field、Term组成[36]
1) Segment:段,可以理解为子索引。
2) Document:文档,指代加入索引库中的源文件。
3) Field:域,由域名和域值组成的关联元组。
4) Term:项,索引中最小的单元。

2.4.2 IKAnalyzer

在中文世界讨论全文检索有一个绕不过去的坎就是中文分词,相对于英文而言,中文的分词难度更高,目前对中文分词处理最好的要属IKAnalyzer了。IKAnalyzer是基于Java开发的一个中文分词工具包,开源且在持续更新,更重要的是,IKAnalyzer提供对Lucene的原生支持,可以无缝接入Lucene的索引创建过程,这也是笔者选择它的原因。IKAnalyzer的结构可以分为五个部分,它们分别是与Lucene的对接接口、主分析器、词元处理单元、词典配置模块以及扩展配置模块[37]

2.5 数据挖掘

数据挖掘技术从诞生至今有多种定义,如“从大量数据中提取或挖掘知识”[38]或“在大型数据存储库中自动发现有用信息的过程”[39],虽然表述方式不一样,但是这些定义都有一个共同的认知,那就是数据挖掘能分析出数据中的规律、模式、知识。
Mahout[40]是一个开源的可扩展机器学习和数据挖掘框架,提供很多经典算法的实现以及输入输出工具。起初,Mahout只是Lucene下的一个子项目,在很短的时间内,Mahout就经过长足的发展,成为了Apache的顶级项目,在全球范围内得到了广泛的应用。由于对Hadoop有很好的支持,Mahout可以很方便地扩展到云中[41],并且,基于Map-Reduce框架实现对大数据的分析与挖掘,也使得Mahout可以支撑很高的并发量和吞吐量。因此,本课题选择Mahout作为数据挖掘算法框架。

2.5.1 关联算法

关联算法[42]的目的是提取出数据之间的相互关系,这种关系不需要有因果性,只需要相关性,如著名的啤酒和尿布[43]的故事,就是通过关联算法挖掘出的一种关联规则。关联规则的评估[44]有几个重要的指标:
1) 支持度,指定的关联规则出现次数的比重,表示关联规则受支持的程度;
2) 置信度,指定的关联规则出现的次数占规则中一方出现次数的百分比,表示这种关联性的可信度;
3) 作用度,即置信度与期望置信度的比值,表示关联规则中一方对另一方的影响力大小。
Mahout中的关联算法是基于FP-Growth[45]算法的实现。FP-Growth算法的执行过程主要分为两步:构造FP-Tree、递归挖掘FP-Tree,最后得到的频繁项集就是上述的关联规则。

2.5.2 聚类算法

聚类算法是根据数据的不同特征对数据分簇的一种数据挖掘算法,通过提取出数据的不同特征,将相似的数据对象划分为同一簇,同时尽可能保证不同簇的数据对象差异很大。聚类算法是统计学的一个分支,早在上世纪中叶就已经有人提出了基于划分方法的聚类算法。经过几十年的研究,聚类技术又引进了不少新方法,如基于模型的方法、基于网格的方法等。
Mahout提供多种聚类算法的实现,如K-Means[46]、Canopy[47]、Dirichlet[48]等。K-Means是一种典型的划分方法,以距离作为评估指标划分不同的簇;Canopy也是基于划分的方法,通常用于对数据进行初步的处理确定聚类中心点,后续再使用K-Means做聚类;Dirichlet是一种基于模型的聚类方法,评估的是数据与给定模型的吻合程度。这些算法实现各有特色,具体使用的选择还要依靠真实的数据形式来确定。

2.5.3 分类算法

分类算法是数据挖掘中非常重要的一类算法,能够根据事物的相关属性做出科学预测。分类算法的执行流程可以归纳为提取训练数据集构造分类模型,然后用事先准备好的测试数据测试分类模型的性能,最后输入真正的待预测数据集,得到预测结果。其中,分类模型通常是在历史数据中挖掘出的对给定数据的概括性描述,因此,在预测过程中需要特别注意不能引入数据噪声。
Mahout提供多种分类算法的实现,如LR(Logistic Regression)[49]、SVM(Support Vector Machine)[50]、NBM(Naive Bayesian Model)[51]、RF(Random Forests)[52]等。LR是一种广义的线性回归分类器,其实质是事件发生的概率与未发生概率比值的对数;SVM是基于统计学习理论的分类方法;NBM是基于贝叶斯定理与特征条件独立假设的分类方法;RF是利用多棵树对样本进行训练并预测的分类方法。它们之间各有优劣,目前还不存在对所有数据均能实现最佳预测的分类算法,需要根据具体的需求和数据模式,通过不断的测试找出最优方案。

2.5.4 推荐算法

推荐算法是电子商务系统中应用非常广泛的一类算法,通过对用户的数据分析,实时精准地推荐用户有潜在购买欲的商品,可以显著提供用户购买率。在不同的情况下有不同的推荐策略,例如通过分析不同用户间购买商品这一行为的相似性相互推荐某一方已经购买过的商品;或者通过分析某个用户已购商品的属性推荐与之相关联的其它商品,上述的两种思路就是推荐算法中应用最广的两大类:User-Based[53]和Item-Based[54]
Mahout的推荐算法是一种协同过滤[55]框架,这种推荐方式与物品自身的属性无关,可以通用地为书籍、唱片、服饰等各个种类的物品进行推荐。与之相对的还有基于内容的推荐,这种推荐方式就与推荐对象有很强的关联性,很难移植。

2.6 数据可视化

数据可视化是将数据转换成各种直观的图形进行显示以帮助用户快速吸取大量可视化信息的一种技术[56]。Web技术的不断发展、各类基于B/S架构网络应用的迅速增多,也给Web页面的数据可视化带来了更高的挑战。目前,数据可视化技术大都具有以下特征:直观化、关联化、艺术化以及交互性[57],这些特征使得数据可视化越来越流行,在数据分析过程中占的比重也越来越大。
Highcharts[58]是一个开源的纯JavaScript库,能够很方便的应用于Web系统中,为主流浏览器提供一致的体验,同时,Highcharts还支持多种图表类型,如折线图、柱状图等。因此,本课题选择Highcharts作为多维数据展示的工具。D3[59]是一个文档操作的JavaScript库,提供非常强大的功能,通过与HTML、CSS等的结合,能够实现丰富的动态效果,可定制化程度相当高。本课题选择以Highcharts为主,同时辅助使用D3来完成各种动态效果的呈现。

2.7 文档导出框架

文档导出常见于包括浏览器应用和桌面应用在内的各种应用,然而对基于B/S架构的浏览器应用而言,实现文档导出的功能显得更有意义和挑战。文档导出可以帮助用户将网络数据本地化、离线化,提供包括电脑和手机等各类终端设备在内的一致性体验。PDF是一种广泛流行的文档格式,本课题研究基于PDF的文档导出,这里涉及到PDF的编辑和对PDF中图片的处理,因此还调研了相关的技术,最终选择了基于iText实现PDF的编辑以及基于Batik实现对图片的处理。

2.7.1 iText

iText[60]是基于Java的开源PDF文档操作库,发起至著名的开源站点SourceForge。iText提供丰富的API,借助这些API,开发者可以实现编辑文本内容、设置页面大小、改变字体字号、插入表格图片、添加阴影水印等多种效果[61]。虽然iText对中文的原生支持不够好,但是可以通过其它方式解决这个问题[62]

2.7.2 Batik

Batik[63]是Apache旗下基于Java的SVG[64]工具集。Batik提供的API可以帮助开发者操作SVG这种基于XML[65]的矢量图形描述语言,实现对SVG对象的显示和编辑甚至是与PNG/JPG图片的转换。

2.8 本章小结

本章主要介绍了科研管理决策支持系统开发中需要用到的相关技术。首先介绍了主流的Web开发框架Struts2、Spring和Hibernate;接着介绍了数据仓库的概念及其特征;接着介绍了联机分析处理的概念及MDX、Mondrian的技术选型;接着介绍了全文检索的概念及Lucene、IKAnalyzer的技术选型;接着介绍了数据挖掘的概念及Mahout的技术选型,并介绍了包括关联算法、聚类算法、分类算法、推荐算法在内的典型数据挖掘算法;接着介绍了数据可视化的发展和Highcharts、D3的技术选型;最后介绍了文档导出的意义和iText、Batik的技术选型。

3 系统分析与设计

系统分析与设计是系统实现的基础,进行充分的需求分析和清晰的架构设计有助于开发工作的顺利进行和开发结果的健壮稳定。本章首先根据前期的调研,结合科研数据的现状,对决策支持系统的需求进行分析,然后根据需求分析的结果详细介绍决策支持系统总体架构设计、基础框架设计以及应用模块设计。

3.1 总体需求分析

科研数据按照业务逻辑可以分为人员、机构、项目等几大类。其中,人员数据包括人员的基本属性信息,如姓名、年龄、学历等;机构数据中最重要的要属高校数据,这类数据包括高校名称、联系方式、地址、性质类别、结构类型等;项目数据包括项目的名称、年度、类型、子类等。这些数据彼此关联,组成了一个网状结构。并且,这些数据每年都以数万的增量在增加。
科研管理涉及到科研工作的方方面面,而其中不少都还在通过比较原始的手工分析数据来做决策甚至是直接凭感觉做决策。在科研管理中引入决策支持系统,可以辅助管理人员更高效、更精准、更科学地进行决策制定。例如,在管理人员组织专家进行项目评审时帮助分析专家数据;在各大高校制定发展策略时帮助分析高校数据;在国家制定研究领域和发展方针时帮助分析科研数据的整体趋势;在教育部确定改革方向时帮助分析近年的发展变化情况等。
决策支持系统涉及到多种技术理念的结合,这些技术在第二章中都进行了详细地介绍。其中,数据仓库用于规整数据,为后续的分析提供基础;联机分析处理用于多维度的分析数据,提供数据不同角度的分析结果;数据挖掘用于挖掘隐含在数据内的未知知识,发掘数据新的分析方式。
综合系统公共的功能组件、科研数据的实际情况、科研管理的真实需求和决策支持系统的技术理念,笔者梳理出如下三类需求:基础功能、决策服务、结果管理。

3.1.1 基础功能

1) 权限控制
整个决策支持系统的功能按照权限可以分为三大类:查看分析与决策结果、导出分析与决策结果、更新决策算法模型,以此对应三种权限等级和三类用户。对于最基本的用户而言,只需要查看分析与决策结果的权限即可;高级别的用户则还需要导出分析与决策结果的权限;另外,后台管理人员拥有包括更新决策算法模型在内的完整权限。这种根据用户类型的不同而拥有不同权限的功能就是由SpringSecurity实现的权限控制。
2) 数据仓库更新
科研管理决策支持系统的数据分析依赖于数据仓库中的结构化数据。当数据增量到达一定的程度,后台管理人员判断需要把这部分增量数据考虑到最新的分析决策过程中时,就可以很方便地通过界面化操作完成数据从生产数据库到数据仓库的转换过程。
3) 算法模型更新
决策过程中使用的所有算法模型都是通过统一的模型库管理的,这时算法模型以序列化的形式存在于系统中,所以当数据仓库更新以后,需要重新训练算法模型。及时的更新可以保证算法模型的准确性和完备性。

3.1.2 决策服务

1) 基础数据统计
常规的SQL数据查询能提供较为简单的数据汇总功能,但是对于分析与决策的过程而言,这种扁平化的数据就显得层次不够丰富。基础数据统计以数据仓库为基础,以MDX的多维查询语句为依托,通过联机分析处理的技术,可以把各类数据相互融合,更高效、更全面、更立体的进行分析。
2) 热点分析
作为决策支持而言,一个典型的需求在于分析科研领域、方向的新变化、新趋势,而这可以通过每年科研项目的热点分析与变化情况来反映。因此,基于项目的热点分析可以帮助管理人员及时掌握当前的项目研究热点,判断热点的变化趋势,预测今后的热门研究方向等。
3) 相似性分析
科研数据类目繁多,信息量巨大,基于这些数据可以用来分析具体类别数据的相似性。各类数据都可以参考各自的相似性结果辅助后续的研究开展和合作。而对于管理人员而言,这种相似性的结果也可以提供一个看待数据的新角度新视野。
4) 关联性分析
科研数据经过十几年的发展,已经积累了很大的数据量。每年的项目申报或立项都会有各类相互关联的数据产生,比如同一个项目的跨高校合作、跨学科研究等。这种相互的关联一直存在,但是却没有被人去量化其关联性的大小,这是一种巨大的浪费。有了这种对于关联性的分析,所有的关联性以及具体的关联情况就都能一目了然了。
5) 项目结项预测
项目结项随时在进行,而对于具体某一个项目而言,它的结项时间则是不定的。如果能够根据项目自身有限的数据,预测其结项时间,那么就能给管理人员带来很大的便利,他们可以根据这个预测的结果,实时的调整相关的通知和规定。利用业界已经非常成熟的分类算法对项目结项时间进行预测是一个全新的思路。
6) 个性化推荐
如果说关联性分析提供了历史数据中的相互关联关系,那么个性化推荐就能带来对于未来合作的启示。基于协同过滤的推荐,系统可以指导相互间的合作,为项目的跨领域、跨地域、跨学科的开展提供科学的支撑。

3.1.3 结果管理

1) 图表展现
各种分析与决策的结果,如果都以纯粹的数据结果展现给用户,则会稍显凌乱。借助于可视化的技术,我们能够以图表的形式,更加直观而清晰的把所有的分析结果都呈现给用户。用户接收信息会更有效率,感受上也会更加的友好。数据可视化是大势所趋,所以,一个对用户良好的前端界面也是必不可少的。
2) 文档导出
对于某一类用户而言,仅限于前端界面的结果查看是不够,他们需要一个离线的文档可供随时查阅,这就提出了一个新的需求:文档导出。并且,这也便于分析报告的流通和进一步的发挥作用。本课题选择PDF作为文档导出格式。
综上所述,通过对目前科研数据的分析与利用中存在的不足的调研,结合当前科研数据的实际状况,本课题最终确定以分析与决策报告的形式为载体,以高校、学科、研究人员这三个角度入手,实现对科研管理的决策支持。报告会集中的展现具体的高校、学科或研究人员包括上述分析的功能在内的全局性状况,通过可视化的图表给用户直观的感知。在科研管理决策支持系统中,原始而分散的科研数据被抽取、转换至数据仓库中,通过各类联机分析处理的手段,加上典型的数据挖掘算法处理,再经过统一的模型库管理,最终达到数据利用的最大化和管理决策的有效化。

3.2 总体架构设计

为了用最适合的方式解决实际的问题,科研管理决策支持系统的总体架构设计充分考虑到了设计上的简洁性、技术上的前沿性以及功能上的丰富性。下面从这三个不同的角度来分别阐述具体的设计思路。

3.2.1 设计架构

科研管理决策支持系统主要由数据层、模型层、应用层、展示层组成,其总体设计架构如图3.1所示。


数据层包括生产数据库和数据仓库。其中,生产数据库来源于科研管理中的真实数据,而数据仓库则是通过对生产数据库中的数据进行处理后得来的。有了数据仓库的支撑,后续所有的分析与决策过程才得以顺利进行。
模型层包括热点索引、关联模型、聚类模型、分类模型以及推荐模型。热点索引用于分析相应的科研热点,关联模型用于分析历史数据中相互合作的关联性,聚类模型则用于分析相似性,分类模型为项目的结项预测提供指导,推荐模型提供未来相互之间合作的可能性。它们彼此独立,但是由系统以统一的形式进行管理,一起为分析与决策工作提供服务。
应用层由联机分析处理、全文检索和数据挖掘组成。这个部分向上为展示层提供用于展示的分析结果,向下关联数据层和模型层,通过接口调用相关服务,并得出分析结果。其中,联机分析处理主要是通过多维查询语言MDX来操作数据仓库进行全面立体的数据统计工作;全文检索主要通过对文档索引库的检索进行科研热点的分析;数据挖掘则是通过调用相应的模型来处理数据仓库中的数据,得到对应的数据挖掘结果。
展示层主要分为两个部分。参数配置为用户提供方便的入口来指定特定的分析对象,而且还有一些可选的参数用于个性化的拼接最终的分析与决策报告的结果。图表呈现是用户真正关心的内容,这里借助于流行的数据可视化插件,呈现的分析结果对用户更加的友好,也更易于用户接收信息。

3.2.2 技术架构

决策支持系统是部署在科研管理平台中运行的,其开发框架主要是基于B/S模式的三层架构。用户可通过各类浏览器直接访问而无需安装任何应用,这正是相对于C/S架构的最大优势。科研管理决策支持系统的总体技术架构如图3.2所示。


在浏览器端,HTML+JS+CSS的组合基本上统一了前端开发的技术选型。在决策支持系统中,其前端的图表展现主要由D3和Highcharts实现。通过Ajax的异步请求,服务器端以JSON这种数据格式向浏览器传输数据,这些数据经由JS的解析和渲染,就形成了用户可见的各种炫丽的图表效果。
在服务器端,则是由典型的MVC三层架构组成。下面详细地介绍每一层的技术架构。
1) 视图层
用户通过浏览器发送的请求会链接到视图层的Action上,然后通过Action的跳转逻辑逐级向下调用,生成的结果数据,或填充于JSP中,或以JSON的格式保存,最后返回至浏览器。这个过程主要由Struts2实现。
2) 业务层
业务层是系统功能的具体实现。它向上为视图层提供服务,向下根据需求向数据层获取数据。在这个部分,所有的对象都交由Spring统一管理,依赖于Spring的控制反转机制,开发人员可以从繁琐的对象创建和组织中解脱出来,而仅专注于核心的业务逻辑处理。
3) 数据层
数据层有三类不同的形式:数据库、模型库以及索引库。基于Hibernate这个ORM框架,业务层可以以对象的形式访问底层的数据库,使得数据库操作在软件开发层面上统一了起来。而借助Lucene的API,可以很简便地基于索引库实现全文检索的功能。Mahout则通过与模型库的对接接口为业务层提供各类复杂的数据挖掘实现。

3.2.3 功能架构

科研管理决策支持系统的业务功能主要分为高校分析与决策、学科分析与决策以及研究人员分析与决策三个模块,其总体功能架构如图3.3所示。


各部分的功能概要介绍如下:
高校分析与决策用于分析高校多个层面的详细信息,主要功能包括高校选择、模型更新、分析与决策以及文档导出。其中分析与决策由基本数据统计、学科发展趋势、项目热点分析、项目结项预测、相似性分析、关联性分析以及个性化推荐这七个部分组成。这七个部分的功能可以自由组合,相互之间完全无依赖。
学科分析与决策在架构设计上与高校分析与决策类似,只在具体的业务功能上有所不同,图3.3清晰地标明了其不同之处,故不再赘述。
研究人员分析与决策同样也是基于相同的架构设计,但相对而言,高校与学科层面的分析更多的是一个整体的状况,而研究人员的分析则是具体到个人的。这就带来一个好处,即针对个人的相似性分析、个性化推荐等功能具有非常广阔的想象力,这也是后续很值得进一步应用和扩展的地方。

3.3 基础框架设计

为了实现决策支持系统的理念,笔者搭建了一套基础性的框架,将数据仓库、联机分析处理、数据挖掘以及模型库相结合。其中,数据仓库是基础,联机分析处理和数据挖掘是手段,模型库是介于基础和手段之间的知识[66]。下面分别介绍各个部分的设计。

3.3.1 数据仓库设计

数据仓库是一个高度集成化的数据集,通过从其他生产数据库中抽取数据,并以相同的主题和模式进行整合,实现单点的数据管理。数据仓库的构建通常是基于ETL工具实现对数据的处理。由于数据仓库与生产数据库的相对隔离性,因此,需要阶段性的重新抽取增量数据。
数据仓库通常是一种多维的数据模型,这与一般数据库的关系模型有着本质的不同。在数据仓库中,数据是星形连接的,以一颗“星”为中心将其他数据结构联系起来,这里的中心就是一张事实表。事实表是包含大量数据值的一种结构,它的周围是维表,用来描述事实表的某个重要方面
在实际的数据仓库设计中,星形结构的模型往往不足以满足实际的需求,这时,一种由多张事实表结合而成的复合结构雪花模型应运而生。在雪花模型中,不同的事实表通过共用维表而相互关联。
一般而言,数据仓库的设计过程依次按照如下步骤:选取待建模的对象;确定对象的粒度;选取事实表的各个维度;选取将安放在事实表中的度量。依此思路,本课题数据仓库的数据结构示例如下:
人员信息维表:dimension_person{d_person_id, gender};
机构信息维表:dimension_agency{d_agency_id, style};
成果信息维表:dimension_product{d_product_id, type};
项目事实表:fact_project{f_project_id, d_person_id, d_agency_id, d_product_id, fee}。
其中,人员信息维表、机构信息维表以及成果信息维表分别记录了这三个维度的属性信息,而项目事实表通过id与这三个维表关联,同时,事实表中也有自己的度量属性,即经费。这就形成了一个典型的星形模型。多个类似的星形模型通过共享的维表结合,就成为了本课题最终设计的基于雪花模型的数据仓库。

3.3.2 联机分析处理设计

OLAP,即联机分析处理,是决策支持系统中一个必不可少的组成部分,其常用操作包括钻取、切片等。本课题的联机分析处理是基于Mondrian和MDX的实现,通过Mondrian这个开源的OLAP服务器,多维查询语句MDX会被解析成SQL语句,最后通过SQL对数据仓库的查询操作得出结果。
在具体的使用中,Mondrian通过一种XML格式的Schema文件定义数据立方体模型。在这种数据立方体中,有Dimension、Hierarchy以及Level等对象,分别对应维度、层次和级别,这些组件与底层的数据仓库在设计构想上一一对应。因此,对本课题而言,联机分析处理模块的统一架构被设计为以数据立方体为分析对象,以维度和层级为分析切入点。
对应3.3.1节的数据结构设计,其指代的多维立方体结构如图3.4所示。由图3.4可以看出,人员、机构、成果这三个信息构成了三个维度,组成了经费这个立方体的三条方向轴,通过这个经费立方体,就能实现对图中任意维度下的经费度量。

3.3.3 数据挖掘设计

本课题涉及了四个数据挖掘的算法应用。下面分别介绍这四个算法应用的设计思路。
1) 关联算法
关联算法分析的关联性来源于历史数据中的相互依赖关系。以高校为例,历年的项目数据中都存在多个项目成员关联在同一个项目中,这就产生了这些项目成员所在高校的关联性。通过对同一个项目中不同高校来源的项目成员数据进行分析,借助FP-Growth算法,得出同一个项目中不同高校之间的关联性,最后将所有项目数据得出的高校关联结果整合,得出所有高校之间的关联结果。这时,指定任意高校,系统就能自动给出与该高校关联性最高的其他高校序列。其流程图如图3.5所示。


2) 聚类算法
聚类算法分析的是在给定属性下的相似性。同样以高校为例,首先高校自身具有很多的属性,如高校类型、高校类别、高校所在省份等,同时每个高校都有相关的人员信息和项目信息,那么,把高校教师的职称分布,即讲师、副教授、教授的数量统计出来加到相似性的计算维度之中,最后结合高校在各个学科门类下的项目申报数量和立项数量,借助聚类算法,就能得出所有高校在以上维度下的聚类簇分布结果。这时,指定任意高校,与该高校在同一个簇中的其他高校即为相似高校。其流程图如图3.6所示。

3) 分类算法
基于分类算法的项目结项预测主要用来预测未结项项目的结项时间。一个合理的观点是:项目是否能按时结项与项目自身的很多因素有关。考虑到数据上的实际情况,笔者抽取出的预测模型包括项目类型、负责人的职称、项目所属高校、负责人的年龄等,待预测变量选择为项目进行年数。对这些数据进行向量化处理,通过逻辑回归的分类算法,可以预测最终项目会进行的年数,也就预测了结项时间。其流程图如图3.7所示。

4) 推荐算法
个性化推荐是基于协同过滤的推荐算法。以研究人员为例,每年的项目开展都会涉及到多个研究人员的相互合作,那么推荐算法就可以提供选择合作对象时的科学性指导。基于历史数据中的关联关系,分析出所有研究人员构建成的关联网络,以这种关联网络为依据,对指定的研究人员进行推荐的过程就是在这个关联网络中找出所有与该研究人员没有直接联系但是却有很多间接联系的其他研究人员。这里的间接联系可以是通过某个研究人员产生的关联,也可以是通过某些相关的项目而产生的关联。其流程图如图3.8所示。

3.3.4 模型库设计

科研管理决策支持系统的业务功能有三块,也就意味着同一个算法会对应三个模型,因此,需要基于模型库来管理所有的算法模型。考虑到扩展性以及后续其他算法组件接入的便捷性,笔者设计了一套以Tool层和Data层为核心的层次结构。其中,一个Tool对应一个算法应用,一个Data对应一个具体业务功能的模型训练,也就说,本课题中,由于业务功能有三大块,因此一个Tool会对应三个相应的Data。
有了这种层次结构后,上层的Service业务只与算法的Tool层对接,后续的业务扩展则只需要完成相应的业务模型,即Data层的实现,就可以很方便的套用原有的Tool实现相应的算法功能;而对于后续的算法扩展,则可以沿用目前的这种设计模式,完成一个通用的Tool与上层的Service对接,然后分别实现对应的Data模型,就可以完成所有业务上的统一算法实现。
当然,随着业务功能的逐渐复杂,算法应用的不断扩展,系统中的模型也会越来越多,这就会带来管理上的问题。因此,还需要有统一的平台对所有的模型进行管理,这里的管理包括但不限于模型的增加、更新、删除以及查看等。

3.4 应用模块设计

科研管理决策支持系统的应用模块分为高校分析与决策、学科分析与决策以及研究人员分析与决策三大类,以下仅以高校分析与决策为例详细介绍应用模块的功能设计和接口设计。

3.4.1 功能设计

高校分析与决策用于分析高校在学科发展、项目进展等方面的整体状况,为管理人员对某一高校迅速建立宏观认识提供帮助。用户可以自由选择最终呈现的分析与决策报告的内容版块,通过前端界面提供的参数配置功能,个性化的定制最终的结果。如有必要,也可以配置具体的模型更新以获取最新的分析结果。最后,用户可以自由导出相应的PDF文档。下面具体介绍相应的功能:
1) 高校选择
指定要分析的具体高校,通过弹出层的方式从数据库的所有高校信息中提取出高校名称、高校代码和所属省份这三类主体信息,供用户选择。
2) 模型更新
本模块使用到的模型包括热点索引、关联模型、聚类模型、分类模型以及推荐模型,用户可以单独更新指定的模型。每次的模型更新都意味着从数据仓库中提取相应的数据,经过底层算法引擎的运算后生成相应的序列化文件,并经由统一的架构进行模型管理。
3) 分析与决策
分析与决策部分由七个组件组成,它们是基于联机分析处理的基本数据统计和学科发展趋势,基于Lucene索引全文检索的项目热点分析,基于分类算法的项目结项预测,基于聚类算法的相似性分析,基于FP-Growth算法的关联性分析以及基于推荐算法的个性化推荐。这些组件从各个角度分析了选定高校的基本情况,力求在重大决策的过程中提供科学性的指导。
4) 文档导出
以规范的图表样式和整洁的文字排版对分析与决策过程中呈现的结果图表实现无差异的文档导出,方便有需求的用户离线查阅。
高校分析与决策的流程图如图3.9所示。

3.4.2 接口设计

高校分析与决策模块的代码组织架构分为Action层、Service层、Tool层以及Data层。具体的接口结构如图3.10所示。


1) Action结构
BaseAction是管理平台的基类,提供最底层的公共功能。DecisionSupportAction是决策支持系统的基类,继承至BaseAction,提供决策支持系统的基本功能。而UniversityAction则是继承至DecisionSupportAction,是高校分析与决策的具体执行类,通过调用Service层接口处理具体的业务实现。
2) Service结构
IBaseService是科研管理平台最底层的Service接口,提供公共的基础服务。IDSUniversityService继承至IBaseService,定义了高校分析与决策模块业务逻辑需要的具体接口方法。DSUniversityService实现了IDSUniversityService中定义的所有方法并继承至IBaseService的实现类BaseService。
3) 组件结构
这部分是一套组件的集合,包含了如下七个具体的功能。基于StatisticService的接口调用实现基本数据统计和学科发展趋势,底层由Mondrian提供API支持;HotspotTool基于Lucene的索引实现项目热点分析;ClassificationTool基于Mahout的分类算法接口实现项目结项预测;CluteringTool基于Mahout的聚类算法接口实现相似性分析;AssociationTool基于Mahout的关联算法接口实现关联性分析;RecommendationTool基于Mahout的推荐算法接口实现个性化推荐。这七个组件以相同的代码组织架构由DSUniversityService统一管理和调用,为高校分析与决策最核心的业务实现提供服务。

3.5 本章小结

本章主要对决策支持系统的分析与设计进行了详细的介绍。首先分析了系统的总体需求,接着对总体架构进行了设计,包括设计架构、技术架构和功能架构;然后介绍了基础框架设计,包括数据仓库设计、联机分析处理设计、数据挖掘设计和模型库设计;最后以高校分析与决策模块为例对应用模块的功能和接口进行了详细设计。

4 系统实现

在第三章中,对决策支持系统的需求进行了详细的分析,并在此基础上完成了系统的总体架构设计、基础框架设计和应用模块设计,为决策支持系统的实现奠定了坚实的基础。本章将基于上一章的分析与设计,对各个部分的实现作详细介绍,包括开发环境与框架配置、基础框架实现以及应用模块实现。

4.1 开发环境与框架配置

决策支持系统的开发环境如表4.1所示。
表4.1 决策支持系统的开发环境

工具/环境 软件名称/版本
集成开发环境 MyEclipse 10.0
JDK Sun JDK 1.8.0_25
应用服务器 WebLogic 12c
开发服务器 Apache Tomcat 6.0.13
服务器系统 Cent OS 5.7
数据库 Oracle 11gR2
客户端软件 市面上常见的浏览器

决策支持系统的框架配置如表4.2所示。
表4.2 决策支持系统的框架配置

框架/组件 版本
Lucene 4.6
IKAnalyzer 3.0
Mahout 0.8
Mondrian 3.3.0
Highcharts 3.0.6
D3 3.3.9
Struts2 2.3.15
Spring 3.0.5
Hibernate 4.1.9
iText 5.0.6
Batik 1.7

4.2 基础框架实现

4.2.1 数据仓库实现

根据3.3.1节中数据结构的设计,由人员信息维表、机构信息维表、成果信息维度以及项目事实表构建的数据仓库星形模型如图4.1所示。其他建模对象可以以类似的方式构建,不再赘述。


除了实现上述结构模型外,还有一个重要的功能便是数据仓库的更新。本系统中的数据仓库更新由管理员触发,通过调用自定义的SQL脚本执行,脚本片段如下所示:

  1. ......
  2. --机构维表--
  3. insert into s_d_unit (c_id, c_name, c_style, c_category, c_province, c_type, c_organizer)
  4. ......
  5. --人员维表--
  6. insert into s_d_person (c_id, c_name, c_gender, c_age_group, c_title, c_last_degree, c_last_education, c_tutor_type, c_discipline_type)
  7. ......
  8. --项目事实表--
  9. insert into s_s_project ( c_id, c_d_project_id, c_d_unit_id, c_d_person_id, c_is_granted, c_fee)
  10. ......

这是更新数据仓库的一段SQL脚本,它的运行原理就是通过基本的转换过程,将生产数据库中的数据抽取至数据仓库中。数据仓库的更新可以通过前端人性化的界面直接操作,当功能触发时,服务端会建立与数据库的连接,接着定位此SQL脚本,通过读取脚本内容并逐条拆分加入到批处理的任务序列中,最后一起执行,执行结果要么全部成功,要么出现失败则全部回滚。

4.2.2 联机分析处理实现

基于Mondrian和MDX的联机分析处理重点在于对数据立方体的构建。以3.3.2节的数据立方体为例,其对应的Schema配置代码截取如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Schema name="project">
  3. <Cube name="project">
  4. <Table name="fact_project"/>
  5. <Dimension name="人员维度" foreignKey="d_person_id">
  6. ......
  7. <Hierarchy hasAll="true" name="性别" primaryKey="d_person_id" allMemberName="总计">
  8. <Table name="dimension_person"/>
  9. <Level name="性别" column="gender" uniqueMembers="true"/>
  10. </Hierarchy>
  11. ......
  12. </Dimension>
  13. <Measure name="Fee" column="fee" aggregator="sum"/>
  14. </Cube>
  15. </Schema>

上述代码定义了Project数据立方体,并给出了其各个维度的详细定义,建立了这个数据立方体与数据仓库的具体映射关系。有了Schema配置后,就可以完成基于已定义好的多维数据立方体的数据统计功能了,代码示例如下:

  1. String schemaRealPath = ApplicationContainer.sc.getRealPath(schema);//确定路径
  2. connection = DriverManager.getConnection("Provider=mondrian; DataSource="+ jndiname +"; Catalog=" + schemaRealPath + ";", null);//连接数据库
  3. Query query = connection.parseQuery(MdxQueryString);//执行多维数据查询
  4. Result result = connection.execute(query);//获取查询结果

4.2.3 数据挖掘实现

本课题涉及了四个数据挖掘的算法应用。下面分别介绍这四个算法应用的实现细节。
1) 关联算法
本课题的关联算法是基于FP-Growth的底层实现,其实现思路为通过扫描数据得出符合最小支持度的项,然后根据项频率,由大到小排序,以此来进一步构造PF-Tree。这种实现方式将发现长频繁模式的问题转换成了递归地搜索短模式的问题,因此,可以大大降低搜索开销。按照3.3.3节的流程设计,其实现可以简单总结为:
第一步,从数据仓库中提取数据,并进行初始化操作;
第二步,将原始的数据结构转换成Mahout算法所支持的Pairs格式;
第三步,调用Mahout的算法接口,在给定的输入参数下生成频繁模式集的序列化文件。
相关的代码示例如下:

  1. /**
  2. * 生成频繁模式,并序列化
  3. * @param dataItems 原始数据集
  4. * @throws IOException
  5. */
  6. public void getFrequentPatternFile(List<Object[]> dataItems) throws IOException{
  7. FPGrowth<String> fp = new FPGrowth<String>();
  8. Collection<Pair<List<String>, Long>> transactions = new ArrayList<Pair<List<String>, Long>>();
  9. for (Object[] dataItem : dataItems) {//构建transactions:pair事务集
  10. ......//数据格式转换
  11. transactions.add(new Pair<List<String>, Long>(list, 1L));
  12. }
  13. ......//设置输出文件路径
  14. fp.generateTopKFrequentPatterns(......);//在给定的事务流和最小支持度下,为每个属性生成前K频繁模式
  15. writer.close();
  16. }

2) 聚类算法
本课题的聚类算法是基于K-Means的底层实现,其实现思路为以聚类中心为起点,以距离度量函数为依据划分簇,然后将聚类中心更新为新簇的中心,再重新分簇,反复迭代后至稳定后,得到最终的聚类结果。按照3.3.3节的流程设计,其实现可以简单总结为:
第一步,从数据仓库中提取原始数据,并进行初始化操作;
第二步,向量化;
第三步,将向量数据写入Mahout支持的SequenceFile序列文件;
第四步,设置初始中心点;
第五步,调用底层的Mahout接口,执行聚类运算。
相关的代码示例如下:

  1. public List<NamedVector> getVector() throws IOException{//生成向量Vector
  2. ......//读取原始数据
  3. while (line != null) {
  4. ......//逐行向量化
  5. }
  6. }
  7. public void writePointsToFile(List<NamedVector> points, Path path, FileSystem fs, Configuration conf) throws IOException {
  8. ......//生成SequenceFile格式的文件
  9. }
  10. public void setCenterPoints(Path path, FileSystem fs, Configuration conf, int k, List<NamedVector> vectors) throws IOException{
  11. ......//设置初始中心点
  12. }
  13. public void work(Configuration conf) throws IOException, ClassNotFoundException, InterruptedException{
  14. ......
  15. KMeansDriver.run(conf, inputPath, clustersPath, outputPath, new EuclideanDistanceMeasure(), 0.001, 20, true, 0.0, true);//运行聚类算法
  16. ......
  17. }

3) 分类算法
本课题的分类算法是基于Logistic Regression的底层实现,其实现思路为通过对历史数据的分析,得出分类结果与设定的分类参数之间的拟合关系,并以此作为后续的分类依据。按照3.3.3节的流程设计,其实现可以简单总结为:
第一步,从数据仓库中提取原始数据,并执行初始化;
第二步,配置相应的预测因子和目标变量;
第三步,初始化预测模型;
第四步,逐条向量化训练数据,通过多次迭代训练预测模型;
第五步,迭代结束,生成预测模型。
相关的代码示例如下:

  1. public void train(int projectType) throws Exception{
  2. ......//抽取数据、设置预测因子
  3. CsvRecordFactory csv = lmp.getCsvRecordFactory();//csv文件处理器的初始化
  4. OnlineLogisticRegression lr = lmp.createRegression();//生成预测模型,此处为空
  5. for (int pass = 0; pass < PASSES; pass++) {//迭代训练模型
  6. ......
  7. try {
  8. ......
  9. while (line != null) {
  10. ......//向量化
  11. csv.processLine(line, input);//update model
  12. ......
  13. }
  14. }finally {
  15. Closeables.close(in, true);
  16. }
  17. }
  18. ......//模型输出
  19. }

4) 推荐算法
本课题的推荐算法是基于协同过滤的推荐,其实现思路为利用推荐对象的评价信息计算距离,然后根据最近邻居对象对推荐物品评价的加权来预测推荐对象对特定推荐物品的喜好程度。按照3.3.3节的流程设计,其实现可以简单总结为:
第一步,从关联算法生成的频繁模式集中提取原始数据,并进行初始化操作;
第二步,将关联度设为推荐的偏好值;
第三步,通过实际测试选择最优的距离度量方法;
第四步,调用底层Mahout接口,执行推荐过程。
相关的代码示例如下:

  1. public List<RecommendedItem> work(long userId) throws Exception{//运行推荐算法
  2. ......//设置推荐方式和距离度量函数
  3. return recommender.recommend(userId, 6);
  4. }
  5. public void prepareSourceData(){//准备原始数据
  6. ......
  7. //对所有频繁模式进行遍历
  8. for (Pair<String, TopKStringPatterns> fps : frequentPatterns) {
  9. ......//初始化频繁模式集
  10. }
  11. List<String[]> dataList = new ArrayList<String[]>();//关联结果集
  12. for(String key : assoMap.keySet()){
  13. ......
  14. }
  15. String[] header = {"user1", "user2", "评分"};
  16. CsvTool.writeCsv(ApplicationContainer.sc.getRealPath(ASSOCIATION_SOURCE), header, dataList);
  17. }

4.2.4 模型库实现

基于3.3.4节的设计思想,最终实现的模型库设计如图4.2所示。


系统按照业务功能的不同分为三大块:高校分析与决策、学科分析与决策、研究人员分析与决策,每个模块有各自的Data层模型,各个模块按照业务应用的区别在具体的模型组合上也有细微的区别。但是,遍布于这三大模块中的同一个算法应用会由上层统一的Tool工具来调用,Tool层之上还有业务层的Service,通过不同的Service业务起点来确定最终调用的具体模型Data。
至于模型的管理,目前均通过每次更新模型时删除上次的模型,然后重新生成新模型的方式,相关代码示例如下:

  1. public Map updateClusteringModel(Map jsonMap){
  2. jsonMap.put("status", 1);
  3. FileTool.delAllFile(ApplicationContainer.sc.getRealPath("/decisionSupport/source/university/clustering"));//删除原始模型
  4. ClusteringData clusteringData = new ClusteringData(dao);
  5. try {
  6. clusteringData.run();//训练新模型
  7. } catch (Exception e) {
  8. jsonMap.put("status", 0);
  9. e.printStackTrace();
  10. }
  11. return jsonMap;
  12. }

4.3 应用模块实现

科研管理决策支持系统的应用模块分为高校分析与决策、学科分析与决策以及研究人员分析与决策三大类,以下仅以高校分析与决策为例详细介绍组成应用模块的各个组件的功能。

4.3.1 基本数据统计实现

用户进入高校分析与决策模块,选中基本数据统计进行分析后,服务端会根据用户指定的高校拼装该高校人员、项目、成果的多维查询MDX语句。然后,DSUniversityService调用StatisticService提供的接口,通过StatisticService与Mondrian底层API的对接实现多维数据查询,查询结果经过StatisticService的接口解析后即成为通用的JSON数据。最后这些数据会被组装成前端插件所需的数据格式,在界面上展示。其实现示意图如图4.3所示。


相关代码示例如下:

  1. public void getBasisResult(String universityName, String[] universityNames, Map jsonMap){
  2. Map<String, List> result = new HashMap<String, List>();
  3. ......
  4. Result personResult = statisticService.getMondrianResult("person", personMDX);
  5. //生成人员统计表数据
  6. List<List> personList = statisticService.getData(personResult, 0);
  7. ......
  8. Result projectResult = statisticService.getMondrianResult("project", projectMDX);
  9. //生成项目统计表数据
  10. List<List> projectList = statisticService.getData(projectResult, 0);
  11. ......
  12. Result productResult = statisticService.getMondrianResult("product", productMDX);
  13. //生成成果统计表数据
  14. List<List> productList = statisticService.getData(productResult, 0);
  15. ......
  16. }

4.3.2 学科发展趋势实现

用户进入高校分析与决策模块,选中学科发展趋势进行分析后,服务端会根据用户指定的高校,查询出该高校历年项目申报和立项数量最多的五个学科,这五个学科就被列为重点学科。以相同的MDX查询语句,对这五个重点学科执行多维查询操作,逐个得出这些学科历年来的项目申报和立项数,分析它们的发展趋势,最后得到的结果就是学科发展趋势。这些结果被组装成前端插件所需的数据格式,即可在界面上展示学科发展趋势的图。其实现示意图如图4.4所示。


相关代码示例如下:

  1. public void getDisciplineResult(String universityName, String[] universityNames, Map jsonMap){
  2. ......
  3. List<String> top5Discipline = dao.query(sql);//查询优势学科
  4. Map<String, Map> result = new HashMap<String, Map>();
  5. int max = top5Discipline.size()>5?5:top5Discipline.size();//最多只取排名前五的重点学科
  6. for(int i=0; i<max; i++){//遍历优势学科,确定每个学科的具体发展趋势
  7. String discipline = top5Discipline.get(i);
  8. ......
  9. Result disciplineResult = statisticService.getMondrianResult("project"
  10. , MDX);//得到趋势统计结果
  11. ......
  12. result.put(discipline, JSONObject.fromObject(chartJson));
  13. }
  14. ......
  15. }

4.3.3 项目热点分析实现

用户进入高校分析与决策模块,选中项目热点分析进行分析后,服务端会根据用户指定的高校从索引库中载入相应的索引文件,然后循环检索当前索引域下的所有词项,每碰到一个词项,则该词项的频率加1,最后按所有词项出现频率高低排序,取前10的词项为项目的热点。这些结果被组装成前端插件所需的数据格式,即可在界面上展示项目热点分析的图。其实现示意图如图4.5所示。


相关代码示例如下:

  1. public void getHotspotResult(String universityName, String[] universityNames, Map jsonMap){
  2. ......
  3. if(!appResult.isEmpty()){//获取申报项目的TOP10热点
  4. List<Map<String, Object>> appList = new ArrayList<Map<String, Object>>();
  5. for(String name:appResult.keySet()){
  6. Map<String, Object> data = new HashMap<String, Object>();
  7. data.put("name", name);//节点名称
  8. data.put("size", appResult.get(name));//节点大小
  9. appList.add(data);
  10. }
  11. result.put("appResult", appList);
  12. }
  13. if(!graResult.isEmpty()){//获取立项项目的TOP10热点
  14. ......
  15. }
  16. ......
  17. }

4.3.4 项目结项预测实现

用户进入高校分析与决策模块,选中项目结项预测进行分析后,服务端会根据用户选定的高校在数据库中检索出挂靠在该高校下的所有未结项项目,然后根据程序设定,项目数据中的所属高校类别、负责人职称、负责人年龄、负责人性别、负责人学位、项目类型、学科门类、是否通过中检等属性会被向量化为预测因子。通过加载指定的预测模型,对上述处理好的未结项项目进行预测,所有的未结项项目都会有一个预测结果指代项目进行年数,将预测出的项目进行年数与该项目的申请年度相加即得预测的结项年度。最后将这些数据还原为原始的生产数据并组装成前端插件所需的数据格式,即可在界面上展示项目结项预测列表。其实现示意图如图4.6所示。


相关代码示例如下:

  1. public void getClassificationResult(String universityName, String[] universityNames, Map jsonMap){
  2. ......
  3. List<Object> projectTypeList = dao.query(projectTypeSqL);//未结项项目的项目类型
  4. List<Object[]> results = new ArrayList<Object[]>();//所有的预测结果
  5. List<Object[]> dataList = new ArrayList<Object[]>();//所有的预测结果的可视化优化结果
  6. ......
  7. if(results.size()>0){
  8. for(Object[] o:results){
  9. Object[] value = new Object[10];
  10. ......
  11. value[8] = Integer.parseInt(value[1].toString()) + Integer.parseInt(o[1].toString());//得到预测结项年度
  12. DecimalFormat df = new DecimalFormat("00.00%");
  13. String r = df.format(o[2]);//百分化预测概率
  14. value[9] = r;
  15. dataList.add(value);
  16. }
  17. jsonMap.put("classificationResult", dataList);
  18. }else jsonMap.put("classificationError", "此高校没有可供分析的数据!");
  19. }

4.3.5 相似性分析实现

用户进入高校分析与决策模块,选中相似性分析进行分析后,服务端会加载相应的聚类模型。用于生成聚类模型的属性有包括高校类别,讲师、副教授、教授的人数分布,管理学、经济学、法学等所有学科的项目发展状况在内的几十个维度的数据。通过调用Mahout的底层API,从指定模型中读取出所有高校以及所属的簇信息。这时,根据用户指定的高校,确定该高校所在的簇,然后遍历所有高校的簇信息,则与指定高校属于同一个簇的其他高校均为该高校的相似性高校。最后,将所有的相似性结果组装成前端插件所需的数据格式,即可在界面上展示相似性分析的列表。其实现示意图如图4.7所示。


相关代码示例如下:

  1. public void getClusteringResult(String universityName, String[] universityNames, Map jsonMap){
  2. ......
  3. map = clusteringTool.readCluster();//以[name->所属的簇]的方式读取聚类结果
  4. ......
  5. int cluster = map.get(universityName);
  6. for(String name:map.keySet()){
  7. if(map.get(name)==cluster && !name.equals(universityName)){//找出所有属于同一类的
  8. ......
  9. List<Object[]> value = dao.query(sql);
  10. univList.add(value.get(0));
  11. }
  12. }
  13. ......
  14. }

4.3.6 关联性分析实现

用户进入高校分析与决策模块,选中关联性分析进行分析后,服务端会加载相应的关联模型,通过调用Mahout的底层API,从指定模型中读取出所有的频繁模式集。这时,根据用户指定的高校,所有与该高校相关联的频繁模式都会被提取出来,然后,通过过滤自身并整合相同关联对象的关联度,最终得出指定高校的所有关联列表。从中截取关联度排名前10的数据,即为最终的关联性分析结果。最后,将结果数据组装成前端插件所需的数据格式,即可在界面上展示关联性分析的图。其实现示意图如图4.8所示。


相关代码示例如下:

  1. public void getAssociationResult(String universityName, String[] universityNames, Map jsonMap){
  2. ......
  3. //对所有频繁模式进行遍历
  4. for (Pair<String, TopKStringPatterns> fps : frequentPatterns) {
  5. if(fps.getFirst().equals(universityName)){
  6. String key = fps.getFirst();
  7. TopKStringPatterns value = fps.getSecond();
  8. ......
  9. //获取当前关键词key下所有模式
  10. List<Pair<List<String>, Long>> patterns = value.getPatterns();
  11. for(Pair<List<String>, Long> pair: patterns) {
  12. ......
  13. }
  14. ......
  15. }
  16. }
  17. ......
  18. }

4.3.7 个性化推荐实现

用户进入高校分析与决策模块,选中个性化推荐进行分析后,服务端会加载相应的推荐模型,这个模型来源于对历史数据中所有高校之间相互关联情况的分析。然后,通过调用Mahout底层的API,选择适当的相似性度量函数,对用户指定的高校进行个性化推荐。默认的推荐个数被设置为6。得到一组推荐结果后,以评分最高的一个高校为基准,以百分比的形式计算所有推荐高校的推荐度,将推荐高校数据与相应的推荐度一起组装成前端插件所需的数据格式,即可在界面上展示个性化推荐的列表。其实现示意图如图4.9所示。


相关代码示例如下:

  1. public void getRecommendationResult(String universityName, String[] universityNames, Map jsonMap){
  2. ......
  3. results = recommendationTool.getResult(universityName);//读取关于选定高校的所有推荐结果,包括被推荐项和推荐度
  4. ......
  5. List<Object[]> univList = new ArrayList<Object[]>();
  6. float base = Float.valueOf(results.get(0)[1].toString());
  7. for(Object[] o:results){
  8. DecimalFormat df = new DecimalFormat("00.00%");
  9. String r = df.format(Float.valueOf(o[1].toString())/base);//以最高推荐度为基准取百分比
  10. ......
  11. value[6] = r;
  12. univList.add(value);
  13. jsonMap.put("recommendationResult", univList);
  14. }
  15. }

4.3.8 文档导出实现

高校分析与决策模块最终的分析结果会以图表的形式在界面上呈现,当用户点击文档导出时,前端会将用于展现分析结果图表的JSON数据以及用于画图的SVG Code一并传回服务器。服务端会通过Batik插件将SVG Code转换成相应的PNG图片,用于后续的文档导出。然后,所有的JSON数据会经由iText的处理,以文字或表格的形式被编辑进PDF文档中。最后,插入之前处理好的PNG图片,则最终的文档处理完成。通过对响应的Response进行设置,用户的客户端浏览器就能自动的下载已经编辑好的PDF文档了。其实现示意图如图4.10所示。


相关代码示例如下:

  1. public String exportPDF() throws Exception{
  2. ......
  3. String pdfName = "基于" + dataMap.get("universityName") + "的高校分析与决策报告.pdf";
  4. ......
  5. Map disciplineCode =(Map)JSONObject.fromObject
  6. (chartMap.get("disciplineResult"));//highcharts图表svgCode
  7. ......
  8. SvgPngConverter.convertToPng(svgCode, fileName);//将SVG转换成本地图片
  9. ......
  10. OutputStream out = response.getOutputStream();
  11. Document doc = new Document(PageSize.A4, 20, 20, 20, 20);//设置PDF属性
  12. PDFTool pdfTool = new PDFTool(15, doc);
  13. ......
  14. pdfTool.addTitle("基于" + dataMap.get("universityName") + "的高校分析与决策报告", 25);
  15. pdfTool.addImage(ApplicationContainer.sc.getRealPath("/decisionSupport/temp/" + imageMap.get(key) + ".png"), cb, null);
  16. pdfTool.addTable(classificationHeader, classificationResults, relativeWidths);
  17. ......
  18. }

4.4 本章小结

本章主要介绍了决策支持系统的实现。首先简单地介绍了本课题的开发环境与框架配置;然后主要介绍了本系统的基础框架实现,包括数据仓库实现、联机分析处理实现、数据挖掘实现以及模型库实现;最后以高校分析与决策模块为例详细介绍了本课题的主要业务组件的实现,包括基础数据统计、学科发展趋势、项目热点分析、项目结项预测、相似性分析、关联性分析、个性化推荐以及文档导出。

5 系统测试

上一章详细地介绍了科研管理决策支持系统各个部分的实现原理和方式。本章将分模块对系统进行测试,并对测试结果进行分析。为了便于描述,本章将使用图片和表格来记录各项测试的结果。

5.1 高校分析与决策模块测试

测试主要是为了保证功能足够完整、系统足够健壮、用户界面友好并且响应时间合理。由于科研管理决策支持系统是基于B/S架构的Web应用系统,因此,其测试环境可以分为客户端和服务端两类,客户端笔者选择的是Chrome浏览器和自带的Firebug[67]插件,服务端则是使用的Tomcat应用服务器和Oracle数据库。

5.1.1 测试方案

高校分析与决策模块的功能测试主要包括分析参数配置、模型管理页面跳转、算法模型更新、执行分析、分析结果查看以及文档导出等内容,响应时间测试包括模型更新、分析结果查看以及文档导出等内容。
进行功能测试时,模拟普通用户进入高校分析与决策模块,通过高校弹出层指定待分析的高校,然后选择包括基本数据统计、学科发展趋势、项目热点分析、项目结项预测、相似性分析、关联性分析、个性化推荐这些分析内容中的一个或多个,对分析参数配置功能进行测试;通过点击模型管理按钮,对模型管理的页面跳转功能进行测试;通过选择热点索引、关联模型、聚类模型、分类模型、推荐模型之中的某个模型类型,并执行更新操作对算法模型更新功能进行测试;通过返回参数配置页面,点击开始分析按钮对分析执行功能进行测试;通过结果页面的列表和图片显示正常与否的判断对结果查看功能进行测试;通过点击PDF导出按钮对文档导出功能进行测试。
进行响应时间测试时,只需在相应的功能测试时记录响应时间即可。

5.1.2 测试结果分析

根据5.1.1节中描述的测试方案对高校分析与决策模块进行测试,其各项功能测试结果如表5.1所示。
表5.1 高校分析与决策功能测试结果

序号 功能 输入与动作 预期响应结果 实际响应结果 是否通过
01 进入高校分析与决策 点击界面的菜单栏 显示高校分析与决策配置页面 显示高校分析与决策配置页面
02 进入模型管理 点击模型管理按钮 显示模型管理页面 显示模型管理页面
03 配置模型更新类型 下拉框选择模型类型 下拉框正常,选择正常 下拉框正常,选择正常
04 更新热点索引 选择热点索引,点击更新按钮 前端弹层提示更新成功 前端弹层提示更新成功
05 更新聚类模型 选择聚类模型,点击更新按钮 前端弹层提示更新成功 前端弹层提示更新成功
06 更新关联模型 选择关联模型,点击更新按钮 前端弹层提示更新成功 前端弹层提示更新成功
07 更新分类模型 选择分类模型,点击更新按钮 前端弹层提示更新成功 前端弹层提示更新成功 是
08 更新推荐模型 选择推荐模型,点击更新按钮 前端弹层提示更新成功 前端弹层提示更新成功
09 选择高校 点击高校选择按钮,在弹出层中检索指定高校,并选中 检索正常,选择后有提示 检索正常,选择后有提示
10 分析基本数据统计 选中基本数据统计,点击分析按钮 页面跳转至结果查看页 页面跳转至结果查看页
11 分析学科发展趋势 选中学科发展趋势,点击分析按钮 页面跳转至结果查看页 页面跳转至结果查看页
12 分析项目热点 选中项目热点分析,点击分析按钮 页面跳转至结果查看页 页面跳转至结果查看页
13 预测项目结项 选中项目结项预测,点击分析按钮 页面跳转至结果查看页 页面跳转至结果查看页
14 分析相似性 选中相似性分析,点击分析按钮 页面跳转至结果查看页 页面跳转至结果查看页
15 分析关联性 选中关联性分析,点击分析按钮 页面跳转至结果查看页 页面跳转至结果查看页
16 个性化推荐 选中个性化推荐,点击分析按钮 页面跳转至结果查看页 页面跳转至结果查看页
17 分析结果查看 点击分析按钮,等待分析结果页面跳转 页面跳转成功,图表正常显示 页面跳转成功,图表正常显示
18 文档导出 结果页面点击PDF导出按钮 浏览器自动下载PDF文件 浏览器自动下载PDF文件
19 未选高校的异常 不选择高校,直接点击分析按钮 不可执行,弹层提示请选择高校 不可执行,弹层提示请选择高校
20 未选分析内容的异常 不选任何分析内容,直接点击分析按钮 不可执行,弹层提示请选择分析内容 不可执行,弹层提示请选择分析内容
21 未选模型类型的更新异常 不选任何模型类型,直接点击更新按钮 不可执行,弹层提示请选择模型类型 不可执行,弹层提示请选择模型类型

如表5.1的测试结果所示,高校分析与决策各部分功能均运行正常。用户的点击和输入操作也均能得到正常的响应,并且,在参数配置页面中所有的错误输入都会有异常提示,保证了系统的健壮性。高校分析与决策模块参数配置页面如图5.1所示,异常提示如图5.2所示。



高校分析与决策模块几项主要功能的响应时间测试结果如表5.2所示。
表5.2 高校分析与决策响应时间测试结果

序号 功能 处理数据量(条) 平均响应时间(s)
01 更新热点索引 数百至数千 6.27
02 更新聚类模型 1524 138
03 更新分类模型 12061 84
04 更新推荐模型 44212 27.3
05 更新关联模型 34166 41.5
06 查看分析结果 2.23
07 文档导出 5.29

表5.2列出了几个主要功能的处理数据条数和平均响应时间。在这部分的测试结果中,几种模型的更新操作耗时不等,但都明显较长,这里既有数据量的原因,也有算法本身运行机制的问题,带来了较大的计算开销,所幸模型更新可以离线处理,因此不会对用户在线使用产生影响。文档导出时浏览器有提示,这个响应时间在可接受的范围内。查看分析结果这个功能的响应时间略长,主要是由于服务端要逐一调用相应的功能组件进行数据分析并且还需将各部分的分析结果进行数据格式的转换和组装,然后将数据传回客户端,才能在前端页面上渲染出各种可视化的图表,对此笔者已经尽力去优化,目前的执行速度是不断优化后最理想的速度,在此基础上,还特地增加了前端的提示,能让用户感知到程序正在运行。分析过程执行完毕后,用户就能在页面上看到可视化的分析结果,如图5.3到图5.7所示。图5.3是分析与决策报告的第一部分内容,即基本数据统计,包括人员职称统计、成果类型统计以及项目学科统计;图5.4和图5.5则是分析与决策报告中的学科发展趋势的结果,图中的折线图代表指定高校优势学科历年来的发展趋势变化;图5.6包括项目热点分析和项目结项预测,其中项目热点分析是基于文本检索给出的词频热点,项目结项预测则是基于分类算法给出的预计结项年度以及相应的概率;最后,图5.7包括相似性分析、关联性分析以及个性化推荐这三个部分的内容,分别对应于聚类算法、关联算法和推荐算法的结果。






综上所述,高校分析与决策模块功能正常,响应合理,系统能够根据用户自定义的参数动态分析,并且能以清晰美观的可视化技术呈现最终的分析结果。

5.2 学科分析与决策模块测试

学科分析与决策模块的功能测试与5.1节类似,故不再列出详细的表格。几项主要功能的响应时间测试结果如表5.3所示。
表5.3 学科分析与决策响应时间测试结果

序号 功能 处理数据量(条) 平均响应时间(s)
01 更新热点索引 数百至数万 8.44
02 更新分类模型 11106 37.6
03 更新推荐模型 6494 12.6
04 更新关联模型 3551 2.94
05 查看分析结果 4.37
06 文档导出 8.61

表5.3列出了几个主要功能的处理数据条数和平均响应时间。由上表可知,学科分析与决策模块各项功能由于在处理的数据量上比高校分析与决策提了一个数量级,因此,各项功能的执行时间都有了显著的增长,考虑到数据量的增长情况,这个结果在可接受的范围。同样的,模型更新可以离线处理,文档导出有浏览器提示,查看分析结果有前端提示,因此,用户一直能感知到这种互动和功能执行过程,体验上就不至于会有很强的等待感。分析过程执行完毕后,用户能在页面上看到与图5.3到图5.7类似的可视化分析结果。

5.3 研究人员分析与决策模块测试

研究人员分析与决策模块的功能测试与5.1节类似,不再赘述。几项主要功能的响应时间测试结果如表5.4所示。
表5.4 研究人员分析与决策响应时间测试结果

序号 功能 处理数据量(条) 平均响应时间(s)
01 更新聚类模型 246149 126000
02 更新分类模型 11106 37.6
03 更新推荐模型 24656 134
04 更新关联模型 168881 25200
05 查看分析结果 1.94
06 文档导出 3.67

表5.4列出了几个主要功能的处理数据条数和平均响应时间。由上表可知,研究人员分析与决策模块各项功能在处理的数据量上比学科分析与决策又提了一个数量级,在这其中尤其以聚类模型和关联模型的更新耗时特别长,达到了数小时至数十小时的地步,究其原因,除了上文提到的数据量和算法本身运行机制的原因外,还因为本系统部署在单机环境下,因此执行时间随数据量的增大成倍的增长,基于此,后续会考虑将系统部署在分布式的环境下。同样的,模型更新可以离线处理,文档导出有浏览器提示,查看分析结果有前端提示,因此,用户一直能感知到这种互动和功能执行过程,体验上就不至于会有很强的等待感。分析过程执行完毕后,用户能在页面上看到可视化的分析结果,如图5.8到图5.9所示。


5.4 本章小结

本章主要对科研管理决策支持系统的测试工作作了介绍。首先按照业务模块的划分逐一介绍了各个模块的测试方案,并对测试结果进行了分析,然后给出了系统实际运行的截图。总体而言,本课题很好地实现了科研管理中决策支持的需求,达到了系统的设计目标,为科研数据的有效利用奠定了基础。

6 总结与展望

6.1 论文总结

本文是对科研管理决策支持系统的一个初步尝试,试图通过先进的计算机技术,实现对科研数据的综合分析,为科研管理过程提供有用的参考依据。以下是本文的主要工作内容:
1) 确定了课题需求。通过对科研数据的研究和科研管理过程的分析,确定了本课题要解决的实际问题,并对需求进行了拆解。
2) 完成了相关技术的选型和研究。广泛调研了相关技术,确定了本课题的技术选型,并对所使用的技术进行了深入的学习和研究,包括基于SSH的Web开发框架技术、数据仓库技术、基于MDX和Mondrian的联机分析处理技术、基于Lucene和IKAnalyzer的全文检索技术、基于Mahout的数据挖掘技术、基于Highcharts和D3的数据可视化技术以及基于iText和Batik的文档导出技术。
3) 完成了系统设计。研究了国内外相关课题的概况,确定了本课题的系统设计架构并完成了系统各个模块和功能组件的详细设计。
4) 完成了系统的实现与测试。基于前期的调研、学习、研究,编程实现了结合数据仓库、联机分析处理、数据挖掘和模型库的基础框架,并在此基础上实现了对高校、学科、研究人员的科研管理决策支持。
综上所述,本文介绍了基于Mahout的科研管理决策支持系统从需求分析、技术调研、系统设计、编程实现的完整过程,为同类系统的研究和实现提供了较高的参考价值。

6.2 论文展望

到目前为止,本文的研究已经结束,科研管理决策支持系统达到了最初设计的目标,但是还存在可以进一步扩展和完善的地方,以下从基础框架、算法、应用实例这三个方面作简要说明。
1) 基础框架的完善
目前的决策支持系统是基于数据仓库、联机分析处理、数据挖掘、模型库搭建的一套基础框架,这套框架虽然已经可以很好地完成决策支持的工作,但仍有不足。一方面,数据处理能力有限,可以考虑引进分布式的计算框架,如Hadoop;另一方面,目前这套框架与人的交互较少,如果能引入知识库和专家系统,将决策知识保存至知识库中,再经由专家的分析,能够更好地达到决策支持的目的。
2) 算法的扩展
目前系统中应用的算法主要有关联算法、聚类算法、分类算法、推荐算法。一方面,可以进一步扩展算法的种类,实现对数据更多角度的挖掘;另一方面,目前由于数据不够完整和数据量不够丰富,部分算法无法发挥理想的效果,如果后续能够在数据的完整性和丰富性上有所建树,则能显著提高算法的实际应用。
3) 应用实例的深化
目前科研管理决策支持系统实现了三个方向的实际应用,它们是高校分析与决策、学科分析与决策、研究人员分析与决策。后续可以更加深入的挖掘科研管理需求,争取基于科研管理决策支持系统实现更多的应用,更好地达到支持科研决策的目的。
总之,决策支持系统是结合了多种学科与技术的复杂系统,近年来在计算机技术和信息化发展的推进下,对决策支持系统的研究正成为一个热点课题。相信在不远的未来,决策支持系统会与更多的领域相结合以辅助科学决策。然而,要想实现更智能的决策支持系统,仍需不断的研究新理论、新方法,并与现阶段的研究理论相结合。希望本文的研究对决策支持系统在科研管理领域的建设做出一些贡献,同时也为决策支持系统在其他领域的应用提供一些参考。

致 谢

时光荏苒,三年的研究生生涯即将结束,我也将要告别这个陪伴了七年的校园。读研的三年,是我成长与收获的三年,我至今还能感受到读研以来,每天都觉得自己又收获到了新知识的那种欣喜,而这,离不开一路上对我指导和帮助的人们。在此,我要衷心地感谢那些一直以来关心、帮助和鼓励我的老师、同学、朋友和亲人。
感谢我的导师王玉明副教授,本论文是在他的悉心指导下完成的。王老师治学严谨,学识渊博,对所有的学生都关怀备至,耐心指导。在学习上,他倾囊相授,积极为实验室创造良好的学习氛围,引导我们自己不断的学习和进步;在工作上,他一丝不苟,不管对自己还是对他人都能做到严格要求,不妥协、不懈怠;在生活上,他嘘寒问暖,给实验室带来了家庭般的温暖。王老师的一言一行,让我受益匪浅,不仅在这三年的时间里教导了我,还将让我在今后的工作和生活中继续受益。
感谢实验室的同窗好友们,他们和我朝夕相处,一起学习、相互促进、共同进步。在与他们的工作学习中,我感受到了他们的激情和动力,这份激情也在激励着我前进。感谢他们的陪伴,祝他们未来前程似锦。
感谢我读研期间一直陪伴着我的老同学们,他们给了我极大的关怀和守护,没有他们,也许我就无法在遇到挫折和困苦的时候坚持下来,重新燃起希望和斗志。虽然以后大家都会各奔东西,但我相信友谊天长地久,这份情永远不会变。
最后,我要感谢我的父母,他们对我无微不至的关怀和爱护,是我坚强的后盾,有了他们的支持,我才能走得更远,飞得更高,祝他们二老身体健康,万事如意,心想事成。我还要感谢我的姐姐,在成长的过程中,姐姐给了我很大的呵护和陪伴,祝她和姐夫婚姻美满,祝她肚中的宝宝身体健康,幸福成长。


[1] 高洪深. 决策支持系统(DSS)理论与方法(第4版). 北京: 清华大学出版社, 2009. 1-2
[2] 李志刚. 决策支持系统原理与应用. 北京: 高等教育出版社, 2005. 11-16
[3] 陈艳春. 决策支持系统设计与开发. 北京: 中国铁道出版社, 2007. 10-12
[4] Walus Y E, Ittmann H W, Hanmer L. Decision support systems in health care. Methods of Information in Medicine, 1997, 36(2):82-91
[5] Pinto T, Sousa T M, Praça I, et al. Support Vector Machines for decision support in electricity markets׳ strategic bidding. Neurocomputing, 2016, 172: 438-445
[6] Ltifi H, Mohamed E B, Ayed M B. Interactive visual knowledge discovery from data-based temporal decision support system. Information Visualization, 2015, 14:1-20
[7] Costa A L, Cunha M C, Coelho P A L F, et al. Decision Support Systems for Real-World High-Speed Rail Planning. Journal of Transportation Engineering, 2016: 04016015
[8] Murla D, Gutierrez O, Martinez M, et al. Coordinated management of combined sewer overflows by means of environmental decision support systems. Science of the Total Environment, 2016, 550:256-264
[9] Li N, Tan R, Huang Z, et al. Agile Decision Support System for Aircraft Design. Journal of Aerospace Engineering, 2015, 29(2)
[10] Sun X Y, Dai J G, Wang H L, et al. Decision Support System for Optimizing the Maintenance of RC Girder Bridge Superstructures in Consideration of the Carbon Footprint. Journal of Bridge Engineering, 2015
[11] 孙培芬, 王培, 刘卉. 农田信息管理决策支持系统的设计与实现-基于Silverlight. 农机化研究, 2015(7):156-159
[12] 姬成敏, 龚延成. 军事物流决策支持系统的功能需求与技术实现. 实验室研究与探索, 2015(4):249-251
[13] 李玮瑶, 甘泉, 刘建粉. 基于M-agent的电网运行智能决策支持系统研究. 电子设计工程, 2015, 23(14):33-35
[14] 张明晖. 消防决策支持系统的发展与应用. 消防科学与技术, 2015(5):642-644
[15] 梁郑丽. 决策支持系统理论与实践. 北京: 清华大学出版社, 2014. 13-18
[16] 刘京华. Java Web整合开发王者归来. 北京: 清华大学出版社, 2010. 6-8
[17] Brown D, Davis C M, Stanlick S. Struts 2 in action. Shelter Island: Manning, 2008. 2-14
[18] 孙鑫. Struts2 深入详解. 北京: 电子工业出版社, 2008. 10-36
[19] Walls C. Spring in Action. Shelter Island: Manning, 2011. 1-24
[20] 计文柯. Spring技术内幕. 北京: 机械工业出版社, 2009. 16-80
[21] 王福强. Spring揭秘. 北京: 人民邮电出版社, 2009. 122-142
[22] Christian Bauer, Gavin King. Hibernate in Action. Shelter Island: Manning, 2004. 3-14
[23] 夏昕 曹晓钢 唐勇. 深入浅出Hibernate. 北京: 电子工业出版社, 2007. 164-200
[24] 孙卫琴. 精通Hibernate. 北京: 电子工业出版社, 2010. 123-185
[25] 龙晓泉. 基于Oracle的实时数据仓库技术研究与应用: [硕士学位论文]. 长沙: 湖南大学, 2010.
[26] Inmon W H. Building the data warehouse. Chichester: John Wiley & Sons, 2005. 1-299
[27] 李超. 浅析数据仓库、联机分析处理与数据挖掘. 光盘技术, 2009(1):12-12
[28] 卢硕. 数据仓库和数据挖掘在决策支持系统中的应用研究: [硕士学位论文]. 西安: 西安电子科技大学, 2006.
[29] 张钢, 李哲. 联机分析处理综述. 吉林广播电视大学学报, 2008(3):96-99
[30] 王付山, 潘东静. 联机分析处理技术的应用研究. 德州学院学报, 2006, 22(5):96-99
[31] Spofford G, Harinath S, Webb C, et al. MDX Solutions: With Microsoft SQL Server Analysis Services 2005 and Hyperion Essbase. Chichester: John Wiley & Sons, Inc., 2005. 3-39
[32] Back D W, Goodman N, Hyde J. Mondrian in Action: Open source business analytics. Shelter Island: Manning, 2013. 6-54
[33] 李永春, 丁华福. Lucene的全文检索的研究与应用. 计算机技术与发展, 2010, 20(2):12-15
[34] Mccandless M, Hatcher E, Gospodnetic O. Lucene in Action, Second Edition: Covers Apache Lucene 3.0. Shelter Island: Manning, 2010. 1-42
[35] 任树怀. Lucene搜索算法剖析及优化研究. 图书馆杂志, 2014(12):17-23
[36] 陈航哲. 基于Lucene的垂直搜索引擎的研究与应用: [硕士学位论文]. 广州: 暨南大学, 2010.
[37] 柴洁. 基于IKAnalyzer和Lucene的地理编码中文搜索引擎的研究与实现. 城市勘测, 2014(6):45-50
[38] Han J, Kamber M, Pei J. Data mining: concepts and techniques. Singapore: Elsevier, 2011. 6-16
[39] Tan P N, Steinbach M, Kumar V. Introduction to data mining. Boston: Pearson Addison Wesley, 2006. 3-19
[40] Anil R, Dunning T, Friedman E. Mahout in action. Shelter Island: Manning, 2011. 1-354
[41] 曹政. 基于Mahout框架的Hadoop平台作业日志分析平台设计与实现. 软件, 2015, 36(11)
[42] Agrawal R, Imielinski T, Swami A. Mining Associations between Sets of Items in Massive Databases//Proc. of ACM SIGMOD. 1993: 207-216
[43] R. H L. The Diaper/Beer Connection. Chief Marketer, 2011
[44] Brin S, Motwani R, Ullman J D, et al. Dynamic itemset counting and implication rules for market basket data//ACM SIGMOD Record. ACM, 1997, 26(2): 255-264
[45] Han J, Pei J, Yin Y. Mining frequent patterns without candidate generation. Acm Sigmod Record, 2000, 29(2):1-12
[46] Tripathy B K, Ghosh A. Data Clustering Algorithms Using Rough Sets. Handbook of Research on Computational Intelligence for Engineering, Science, and Business, 2012: 297
[47] Kaufman L, Rousseeuw P J. Finding groups in data: an introduction to cluster analysis. Chichester: John Wiley & Sons, 2009. 3-58
[48] Parsons L, Haque E, Liu H. Subspace clustering for high dimensional data: a review. ACM SIGKDD Explorations Newsletter, 2004, 6(1): 90-105
[49] Friedman J, Tibshirani R. Special Invited Paper. Additive Logistic Regression: A Statistical View of Boosting: Discussion. Annals of Statistics, 2000, 28(1):2000
[50] Boser B E, Guyon I M, Vapnik V N. A training algorithm for optimal margin classifiers// PROCEEDINGS OF THE 5TH ANNUAL ACM WORKSHOP ON COMPUTATIONAL LEARNING THEORY. 1992:144--152
[51] Duda R O, Hart P E, Stork D G. Pattern classification. Chichester: John Wiley & Sons, 2012. 12-65
[52] Breiman L, Cutler A. A deterministic algorithm for global optimization. Mathematical Programming, 1993, 58(1-3): 179-199
[53] Zhao Z D, Shang M S. User-based collaborative-filtering recommendation algorithms on hadoop//Knowledge Discovery and Data Mining, 2010. WKDD'10. Third International Conference on. IEEE, 2010: 478-481
[54] Sarwar B, Karypis G, Konstan J, et al. Item-based collaborative filtering recommendation algorithms//Proceedings of the 10th international conference on World Wide Web. ACM, 2001: 285-295
[55] Lee D S, Kim G Y, Choi H I. A Web-based collaborative filtering system. Pattern Recognition, 2003, 36(2):519-526
[56] 王媛媛, 丁毅, 孙媛媛,等. 数据可视化技术的实现方法研究. 现代电子技术, 2007, 30(4):71-74
[57] 张金磊, 张宝辉, 刘永贵. 数据可视化技术在教学中的应用探究. 现代远程教育研究, 2013(6):98-104
[58] Kuan J. Learning Highcharts 4. Birmingham: Packt Publishing Ltd, 2015. 7-21
[59] Meeks E. D3. js in Action. Shelter Island: Manning, 2015. 6-37
[60] Lowagie B. iText in Action. Shelter Island: Manning, 2011. 34-92
[61] 王丽萍, 秦永平. 基于iText的PDF报表设计. 电脑知识与技术:学术交流, 2007, 2(8)
[62] 胡荣磊, 左珮良, 蒋华. 基于JavaWeb的PDF安全编辑系统的设计与实现. 北京电子科技学院学报, 2015(2):68-73
[63] 陈琳, 宋国永. 使用Apache Batik生成基于SVG的Web统计图表. 科技信息:学术研究, 2007
[64] 王健, 陈剑云, 张冬波. 基于SVG及Batik平台的监控绘图软件的设计与实现. 平顶山工学院学报, 2006, 15(5):14-17
[65] T Bray, C M Sperberg-McQueen. Extensible Markup Language (XML). World Wide Web-internet & Web Information Systems, 1998, 39(4):115-146
[66] 王晓霞, 王翠茹, 王涛. 基于Web和数据仓库的决策支持系统研究与应用. 计算机工程与应用, 2003, 39(22):223-225
[67] Mittal, Deepak, Chandan Luthra. Firebug 1.5: Editing, Debugging, and Monitoring Web Pages. Birmingham: Packt Pub Limited, 2010. 109-111
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注