首页 百科知识 数据挖掘工具语言的使用

数据挖掘工具语言的使用

时间:2022-10-04 百科知识 版权反馈
【摘要】:R语言是一套完整的数据处理、计算和制图软件系统。R语言是自由、开源的软件平台,它不仅提供了相关语法,而且拥有完整体系的数据分析工具,此外还为数据分析结果的显示提供了强大的图形功能。R语言可以一次性对向量的每个元素进行操作,效率极高。目前大约有2000多个R语言上的程序包,覆盖了统计、数据分析、图形输出、文本处理、信息过滤以及与其余平台交互等各个领域。

实验目的

1.了解常见数据挖掘工具。

2.掌握R语言的基本使用方法。

3.学习利用R语言进行文本处理的过程与步骤。

实验内容

1.安装R语言以及相关程序包。

2.熟悉R语言常见命令。

3.利用tm包进行简单文本挖掘。

预备知识

一、常见统计、数据挖掘工具

工欲善其事,必先利其器,良好的工具将大大有利于数据挖掘过程的展开与推进。在实践的过程中,可以自己编写工具程序实现相关功能,也可以利用现有软件与工具。目前,已经出现了大量的数据挖掘工具与平台,下面简要介绍目前常见的一些工具与平台。

·MATLAB

MATLAB是美国MathWorks公司出品的商业数学软件,它提供了算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及需要有效数值计算的众多科学领域提供了一种全面的解决方案

·SPSS

SPSS(Statistical Product and Service Solutions,统计产品与服务解决方案)是IBM公司推出的一系列用于统计学分析运算、数据挖掘、预测分析和决策支持任务的软件产品及相关服务的总称,它有Windows和Mac OS X等版本,统计能力强大,操作界面极为友好,输出结果美观。

·SAS

SAS(Statistical Analysis System)是一个模块化、集成化的大型应用软件系统。SAS系统基本上可以分为四大部分:SAS数据库部分、SAS分析核心、SAS开发呈现工具、SAS对分布处理模式的支持及其数据仓库设计。

SAS提供了从基本统计数的计算到各种试验设计的方差分析、相关回归分析以及多变数分析的多种统计分析过程,几乎囊括了所有最新分析方法,其分析技术先进、可靠。

·WEKA

WEKA的全名是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis),同时WEKA也是新西兰的一种鸟名,而WEKA的主要开发者来自新西兰。WEKA作为一个公开的数据挖掘工作平台,集合了大量能承担数据挖掘任务的机器学习算法,包括对数据进行预处理分类、回归、聚类、关联规则以及在新的交互式界面上的可视化。

·R语言

R语言是一套完整的数据处理、计算和制图软件系统。其功能包括:数据存储和处理系统;数组运算工具(其向量、矩阵运算方面功能尤其强大);完整连贯的统计分析工具;优秀的统计制图功能;简便而强大的编程语言。R语言可操纵数据的输入和输出,可实现分支、循环,用户可自定义功能。

其中MATLAB、SPSS、SAS都是商业化的软件,使用时需要购买,而WEKA和R语言是免费的。

二、R语言简介

R语言是新西兰奥克兰大学的两位教授在1996年发明的,是一个可以用于统计分析、数据挖掘等各种数据应用领域的编程语言和环境。R语言不仅本身开源免费,而且还提供了各种免费程序包。

在http://cran.r-project.org/网站上可以下载到支持Mac OS、Windows、Linux等多个操作系统的最新版本的R语言,该网站还提供了R语言的源程序并收录了各种用户编写的程序包。例如,借助于RMySQL程序包,可以使得用户便捷地在R语言中访问My SQL数据。

三、R语言的特点

R语言是自由、开源的软件平台,它不仅提供了相关语法,而且拥有完整体系的数据分析工具,此外还为数据分析结果的显示提供了强大的图形功能。R语言的主要特点如下:

(1)语法简单。

R语言是一个解释型语言,提供了变量、语句、函数等常见程序设计概念,它的语法简单易学,具有程序设计经验的学习者可以很快上手和熟练。

(2)向量化。

