数据挖掘方兴未艾,大量新事物层出不穷。本系列将介绍我们自主设计的数据挖掘软件平台。与大家共同分享对知识,微博,人际等复杂网络的分析,以及对自然语言处理的见解。
一、我们需要怎样的数据挖掘系统
一直以来,以高校为代表的学术界和以公司为代表的商业界,都有很大的隔阂。学术界普遍不会做产品,商业界普遍不会搞研究。如果两者都强,那就是美国军方了。
在数据挖掘领域更是如此,大量关于复杂网络,自然语言处理的牛文层出不穷,却被研究机构和大公司养在深闺人未识。绝大多数智能机器学习算法被封装在基础层中,以潜移默化的方式服务用户(比如用户推荐等),普通用户无法将其用于自己的应用场景。 而以SPSS为代表的统计和商业智能为核心的平台,使用复杂,结构封闭,它们以统计为核心,但在真正的“智能”领域,依旧缺乏火候。因此,我们需要能面向普通用户的易用系统,甚至不需要写脚本。
说到数据挖掘,就一定要和“大数据”放在一起。可是,几百万条的数据,根本不算是大数据,一台笔记本都能在数小时内处理完成,更不需要用复杂的分布式引擎去完成(可能为了实现这套算法,开发时间就比使用时间都长)。而真正的应用场景,数据越大,反而越不值钱,99%都是百万级以下的数据量。因此,我们需要能在笔记本电脑上良好工作的系统。
对于普通用户,他希望能简单直接的看到分析结果,了解复杂数据间的网络关系,了解数据的地理分布,了解如何被分类。因此,我们需要强大的可视化工具。
现有的种种功能,也许在未来的应用场景中依然不够完备。因此平台的功能需要随时扩展,甚至面向行业做专业的定制服务。我们需要灵活的,可扩展性强的系统。
总结以上观点,我们要开发一套使用简单,易于扩展,可面向领域,强化可视化和服务性,整合从数据导入到分析和可视化完整流程的数据挖掘系统,体现自己的独特优势,于是,该平台诞生了。
ITTC数据挖掘平台介绍(七)强化的数据库, 虚拟化,脚本编辑器
二. 如何与已有相关工具交互
1. 与Hadoop等开源分布式框架的交互
我们不需要重头开发自有的分布式平台,要做好的是前台和后台的接口。Hadoop已经成为分布式处理的事实标准,通过WebService和RPC等方式,打通平台间的通信。如此一来,Hadoop不需要与真实数据做交互,它要处理的,仅仅是软件平台传给它的抽象数据类型。 这样,Hadoop就可只关心算法逻辑,大大减轻传输数据量。而平台也能充分利用分布式系统轻松实现并行化。
2. 与SPSS和EXCEL等成熟商业统计系统的交互
论统计功能,我们无法与这些成熟平台相提并论,但系统可以方便的生成供这些工具使用的脚本和业务逻辑,减轻分析负担。
该平台的主要技术特征有:
1. 集成了从数据采集/存储,分析(聚类,分类,语义推断等) ,可视化和其他服务。
2. 组件式结构,良好的扩展性,所有的功能和模块以插件接入系统。通用算法可对所有实现一定接口的数据实现。
3. 前端使用.NET开发,后端使用
4. 目前支持对新闻,微博,科研项目/专利/论文和知识网络分析。
5. 后台可采用hadoop云计算平台加速计算,并通过跨平台交互技术实现访问。
下图是该软件的结构:
本平台基于作者开发的XFrmWork框架之上,XFrmWork提供了多数底层服务,具体介绍请看这里。
下面,我们将会介绍其中的一些技术和实现结果,与大家分享。本节主要介绍软件的一些功能。
二. 软件特性介绍
1. 数据系统
(1)数据”组件“概念
为保证良好的扩展性以支持当前和未来的需求,数据类型被抽象成众多接口。例如”文章“类型可实现分词处理,便需要实现ISegWordable接口,若要实现位置检索,也需实现相应的接口。算法在处理数据时,处理的是接口而非实体。
例如, 科研项目数据类型实现了关系计算,分词和位置检索接口.
[XFrmWork("科研项目", "IComputeable", "科研项目数据", "")]
public partial class ProjectInfo : IRelationComputeable, ISegWordable, IGeoPositionSearchable
不同数据类型的静态特征,如表格样式,绘图形状等特点,都通过静态方法呈现。系统通过反射静态方法获得。
所有的数据类型都实现了IComputable接口,从而满足基本的检索,存储服务。
通过以上技术,使得软件/算法彻底与数据类型无关,它们在编程时面对的都是接口。 分词算法不需要考虑是哪种算法类型。界面显示不考虑数据类型的同时,又能获得个性化的视觉效果。
(2)数据存取
系统的数据访问层通过Entity Framework实现,可方便的兼容SQL Server ,MYSQL等主流数据库,并提供高效的存取修改机制。
同样,软件可读取XML/Text,通过序列化或者特定的编码方法读取外部的数据文件。
所有的数据在送入算法模块前,都被抽象为数据容器集合,供算法调用:
(3)爬虫和API调用器
除了常规的数据导入,平台还集成了爬虫和API调用功能。
目前已经开发了知网数据爬虫,新闻数据爬虫等。API方面,可方便的调用微博等主流SNS网站的用户数据:
这些数据都可以存入数据库,或者作为算法数据源传给算法模块。
2. 算法系统
( 1)不同功能的算法模块
算法模块通过插件形式接入系统,这些算法包括基本的分词、数据统计等,也包括可视化类别如地图,布点等,或者针对特定数据类型如微博的关系分析等。
如上图,您可以将这些算法方便的拖动到执行列表中。
在配置菜单中,可以选择算法要处理的数据源,同时可设置算法对应的参数。
(2)算法自动组装
为了在模块级别上更好的支持代码重用,系统采用了算法组装技术。 我们可考虑类似LabView的G语言,不同的算法模块具有特定的输入和输出,符合匹配的输出可作为某一模块输入端的数据信息。例如,分词模块需作为很多算法的“预处理”模块,因此实现了ISegWordMethod接口,同时可以向外提供对应的分词数据。
如下图:
以上,计算方法A,B作为计算方法C的输入,当A,B计算完成后,会自动将结果传给C,C继续计算。若希望了解更详细的细节,可参考我的博文:实现自组装的插件技术。
(3) 算法服务:多线程并行和进度指示等
系统充分考虑了实际开发的方便性,在底层为算法提供了调试输出工具,进度指示工具和后台线程。算法编写者可不考虑多线程/并行,这些都由平台在底层自行完成。
3.可视化系统
数据挖掘的重要特性,就是将隐含于海量数据中的关系和知识展示出来,展示的技巧和效果,最终直接影响到用户的接受度和信息有效性,因此我们在可视化上做了大量的工作。
所有的参数都可以图形化配置,采用简单的拖拽方式进行操作。结果以列表,柱状图,曲线,地图地标和网络视图表示。同时可提供针对特定数据的可视化显示实现。
(1)数据列表
类似DataGrid, 通过订制特别的ListView,可呈现列表数据,同时用户可对这些数据进行筛选,排序等操作。
(2)可视化画布
该画布可作为显示数据间关系网络的利器。
其他的可视化介绍将会在相关文章中进一步介绍,此处从略。
三. 总结
本文介绍了数据挖掘平台的主要软件特性,后期将会进一步介绍数据挖掘的一些经验,以及对应的结果。欢迎讨论!