一套完整的数据分析流程 , 如下图所示
从图中可以看到,整个流程包括读取数据,整洁数据,数据探索和交流部分。经过前两部分, 我们可以得到一个整理好的数据,它的每一行都是一个样本 , 每一列是一个变量。
 
然后我们就可以进入最核心的数据探索部分。数据探索包括数据转换,可视化,建模三部分。数据转换的内容包括构建新的变量,选出子集,对数据进行分组并获取统计量 。进而可以通过可视化把变量或变量之间关系用图形表示出来;在对数据有大体上的认知后,可以尝试用精确的数学语言来对数据进行建模 。模型的结果会给我们一些新的洞察和知识,驱动我们去提出新的问题,构成一个反馈循环。
 
数据探索完成后我们要把所做的工作借助文章清晰地表达出来,从而与其他人沟通
 
分析汽车排放数据集
首先载入 tidyverse 包 , 并观察 mpg 数据的头部:

library(tidyverse)
mpg

可视化:ggplot
先提出一个问题 , 汽车排放量和高速路上的每公里耗油量有什么关系? 这两个变量都是数值变量,可以先用散点图的形式将它们的关系展示出来:

ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy))

绘图的核心要素:

数据 : ggplot 的数据集必须是一个数据框,这里我们的数据是 mpg
图形属性映射:将数据变量映射到图形中,我们这里使用 aes(x = displ, y = hwy) 把 x 坐标映射到排气量,y 坐标映射到每公里耗油量
几何对象 : geom 代表几何对象,比如我们这里想画散点图,就用 geom_point 来生成散点图

从这张图我们可以发现排气量与耗油成反向关系,排气量越大,耗油越少,它们的关系大致是线性的,但也有一些例外,比如左上和右上的一些点 。很容易想到,耗油量不仅与排气量有关,还与车的类型有关,我们可以尝试把车型的信息加入到图中:

ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, color = class))

可以看到排气量较大但耗油量也大的大多属于 2seater (2 个座位的跑车)这一类型,类型与耗油确实有很大关系
为了进一步地分析类型与耗油的关系,我们会想到把不同的类型的车的数据分离开来,而不是画在一张图上,我们可以使用 facet_wrap 把他们分离开来:

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy)) + 
  facet_wrap(~ class)

从原来的图上我们可以看到一种强烈的线性关系,能不能拟合一条曲线并把它画到图上呢?

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy)) + 
  geom_smooth(mapping = aes(x = displ, y = hwy))

上面拟合所用的方法是 loess,翻译成中文就是近邻多项式回归,是一种非参数方法,所以由于几种跑车的存在,曲线右边翘了起来
 
曲线的阴影部分是置信区间的上下界
 
如果我们想拟合普通的线性回归,我们可以改变 method 参数:

ggplot(mpg , aes(x = displ, y = hwy)) + 
  geom_point() + 
  geom_smooth(method = "lm")

数据转换:dplyr
filter 是一个用于筛选行的函数,例如我们想筛出排量大于等于 5,高速路每公里耗油小于 20 的车:

mpg %>% filter(displ >=5 , hwy < 20)

得到了这些排量较大,耗油较小的车,我们想按照生产日期降序排列 , 耗油量升序排列

mpg %>% filter(displ >=5 , hwy < 20) %>% arrange(desc(year) , hwy)

这 11 个变量太多 , 我们只关心车型 , 那么可以通过 select 函数把这一个变量单独提出来

mpg %>% filter(displ >=5 , hwy < 20) %>% arrange(desc(year) , hwy) %>% select(model)

我们回到原来的 mpg 数据集,按照常识,排气管越多,排量越大,我们想生成一个新变量来看一看每根排气管的平均排气量是不是很接近

mpg %>% mutate(ave_displ= displ / cyl)  %>% select(ave_displ)

var(mpg %>% mutate(ave_displ= displ / cyl)  %>% select(ave_displ))

可以发现我们的猜想大致正确,大多数车的平均排气量都在 0.5 到 0.7 之间 , 计算出来的方差也非常小
 
有的时候我们不想看单个样本,而是想按照某个标准把数据分成几组,再来分别看这些组的统计特征有什么差异,那么我们可以先用 group_by 按照条件分组,再用 summarise 算出每组组内的统计特征。例如我们想看不同车型的平均排气量和平均耗油量

mpg %>% group_by(class) %>% summarise(mean(displ) , mean(hwy))