R语言可以一次性对向量的每个元素进行操作,效率极高。因此在能够用向量化直接解决的问题上,要尽量避免用循环来解决。

(3)绘图功能强大。

R语言提供了强大的绘制图形的功能,可以输出多种折线图、柱状图、饼图等图形,并便捷地输出到显示器、图片文件或pdf文件中。

(4)扩展性好,程序包多。

R语言得到了全世界大量专业人士的支持,开发出了大量的程序包并可免费直接下载使用。目前大约有2000多个R语言上的程序包,覆盖了统计、数据分析、图形输出、文本处理、信息过滤以及与其余平台交互等各个领域。

实验原理

一、R语言的基本命令

R语言是一种解释型语言,它是区分大小写的,R语言携带了一个集成环境,可以输入命令并查看运行结果。同样也支持把一系列命令存储在脚本文件中批量执行。

R语言中主要有对象和函数两个概念,一切数据都存储在对象中;R语言的函数包括系统函数和用户自定义函数。

和大多数程序设计语言如C、C++和Java不一样的是,R语言中的变量不用预先定义就可以直接使用。

二、R语言的基本数据结构

R语言的基本数据类型包括:字符型、逻辑型、数值型和复数型。但为了便于数据处理,R语言中有多种数据结构,主要包括:向量、矩阵、数组、数据框、因子以及列表。

(1)向量。

向量是R语言中最基本的数据对象,可以存储一组基本类型相同的数据,可以通过length()函数获取一个向量的大小,也可以通过“向量名[序号]”这样的方法来访问向量中的元素。但值得强调的是:R语言中的下标是从1开始编号的,如x[1],也可以简单地用C和C++中的一维数组来理解R语言中的向量。R语言还有一个特别强大的地方是:可以对向量进行整体运算,图10.1展示了一个向量使用的例子。

图10.1 在R语言中使用向量的例子

图10.1中首先把由5个数字构成的向量赋值给x;然后利用length函数计算了向量x的长度;接着利用sqrt函数计算了向量x的平方根并赋值给y;最后输出y的时候可以看到向量x中的每一个元素都被计算了平方根,充分体现了R语言向量化运算的特点。

(2)矩阵。

向量是一个一维的线性表,但是真实世界有些数据是有维度的,例如,10个同学3门课的考试成绩,就可以看成是一个10行3列的数值型矩阵。

R语言的矩阵带有行、列两个维度,因此可以用C和C++中的二维数组来理解R语言中的矩阵,可以通过两个下标访问矩阵中的指定元素,也可以省略一个下标直接得到矩阵的一行或者一列。

图10.2中演示了如何把向量转换为矩阵、如何初始化一个矩阵以及如何访问矩阵的元素。

图10.2 矩阵的使用实例

图10.2中首先利用冒号生成了1到10之间的序列并赋值给向量x;然后使用dim函数把x变成一个2行5列的矩阵;接着是演示应用matrix函数直接创建一个2行5列的矩阵的做法;最后展示了访问矩阵的一个元素、一行以及一列的方法。

(3)数组。

R语言中数组是矩阵的扩展,向量的维度是1,矩阵的维度是2,而数组的维度在2之上,因此访问数组的元素需要两个以上的下标。借助于array函数,可以很方便地创建一个数组。图10.3显示了一个数组使用的典型实例。

图10.3 数组使用实例

图10.3中首先利用array创建了一个1到18的序列;然后把它们转换为一个3×3 ×2的数组;根据x的显示情况,我们可以看到该数组可以理解成是两个矩阵的集合。可以通过写三个下标访问该数组指定的元素,也可以通过省略下标访问该数组的指定行、列、矩阵。

(4)数据框。

矩阵中的每个元素数据类型必须相同,但在数据挖掘的时候,经常会存在一个二维表的每一列数据类型不完全相同的情况,数据框就是为此而创建的。可以把数据框理解为关系型数据库中的一张表,表的每个字段允许类型不同,因此数据框的每列数据类型可以不同。数据框的每一列可以有名称,可以用data.frame直接创建一个数据框,图10.4演示了数据框的简单使用。

图10.4 数据框使用实例

