这个集成R语言的数据挖掘平台是当时为中国软件杯比赛做的一个系统,由于时间太紧,当时开发只用了一周的时间,不过前前后后用了大半年来学习和熟悉R语言,深深感觉到R语言真的是数据分析的一个利器,内置的各种分析包大大简化了数据分析的过程,只需要传参调用即可,再也不需要读懂算法才能完成分析了。但是,R语言当前还是需要以命令行的形式使用的,RStudio也只是优化了应用程序的界面,没有方便的针对业务人员的一个应用。我们做这个平台的初衷就是:
- 图形可视化。让用户使用图形化界面进行操作。用户可以设置数据来源,选择分析方法,设置分析参数,建立分析流程,不用编写R代码就能够进行数据分析,得出结果。
- 多种数据分析方法。系统提供分类、聚类、关联规则挖掘、时间序列等多种分析方法,里面又内置多种不同的分析算法。
- 大数据分析。能够支持TB级数据。
所以一切的开发都围绕着这三个方向来:
- 实现Java调用R来画图,并用Struts2+Hibernate开发网站进行呈现。
- 了解各种数据分析方法,用Java调用R进行算法实现。
- 搭建分布式环境,用Hadoop实现KMeans和KNN。
在初步调研后,我们很快确定了系统架构(这样的架构在当时能够做出来现在想想也是挺有模有样的。):
以及功能模块图:
下面就分别对这些模块进行介绍:
数据上传、摘要模块
流程图
功能
本模块主要包括了两个部分,一部分负责文件上传,一部分负责数据摘要的产生。在数据上传中,选择我们需要上传的文件,上传后数据将存储在服务器,然后我们设置数据参数,其中有数据分隔符,要跳过的行数,是否存在空缺值等。系统将自动分析出数据集相关信息,并将数据集摘要、数据摘要与原始数据显示给用户。显示的信息包括数据每一维的名字,每维的中位数,平均数,最大值,最小值缺失值比例等。通过数据摘要,用户可对数据集有整体的理解,系统还提供了数据可视化、判断相关性、检验正态性、识别离群点等功能。
实现原理
文件上传通过Ajax + Struts2实现,在项目中我们设定每次上传单个文件,文件大小为1G,后续可根据需求设定文件大小阈值。
在上传数据至服务器后,系统将数据集载入内存,通过用户设定的读取参数使用R语言read函数进行读入。读入方式如下:
在读入数据后,系统计算出数据集和数据的摘要,包括,计算方法如下:
系统提供数据可视化功能,可根据数据集的属性显示相应的图像。系统提供的图像如下表所示:
系统还提供判断相关性、检验正态性以及识别离群点的功能。
用户可通过绘制散点图、气泡图,以及散点图矩阵对数据相关性进行可视化。
- 散点图可以一次对两个定量变量的关系进行可视化。
- 在散点图矩阵中则可以看到所有指定变量之间的二元关系。
- 在气泡图中,可以先创建一个二维散点图,然后用点的大小来代表第三个变量值,从而更加明确的显示出变量之间的关系。
用户可以通过绘制QQ图来检验正态性
- QQ图通过绘制变量值和正态分布的理论分位数的散点图。同时,它能够给出正态分布的95%置信区间的带状图。
另外,在这里,用户可以通过绘制点图、箱线图以及直方图来初步的检验离群点。
- 当有离群值时,点图在原有数据的基础上分别显示了数据集的均值、均值加一个标准差,以及中位数,从而提供变量的分布信息。
- 箱图能够快速的提供变量分布的一些关键属性的摘要,箱图上方小横线下面或者下方小横线下面的小圆圈表示与其他值相比特别大或者特别小的值,通常被认为是离群点。
- 平滑版本的直方图,通过在X轴附近绘制变量的实际值,从而更容易识别离群点。
以上分析图像的生成方法如下表所示:
数据预处理模块
流程图
功能
在预处理模块,系统提供了缺失值处理以及噪声点处理两项功能。
在缺失值处理中,系统将列出缺失值记录列表,包括含有缺失值的行记录 。在左下方将列出缺失值信息的散点图、真实值与缺失值矩阵图、以及数据集缺失值模式图,用户可以通过图形直观的看出数据集中的缺失值。
系统还提供了缺失值处理的五种方法,包括简单插值估计,用户可选择用中位数、平均值、最大值、最小值 、一分位以及三分位对数据进行简单插值估计。用户还可以使用基本时间尺度内插、等距间隔插值、个案删除等方法,对于缺失值数据量较大的数据集,可以选择大量缺失值处理方式进行数据预处理。
实现原理
系统通过读取数据集,使用!complete.cases方法获取含有缺失值的数据框,对其进行统计,将含有缺失值的记录以列表形式显示出来,并通过绘制缺失值信息散点图、真实值与缺失值矩阵图,以及缺失值模式图三种图形可视化缺失值。绘制图形方法如下:
用户通过图形对缺失值可视化后,可选择处理缺失值的方法,系统提供了五种基本方法:简单插值估计、基本事件尺度内插、等距间隔内插、个案删除以及大量缺失值处理。其实现方法如下:
用户上传数据后可以对上传的数据进行异常点检测,异常点检测主要包括两种方式,一种是QQ图正态性异常点检测,还有一种是线性回归异常点检测。
- QQ图异常点检测,通过对用户选定的属性进行QQ图显示,用户可以通过图很直观的看出数据是否满足正态性,如果不满足正态性,用户将需要对数据进行一定的调整
- 线性回归异常点检测是通过对用户选定的属性进行回归建模,然后通过outlierTest函数对模型进行检测,列出数据中的异常点。