tidyverse生态链的更多相关文章

  1. 运营或生态链没做好,APP质量再高有个鸟用(下)

    上篇文章已经阐述了对于一款产品卖不卖作,事实上非常依赖于运营的打造和生态链的建立,这里能够解释为什么很多优秀的游戏产品功底非常好,但開始并不卖作,仅仅有碰到一家肯出力推的渠道游戏才迅速火了起来.这是不 ...

  2. 浅谈API网关(API Gateway)如何承载API经济生态链

    序言 API经济生态链已经在全球范围覆盖, 绝大多数企业都已经走在数字化转型的道路上,API成为企业连接业务的核心载体, 并产生巨大的盈利空间.快速增长的API规模以及调用量,使得企业IT在架构上.模 ...

  3. TCL、华星光电和中环股份,如何在一条生态链上领跑?

    聚众智.汇众力.采众长. "我们决心用五年时间,将TCL科技和TCL实业做到真正的世界500强,将智能终端.半导体显示.半导体光伏三大核心产业力争做到全球领先,将半导体材料等其他产业做到中国 ...

  4. 【计理05组01号】R 语言基础入门

    R 语言基本数据结构 首先让我们先进入 R 环境下: sudo R 赋值 R 中可以用 = 或者 <- 来进行赋值 ,<- 的快捷键是 alt + - . > a <- c(2 ...

  5. X86上搭建交叉工具链,来给龙芯笔记本编译本地工具链(未完待续)

    故事的背景是,我买了一台龙芯2F的笔记本来装B. 为什么说是装B呢?因为不但操作系统是Linux,而且CPU还是龙芯的. 一般人有这么酷的装备吗?简直是装B大圣啊. 这里一定要申明一点,本人不是IT技 ...

  6. OA发展史:由点到生态

    在当今无边界组织的商业背景下,企业与员工关系已经转化为联盟关系,以往通过工作场所.劳动合同等约束的形式已经逐步弱化,管理行为空前复杂,OA正是将一个个散点整合起来的看不见的手.那么,推动OA发展的核心 ...

  7. Rust这种新型的语言注定火不起来,功能太强大(特性太多),还不如用成熟稳定强大的C/C++,而且生态不行、所以恶性循环

    这种新型的语言注定火不起来,功能太强大(特性太多),还不如用成熟稳定强大的C/C++,,而Golang足够简单,入门快,编译快,性能也强悍,解决了服务端开发人员的痛点,,注定被大多数人接受... go ...

  8. Modelarts与无感识别技术生态总结(浅出版)

    [摘要] Modelarts技术及相关产业已成为未来AI与大数据重点发展行业模式之一,为了促进人工智能领域科学技术快速发展,modelarts现状及生态前景成为研究热点.笔者首先总结modelarts ...

  9. 阿里云吴天议:云原生SDWAN 应用 构建智能化云原生SDWAN生态

    2019年11月16日 SDWAN 大会在北京正式召开.阿里云网络资深产品专家吴天议先生继阿里云网络研究员祝顺民先生发表了对云原生SDWAN的进化与展望之后(原文请见https://bit.ly/2K ...

随机推荐

  1. 《深入理解PHP内核》

    http://www.php-internals.com/ http://www.cnblogs.com/zcy_soft/category/252731.html

  2. 数据库数据在Java占用内存简单估算

    数据库数据在Java占用内存简单估算 结论: 1.数据库记录放在JAVA里,用对象(ORM一般的处理方式)须要4倍左右的内存空间.用HashMap这样的KV保存须要10倍空间; 2.假设你主要数据是t ...

  3. SVN合并(merge)的使用

    使用svn几年了,一直对分支和合并敬而远之,一来是由于分支的管理不该我担心,二来即使涉及到分支的管理,也不敢贸然使用合并功能,生怕合并出了问题对团队造成不良影响.最基本的原因是,自己对分支的目的和合并 ...

  4. ListView布局之View复用原理举例

    1.简单介绍: ListView是android开发中经常使用的控件,系统自带的那些样式,我就不列举了. 今天主要看一下.一个模仿系统历史通话记录的ListView. 效果例如以下: 上面ListVi ...

  5. android学习笔记:adb更换端口后成功启动

    搭建手机开发环境,android ADT,android SDK,然后按照PhoneGap官网的指引,拷贝文件,修改代码,运行,进度条到了某个位置后就停止不动了. 停止不动,又是停止不动.你都不知道问 ...

  6. Xcode 设置图片全屏显示

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...

  7. jQuery Uploadify在ASP.NET MVC3中的使用

    1.Uploadify简介 Uploadify是基于jQuery的一种上传插件,支持多文件.带进度条显示上传,在项目开发中常被使用. Uploadify官方网址:http://www.uploadif ...

  8. Spark中统计程序运行时间

    import java.text.SimpleDateFormat import java.util.Date val s=NowDate() //显示当前的具体时间 val now=new Date ...

  9. Angular.forEach用法总结

    }; }]; var so=[]; var so2=[]; var so3=[]; var so4=[]; var so5=[]; var so6=[]; ; ; angular.forEach(so ...

  10. sort与sorted的区别

    描述 我们需要对List进行排序,Python提供了两个方法对给定的List L进行排序 :         方法1.用对List的成员函数sort进行排序        方法2.用内置函数sorte ...