图10.4中首先定义了一个数据框,该数据框的第1列是字符型,第2列是数值型,显示该数据框的时候,显然就是一张二维表,可以通过两个下标访问数据库的指定元素;也可以通过省略一个下标访问指定的列或者指定的行,而且也可以利用数据库列的名称进行访问。

(5)因子。

因子类似于C和C++的枚举,就是用一个符号代表一个数值。因子的值在R语言中叫因子水平。使用因子的优点是可以大大增强可读性,使得数据更加有意义,但显然因子和枚举都适用于取值个数是固定的、有限的。图10.5中演示了把一个星期每天简称的英文字母变成因子的过程。

图10.5 因子使用实例

图10.5中首先把星期的缩写单词用字符型做成了一个向量,显示该向量的时候,每个单词都带有双引号,但是执行x<-factor(x)之后,它们就变成了因子;再次输出x的时候,这些单词已经不带单引号,而且在下面列出了因子的全部水平。

(6)列表。

列表也可以看成是一个向量,但这个向量的每一个元素允许类型不同,它的每一个元素可以是向量、矩阵或者数组这样的对象。例如,某个列表中可能是若干向量、矩阵、数据框,甚至其他列表的组合。可以使用list函数创建列表,并且在创建的时候给每一个元素一个名称。图10.6演示了一个具有三个元素的列表。

图10.6 列表的使用实例

图10.6中分别准备了向量、矩阵和数据框,然后用list函数把它们组成列表,并把列表的第一个元素命名为weekday;然后通过列表名加下标的方法访问列表的元素,当然用列表名和元素名称的组合同样可以访问列表的元素。

三、第三方包的安装与使用

全世界数以万计的开发者参与到R语言的程序包的开发中来,提供了大量免费程序包,解决了许多实际问题。例如,借助于RODBC包就可以通过ODBC访问各种数据库;通过ROracle、RMySQL、ESQLite等就可以直接便捷地访问相应的数据库;RJava是一个R语言和Java语言的通信接口,通过底层JNI实现调用,允许在R中直接调用Java的对象和方法;利用rmmseg4j包可以很方便地实现中文分词

安装第三方包的过程便捷、快速,在安装好第三方的包之后,就可以通过library命令引用包,从而使用包中的命令与功能。

实验环境

一、操作系统

Windows 2000以上版本,例如,Windows 2000/XP/Vista/7/8/8.1/10等。

二、开发环境

x86或者x64平台的R,版本号R3.0.2以上。

实验步骤

一、安装R语言,熟悉R语言的环境

R语言可以在http://cran.r-project.org上免费下载,该网站提供了支持Windows、MAC OS和Linux三个操作系统版本的R语言安装程序。为了提高安装速度,R语言在http://cran.r-project.org/mirrors.html网页上列出了目前所有的镜像服务器,用户可以根据自己的地理位置情况加以选择。因为有良好的国际化设计,中国大陆用户在安装R语言时可以选择简体中文。

本书以Widows 7 x64、R3.1.2版为例进行描述,整个安装过程清晰、便捷,在此不再累述。R语言安装后界面参见图10.7,这是一个典型的多文档程序,在主窗口中有多个子窗口。下面对R语言环境中的组成元素分别加以简单介绍。

图10.7 R语言的界面

1.菜单栏

R语言的菜单栏比较简单,菜单项会随着当前活动子窗口的切换而略有变化。主要包括【文件】、【编辑】、【查看】、【其他】、【程序包】、【窗口】和【帮助】7项,下面分别加以简要介绍。

【文件】菜单主要提供了R程序脚本文件和工作空间的保存以及读取的操作。在R语言中为了隔离用户多次操作,提供了一个工作空间的概念,这里的工作区可以理解成R语言中的已经加载到内存的变量、函数和程序包等综合信息,可以一次性把这些工作区数据保存到文件中,从而可以下次直接把这些数据快速恢复到内存中。此外,通过【文件】→【改变工作目录】菜单可以修改当前路径,从而便于用户从指定文件夹读取数据与保存数据。

