- ?
R数据分析之计算众数的方法
於夜雪
展开
众数的概念
一组数据中出现次数最多的观测值叫做众数,用M0表示。众数测度数据的集中性趋势,一般在数据量较大的情况下,众数比较有意义。
R中计算众数
在R中,没有给出直接计算众数的函数,自己可以编写函数,或使用下面的语句获取众数。
某班级20名学生的英语成绩为88,78,67,69,62,100,73,45,70,60,93,97,84,82,81,73,68,76,77,92。计算其众数。
x<- c(88, 78, 67, 69, 62, 100, 73, 45, 70, 60, 93, 97, 84, 82, 81, 73, 68, 76, 77, 92)tmp<-table(x) #计算出x中每个值出现的次数index<-which.max(tmp) #找出最多次数的索引tmp[index] #输出对应的数据及次数
计算结果为:
732
在R中运行的结果如下图所示:
R中计算众数R中计算有多个众数的情形
但此方法只能适用于求一个众数的情况。如果想找出具有多个众数(即有多个数据的频率相同且为最大者)的情况,若令向量x的值为:12, 14, 16, 12, 15, 12, 15, 15;可以使用下面的语句:
x<- c(12, 14, 16, 12, 15, 12, 15, 15)tmp<-table(x)tmp.max<-max(tmp)which(tmp==tmp.max)
则输出结果如下:
12 151 3
在R中的结果如下图所示:
R中计算有多个众数的情形在R中可以通过[文件】->[新建程序脚本]菜单编辑具有多行程序的R脚本,代码集中,编写较方便,如在本例中编写的程序代码如下图所示:
R中编辑程序的界面在程序中#后面的内容为注释的内容,添加注释有利于程序的阅读。
如果你喜欢,请关注我,我会定期更新R语言,Python,SPSS,Excel等数据分析方面的内容。
- ?
用R语言做数据分析——方差分析基本概论
邵二娘
展开
在实际工作中,影响一件事的因素是很多的,我们总是希望通过各种试验来观察各种因素对试验结果的影响。例如,不同的生产厂家、不同的原材料、不同的操作规程,以及不同的技术指标对产品的质量、性能都会有影响,然而、不同因素的影响大小不等。
方差分析是研究一种或多种因素的变化对试验结果的观测值是否有显著影响,从而找出较优的试验条件或生产条件的一种常用数理统计方法。
观测值、因素、水平
我们在实验中所考察到的数量指标如产量、性能等称为观测值,影响观测值的条件称为因素,因素的不同状态称为水平,一个因素可以采用多个水平。在一项实验中,可以得到一系列不同的观测值,引起观测值不同的原因是多方面的,有的是处理方式不同或条件不同引起的,称为因素效应(或处理效应、条件变异),有的是试验过程中偶然因素的干扰或观测误差所导致的,称作试验误差。方差分析的主要工作是将测量数据的总变异按照变异原因的不同分解为因素效应和试验误差,并对其作出数量分析,比较各种原因在总变异中所占的重要程度,作为统计推断的依据,由此确定进一步的工作方向。
实验设计
在进行方差分析之前,我们首先需要设计实验来观察获得数据集。根据观测数是否相等,可划分为均衡设计和非均衡设计,观测数相等的设计称为均衡设计,观测数不等的设计称为非均衡设计,方差分析主要通过F检验来进行效果评测。
例子:治疗焦虑症通常有认知行为疗法(CBT)和眼动脱敏再加工法(EMDR),现有10名焦虑症患志愿者,随机分配一半的人接受为期五周的CBT,另外一半接受为期五周的EMDR。治疗结束时,要求每个患者都填写状态特质焦虑问卷(STAI),也就是一份焦虑度测量的自我评测报告。实验设计如下:
上述实验设计中,因为仅有一个类别型变量,这种实验设计称为单因素方差分析(或者单因素组间方差分析)。若影响变量不止一个时,这种实验设计称为称为多元方差分析。方差分析主要通过通过F检验来进行效果评测,若治疗方法的F检验显著,则说明五周后两种治疗方案的STAI得分均值不同。
如果我们只对CBT的效果感兴趣,则需将10个患者放在CBT组中,然后再治疗五周和六个月后分别评价疗效。实验设计如下:
上述实验中,时间是两水平(五周、六个月)的组内因子,因为每个患者在所有水平下都进行了测量,因此这种设计称为单因素组内方差分析;又由于每个受试者都不止一次被测量,也被称作重复测量方差分析。当时间的F检验显著时,说明患者的STAI得分均值在五周和六个月间发生了改变。
如果我们对治疗方案差异和它们随时间的改变都感兴趣,则将两个设计结合起来。随机分配五个患者都CBT,另外五个到EMDR,在五周和六个月后分别评价他们的STAI结果,实验设计如下:
疗法和时间都作为因子时,我们既可分析疗法的影响(时间跨度上的平均)和时间的影响(疗法类型跨度上的平均),又可分析疗法和时间的交互影响。前两个称为主效应,交互部分称为交互效应。
当实验设计包含两个甚至更多的因子时,便是因素方差分析设计,若因子设计包含组内和组间因子,又称作混合模型方差分析,上述的实验设计就是典型的双因素混合模型方差分析。
在这组实验设计中,需要做三次F检验:疗法因素一次、时间因素一次,两者交互因素一次。若疗法结果显著,说明CBT和EMDR对焦虑症的治疗效果不同;若时间结果显著,说明焦虑度从五周到六月发生了变化;若两者交互效应显著,说明焦虑度从五周到六个月的改变程度在两种疗法间是不同的。
- ?
用R语言做数据分析——时间序列的分解和预测
游弋
展开
建立时间序列数据
建立时间序列,必须有日期作为数据框的一列。R语言建立时间序列的函数是ts(),它的格式如下:
ts(gm,frequency=12,start=c(year,month))
其中,gm表示时间列数据;frequency表示时间单位,它的值常用的有12、4、365,它们分别表示每一个时间单位中有12个月、4个季度、365日观察值,start表示时间序列的开始时间。
例如,我们构造一个含有30个值的时间序列(1~30),开始时间为2011年3月,以每个月作为观察值。代码如下:
>a<- ts(1:30, frequency = 12, start = c(2011,3))
>print(a)
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2011 1 2 3 4 5 6 7 8 9 10
2012 11 12 13 14 15 16 17 18 19 20 21 22
2013 23 24 25 26 27 28 29 30
>str(a)
Time-Series [1:30] from 2011 to 2014: 1 2 3 4 5 6 7 8 9 10 ...
>attributes(a)
$tsp
[1] 2011.167 2013.583 12.000
$class
[1] "ts"
时间序列分解
时间序列分解就是将时间序列分解为趋势、季节性、周期性以及不规则这几个成分。趋势成分指长时间间隔的大致运动方向,季节性成分指季节性的变化,周期性成分指重复但非周期的波动,最后是不规则成分。
下面是在时间序列数据AirPassengers上演示时间序列的分解,该数据是由国外某机场1949年到1960年每月乘客总数的数据构成,共有144(=12*12)条数据,时间序列图如下:
>plot(AirPassengers)
下面使用decompose()函数将数据集分解成不同惩罚呢,分解代码如下:
>apts<- ts(AirPassengers, frequency = 12)
>f<- decompose(apts)
>#季节性分解
>print(f$figure)
[1] -24.748737 -36.188131 -2.241162 -8.036616 -4.506313 35.402778
[7] 63.830808 62.823232 16.520202 -20.642677 -53.593434 -28.619949
> plot(f$figure, type = "b", xaxt="n", xlab = "")
>monthNames<- months(ISOdate(2011,1:12,1))
> axis(1,at=1:12, labels = monthNames, las=2)
>plot(f)
上图中,第一个图表为原始时间序列数据,第二个图表为数据的趋势,第三个图表为季节性因素,最后一个图表为剔除了趋势和季节性因素之后的其他成分。
时间序列预测
时间序列预测是根据历史数据来预测未来事件。一个时间序列预测的例子是基于股票过去的形式来预测其开盘价。两个常用的时间序列预测模型为自回归移动平均模型(ARMA)和自回归综合移动平均模型(ARIMA)。
下面使用ARMA拟合单变量时间序列,并使用拟合模型进行预测,代码如下:
>fit<- arima(AirPassengers, order = c(1,0,0), list(order=c(2,1,0), period=12))
>fore<- predict(fit, n.ahead = 24)
>U<- fore$pred + 2*fore$se
>L<- fore$pred - 2*fore$se
> ts.plot(AirPassengers, fore$pred, U, L, col=c(1,2,4,4), lty=c(1,1,2,2))
> legend("topleft",c("Actual","Forecast", "Error Bounds(95% Confidence)"), col=c(1,2,4), lty=c(1,1,2))
图中,实线表示预测值,虚线表示在置信度水平95%下的误差边界。
- ?
为什么R语言是学习数据分析的第一选择
Martin
展开
刚开始学习数据科学的人都会面对同一个问题:
不知道该先学习哪种编程语言。
事实是,你的时间有限。学习一门新的编程语言相当于一项巨大的投资,因此在选择语言时需要有战略性。
我给你的建议就是:先学习R语言
我建议你将R语言作为你的第一个“数据科学编程语言”。虽然也有例外,比如特定的项目需要。
因为R语言正在成为数据科学的“通用语言”
这并不是说R语言是唯一的语言,也不是说它是每个工作的最佳工具。然而,它是使用最广泛的,而且越来越受欢迎。
O' reilly media在过去几年中进行了一系列数据科学调查,分析了数据科学趋势。在2016年的调查报告中,R语言是最常用的编程语言(如果排除SQL的话,在本文中它不能称为编程语言)。57%的调查人群使用R语言(使用Python的比例为54%)。
另一个常见的语言排名系统是Redmonk编程语言排名,它由GitHub(代码行)和Stack Overflow(标签数)的流行指数派生而来。截至2016年11月,R语言在所有编程语言中排名第13。此外,R语言多年来一直呈持续上升趋势:
此外还有TIOBE指数(按搜索引擎搜索次数对编程语言进行排名)。在TIOBE指数上,R语言十年来呈现出稳定上升趋势。
使用R语言的公司
在招聘数据科学家的几家顶级公司中,R语言使用程度非常高。在我认为现代经济中最优秀的两家公司——Google和Facebook 都有使用R语言数据科学家。
除了像Google,Facebook和微软这样的科技巨头,R语言在美国银行,福特,TechCrunch,Uber和Trulia等众多公司都有广泛的应用。
R语言在学术界很受欢迎
R语言不仅仅是一个行业工具。它在学术科学家和研究人员中也非常受欢迎,最近著名《自然》杂志上发表的R语言概况也证实了这一点。
R语言在学术界的备受欢迎,因为它创造了供应行业的人才库。
换句话说,如果最优秀、最聪明的人群在大学学习了R语言,这将加大R语言在行业中的重要性。当学者、博士和研究人员离开学术界从事商业活动时,他们又将产生对R语言人才的需求。
此外,随着数据科学的成熟,商业届的数据科学家将需要与学术届的科学家进行更多的沟通。我们需要借鉴技术和交流观点。随着世界转变为数据流时,学术科学与面向商业的数据科学之间的界线会变得模糊。
通过R语言学习“数据科学的技能”是最简单的
然而,R语言的普及性并不是学习R语言的唯一原因。
在选择语言时,你需要一种在这些领域都具有重要功能的语言。同时你需要执行这些任务的工具,以及在你所选语言中来学习这些技能的资源。
如上所述,你更多地需要关注流程和技术,而不是语法。
你需要学习如何解决问题。
你需要学习如何在数据中找到真知灼见。
为此,你需要掌握数据科学的3个核心技能领域:数据处理,数据可视化和机器学习。在R语言中掌握这些技能将比任何其他语言都容易。
数据处理
一般来说,数据科学中80%的工作都是数据处理。通常情况下,你需要花费大量时间来整理你的数据。R语言中有一些很棒的数据管理工具。
R语言中的dplyr包使数据处理变得容易,这可以大大简化数据处理的工作流程。
数据可视化
ggplot2是最佳的数据可视化工具之一。ggplot2的好处是,在学习语法的同时,还学习如何思考数据可视化。
所有的统计可视化都有很深层的结构。存在构建数据可视化的高度结构化框架,ggplot2基于该框架。
此外,当将ggplot2和dplyr组合在一起时,从数据中得出相关见解几乎毫不费力。
机器学习
最后,还有机器学习。虽然我认为大多数数据科学初学者不应该急于学习机器学习(首先掌握数据探索更为重要),机器学习是一项重要的技能。当数据探索不再带来洞察力时,你则需要更强大的工具。
如果你是初学者,R语言是很好的选择。同时需要专注于学习数据科学的技能。
在学习过程中,你可能会看到很多新技术和新工具,或者一些令人眼花缭乱的数据可视化。
看到其他人的成果(并发现他们正在使用不同的工具)可能会导致你想尝试其他的东西。相信我:你需要集中注意力。你需要花上几个月(或更长时间)才能真正投入到一个工具中。
如上所述,如果你确实希望在数据科学工作流程中提高技能。至少在数据可视化和数据处理方面,你得具备扎实的技能。
- ?
用R语言做数据分析——高密度散点图
失爱
展开
当数据点重叠很严重时,用散点图来观察变量关系就显得力不从心了。下面是一个人为设计的例子,其中10000个观测点分布在两个重叠的数据群中:
>set.seed(1234)
>n<-10000
>c1<-matrix(rnorm(n,mean = 0,sd=.5),ncol=2)
>c2<-matrix(rnorm(n,mean = 3,sd=2),ncol=2)
>mydata<-rbind(c1,c2)
>mydata<-as.data.frame(mydata)
>names(mydata)<-c("x","y")
>with(mydata,plot(x,y,pch=19,main="Scatter Plot with 10,000 Observations"))
数据点的重叠导致识别x与y间的关系变得异常困难,针对这种情况,R提供了一些解决办法,你可以使用封箱、颜色和透明度来指明途中任一点上重叠点的数目。
smoothScatter()
函数可利用核密度估计生成颜色密度来表示点分布的散点图,代码如下:
>with(mydata,smoothScatter(x,y,main="Scatterplot Colored by Smoothed Densities"))
hexbin包中的
hexbin()
函数将二元变量的封箱放到六边形单元格中,代码如下:
IDPmisc包中的
iplot()
函数也可以通过颜色来表示点的密度,代码如下:
>library(IDPmisc)
> with(mydata,iplot(x,y,main = "Image Scatter Plot with Color Indicating Density"))
综上可见,基础包中的smoothScatter()函数,hexbin包中的hexbin()函数,以及IDPmisc包中iplot()都可以读大数据集创建可读性较好的高密度散点图。
- ?
用R语言做数据分析——创建数据集
夜难眠
展开
R拥有许多用于存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表。它们在存储数据的类型、创建方式、结构复杂度,以及用于定位和访问其中个别元素的标记等方面均有所不同,下面从向量开始,逐一探究每一种数据结构。
向量
向量是用于存储数值型、字符型或逻辑型数据的一维数组。执行c()函数可用来创建向量:
#数值型向量
a<- c(1,2,5,3,6,-2,4)
#字符型向量
b<- c("one","two","three")
#逻辑型向量
c<- c(TRUE,TRUE,FALSE,FALSE)
单一向量中的数据必须拥有相同的类型或模式,同一向量中无法混杂不同模式的数据。通过方括号给定所处位置的数值,就能访问向量中的元素:
>a<- c(1,2,5,3,6,-2,4)
>a[3]
[1] 5
>a[c(1,3,5)]
[1] 1 5 6
>a[2:6]
[1] 2 5 3 6 -2
标量
标量是只包含一个元素的向量,例如f<- 3,g <- "US"和h <- TRUE。它们通常用于保存常量。
矩阵
矩阵是一个二维数组,只是每个元素都拥有相同的模式,可通过matrix()函数创建矩阵,一般使用格式为:
vector包含了矩阵元素,nrow和ncol用于指定行和列的维数,dimnames包含了以字符型向量表示的行名和列名。选项byrow则表明矩阵应当按行填充(byrow=TRUE)还是按列填充(byrow=FALSE),默认是按列填充。
>y<-matrix(1:20,nrow=5,ncol=4)
>y
[,1] [,2] [,3] [,4]
[1,] 1 6 11 16
[2,] 2 7 12 17
[3,] 3 8 13 18
[4,] 4 9 14 19
[5,] 5 10 15 20
>cell<- c(1,26,24,68)
>rnames<- c("R1","R2")
>cnames<- c("C1","C2")
>mymatrix<- matrix(cell,nrow=2,ncol=2,dimnames = list(rnames,cnames))
>mymatrix
C1 C2
R1 1 24
R2 26 68
>#矩阵下标的使用
>x<-matrix(1:10,nrow=2)
>x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
>x[2,]
[1] 2 4 6 8 10
>x[1,4]
[1] 7
>x[1,c(4,5)]
[1] 7 9
数组
数组与矩阵类似,但是维度可以大于2。数组可通过array()函数创建,形式如下:
其中vector包含了数组中的数据,dimensions是一个数值型向量,给出了各个维度下标的最大值,而dimnames是可选的、各维度名称标签的列表。
dim1<-c("A1","A2")
>dim2<-c("B1","B2","B3")
>dim3<-c("C1","C2","C3","C4")
>z<-array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3))
>z
, , C1
B1 B2 B3
A1 1 3 5
A2 2 4 6
, , C2
A1 7 9 11
A2 8 10 12
, , C3
A1 13 15 17
A2 14 16 18
, , C4
A1 19 21 23
A2 20 22 24
数据框
由于不同的列可以包含不同模式的数据,数据框的概念较矩阵来说更为一般,它与通常在SAS、SPSS中看到的数据集类似,数据框是在在R语言中最长处理的数据结构。通常情况下,由于数据有多种模式,无法将数据放入一个矩阵,这时使用数据框是最佳选择。可使用data.frame()函数创建:
其中的列向量col1,col2,col3可以为任何类型,每一列的名称可由函数names指定:
patientID<-c(1,2,3,4)
>age<-c(25,34,28,52)
>diabetes<-c("type1","type2","type1","type1")
>status<-c("poor","Improved","Excellent","Poor")
>patientData<- data.frame(patientID,age,diabetes,status)
>patientData
patientID age diabetes status
1 1 25 type1 poor
2 2 34 type2 Improved
3 3 28 type1 Excellent
4 4 52 type1 Poor
>patientData[1:2]
patientID age
1 1 25
2 2 34
3 3 28
4 4 52
>patientData["diabetes","status"]
[1]
Levels: Excellent Improved poor Poor
>patientData[c("diabetes","status")]
diabetes status
1 type1 poor
2 type2 Improved
3 type1 Excellent
4 type1 Poor
>patientData$age
[1] 25 34 28 52
因子
变量可归结为名义型、有序型或连续型变量。名义型变量是没有顺序之分的类别变量;有序型变量表示一种顺序关系,而非数量关系;连续型变量可以呈现为某个范围内 的任意值,并同时表示了顺序和数量。
名义型变量和有序型变量在R中称为因子,因子在R中非常重要,因为它决定了数据的分析方式以及如何进行视觉呈现。函数factor()以一个整数向量的形式存储类别值,整数的取值范围[1,...,k](其中k是名义型变量中唯一值的个数),同时一个由字符串(原始值)组成的内部向量将映射到这些整数上,比如:
diabetes<-c("type1","type2","type1","type1")
语句diabetes<- factor(diabetes)将此向量存储为(1,2,1,1),并在内部将其关联为1=type1和2=type2,针对向量diabetes进行的任何分析将会将其当作明细型变量对待,并自动选择适合这一测量尺度的统计法那个法。
使用str(patientdata)可以显示对象的结构,使用summary(patientdata)可以显示对象的统计概要。
列表
列表是R语言中最复杂的一种数据类型。一般说来,列表就是一些对象的有序集合,列表允许整合若干对象到单个对象名下,可以使用list()函数创建列表:
下面创建一个列表,其中有四个成分,一个字符串、一个数值型向量、一个矩阵以及一个字符型向量。
g<-"My First List"
>h<-c(25,26,18,39)
>j<-matrix(1:10,nrow = 5)
>k<-c("one","two","three")
>mylist<-list(title=g,ages=h,j,k)
>mylist
$title
[1] "My First List"
$ages
[1] 25 26 18 39
[[3]]
[,1] [,2]
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 10
[[4]]
[1] "one" "two" "three"
- ?
R学习笔记系列—R语言与数据分析之数据时代篇
寄真
展开
引言 R语言与数据时代
0.1 数据时代
我们已经进入了全新的数据时代,大数据、云计算、物联网、机器学习、人工智能等等一系列技术纷至沓来,数据的管理和应用已经渗透到每一个行业和业务领域,成为当今以及未来商业运作的基础资产。对于海量数据的挖掘预示着新一轮生产率增长和消费者盈余浪潮的到来,数据将成为决策的关键因素。可以说,只有掌握数据并善于运用数据的人,才会在竞争日益激烈的环境中寻得先机。
对于数据时代,已经很多学者商业领袖做了深刻的阐述。
未来简史作者:“数据将取代土地成为最重要的资源”。
阿里巴巴董事局主席马云:“我们认为,数据将在未来变得对人们的生活非常重要。明天,一切事物都将通过物联网与网络相连”。
谷歌母公司Alphabet的执行董事长埃里克-施密特:“我认为,对数据分析的基本理解对下一代年轻人来说非常重要,这就是你们要进入的世界”。
哈佛商业评论:“数据科学家是二十一世纪最性感的工作”。
......
所有这些,都强调了数据的极端重要性。所以,如果你对数据分析的世界感兴趣,那么不要再犹豫,立即行动起来,为自赢得未来。
0.2 数据分析师的分类
数据科学是一个内涵十分丰富的科学,数据分析领域包含着许多问题,因而数据科学家也有很多不同的分工。如果从工作的性质来看,大致有四类。
数据工程师:更多地关注数据分析的软硬件基础设施,比如数据仓库、海量数据分布式处理框架、数据集成等,能够熟练编写管理和操作数据的代码,一般是具有IT背景的工程师。
数据科学家:通常来自学术界,具有扎实的数学、统计学背景和极强的知识扩展能力,在新算法的研究,以及一些开创新的工作中至关重要,是整个数据科学发展的重要驱动力。
数据分析师: 有较为深厚的统计学背景,同时也熟练掌握大数据、机器学习以及编程,能够为指定的任务制定科学的数据分析方案,从大量的数据中挖掘出有价值的信息,为决策提供支撑。
数据营销师:营销推广数据分析产品和服务的人,一般来说本身就具备丰富的数据从业经历,擅长于专业人士打交道,并将数据分析方案转化为现实收入。
当然,以上分类只是一个参考,并不绝对。本系列教程的目的是通过循序渐进的学习,让读者熟练掌握成为一名数据分师所需要的知识和技能。如果你励志成为一名具备深厚IT技能的数据工程师、或者理论背景深厚的前沿算法研究者,那么本书并不适合你。
0.3 数据分析师应该具备的特质
要在任何一个领域取得成功,变得卓越,都必须具备一些基本的特质或者品格,否则就算勉强从事这个行业,也很难从平庸变得卓越。当然,需要具备什么样的素质,不同的人有不同的看法,并没有一个标准答案。但有一些特质是共同的。
首先,足够热爱。想要探究数据背后的规律,想要了解事物之间的关联,想要预测事物未来的发展轨迹。只有这样,你才能怡然自得心情愉悦地工作,在普通人感到枯燥无趣的一大堆数据中找到乐趣,而乐趣或者兴趣所带来的愉悦感是做好任何事情的基本前提和根本动力。正如那句话所说:“世界上所有的坚持,都源自内心真正的热爱”。
其次,坚韧不拔。数据分析的世界广袤辽阔,需要掌握很多的知识和技能,需要付出大量的精力学习和掌握,在这个过程中,可能常常感到沮丧、失望、难以坚持。那么,当你心情低落时,请不要放弃,回想最初要成为数据分析师的初衷,继续前行。正所谓不忘初心、方得始终,坚持会让你体会到类似禅宗“顿悟”,以及诗词中“柳暗花明又一村”、“众里寻她千百度,蓦然回首,那人却在,灯火阑珊处”的人生体验。
第三,保持专注。数据分析的知识和技能是通用的,但应用的领域是具体的。除非你立志成为一名数据科学家,研究基础理论,否则建议专注于具体的领域,成为行业专家,不要经常变换自己的研究领域。之所以这样,是因为人的精力是有限的,只有长时间专注某一领域,才能在该行业价值链中占据高位,成为高端工作者,获得远超一般人员的超额回报。当然,扎实的基础知识是必备的,在需要的时候,你也能够比较自如的切换到另一行业。
第四,混合思维。数据分析必须具备两种可能有一定冲突的思维方式,一是数学的思维方式,习惯用数学的、逻辑的方式观察、描述和思考事物,;另一种是直觉的、艺术的思维。我们对世界的认识是不完备的,有些现象和关联很难用数学直观的表述出来。目前很热的深度学习,其实也只能做出在一定领域适用的弱人工智能,局限性非常大,且很容易被欺骗。很多时候,数据分析的结果取决于算法的选择和优化,取决于数据分析师的经验和直觉,而这种直觉和经验,或者说复杂度到一定程度后必须引入的宏观思维,更类似一种艺术。
0.4 本书的学习路径
作者看过很多介绍大数据分析、数据挖掘、机器学习的书籍或者文章,很多都强调了大数据分析与传统统计学的区别,比如不再突出小样本下的推断问题,不再追求因果关系而是承认混杂性,不再追求精确性而是过程黑箱化等等。因此,在学习方法上,这些书籍都直接从数据挖掘、机器学习的各种算法开始,告诉大家怎么打开软件,输入哪个函数,调整哪些参数,然后会输出什么结果,做出某个结论。看多了这样速成的教材,你初期会很有成就感,因为觉得数据分析不过如此,很快就掌握了相关技能。但是,随着应用的逐渐深入你会发现,好像除了知道那几个算法怎么调用,你很难对数据的性质有更加深入和直观的认识,或者离开了样例数据库,就很难得出有效的结论,做出有用的决策。
作者始终认为,要想精通任何一门技术或者学问,成为行业专家,都需要从最基础的知识开始,反复学习和练习,别无捷径。具体到数据分析领域,作者认为数据科学家不过是统计学家的一个比较时髦的叫法,所有的数据技术,包括炙手可热的机器学习,都是统计学和计算机科学交叉发展的结果,扎实的数学和统计学基础永远是数据分析师必须具备h和熟练掌握的知识。可以说,关于数据的学问,全部的基础都源于数学和统计学,数学和统计学对于数据性质的研究、对于误差行为的假定和分析、对于数据质量的判断、对于模型建立的指导原则等等,是一切数据分析的基础。只有通过循序渐进的学习,逐步熟练掌握数学和统计学基本原理和技能,才能在数据分析领域走的更远。
本系列教程首先从统计学基础知识开始学习,然后逐步过度到各种数据挖掘算法,再到机器学习和深度学习,中间会穿插介绍各种背景知识,包括一些数学知识和编程思想,最大程度地让读者夯实基础、拓宽视野,熟练掌握数据分析师所需具备的各种知识。
- ?
为什么做数据分析首选R语言?
夙愿
展开
数据时代已经到来,但数据分析、数据挖掘人才却十分短缺,据全球顶尖管理咨询公司麦肯锡(McKinsey)一份详细分析报告显示:
预计到 2018 年,大数据或者数据工作者的岗位需求将激增,其中大数据科学家的缺口在 14 万到 19 万之间,对于懂得如何利用大数据做决策的分析师和经理的岗位缺口则将达到 150 万!
先来了解一下数据分析,就是以商业目的为驱动,所开展的获取数据、处理数据、分析数据、展示数据和撰写数据结构报告的一系列科学过程。
上海数据分析网针对这个过程,R 都有相应的方法可以较好地处理和完成数据分析所涉及到的内容。R 是一种免费的、开源的语言和操作环境,其初衷是为了统计计算和画图,但是 R语言现在能够做的事情已经远远地超出了其初衷,可以在诸多领域进行应用,比如,数据挖掘、机器学习、社交网络、生物信息、金融数据分析等。同时,R 提供了成千上万的专业模块和实用工具,是从大数据中获取有用信息的绝佳工具。
许多研究院,公司和大学已经使用 R。在过去几年,许多包括 R 的参考和应用 R 函数进行计算的图书相继出版。在 2015 年就被 IEEE 列入 2015 年十大语言,近几年也依然占据数据分析主流语言的绝对地位,所以,学习R语言是一项明智的职业投资。
R语言的强大功能
R是一套完整的数据处理、计算和制图软件系统。
其功能包括:数据存储和处理系统;数组运算工具(其向量、矩阵运算方面功能尤其强大);完整连贯的统计分析工具;优秀的统计制图功能;
简便而强大的编程语言:可操纵数据的输入和输出,可实现分支、循环,用户可自定义功能。R 语言配有专业的图形交互界面,对没有编程基础的用户也非常友好, R 语言上手入门极快,是学习数据分析、数据挖掘的最佳编程语言。
上海数据分析网现在上海数据分析网联合哈步数据首席数据科学家、跟随R发明者之一Ross Ihaka进行R语言二次开发的高老师,推出了机器学习与数据挖掘—R语言实战课程,3月17日开课!
【课程信息】
授课方式:面授直播两种形式,中文多媒体互动式授课方式
授课时间:
2018年3月17-18日
9:00-12:00,13:00-16:00
学习期限:线上(视频/直播)与线下相结合,长期学习。
微信群、QQ群练习答疑。
滚动开班,一次报名,可以申请免费回来听课。
课件资料:课程内部资料,人手一份,上课现场发放
CPDA和CDA学员优惠
更多团报优惠请咨询相关老师
【教师简介】
高杨,哈步数据首席数据科学家,跟随R发明者之一Ross Ihaka进行R语言二次开发,十几年的数据分析师从业经验。精通SAS、R等数据分析软件,主导过多个大数据项目。精通R语言,小班教学。
- ?
用R语言做数据分析——相关图
Maddy
展开
相关系数矩阵是多元统计分析的一个基本方面。哪些被考察的变量与其他变量的相关性很强,哪些并不强?相关变量是否以某种特定的方式聚集在一起?随着变量数的增加,这类问题将变得难以回答。相关图作为一种相对现代的方法,可通过对相关系数矩阵的可视化来回答这些问题。
相关图非常容易解释,以mtcars数据框中的变量相关性为例,它含有11个变量,对每个变量都测量了32辆汽车。利用下面的代码,我们就可以获得该数据的相关系数:
> options(digits = 2)
>cor(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb
mpg 1.00 -0.85 -0.85 -0.78 0.681 -0.87 0.419 0.66 0.600 0.48 -0.551
cyl -0.85 1.00 0.90 0.83 -0.700 0.78 -0.591 -0.81 -0.523 -0.49 0.527
disp -0.85 0.90 1.00 0.79 -0.710 0.89 -0.434 -0.71 -0.591 -0.56 0.395
hp -0.78 0.83 0.79 1.00 -0.449 0.66 -0.708 -0.72 -0.243 -0.13 0.750
drat 0.68 -0.70 -0.71 -0.45 1.000 -0.71 0.091 0.44 0.713 0.70 -0.091
wt -0.87 0.78 0.89 0.66 -0.712 1.00 -0.175 -0.55 -0.692 -0.58 0.428
qsec 0.42 -0.59 -0.43 -0.71 0.091 -0.17 1.000 0.74 -0.230 -0.21 -0.656
vs 0.66 -0.81 -0.71 -0.72 0.440 -0.55 0.745 1.00 0.168 0.21 -0.570
am 0.60 -0.52 -0.59 -0.24 0.713 -0.69 -0.230 0.17 1.000 0.79 0.058
gear 0.48 -0.49 -0.56 -0.13 0.700 -0.58 -0.213 0.21 0.794 1.00 0.274
carb -0.55 0.53 0.39 0.75 -0.091 0.43 -0.656 -0.57 0.058 0.27 1.000
哪些变量相关性最强?哪些变量相对独立?是否存在某种聚集模式?如果不花点时间和精力,单利用这个相关系数矩阵来回答这些问题是比较问题的。
利用corrgram包中的corrgram()函数,我们可以以图形的方式展示该相关系数矩阵,代码为:
>library(corrgram)
>corrgram(mtcars,order=TRUE,lower.panel=panel.shade,
+ upper.panel=panel.pie, text.panel=panel.txt,
+ main="Correlogram of mtcars intercorrelations")
我们先从主对角线下方的单元格开始解释这幅图形。默认地,蓝色和从左下指向右上的斜杠表示单元格中的两个变量呈正相关。反过来,红色和从左上指向右下的斜杠表示变量呈负相关。色彩越深,饱和度越高,说明变量相关性越大。相关性接近于0的单元格基本无色。
从图中含阴影的单元格中可以看到,gear、am、drat和mpg呈相互间呈正相关,wt、disp、hp和carb相互间也呈正相关。但第一组变量与第二组变量呈负相关。我们还可以看到carb和am、vs和gear、vs和am以及drat和qsec四组变量间的相关性很弱。
上三角单元格用饼图展示了相同的信息。颜色的功能同上,但相关性大小由被填充的饼图块的大小来展示。正相关性将从12点钟方向开始顺时钟填充饼图,而负相关性则逆时钟方向填充饼图。corrgram函数的格式如下:
corrgram(x, order=, panel=, text.panel=, diag.panel=)
其中,x是一行一个观测的数据框。当order=TRUE时,相关矩阵将使用主成分分析法对变来那个重排序,这将使得二元变量的关系模式更为明显。选项panel设定非对角线面板使用的元素类型。我们可以通过选项lower.panel和upper.panel来分别设置主对角线上方和上方的元素类型。而text.panel和diag.panel选项控制着主对角线元素类型。可用的panel值如下图所示:
我们进行第二段代码:
>options(digits = 2)
>library(corrgram)
>corrgram(mtcars,order=TRUE,lower.panel=panel.ellipse,
+ upper.panel=panel.pts, text.panel=panel.txt,
+ diag.panel = panel.minmax,
+ main="Correlogram of mtcars data scatter plots and ellipses")
这幅图中,下三角区域包含平滑拟合曲线和置信椭圆,上三角区域包含散点图。主对角面板包含变量最小值和最大值。矩阵的行和列利用主成分分析法进行了重排序。
我们还可以使用colorRampPallette()函数自主控制corrgram()函数中使用的颜色,演示代码如下:
library(corrgram)
col.corrgram<- function(ncol){
colorRampPalette(c("darkgoldenrod4","burlywood1","darkkhaki","darkgreen"))(ncol)
}
corrgram(mtcars,order=TRUE,lower.panel=panel.shade,
upper.panel=NULL, text.panel=panel.txt,
main="Correlogram of mtcars intercorrelations")
- ?
用R语言做数据分析——R的四种图形系统
阿克罗蒂里
展开
我们学习了各种各样的图形,它们大部分都是利用R语言的基础图形系统创建的。在R语言中,除了基础图形系统之外,R语言还提供了grid、lattice和ggplot2这三种图形系统,它们克服了R基础图形系统的低效性,大大扩展了的R语言的绘图能力。
grid图形系统可以很轻松地控制图形基础单元,给予编程者创作图形极大的灵活性。lattice包通过一维、二维或三维条件绘图来对多元变量关系进行直观展示。ggplot2包则基于一种全面的图形语法,提供了一种全新的图形创建方式。因为grid没有提供生成统计图形以及完整绘图的函数,因此数据分析师很少直接采用grid包来分析数据。这里重点介绍lattice和ggplot2图形系统。
四种图形系统的载入方式有所不同,基础图形函数可以自动调用,grid和lattice函数的调用必须要加载相应的包(library(lattice)),要调用ggplot2函数需要下载并安装该包(install.packages("ggplot2")),第一次使用还要引入加载该包(library(ggplot2))。
lattice包为单变量和多变量数据的可视化提供了一个全面的图形系统,它可以轻松生成栅栏图形。
在一个或多个其他变量的条件下,栅栏图形展示某个变量的分布或与其他变量间的关系。lattice包中singer数据集包含了合唱成员的身高和声部数据,让我们考虑以下问题:纽约合唱团歌手的身高随着他们所属的声部如何变化?来看以下代码:
>library(lattice)
> histogram(~height|voice.part, data=singer,main="Distribution of Heights by Voice Pitch", xlab="Height (inches)")
height是因变量,voice.part被称作条件变量,这段代码对八个声部的每一个都创建了一个直方图。图形显示了男高音和男低音比女低音和女高音身高要高。
在栅栏图形中,单个面板要依据条件变量的各个水平来创建。如果指定了多个条件变量,那么一个面板将按照各个因子水平的组合来创建。然后面板将被排成一个阵列以进行比较。每个面板在一个区域都会有一个标签,这里的区域称作条带区域。随后我们可以看到,用户可对每个面板中展示的图形、条带的格式和位置、面板的摆放、图例的内容和位置以及其他许多图形特征进行控制。
lattice包提供了丰富的函数,可生成单变量图形(点图、核密度图、直方图、柱状图和箱线图)、双变量图形(散点图、带状图和平行箱线图)和多变量图形(三维图和散点图矩阵)。
各种高级绘图函数都服从以下格式:
graph_function(formula, data=, options)
graph_function为图形类型函数;
formula指定要展示的变量和条件变量;
data指定一个数据框;
options是逗号分隔函数,用来修改图形的内容、摆放方式和标准。
lattice包中常见的图形类型函数如下:
lattice包中图形函数常见的配置选项如下:
设小写字母代表数值型变量,大写字母代表类别型变量(因子)。在高级绘图函数中,表达式形式通常为:
y ~ x | A * B
在竖线左边的变量称为主要变量,右边的变量称为条件变量。主要变量将变量映射到每个面板的坐标轴上,此处,y ~ x表示变量分别映射到纵轴和横轴上。对于单变量绘图,用~x代替y ~ x即可;对于三维图形,用z ~ x*y代替y ~ x,而对于多变量绘图(散点图矩阵或平行坐标图)用一个数据框代替y ~ x即可。注意,条件变量总是可以自行挑选的。
根据上述逻辑, ~ x | A即展示因子A各个水平下水平下数值型变量x的分布情况; y ~ x | A*B即展示因子A和B各个水平下组合下数值型变量x和y间的关系。而A ~ x则表示类别型变量A在纵轴上,数值型变量x在横轴上进行展示。 ~ x表示仅展示数值型变量x。
下面以数据框mtcar为例,我们使用以下代码进行lattice图形的绘制:
library(lattice)
attach(mtcars)
gear<- factor(gear, levels = c(3,4,5),labels = c("3 gears", "4 gears", "5 gears"))
cyl<- factor(cyl, levels = c(4,6,8), labels = c("4 cylinders","6 cylinders","8 cylinders"))
densityplot(~mpg,main="Density Plot", xlab = "Miles per Gallon")
densityplot(~mpg | cyl,main="Density Plot", xlab = "Miles per Gallon")
xyplot(mpg ~ wt | cyl * gear, main="Scatter Plots by Cylinders and Gears",xlab = "Car Weight",ylab = "Miles per Gallon")
cloud(mpg~wt*qsec | cyl, main="3D Scatter Plots by Cylinders")
dotplot(cyl ~ mpg | gear, main="Dot Plots by Number of Gears and Cylinders", xlab="Miles Per Gallon")
splom(mtcars[c(1,3,4,5,6)], main="Scatter Plot Matrix for mtcars Data")
detach(mtcars)
我们可以存储和操作lattice包中的高级绘图函数生成的图形。来看下列代码:
mygraph<- densityplot(~height | voice.part, data=singer)
plot(mygraph)
它创建了一个栅栏密度图,并存储在mygraph对象中。但是此时不会展示任何图形,只有调用plot(mygraph)或(mygraph)时才会展示图形。
我们可以通过options轻松地修改lattice图形对象,另外还可以使用update()函数来修改lattice对象,例如:
update(mygraph, col="red", pch=16, cex=.8, jitter=.05, lwd=2)
数据分析中r是什么
-
1、只需3秒快速实现求和
-
2、如何快速填充序号
-
3、如何自动填充序号(公式法)
-
4、数据条的神奇应用
-
5、多文本快速合并
-
6、查找与替换的不同玩法
-
7、快速定位到指定区域
-
8、数据排序、工资条制作
-
9、快速筛选(模糊、精确筛选)
-
10、快速插入空行
-
11、快速删除空行
-
12.快速跳转到天涯海角
-
13、.同时查看两个Excel文件
-
14、用条件格式扮靓报表
-
15、一键插入Excel图表
-
16、批量处理行高、列宽
-
17、利用拆分功能查看数据
-
18、批量录入相同内容
-
19、工作表快速跳转
-
20、批量录入表格模板(精品课程)
-
21、Excel函数与公式的应用、公式循环引用的查找
-
22、IF函数单条件判断同比增长
-
23、用sum函数 格式相同,连续多表数据汇总
-
24、excel快捷键
-
25、VLOOKUP函数——根据销售员匹配销售额
-
26、统计各部门销售总额
-
27、统计指定条件个数
-
28、怎样输入当前日期和时间、星期数
-
29、销售业绩排名
-
30、Sumproduct函数-万能函数(销售额汇总求和)
-
31、根据销售员,地区,商品名称汇总
-
32、批量替换PPT字体
-
33、给销售额数据批量添加万元单位
-
34、一秒快速核对两列数据
-
35、快速定位到指定单元格或区域
-
36、快速制作双行标题工资条
-
37、给你的表格做个瘦身
-
38、快速打开常用的Excel文件
-
39、快速打开多个Excel文件
-
40、利用创建组—快速隐藏/展开多列数据
-
41、快速制作下拉菜单
-
42、复制粘贴表格,如何保留数据源列宽格式一致?
-
43、两列数据位置互换
-
44、1秒钟扮靓报表——如何实现表格隔行换色
-
45、快速删除重复记录——保留唯一值
-
46、快速向下填充、向右填充,文本或公式
-
47、给Excel文件添加密码
-
48、插入带图片的批注
-
49、输入公式后不计算?
-
50、如何设置单元格缩进
-
51、快速解决Excel表格总显示货币格式
-
52、批量添加万元单位
-
53、你会四舍五入么?
-
54、用RAND函数机选彩票
-
55、冻结首行你会么?
-
56、超链接的高级应用
-
57、IFERROR函数-屏蔽错误值
-
58、批量填充颜色
-
59、录入数据
-
60、快速输入工号
-
61、快速行列转置
-
62、自定义缩放界面
-
63、多个单元格同时输入
-
64、如何计算立方米?
-
65、快速制作双行标题工资条
-
66、输入带方框的√和×
-
67、快速将姓名对齐
-
68、快速输入性别
-
69、按单位职务排序
-
70、自动计算合同到期日期
-
71、计算时间间隔
-
72、日期和时间的拆分
-
73、快速处理不规范的日期格式
-
74、快速填充合并单元格
-
75、效率加倍的快捷键
-
76、快速复制表格和对象
-
77、快速创建工作表副本
-
78、快速复制序列号
-
79、快速显示公式
-
80、多个单元格同时输入
-
81、快速调整显示比例
-
82、快速自动填充
-
83、快速填充(Ctrl+E)
-
84、Ctrl与数字键结合
-
85、快速将多列数据整理为1列
-
86、快速将1列数据拆分为多列
-
87、快速定位公式
-
88、快速录入数据
-
89、快速累计求和
-
90、身份证号码显示为0怎么办?
-
91、快速制作斜线表头
-
92、文本竖向显示
-
93、神奇的监视窗口
-
94、不一样的格式刷
-
95、快速美化图表
-
96、快速生成当前日期
-
97、快速找出循环引用
-
98、快速提取信息
-
99、二维表快速转换为一维表
-
100、快速多表合并