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

时间:2023-01-27 18:36:56
   最近遇到一些程序员同学向我了解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)

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

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

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

由此可见,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="学习难度"))

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

附:本文所使用代码

#以下的包如果没有安装需使用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="学习难度"))

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

  1. 数据分析与R语言-概念点(一)

    一.数据分析 1.数据分析的多层模型 常用的统计量 常用的算法 常用的数据分析工具 常见的报表 二.R语言 1.什么是R语言?     R是用于统计分析.绘图的语言和操作环境.R是属于GNU系统的一个 ...

  2. 数据分析与R语言

    数据结构 创建向量和矩阵 函数c(), length(), mode(), rbind(), cbind() 求平均值,和,连乘,最值,方差,标准差 函数mean(), sum(), min(), m ...

  3. 数据分析,R语言

    数据结构 创建向量和矩阵 1 函数c(), length(), mode(), rbind(), cbind() 求平均值,和,连乘,最值,方差,标准差 1 函数mean(), sum(), min( ...

  4. 插值和空间分析(一)&lowbar;探索性数据分析(R语言)

    > library(lattice) > library(sp) > data(meuse) > coordinates(meuse) <- c("x&quot ...

  5. Rmarkdown用法与R语言动态报告

    Rmarkdown用法与R语言动态报告数据分析用R语言非常便捷,因为R语言的社区强大,并且在不断更新和完善,提供了各种分析利器.Knitr和Rmarkdown包则是数据分析中的动态报告利器. 下面是一 ...

  6. R语言数据分析

    CSDN博客:包括R语言基础.R语言数据挖掘.hadoop大数据及spark等 http://blog.csdn.net/qq_16365849 R语言及数据分析 http://blog.csdn.n ...

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

    随着大数据在各行业的落地生根和蓬勃发展,能从数据中挖金子的数据分析人员越来越宝贝,于是很多的程序员都想转行到数据分析, 挖掘技术哪家强?当然是R语言了,R语言的火热程度,从TIOBE上编程语言排名情况 ...

  8. R语言数据分析系列六

    R语言数据分析系列六 -- by comaple.zhang 上一节讲了R语言作图,本节来讲讲当你拿到一个数据集的时候怎样下手分析,数据分析的第一步.探索性数据分析. 统计量,即统计学里面关注的数据集 ...

  9. 数据分析R语言1

    数据分析R语言 无意中发现网上的一个数据分析R应用教程,看了几集感觉还不错,本文做一个学习笔记(知识点来源:视频内容+R实战+自己的理解),视频详细的信息请参考http://www.itao521.c ...

随机推荐

  1. hadoop集群安装故障解决

    nodemanager进程解决:http://blog.csdn.net/baiyangfu_love/article/details/13504849 编译安装:http://blog.csdn.n ...

  2. &lbrack;转载&rsqb; 高流量大并发Linux TCP 性能调优

    原文: http://cenwj.com/2015/2/25/19 本文参考文章为: 优化Linux下的内核TCP参数来提高服务器负载能力 Linux Tuning 本文所面对的情况为: 高并发数 高 ...

  3. React事件属性

    一.简介 二.滚动例子,滚动改变颜色 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta c ...

  4. unity手游之聊天SDK集成与使用一

    手游中都有聊天功能,比如公会,私聊,世界聊天,那么找一个好用,功能强大的SDK的可以节省很多精力,帮助我们提高开发速度与游戏质量. 写本篇博文是为了方便使用这个SDK做聊天模块的程序,避免许多坑,我在 ...

  5. &UpperRightArrow;☻【PHP与MySQL程序设计 &num;BOOK&num;】第3章 PHP基础

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  6. 【UVA1379】Pitcher Rotation (贪心&plus;DP)

    题意: 你经营者一直棒球队.在接下来的g+10天中有g(3<=g<=200)场比赛,其中每天最多一场比赛.你已经分析出你的n(5<=n<=100)个投手中每个人对阵所有m个对手 ...

  7. 通过OCI 处理 Oracle 10g 中处理Clob大字段写入

    Oracle数据库中, 通过存储过程写入Clob字段 , 当数据大于4k时, 报错 ORA-01460: 转换请求无法实施或不合理 经过排查, 数据Bind方式不对, 不能采用字符串的Bind方式 原 ...

  8. Java 跨平台原理

    Java的跨平台基于编译器和虚拟机.其中,CPU处理器和操作系统的整体称为平台.编译器把源文件编译成与平台无关的基于Unicode的字节码class文件,虚拟机把该文件解释成与平台有关的机器码指令,可 ...

  9. Docker Kubernetes 容器扩容与缩容

    Docker Kubernetes 容器扩容与缩容 环境: 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 管理节点:192.168.1.79 ...

  10. Echarts X轴 Y轴 线的类型、颜色、及标签字体颜色 设置

    // 人均效能 var initRjxnChart = function () { var rjxnChart = echarts.init(document.getElementById(&quot ...