【编辑】菜单提供了常见的复制、粘贴等功能,并提供了【GUI选项】子菜单用于设置工作环境的字体和配色,其中的【数据编辑器】菜单可以在图形界面中利用表格的形式编辑数据。

【查看】菜单主要负责菜单栏和状态栏的显示与否,功能非常简单。

【其他】菜单是控制台窗口的私有菜单,当控制台窗口变成激活窗口时,才会显示本菜单。其中主要提供了对控制台操作的配置,例如,中断当前计算、命令是否自动补全等选项。

【程序包】菜单主要控制设置安装程序包的镜像服务器,以及安装、加载、更新程序包;R语言在支持在线安装程序包的同时,也允许把程序包用zip的格式下载到本地安装。

【窗口】菜单主要用于控制子窗口的显示方式,可以在“层叠”、“水平铺”、“垂直铺”和“排列图标”几个选项之间切换,也可以通过本菜单把指定的子窗口变成活动窗口。

【帮助】菜单提供了多种便捷查询命令帮助文档的方法,例如,提供了本地html、PDF文件以及输入命令直接定位的多种查询方式。

2.工具栏

R语言的工具栏存储了菜单中最常见的几个命令,工具栏会随着当前子窗口焦点的切换而稍作变化,图10.8的左边是R语言控制台激活时的工具栏,右边是脚本文档窗口激活时的工具栏。

图10.8 R语言的两种工具栏

3.控制台窗口。

控制台窗口主要负责接受用户输入并显示命令执行结果,控制台命令提示符是大于符号“>”,此时可以在后面输入命令。图10.9显示了利用相关命令显示当前所有的变量、清除所有的变量以及显示当前内存消耗情况。

图10.9 R语言的控制台使用

图10.9中首先产生了1到10的序列并赋值给向量x;然后生成了5个0到1的随机数并赋值给向量y;接着用ls.str()显示当前系统中所有的变量;再接着又用memory.size ()显示了R当前的内存使用情况;最后两次调用rm,分别删除x和所有的变量。

在R中输入命令时,如果命令长度很长,可以用加号“+”作为续行符,把一个命令写在多行。控制台中输入命令的时候,还可以通过按〈Tab〉键进行命令补全,如果连按两次〈Tab〉键,将会列出系统认为所有可能的命令名称。此外通过输入问号和命令,可以进行命令的详细查询,例如,输入“?runif”,系统将会弹出一个网页,显示该命令的具体介绍,界面参见图10.10.

4.脚本窗口。

脚本窗口,又叫脚本文档窗口、程序文档窗口或脚本程序窗口,控制台窗口只能有一个,而脚本文档窗口可以打开多个,但只允许有一个是活动脚本窗口。R语言允许把大量的命令存储成脚本程序,然后批量执行。这样对需要重复进行的工作特别有利,也便于用户之间交流与分享源程序,大大有利于代码重用。在脚本程序窗口中,可以选择一行或者多行命令,然后直接单击工具栏上的“执行”按钮提交到控制台窗口执行。图10. 11就显示了脚本文档窗口中的一段函数定义,其中利用“#”是R语言的注释符号,可以注释从当前位置到本行结束的内容。

图10.10 通过“?runif”命令调出的runif函数的帮助

图10.11 脚本程序窗口

5.图形输出窗口。

当用户在控制台或脚本文档窗口执行图形输出命令时,图形输出窗口将自动显示,同样允许出现多个图形图像窗口,也只能有一个是激活窗口。图10.12中显示了在图形输出窗口右击鼠标出现的菜单,通过菜单可以很便捷地把程序中的图形另存为所需要的图片文件,或者发送到打印机。

图10.12 图形输出窗口以及右键菜单

二、安装tm程序包

R语言安装完成后,本身携带了部分常用的程序包。但R语言的一个优势是有数以千计的各种实用程序包,这些程序包可以用于解决具体问题。其中tm包(text mining)是一个知名的文本挖掘处理的包,它支持多种来源的文本获取手段,把大量文本包装为语料库;提供了去除空白符、停用词等常规预处理手段;然后可以采用多种权重计算方法把语料库中的文本转变为文档特征矩阵,进而可以直接挖掘;也可以把输出提交到其余机器学习包,作为它们的输入从而进一步处理。下面简要描述通过R语言的菜单安装tm包的过程,其余包的安装过程也类似。

