数据分析和R语言的那点事儿_1

   最近遇到一些程序员同学向我了解R语言,有些更是想转行做数据分析,故开始学习R或者Python之类的语言。在有其他编程语言的背景下,学习R的语法的确是一件十分简单的事。霸特,如果以为仅仅是这样的话那就图样图森破。
    首先,数据分析是一个非常庞杂的职能,也许岗位抬头均为数据分析师的两人,做的事情却大不相同——比如使用hadoop做日志统计和使用Excel处理报表,这简直是两个领域,相互之间的职能了解,可能仅为对方工作的冰山一角。
    其次,无论任何行业的数据分析,其日常工作主要为以下几块:

数据获取——数据库,统计网站,BI,各种生产系统数据,网页爬虫;
数据处理与探索——把各个来源的数据根据分析目的糅合在一起,删补缺失值,处理极端或异常值,探索各维度的分布情况;
分析——提出基于各个维度的假设,根据计算结果验证;
结果展示——图、表、报告;
并且不同的行业的数据分析,侧重方向也不同,比如金融行业,更注重于量化策略和时间序列分析;对于生物统计,更多的考验来自于稀疏矩阵的计算。 总之,如果只是学到了R语言的语法,你也做不了太多的事情。好在以上所说的,R目前的环境基本都支持。

    R与其被称之为一个统计软件,不如称其为一个数学计算环境,其强大的功能主要来自于各式扩展包,不同的包满足了不同的计算需求。截止到目前,官方社区CRAN(https://cran.r-project.org/)上收录了7261个扩展包。

1、数据获取

    获取数据是展开分析工作的前提,目前R语言几乎支持所有主流数据库的连接,各种数据分析软件如SPSS、SAS文件的交互,基本文件存储格式如txt、csv、json、xlsx等的I/O功能,且有很强大的扩展功能。比如对于xlsx文件,可以设置单元格格式、筛选、边框、字体、数值格式等等。
    R也有支持网页爬虫和HTML、XML解析的扩展包如RCurl、rvest等。

2、数据处理与清洗

    在实际工作中,数据处理往往占总工作时间的70%甚至更多,因不同的分析目的或分析假设,需要把数据按不同维度、不同粒度进行汇总、归类、整理和探索。
    R在这方面也有自己的优势,其拥有大量的基于C++编写的速度极快的扩展包,如plyr、dplyr等。

3、分析数据

    分析数据是整个流程的关键,也最为考验分析师水平;
    一方面,从数据、表格、趋势图、数据的交叉对比中发现数据的规律,从而发现观察到业务上的问题。这就是常说的数据分析的方法论,如何根据业务,有逻辑的去提出假设,验证假设。比如,当我们发现销售额下降,那么需要分析的目的就是什么因素引起了其下降。在这里的逻辑为,针对某一维度,假设其下降导致了销售额的下降,从而对数据进行验证。
    另一方面就是如何对假设进行验证,比如我们的假设是转化率下降,那么就要验证当前的转化率是否低于上一周期,或者历史同期,或者某一时间段内的转化率均值低于另一段时间的均值。如此可见,对于假设的验证就需要相当多的统计方法,例如对于某一组数据与另一组数据的均值差异的检验,就需要t检验或者z检验,而如果仅仅使用简单的算术平均值作为比较往往说服力不够。
    而R语言也同样提供了大量统计计算的扩展包与函数,从而使使用者能灵活机动的进行数据分析。当然,作为一门编程语言,也可以创造出符合业务需要的新的统计计算方法。
    为了方便起见,我们使用R自带的iris——鸢尾花数据集做一些小的测试。
    iris数据集已经被集成在R的环境里,故不需要做任何的导入即可进行分析,首先我们来看看数据是什么样的:
#以下的包如果没有安装需使用install.packages安装,如:install.packages("plyr")
library(plyr)
library(dplyr)
library(magrittr)
library(ggplot2)

#查看数据的基础信息
head(iris)#查看数据的前六行
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
glimpse(iris)#查看每个变量的信息
## Observations: 150
## Variables:
## $ Sepal.Length (dbl) 5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4.9,...
## $ Sepal.Width  (dbl) 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1,...
## $ Petal.Length (dbl) 1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5,...
## $ Petal.Width  (dbl) 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1,...
## $ Species      (fctr) setosa, setosa, setosa, setosa, setosa, setosa, ...
unique(iris$Species)#查看Species变量的唯一值
## [1] setosa     versicolor virginica
## Levels: setosa versicolor virginica
table(iris$Species)#查看每个分类的记录个数
##
##     setosa versicolor  virginica
##         50         50         50
数据集为5*150,共5个变量,150条数据。共三个品种的鸢尾花,每个品种50条记录,分别统计了花瓣和花萼的长度与宽度。
我们可以假设,不同品种的鸢尾花的花瓣、花萼的长宽可能是有差异的,再来看看基础的统计量。
#分片查看数据信息
dlply(iris,.(Species),summary)
## $setosa
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width
##  Min.   :4.300   Min.   :2.300   Min.   :1.000   Min.   :0.100
##  1st Qu.:4.800   1st Qu.:3.200   1st Qu.:1.400   1st Qu.:0.200
##  Median :5.000   Median :3.400   Median :1.500   Median :0.200
##  Mean   :5.006   Mean   :3.428   Mean   :1.462   Mean   :0.246
##  3rd Qu.:5.200   3rd Qu.:3.675   3rd Qu.:1.575   3rd Qu.:0.300
##  Max.   :5.800   Max.   :4.400   Max.   :1.900   Max.   :0.600
##        Species
##  setosa    :50
##  versicolor: 0
##  virginica : 0
##
##
##
##
## $versicolor
##   Sepal.Length    Sepal.Width     Petal.Length   Petal.Width
##  Min.   :4.900   Min.   :2.000   Min.   :3.00   Min.   :1.000
##  1st Qu.:5.600   1st Qu.:2.525   1st Qu.:4.00   1st Qu.:1.200
##  Median :5.900   Median :2.800   Median :4.35   Median :1.300
##  Mean   :5.936   Mean   :2.770   Mean   :4.26   Mean   :1.326
##  3rd Qu.:6.300   3rd Qu.:3.000   3rd Qu.:4.60   3rd Qu.:1.500
##  Max.   :7.000   Max.   :3.400   Max.   :5.10   Max.   :1.800
##        Species
##  setosa    : 0
##  versicolor:50
##  virginica : 0
##
##
##
##
## $virginica
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width
##  Min.   :4.900   Min.   :2.200   Min.   :4.500   Min.   :1.400
##  1st Qu.:6.225   1st Qu.:2.800   1st Qu.:5.100   1st Qu.:1.800
##  Median :6.500   Median :3.000   Median :5.550   Median :2.000
##  Mean   :6.588   Mean   :2.974   Mean   :5.552   Mean   :2.026
##  3rd Qu.:6.900   3rd Qu.:3.175   3rd Qu.:5.875   3rd Qu.:2.300
##  Max.   :7.900   Max.   :3.800   Max.   :6.900   Max.   :2.500
##        Species
##  setosa    : 0
##  versicolor: 0
##  virginica :50
##
##
##
##
## attr(,"split_type")
## [1] "data.frame"
## attr(,"split_labels")
##      Species
## 1     setosa
## 2 versicolor
## 3  virginica
从结果可以看出setosa品种的花瓣从长度和宽度来看都是最小的,基本从花瓣的长宽就可以判断此品种。
进一步来看,图说有益,首先看花瓣的形状:
#花瓣长宽的散点图
qplot(Petal.Length,Petal.Width,data=iris,color=Species,shape=Species)

#花萼长宽的散点图
qplot(Sepal.Length,Sepal.Width,data=iris,color=Species,shape=Species)

由此可见,seotosa品种可以很直观的与其他两个品种区分开来。而versicolor品种的花瓣也比virginica要小很多,但有少量的值是混在一起的,花萼的区别不太明显,简单的做个t检验:

#t.test
t.test(filter(iris,Species=="versicolor")%$%
         Sepal.Length,
         filter(iris,Species=="virginica")%$%
         Sepal.Length,var.equal=T)
##
##  Two Sample t-test
##
## data:  filter(iris, Species == "versicolor") %$% Sepal.Length and filter(iris, Species == "virginica") %$% Sepal.Length
## t = -5.6292, df = 98, p-value = 1.725e-07
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.8818516 -0.4221484
## sample estimates:
## mean of x mean of y
##     5.936     6.588
t.test(filter(iris,Species=="versicolor")%$%
         Petal.Length,
         filter(iris,Species=="virginica")%$%
         Petal.Length,var.equal=T)
##
##  Two Sample t-test
##
## data:  filter(iris, Species == "versicolor") %$% Petal.Length and filter(iris, Species == "virginica") %$% Petal.Length
## t = -12.604, df = 98, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -1.495426 -1.088574
## sample estimates:
## mean of x mean of y
##     4.260     5.552
在95%的显著水平下,两者的长度还是有明显的差距。

4、结果展示

    R语言有着丰富的可视化包。对于图,无论是常用的直方图、饼图、条形图等,还是复杂的组合图、地图、热图、动画都有非常完善的扩展包,>>比如上例中使用的ggplot2。而shiny包也支持局域网内部小型BI的展示,knitr支持自动化报告的生成。
    当然,R语言与数据分析的小秘密自然不止如此这般,如果真的下决心学习R,对以下的学习曲线要有个准备,瓶颈必然在于数据分析。
data=data.frame(x=seq(0.005,5,0.005),y=2^(seq(0.01,10,0.01)))
ggplot(data,aes(x,y))+
  geom_line(colour="red")+
  theme(axis.text.x=element_blank(),axis.text.y=element_blank())+
  labs(list(title="R语言学习曲线",x="学习时间",y="学习难度"))

附:本文所使用代码

#以下的包如果没有安装需使用install.packages安装,如:install.packages("plyr")
library(plyr)
library(dplyr)
library(magrittr)
library(ggplot2)

#查看数据的基础信息
head(iris)#查看数据的前六行
glimpse(iris)#查看每个变量的信息
unique(iris$Species)#查看Species变量的唯一值
table(iris$Species)#查看每个分类的记录个数

#分片查看数据信息
dlply(iris,.(Species),summary)

#花瓣长宽的散点图
qplot(Petal.Length,Petal.Width,data=iris,color=Species,shape=Species)
#花萼长宽的散点图
qplot(Sepal.Length,Sepal.Width,data=iris,color=Species,shape=Species)

#t.test
t.test(filter(iris,Species=="versicolor")%$%
         Sepal.Length,
         filter(iris,Species=="virginica")%$%
         Sepal.Length,var.equal=T)

t.test(filter(iris,Species=="versicolor")%$%
         Petal.Length,
         filter(iris,Species=="virginica")%$%
         Petal.Length,var.equal=T)

data=data.frame(x=seq(0.005,5,0.005),y=2^(seq(0.01,10,0.01)))
ggplot(data,aes(x,y))+
  geom_line(colour="red")+
  theme(axis.text.y=element_blank(),axis.text.y=element_blank())+
  labs(list(title="R语言学习曲线",x="学习时间",y="学习难度"))
时间: 2024-07-29 02:56:57

数据分析和R语言的那点事儿_1的相关文章

数据分析实例--R语言如何对垃圾邮件进行分类

Coursera上数据分析实例 --R语言如何对垃圾邮件进行分类 Structure of a Data Analysis 数据分析的步骤 l  Define the question l  Define the ideal data set l  Determine what data you can access l  Obtain the data l  Clean the data l  Exploratory data analysis l  Statistical predictio

数据分析与R语言研讨班

为满足广大科研工作者在文章发表中遇到的图表处理的苦恼,让您真正了解R.使用R,给您的文章添色添彩,思数云bihadoop将于2014年11月15日举办<数据分析与R语言>研讨班,从基础入手结合实战完成您的高级制图需求.欢迎报名参加!!!!!! 主办单位:思数云服务中心 举办地:北京,北京市回龙观龙冠大厦 培训时间:第五期2014年11月1日(已结束) 第六期:2014年11月15日(报名中...) 报名截止:2014年11月11日 授课内容(部分) 等级 授课题目 授课内容 基础 R语言基础知

python 数据分析,R语言与数据挖掘|学习资料分享 05

python 数据分析 为什么选 python 做数据分析? 在数据分析和交互.探索性计算以及数据可视化等方面,Python 将不可避免地接近于其他开源和商业的领域特定编程语言/工具,如R.MATLAB.SAS.Stata等.近年来,由于 Python 有不断改良的库(主要是 pandas),使其成为数据处理任务的一大替代方案.结合其在通用编程方面的强大实力,我们完全可以只使用 Python 这一种语言去构建以数据为中心的应用程序. R语言是由 AT&T 贝尔实验室开发的一种用来进行数据探索.统

数据分析,R语言

数据结构 创建向量和矩阵 1 函数c(), length(), mode(), rbind(), cbind() 求平均值,和,连乘,最值,方差,标准差 1 函数mean(), sum(), min(), max(), var(), sd(), prod() 帮助文档 1 函数help() 生成向量 1 seq() 生成字母序列letters 新建向量 1 Which()函数,rev()函数,sort()函数 生成矩阵 1 函数matrix() 矩阵运算 1 函数t(),矩阵加减 矩阵运算 1

R语言基因组数据分析可能会用到的data.table函数整理

R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快.包括两个方面,一方面是写的快,代码简洁,只要一行命令就可以完成诸多任务,另一方面是处理快,内部处理的步骤进行了程序上的优化,使用多线程,甚至很多函数是使用C写的,大大加快数据运行速度.因此,在对大数据处理上,使用data.table无疑具有极高的效率.这里主要介绍在基因组数据分析中可能会用到的函数. fread 做基因组数据分析时,常常需要读入处理大文件,这个时候我们就可以舍弃read.ta

下载零基础数据分析与挖掘R语言实战课程(R语言)

随着大数据在各行业的落地生根和蓬勃发展,能从数据中挖金子的数据分析人员越来越宝贝,于是很多的程序员都想转行到数据分析,挖掘技术哪家强?当然是R语言了,R语言的火热程度,从TIOBE上编程语言排名情况可见一斑.于是善于学习的程序员们开始了R语言的学习之旅.对于有其他语言背景的程序员来说,学习R的语法小菜一碟,因为它的语法的确太简单了,甚至有的同学说1周就能掌握R语言,的确如此.但是之后呢?……好像进行不下去了!死记硬背记住了两个分析模型却不明其意,输出结果如同天书不会解读,各种参数全部使用缺省值,

基于R语言的数据分析和挖掘方法总结——描述性统计

1.1 方法简介 描述性统计包含多种基本描述统计量,让用户对于数据结构可以有一个初步的认识.在此所提供之统计量包含: 基本信息:样本数.总和 集中趋势:均值.中位数.众数 离散趋势:方差(标准差).变异系数.全距(最小值.最大值).内四分位距(25%分位数.75%分位数) 分布描述:峰度系数.偏度系数 用户可选择多个变量同时进行计算,亦可选择分组变量进行多组别的统计量计算. 1.2 详细介绍 1.2.1 样本数和总和 1. R语言涉及的方法:length(x) 1.2.2 均值(Mean) 1.

2015CDAS中国数据分析师行业峰会:R语言量化投资数据分析应用

前言 第一次在以数据分析为切入点的会议上做演讲,感觉还是挺不一样的.大会分为"金融数据洞察","医疗数据洞察","电商数据洞察","大小数据洞察"的4个部分,分别介绍了数据分析在不同行业的应用情况.当然,这次我是在"金融数据洞察"分论坛. 我非常有幸作为分享嘉宾参加2015年的中国数据分析师行业峰会,分享R语言在金融领域中的应用. 目录 我的演讲主题:R语言量化投资数据分析应用 会议体验和照片分享 整体文章

零基础数据分析与挖掘R语言实战课程(R语言)

随着大数据在各行业的落地生根和蓬勃发展,能从数据中挖金子的数据分析人员越来越宝贝,于是很多的程序员都想转行到数据分析, 挖掘技术哪家强?当然是R语言了,R语言的火热程度,从TIOBE上编程语言排名情况可见一斑.于是善于学习的程序员们开始了R语言的学习 之旅.对于有其他语言背景的程序员来说,学习R的语法小菜一碟,因为它的语法的确太简单了,甚至有的同学说1周就能掌握R语言,的确如 此.但是之后呢?……好像进行不下去了!死记硬背记住了两个分析模型却不明其意,输出结果如同天书不会解读,各种参数全部使用缺