用R做数据分析.docx
- 文档编号:8634453
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:22
- 大小:334.69KB
用R做数据分析.docx
《用R做数据分析.docx》由会员分享,可在线阅读,更多相关《用R做数据分析.docx(22页珍藏版)》请在冰豆网上搜索。
用R做数据分析
R简介
R语言是由RossIhaka、RobertGentleman二位创建的,这也许可以解释为什么叫R语言。
现在由“R开发核心团队”负责开发。
R是基于S语言的一个GNU项目。
一、R语言介绍
R是为统计计算和作图的一门语言和环境。
是一个GNU项目,和S语言和环境很相似,S语言是由BELL实验室的JohnChambers和他的同事开发的。
R语言可以认为是从S语言衍生而来的,他们之前有很重要的不同,但是大多数用S语言写的代码也可以在R中运行。
目前R在高校非常流行,特别是随着这几年互联网的发展,(R在一些大公司的运用得到的实践,例如:
国外的google、linkdin、facebook等,国内一些大型互联网公司也在开始使用R),及随着互联网版权的意识增强,也促使了R在互联网的发展。
当然R在很多领域都有很广泛的运用。
R语言是开源的,同时可以运行在各种平台上(Linux、Windows、MacOS等)。
R的许多软件包是由R语言、LaTeX、Java及最常用C语言和Fortran撰写。
可以说现在R包含各种各样的功能,可以说目前你能想到的功能,都可以找到一个或者多个R包来实现。
几千个R包,哪个才最适合你呢?
“最适合你自己的R包,也许就是你自己写的那个包”。
二、R软件安装下载
CRAN地址:
,什么是CRAN:
CRAN为ComprehensiveRArchiveNetwork(R综合典藏网)的简称。
它除了收藏了R的执行档下载版、源代码和说明文件,也收录了各种用户撰写的软件包。
现时,全球有超过一百个CRAN镜像站。
根据你的操作系统,下载相应的R语言安装文件。
下载地址:
三、R语言的特点
1、变量不需要申明即可引用。
2、R语言的核心是:
向量。
3、R语言是一个函数语言。
4、向量中的下标是从1开始引用的。
5、R是脚本语言、面像对象;
四、如何学学习R语言
1、不要期望你能学会R中所有的包。
不要把目标定的那么高。
2、关键能理解R语言的内涵。
多看看CRAN上的相关文档,例如:
季刊、R语言相关新闻,特别是每次版本更新的一些内容。
3、运用
如果你是做数据分析相关的工作的,一定要把学习到的R语言知识运用到你的工作中,不管你把R语言当用一门编程语言还是统计工具,用的多了,自然你就有感觉,很多东西你就记住了。
4、持续
每天花点时间写几条R代码,实现一些小功能。
如果你工作上就用R,那是最完美的。
5、多看
多看别人写的代码,R运用的案例。
你可以google一下R会有很多好的博客,文章。
很多人都是R的GREEK。
6、开放
一定要开放、分享的心态。
多与别人交流,不要总是需求,一定要学习给予。
7、总结
学到的东西,及时做好总结,可以总结成案例或者笔记,如果可以欢迎分享给大家(到这投稿是一个不错的选择)
五、我对R语言的理解和看法
随时互联网的发展,特别是互联网对于版权、成本的因素考虑,因为免费、开源使越来越多的公司开始用R语言来处理数据、分析数据、完成模型等,当然这其中也伴随着对于数据价值挖掘的,特别是在大数据的背景下,想通过对数据挖掘&分析建立自己的竞争优势。
R不仅免费还有各种各样的的功能包资源。
从某种程度上讲,任何你想要的功能应该都可以找到对应的包,只是说是否完全满足,对于一些算法研究人员来说,可以在原来的代码的基础进行借鉴。
这也许就是为什么R最开始主要用到高校或者学术领域(当然和国外学者、专家这种自由、开放的环境或者意识有很关系,这也许就是为什么许多开源软件都是国外出来,很少看到国内的大公司有什么好的东西开源)。
很多行业人士都说R是未来的“王道”,就像unix的发展过程一样。
我觉得未来一定有属于R的一片天空,而且这种天空可以说是接近无限。
所以,对于有志于从事数据挖掘、数据分析这个行业的朋友来说,掌握R是也许会成为未来的必备技能(就像现在数据分析师大多要求会:
SQL)。
最后,我对R语言的理解与总结可以概括为一句话:
“开源、二次加工、分享精神”。
R包介绍
R语言的使用,很大程度上是借助各种各样的R包的辅助,从某种程度上讲,R包就是针对于R的插件,不同的插件满足不同的需求
一、R语言包的安装
1、通过选择菜单:
程序包->安装程序包->在弹出的对话框中,选择你要安装的包,然后确定。
2、使用命令
install.packages("package_name","dir")
package_name:
是指定要安装的包名,请注意大小写。
dir:
包安装的路径。
默认情况下是安装在..\library文件夹中的。
可以通过本参数来进行修改,来选择安装的文件夹。
例如:
mvtnorm安装到D:
/DM/r/R-2.15.2/library/目标下install.packages("mvtnorm","D:
/DM/r/R-2.15.2/library/")
3、本地来安装
如果你已经下载的相应的包的压缩文件,则可以在本地来进行安装。
请注意在windows、unix、macOS操作系统下安装文件的后缀名是不一样的:
1)linux环境编译运行:
tar.gz文件
2)windows环境编译运行:
.zip文件
3)MacOSg环境编译运行:
.tgz文件
注:
包安装好后,并不可以直接使用,如果在使用包中相关的函数,必须每次使用前包加载到内存中。
通过library(package_name)来完成。
二、加载包
包安装后,如果要使用包的功能。
必须先把包加载到内存中(默认情况下,R启动后默认加载基本包),加载包命令:
Library(“包名”)
Require(“包名”)
三、查看包的相关信息
1、查看包帮忙
library(help=package_name)
主要内容包括:
例如:
包名、作者、版本、更新时间、功能描述、开源协议、存储位置、主要的函数,例如:
library(help=igraph)
2、查看当前环境哪些包加载
find.package()或者 .path.package()
例如:
默认情况下安装7个包(本系列文章使用的R的版:
2.15.2)
3、移除包出内存
detach()
4、把其它包的数据加载到内存中
data(dsname,package="pkgname")
5、查看这个包里的包有数据
data(package="包名")
6、列出所有安装的包
library()
四、R包的分类
1、根据包的功能,分成不同的类:
2、截止到2013年3月6号,CRAN上一共收录的:
4338个包。
3、不同开源协议的包的分布如下:
(相关查看代码:
#读取CRAN上包的相关信息
a<-available.packages(contrib.url("","source"))
#查看CRAN上当前包的个数
nrow(a)
#各种开源协议的包的分布个数
sort(table(gsub(".*","",a[,"License"])), decreasing=T)
R软件初识数据分析
R软件下载地址:
1.用来制作散点图非常便捷。
plot(纵坐标变量~横坐标变量,data=数据集名称)
library(lattice)
xyplot(纵坐标变量~横坐标变量|属性拥有者,data=数据集名称)。
多个散点图。
2.数据存储成CSV格式的会更容易处理
3.R能用正则表达式来处理数据模式!
!
!
NewName<- sub(" \\(.* \\)","",Test$Name)
\\( 表示左括号,告诉R这不是R表达式
. 句点表示任何字符
*星号表示任何数值的前字符
\\)表示右括号
4.读写文件语句
INPUT<-read.csv(" .csv",header=TRUE) 读取一个.csv格式的文件
head(INPUT,n=?
) 查看开头数据中开头?
行
write.csv(INPUT,file="OUTPUT.csv") 将结果写入到csv格式的文件
5.R区分大小写,连TRUE都不能用小写.
向量
在本系列文章中,接下将分别介绍R语言的几种数据对象:
向量、矩阵、数据框与列表、其它特殊对象;
请大家在学习R语言的时候永远记住一个概念,R语言所有内容都是对象;
一、向量基本概念
R语言中最为核心的构成之一
1、向量构成的基本元素为:
数值(numeric)、字符(character)、逻辑值(logical)、复数型(complex);
2、向量不需要定义类型,可直接赋值:
1)生成一个空向量;x<-c();
2)给向量赋值。
x<-c(0,1,2,3);
3、向量的元素下标取值是以1开始,这点请刚开始接触R的同学注意。
例如:
要前例中取x向量中值为1,则为x[2]
4、如果一个向量中有一个字符,则该向量的类型会变成字符;
如果逻辑变量与数值在一起,则为转换成数值。
TRUE转变成1andFALSE转变成0.
2、在R语言中没有单一的整数、单一字符的概念
例如:
X<-2;X<-'a';R都是当作向量来处理,只是这个向量只包括单一值。
3、给向量各元素命名:
names(x)
Demo_3<-1:
3
names(Demo_3)<-c("a","b","ab")
二、几种特殊向量的生成
1、生成系列seq()
1)seq(length=,from=,to=)
Length:
指定生成个数
From:
是指开始生成的点
To:
截止点
2)如果不指定,则默认条件下:
seq(N1,N2,BY=)
N1:
开始位置
N2:
截止位置
BY=指定间隔
2、rep(P,N)重复生成P值N次
三、向量运算
1、取子向量
通过下标:
取某个元素:
x[2];(如果X包括名称,注意:
x[2]与x[[2]]的区别;
取某中几个:
x[c(1,2,0)]
取某个/几个元素,利用-:
x[-n]
2、向量排序;
sort();输出排序后的结果;
order();输出排序后的各个向量位置;
a<-c(3,9,0,12,19)
sort(a);order();
3、循环。
如果二个向量进行运算过程中,二个向量不相同,则R对长度小的向量自动补充值,直到长度等于大的向量。
例如:
Demo_5<-1:
3;
Demo_6<-2:
5;
Demo_7=Demo_6+Demo_5;
Demo_5<-1:
3;
Demo_6<-2:
7;
Demo_7=Demo_6+Demo_5;
(这也是很多人学习R语言的时候很难理解的地方,为什么会有这种机制)
vectorizedoperation(向量化运算)
1)、如果有一个是向量,是则结果都是向量形式;
2)、进行向量运算;判断向量是否长度相等,如果长度不相等,则把短向量长度从头开始循环补充值,到与长向量的长度相等(所以二个长度的相关必须是整数倍);
矩阵
矩阵的创建
在R中用函数matrix()来创建一个矩阵,使用该函数时需要输入必要的参数值。
matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)
1. data向量元素列表
2. nrow行数
3. ncol列数
4. byrow矩阵是按列优先的方式进行排序,先列后行。
byrow项控制排列元素时优先级按行。
例如:
1) matrix(c(1,2,3,4,5,6),nrow=2,byrow=T)
5. Dimnames(Row_name,Col_name)给定行和列的名称,如果不需要给行或者列命名,则以NULL代替。
例如:
给下面的矩阵列命令
2)Demo_1<-matrix(rnorm(15)*10,5,3,dimnames=list(NULL,c('A','B','C')))
矩阵的运算
1、R矩阵查看矩阵的列/行相关信息
#查看矩阵列名colnames(Demo_1)
#查看矩阵行名rownames(Demo_1)
#给矩阵的行命名rownames(Demo_1)<-c('r1','r2','r3','r4','r5')
#矩阵的维度 dim(Demo_1)
#返回与矩阵相同的列与行 row()/col()函数将返回一个与某矩阵有相同维数的矩阵
#返回矩阵行数与列数nrow()返回行数
ncol()返回列数
2、R的子矩阵
#取矩阵中某个元素值,第二行第三列的值:
Demo_1[2,3]
#取矩阵中的某列,取矩阵的第一列 Demo_1[,1]
#取矩阵中的某行,取矩阵的第一行 Demo_1[1,]
#取某列大于某个值,取第二列大于3 Demo_1[Demo_1[,2]>3,]
3、R矩阵的基本运算
#矩阵加&减
Demo_2=Demo_3=matrix(1:
20,nrow=5,ncol=4)
#矩阵相乘
Demo_4=matrix(1:
20,nrow=4,ncol=5)
Demo_5=matrix(1:
20,nrow=5,ncol=4)
Demo_4%*%Demo_5
4、增加行与列
Demo_6<-matrix(,4,2)
Demo_6[c(1,3),]<-matrix(c(1,2,3,4))
Demo_6
5、R矩阵的转置
t(Demo_1)
6、矩阵其它运算
#取对角元素diag()
#各行汇总值rowSums()
#各行的平均值rowMeans()
#各位的汇总值colSums()
#各列的平均值colMeans()
数据框
前面几篇文章对R语言、R包以及R向量与矩阵等对象做了简单介绍,本篇继续介绍R数据框的相关内容。
数据框的创建
通过data.frame函数来创建数据框,该函数包含的主要参数为:
data.frame(...,row.names=NULL,check.rows=FALSE,check.names=TRUE,
stringsAsFactors=default.stringsAsFactors())
创建一个数据框
Demo_1<-data.frame(name=c('lucy','alice','lei'),
heigh=c(178,156,188),
sex=c('F','F','M'),
score=c(200,210,198))
#包括一个缺少值的数据框
Demo_2<-data.frame(name=c('lucy','alice','lei'),
heigh=c(178,156,188),
sex=c('F','F',NA),
score=c(200,210,198),
stringsAsFactors=F)
默认情况下,name与sex都是factor类型,如果要将某转化成字符类型,则使用选项:
stringsAsFactors=F
数据框特别点
1、可以包含不同类型的变量;而在矩阵中只能是同一种类型,例如:
不能出现字符与数值二种类型;所以可以把数据框理解为各列可为不同类型的向量组合。
2、各列的长度要求一致。
如果长度不一,则会报错。
例如:
3、如果你对数据库比较熟悉,你可以把数据框理解为数据库中的表。
数据框基本操作
1、查看数据框信息
#查看类型 class(Demo_1)
#查看某列的类型 class(Demo_1$sex)
#查看数据框长度 length(Demo_1)
#数据框各项名称 names(Demo_1)
#数据框信息总结,对字符类/因子类数据,给出相应的频数统计;给数值型数据给出5个主要的指标。
summary(Demo_1)
#对数据框进行去重
unique(Demo_1)
#取数据框中重复的行 Demo_1[duplicated(Demo_1),]
2、取数据框中的某个元素
Demo_1[i,j]指第i行第j列的数据;
3、取数据框中一列与多列
#取某列,可以通过列标或者名称
Demo_1$sex
Demo_1[,3]
#取多行,例如取1,2,4列
Demo_1[,-3]
Demo_1[,c(1,2,4)]
4、取数据框中的一行与多行
#取某行,可以通过行标或者名称,例如:
取数据框的第一行
Demo_1[1,]
#取多行,例如:
取数据框的第一与第二行
5、判断数据框各行是否完整
complete.cases(Demo_2)
#选择非缺失值的数据 Demo_1[complete.cases(Demo_2),]
6、增加列
#给Demo_1增加一列 Demo_1$score2<-c(12,13,23)
Demo_1<-cbind(Demo_1,score2=c(12,13,23))
7、增加行
#合并某二个数据框的二列 Demo_3<-rbind(Demo_1[,c(1,2)],Demo_2[,c(1,2)])
列表
通过list函数来创建列表,例如,创建一个包含三个列的列表,请注意与R语言中的列表显示有什么不一样:
1.创建列表demo_1
2、创建数据框demo_1_1
列表对每个列显示都会单独以一行的形式存在;
数据框则是以表(或者是矩阵)的形式显示;所以根据数据输出的格式可以判断是列表还是数据框;
创建一个示例列
Demo_2<-list(name=c('lucy','alice','lei'),
heigh=c(178,156,188),
sex=c('F','F','M'),
score=c(200,210,198))
#包括一个缺少值的列表
Demo_3<-list.frame(name=c('lucy','alice','lei'),
heigh=c(178,156,188),
sex=c('F','F',NA),
score=c(200,210,198))
列表特点
列表包含所有列表的特点。
列表与列表的最大区别在于,列表的各列的长度是可以不一致的。
例如:
Demo_3<-list(name=c('lucy','alice','lei'),
heigh=c(178,156),
sex='F')
列表基本操作
1.查看列表信息
#查看类型 class(Demo_1)
#查看某列的类型 class(Demo_1$sex)
#查看列表长度即就是列的个数 length(Demo_1)
#列表各项名称 names(Demo_1)
2.取列表中的某列或者某列元素
#取列表的第二列
Demo_2[2]
Demo_2$heigh
#取列表的某二列的元素
Demo_2[[2]]
Demo_2[[2]]与Demo_2[2]二者输出的区别在于,前者是输出向量,后者输出是列表;
我们详细来看下面的内容:
3.取向量中的某个元素
Demo_2[[N]][M]取:
N列中的第M个元素;
4.判断列表各行是否完整
complete.cases(Demo_2)
#选择非缺失值的数据
Demo_3[complete.cases(Demo_3)
5.增加列
#给Demo_1增加一列
Demo_1$score2<-c(12,13,23)
Demo_1<-cbind(Demo_1,score2=c(12,13,23)
6.其它操作
#删除一个值
Demo_1$score2<-NULL
#把列表转为向量:
unlist()
#移除列表中的元素:
list[[N]]<-NULL
数据的输入与输出之Scan函数
前面系列文章,介绍了R语言中的几种数据格式;其它特殊的数据格式将在后续的文章中介绍,接下来的几篇文章,将讨论如何从外部中读入数据或者将其它格式的数据读入到R环境中;
scan()函数
scan(file="",what=double(0),nmax=-1,n=-1,sep="",
quote=if(identical(sep,"\n"))""else"'\"",dec=".",
skip=0,nlines=0,na.strings="NA",
flush=FALSE,fill=FALSE,strip.white=FALSE,
quiet=FALSE,blank.lines.skip=TRUE,multi.line=TRUE,
comment.char="",allowEscapes=FALSE,encoding="unknown")
一、主要的参数说明如下:
1) what:
声明读入为字符类型数据,可能指定读入的精度/类型,例如:
what=integer(0);what=numeric(0);what=character(0);
如果SCAN()读入有字符与数字,用what=""来进行声明,则会把读入的数字隐式的都转变成字符;
2) SEP:
指定各个读入的数据之间的分隔符;默认情况下分隔符:
空格、tab;如果不是其它分隔符,例如“:
/”通过SEP来指定;
3) 可以通过list指定读入变量的变量名,同时生成的对象为列表,则可以同时读入字符与数字;
4) Skip从第几行开始读入数据;
5) Nlines指定最大读入行数;
6) 如果通过键盘输入的时候,不希望出现下标提示,则可以使用:
quiet=TRUE;
7) encoding=””指定的编码格式,有时候读入的中文可能会出现乱码的时候,可能通过这个参数来指定:
Latin-1或者UTF-8;
二、SCAN几点注意:
1) 用于读入纯字符或者数字,没有表头;
2) 如果输入的单一类型的变量,例如均是:
数值或者均是字符,用scan效率更高。
但其不能读入混合类型的数据,也就是在scan()读入的必须同为字符或者同为数值;
3) 默认情况下用scan读入的数据生成向量类型(这也就是为什么读入的数据必须是同为字符或者同为数字)。
三、案例说明
1、手工输入数据
1)从键盘中输入数字
2)从键盘中输入字符
2、从外部读入
1)从D盘读入TXT文件,例如:
3、如果读入的数据中有字符或者数字,可以通过list来进行指定,则生成的对象是列表格式,如下:
4、指定输入字符的编码类型
数据的输入与输出之READ函数
read.table()函数
1、用于读入表格(表)类型的数据,同时生成数据框对象。
2、读入的数据要求有规则的分隔符,默认有:
空格、TAB、换行符、回车符;其它的分隔符,通过sep=来进行指定。
read.table(file,header=FALSE,sep="",quote="\"'",
dec=".",row.names,col.names,
as.is=!
stringsAsFactors,
na.strings="NA",colClasses=NA,nrows=-1,
skip=0,check.names
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 分析