(1)运行R语言。

(2)单击【程序包】→【安装程序包】菜单。

(3)为了提高安装效率,R语言会让用户选择拟下载包的镜像服务器,界面参见图10.13,此时可以根据自己所在的位置选择较近的服务器,然后单击【确定】按钮。

(4)然后将会出现指定镜像服务器上的所有可用安装包,图中可用包较多,按照字母顺序排序,参见图10.14。

图10.13 选择镜像服务器

图10.14 选择需要安装的程序包

(5)定位到tm,然后单击【确定】按钮,系统将会自动下载并安装tm包。图10.15显示了tm包安装完成后控制台界面的提示,其中显示了下载的地址以及本地安装的位置。从图中可以看出,该程序包需要依赖“NLP”和“slam”两个程序包,系统在安装tm包的同时自动安装了这两个包。

图10.15 tm安装后控制台窗口的提示

三、查看R语言的图形演示

科技论文中往往需要直观的数据对比分析图来展示实验的结果,R语言具有极强的绘制图形以及输出功能,可以方便地对数据进行可视化查看。R语言可以对输出图形的坐标轴的刻度、标题、数据表现形式等信息精确定制,也可以方便地把多个图形合并输出在同一个图中,输出的格式不仅支持多种图片格式,而且支持PDF文件。R语言中本身带了图形输出的例子,这些精心准备的例子可以很快让用户对R语言的强大图形功能有直观的了解和认识。

(1)首先运行R语言。

(2)在R语言的控制台输入demo(graphics)。

(3)根据控制台的提示,进行操作,并观察图形输出窗口的变化。

四、输出考试成绩的分布图

本书配套数据的Ex12文件夹中的score.txt中存储了40名同学的考试成绩,其中每行存储一条数据,每行数据是学号和成绩,学号和成绩之间用空格分开。本实验主要是读取该数据,并按照不及格、及格、良好和优秀的分布情况用柱状图显示成绩的分布。

(1)首先复制score.txt文件到本地计算机。

(2)接着运行R语言,单击【文件】→【新建程序脚本】项。

(3)在新弹出的脚本程序窗口中输入如下的代码。

注意:需要根据score文件在本地的物理路径,调整filename赋值语句后面的常量。

ffilename<-"f:\\score.txt"#指定文件名,带路径,具体情况具体修改

scores<-read.table(filename,sep='\t',header=TRUE)

#从文件中读取数据,分隔符是Tab,数据有表头

summary(scores[,2])#显示最低分、最高分、平均值、中位数等

x<-ordered(cut(scores[,2],c(-1,59.5,69.5,85,100)),

labels=c("不及格","及格","良好","优秀"))

#按照分类的区间转换数据

y<-table(x) #转换为table

barplot(y)

上面程序中的cut函数按照提供的数字区间,按照左开右闭的区间原则对数据进行归类,ordered函数是给这些区间分别命名,从而便于查看。

(4)选中输入的程序,然后单击工具栏上的【运行当前行或所选代码】项。

(5)观察图形输出的结果,很容易看出该数据不是状态分布。

(6)自己查询barplot函数的帮助,修改代码,定制图形中的x和y两个坐标轴。

五、中文文本分词

程序包Rwordseg是国内知名的一个中文分词包,它基于中科院的ictclas中文分词算法,基于隐马尔科夫模型进行分段。在分词准确性、自定义词典便捷性和运行效率方面都超过了之前广为流传的mmseg4j。Rwordseg包需要依赖RJava包,而RJava包需要计算机中安装好Java的JVM运行环境,在此不累赘介绍JVM的安装和配置。Rwordseg和RJava两个包在如下地址可以下载:

Rwordseg:https://r-forge.r-project.org/R/?group_id=1054

RJava:http://cran.r-project.org/web/packages/r Java/index.html

(1)本地安装程序包。

首先下载两个程序包zip文件到本地计算机,利用【程序包】→【从本地zip文件安装程序包】功能在R语言中安装好程序包。这里例子使用的RJava的版本是0.9-6,RWord-seg的版本是0.2-1,具体的命令细节和版本可能略有差别。

