数据分析之R语言
基础统计指标
指标 | 描述 |
---|---|
均值(mean) | 即平均数,mean=1/n*sum(X1:Xn);均值能够利用所有已知信息,但是对异常值(极小或极大值)很敏锐; |
中位数(median) | 排序后居于中间位置的数值,有序尺度常用;不能充分利用已知的所有标量,但不受异常值的影响 |
众数(mode) | 出现最频繁的数值,代表分布中的高峰;名义尺度(分组数据)常用 |
极差(range) | 最大值与最小值之差,range=max-min;直接收到异常值影响 |
方差(variance) | 离均差(观测值与均值之间的差)平方的均值; var=1/(n-1)*sum(Xi-mean)^2; 数据分布越分散(远离均值),方差越大; |
标准差(standard deviantion) | 方差的平方根,stdev=SQRT(var); 与数据本身有相同的量纲,常用; |
偏差(skewness) | 刻画数据在均值两侧偏差趋势的差异性 对称分布:skewness=0,mean=median=mode; 右偏分布:skewness>0,mean>median>mode; 作偏分布:skewness<0,mean<median<mode; |
峰值(kurtosis) | 测量分布曲线相对平滑或突起程度 kurtosis=3,正态分布(Norm distribution); kurtosis>3,分布曲线比正太分布突起; kurtosis<3,分布曲线比正态分布平缓 |
R的介绍
R是S语言的一种实现。S语言是由 AT&T贝尔实验室开发的一种用来进行数据探索、统计分析、作图的解释型语言。
R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
R是一套完整的数据处理、计算和制图软件系统。其功能包括:数据存储和处理系统;数组运算工具(其向量、矩阵运算方面功能尤其强大);完整连贯的统计分析工具;优秀的统计制图功能;简便而强大的编程语言:可操纵数据的输入和输入,可实现分支、循环,用户可自定义功能。
R是一个免费的自由软件,它有UNIX、LINUX、MacOS和WINDOWS版本,都是可以免费下载和使用的,在那儿可以下载到R的安装程序、各种外挂程序和文档。在R的安装程序中只包含了8个基础模块,其他外在模块可以通过CRAN获得。
R的特点
1.有效的数据处理和保存机制。
2.拥有一整套数组和矩阵的操作运算符。
3.一系列连贯而又完整的数据分析中间工具。
4.图形统计可以对数据直接进行分析和显示,可用于多种图形设备。
5.一种相当完善、简洁和高效的程序设计语言。它包括条件语句、循环语句、用户自定义的递归函数以及输入输出接口。
6.R语言是彻底面向对象的统计编程语言。
7.R语言和其它编程语言、数据库之间有很好的接口。
8.R语言是自由软件,可以放心大胆地使用,但其功能却不比任何其它同类软件差。
9.R语言具有丰富的网上资源
R函数
基本函数c(),length(),mode(),rbind(),cbind()
> x1=c(2,4,6,8,0)//指定非连续值
> x1
[1] 2 4 6 8 0
> x2=c(1:5)//指定1-5的连续值
> x2
[1] 1 2 3 4 5
> length(x1)//长度
[1] 5
> mode(x1)//x1中的向类型
[1] "numeric"
> rbind(x1,x2)//按行绑定
[,1] [,2] [,3] [,4] [,5]
x1 2 4 6 8 0
x2 1 2 3 4 5
> cbind(x1,x2)//按列绑定
x1 x2
[1,] 2 1
[2,] 4 2
[3,] 6 3
[4,] 8 4
[5,] 0 5
函数mean( ), sum( ), min( ), max( ), var( ), sd( ), prod( )
> x=c(1:50)
> mean(x)//平均值
[1] 25.5
> sum(x)//和
[1] 1275
> max(x)//最大值
[1] 50
> min(x)//最小值
[1] 1
> var(x)//方差
[1] 212.5
> prod(x)//乘积
[1] 3.041409e+64
> sd(x)//标准差
[1] 14.57738
> median(x)//中值
[1] 25.5
在线文档查看
help()
向量产生
a=1:20*2+1 //连续1-20的元素x2+1
> a
[1] 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41
> a[1:5] //1-5元素
[1] 3 5 7 9 11
> a[a<20] //数组中小于20的
[1] 3 5 7 9 11 13 15 17 19
> a[a>20]
[1] 21 23 25 27 29 31 33 35 37 39 41
seq函数
> seq(5,20)//根据最小值、最大值和默认step为1,生成向量
[1] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
> seq(5,20,by=2)//步长为2
[1] 5 7 9 11 13 15 17 19
> seq(5,20,length=10)//产生length个向量
[1] 5.000000 6.666667 8.333333 10.000000 11.666667 13.333333 15.000000
[8] 16.666667 18.333333 20.000000
letters字母生成
> letters[1:26]//生成26个字母
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
which函数
> a
[1] 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41
> which.max(a)//最大值index
[1] 20
> a[which.max(a)]
[1] 41
> which.min(a)//最小值
[1] 1
> which(a==5)//条件等于5的索引
[1] 2
> which(a<5)
[1] 1
> which(a>35)
[1] 18 19 20
rev(),sort函数
> rev(a)//倒叙
[1] 41 39 37 35 33 31 29 27 25 23 21 19 17 15 13 11 9 7 5 3
> sort(a)//排序
[1] 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41
生成矩阵matrix(),t()
> a1=c(1:12)
> matrix(a1,nrow=3,ncol=4) //3行 4列,默认一列一列的排
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> matrix(a1,nrow=4,ncol=3)
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
> matrix(a1,nrow=3,ncol=4,byrow=T)//3行4列,选择一行一行排
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
> a=matrix(a1,nrow=3,ncol=4)
> a
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> t(a)//转置数据框,将a3x4矩阵转变为4x3
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
[4,] 10 11 12
> b=a
> a+b//矩阵相加
[,1] [,2] [,3] [,4]
[1,] 2 8 14 20
[2,] 4 10 16 22
[3,] 6 12 18 24
> a-b//矩阵相减
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 0 0 0 0
[3,] 0 0 0 0
> a*b//矩阵相乘
[,1] [,2] [,3] [,4]
[1,] 1 16 49 100
[2,] 4 25 64 121
[3,] 9 36 81 144
diag()提取或替换一个矩阵的对角线,或构造一个对角矩阵
> diag(a)//提取对角线
[1] 1 5 9
> a
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> diag(diag(a))//构造一个对角矩阵
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 5 0
[3,] 0 0 9
矩阵求逆,函数rnorm( ), solve( )
> a=matrix(rnorm(16),4,4)
> a
[,1] [,2] [,3] [,4]
[1,] -1.20058607 -1.7318530 0.6656059 0.08484915
[2,] 0.71681869 -0.8410650 0.9143067 -0.50947162
[3,] 0.24770267 -0.9330893 0.3623950 0.87174384
[4,] 0.02684931 -0.3514035 0.7194233 0.27227025
> solve(a)//逆矩阵
[,1] [,2] [,3] [,4]
[1,] -0.42459966 0.525735065 0.5157055 -0.5350900
[2,] -0.31817546 -0.390360202 -0.5269641 1.0559258
[3,] -0.06685634 0.005190117 -0.5243511 1.7093927
[4,] -0.19212438 -0.569373435 0.6545226 0.5716597
> b=c(1:4)
> solve(a,b)//表示 求一个x1 x2 x3 x4的4元函数,结果在b中
[1] 0.03362713 1.54391505 5.20804125 2.91933550
方程解析:
-1.20058607*x1 + -1.7318530*x2 + 0.6656059*x3 + 0.08484915*x4=1
0.71681869*x1 + -0.8410650*x2 + 0.9143067*x3 + -0.50947162*x4=2
0.24770267*x1 + -0.9330893*x2 + 0.3623950*x3 + 0.87174384*x4=3
0.02684931*x1 + -0.3514035*x2 + 0.7194233*x3 + 0.27227025*x4=4
得出结果:
x1,x2,x3,x4分别是0.03362713 1.54391505 5.20804125 2.91933550
矩阵的特征值与特征向量
> a=diag(4)+1
> a
[,1] [,2] [,3] [,4]
[1,] 2 1 1 1
[2,] 1 2 1 1
[3,] 1 1 2 1
[4,] 1 1 1 2
> a.e=eigen(a,symmetric=T)
> a.e
eigen() decomposition
$values//特征值
[1] 5 1 1 1
$vectors//特征向量
[,1] [,2] [,3] [,4]
[1,] -0.5 0.8660254 0.0000000 0.0000000
[2,] -0.5 -0.2886751 -0.5773503 -0.5773503
[3,] -0.5 -0.2886751 -0.2113249 0.7886751
[4,] -0.5 -0.2886751 0.7886751 -0.2113249
数据框frame
> x1=c("lee","llun")
> x2=c(18,25)
> x=data.frame(x1,x2)
> x
x1 x2
1 lee 18
2 llun 25
> data.frame('姓名'=x1,'年龄'=x2)
姓名 年龄
1 lee 18
2 llun 25
画图
函数plot
plot(x)
文本文件读取
> read.table("aa.txt")//header:是否将第一行作为头
V1 V2
1 1233 23
2 32 34
剪切板
> read.table("clipboard",header=T)//header:是否将第一行作为头
T1 T2
1 1233 23
2 32 34
excel文件读取
> read.table("bb.prn",header=T)
商品 价格
1 皮衣 600
2 羽绒服 900
RODBC读取
> z<-odbcConnectExcel("bb.xlsx")
> (w<-sqlFetch(z,"Sheet1"))
商品 价格
1 皮衣 600
2 羽绒服 900
循环语句
> for(i in 1:5){a[i]=i*2+3}
> a
[1] 5 7 9 11 13
> a[1]=5
> i=1
> while(a[i]<15){i=i+1;a[i]=a[i-1]+2}
> a
[1] 5 7 9 11 13 15
外部R脚本
source()函数加载外部脚本,外部脚本显示值在控制台需要print()函数
分布函数
正态分布函数rnorm()
round(rnorm(100,mean=80,sd=7))//产生100个平均值 标准差7
泊松分布函数rpois()
指数分布函数rexp()
Gamma分布函数rgamma()
均匀分布函数runif()
runif(100,min=80,max=100)
二项分布函数rbinom()
几何分布函数rgeom()
数据存储:
write.table(x,file="",col.names=F,row.names=F,sep=" ")
平均分计算:
mean(x)//平均值
colMeans(x) //列平均值
colMeans(x)[c(“x1”,“x2”)]//指定列平均值
apply(x,2,mean)//平均值
apply(x,2,max)//最大值
apply(x,2,min)//最小值
apply(x[c(“x1”,“x2”,“x3”)],1,sum)指定列统计每一行 1为行 2为列