(2)加载程序包。

输入如下两条命令加载程序包:

library(rJava)

library(Rwordseg)

(3)输入以下命令以测试分词的功能:

testString<-"江都早在五六千年以前的新石器晚期,就有人类从事各项农业生产活动。春秋时期属吴国。秦楚之际,项羽欲在广陵临江建都,始称江都。"

segmentCN(testString)

(4)观察R语言控制台的输出结果。

(5)输入library(help=Rwordseg)命令,系统将会出现该包的详细描述,其中会列出该包中的所有命令。

(6)请利用上一步查询到的命令,将“吴国”和“秦楚”添加到自定义词库,然后在此分词,观察分词结果。

六、利用tm和wordcloud程序包对文本进行简单处理

tm是一个专门用于文本挖掘的程序包,它可以把来自多种途径(文件夹、文件甚至pdf或者word文件)的文本转换为语料库,然后按照自己的需求表示为文档特征矩阵,接着利用多种成熟挖掘手段进行处理。而wordcloud是一个可以把文本根据频度等进行可视化输出词云的包,使用简单。

下面针对《骆驼祥子》的电子书,首先分词,然后去除停用词,接着转换为语料库,并统计出词频,从而输出数据供wordcloud输出词云。

#install.packages("wordcloud",repos="http://mirrors.ustc.edu.cn/CRAN/")

#安装词云包

library(rJava)

library(Rwordseg)

library(wordcloud)

library(tm)

insertWords(c("祥子","虎妞","刘四爷","曹先生","曹太太",

"小福子","二强子","老马","高妈","孙侦探","陈二奶","阮明"))

#把姓名加入到分词的词库

segmentCN("F:/Ex12/data/骆驼祥子.txt",

outfile="f:/ex12/data/骆驼祥子.txt.segment")

#分词

file<-Dir Source(directory="f:/ex12/data",

encoding="UTF-8",

pattern="*.segment")

ovid<-Corpus(file,reader Control=list(language="zh"))

#从文件加载语料库

ovid<-tm_map(ovid,stripWhitespace)

#去除多余的空格

ctrl<-list(tolower=FALSE,

removeNumbers=FALSE,

wordLengths=c(1,Inf),

stopwords=FALSE)

stopwords<-read.csv("f:/ex12/data/stopwords.txt",strings As Factors=FALSE)

stopwords<-stopwords[,1]

stopwords<-enc2utf8(stopwords)

stopwords<-stopwords[Encoding(stopwords)!="unknown"]

#读取停用词并过滤掉不合法的数据

ovid<-tm_map(ovid,removeWords,stopwords)

#去除停用词

wordfreq<-termFreq(ovid[[1]],ctrl)

#获取频度

wordfreq<-sort(wordfreq,decreasing=true)

#按照频度从大到小排序

summary(wordfreq)

#得到词频

wordfreq<-wordfreq[wordfreq>mean(wordfreq)]

#只留下词频大于平均值的词语

words<-names(wordfreq)

#从向量的名称中得到每一个词组

wordcloud(words,wordfreq,col=rainbow(length(wordfreq)),max.words=500)

#输出词云

在R语言环境中运行如上代码,可以输出类似图10.16所示的词云图,其中字的大小代表了该词组的频度信息,越大的字词频度越高。

图10.16 骆驼祥子的词云图

思考题

1.R语言在进行文本挖掘时和C/C++这样的语言相比有哪些优点?有哪些劣势?

2.如何利用并行计算充分发挥R语言的功能?

3.请到R语言的官网查找与文本处理相关的包,并了解它们的功能。

参考文献

[1]R语言官方网站.https://www.r-project.org/.

[2]王斌会.多元统计分析及R语言建模[M].广州:暨南大学出版社,2011.

[3]张丹.R语言的极客理想[M].北京:机械工业出版社,2014.

[4]马特洛夫.R语言编程艺术[M].北京:机械工业出版社,2013.

[5]薛毅.R语言实用教程[M].北京:清华大学出版社,2014.

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