《R语言数据分析》——导读

前  言

自20多年前发源于学术界以来,R语言已经成为统计分析的通用语言,活跃于众多产业领域。目前,越来越多的商业项目开始使用R,兼之R用户开发了数以千计易于上手的开发包,都使得R成为数据分析工程师及科学家最常用的工具。
本书将帮助读者熟悉R语言这一开源生态系统,并介绍一些基本的统计背景知识,以及一小部分相关的数学知识。我们将着重探讨使用R语言解决实际的问题。
由于数据科学家在数据的采集、清洗及重构上将耗费大量时间,因此本书首先将通过第一手实例来重点探讨从文件、数据库以及在线资源中导入数据的方法,然后再介绍数据的重构和清洗——不包含实际的数据分析,最后几章将对一些特殊的数据类型以及经典的统计模型和部分机器学习算法进行说明。
本书主要内容
第1章从与所有数据相关项目都有关的关键性的第一步——从文本文件和数据库中导入数据开始。重点探讨使用优化的CSV分析器把数据载入R,预筛选数据,并对不同数据库后台对R的支持能力进行比较。
第2章介绍如何使用面向Web服务和API通信的包实现数据的导入,包括如何从主页上整理和抽取数据。还将对处理XML和JSON格式数据进行概括性说明。
第3章继续介绍基础的数据处理知识,包括多种数据筛选和聚集,并对data.table和dplyr这两个常见开发包在性能和使用语法方面进行比较。
第4章介绍更多有关复杂数据类型的转换方法,相关函数包括处理数据子集、数据合并、长宽表数据格式到适合用户需要的工作流源数据格式之间的转换等。
第5章开始介绍真实的统计模型,包括回归的概念、常用回归模型等。这一章篇幅不长,还介绍了模型测试的方法以及基于真实数据集如何解释某个多元线性回归模型结果。
第6章在前述章节的基础上,探讨了预测变量的非线性关联,以及诸如逻辑回归和泊松回归等广义线性模型的样例。
第7章介绍一些新的非结构化数据类型,读者将通过实践文本挖掘算法及对结果的可视化处理,了解使用统计模型来处理类似这样一些非结构化数据的方法。
第8章探讨有关原始数据集的另一个常见问题。大多数时候,数据科学家需要处理脏数据,包括去掉错误数据、孤立点以及其他不正确的值,同时又要将缺失值带来的影响降到最低。
第9章介绍如何从大数据中进行特征提取,假设我们已经装载了一个干净的数据集,并且完成了格式转换,当我们开始处理高维变量时,需要采用一些统计方法来进行降维以及其他包括主成分分析、因子分析和多维尺度分析等方法完成连续变量的转换。
第10章讨论使用监督及非监督统计和机器学习方法来处理样本分组问题。这些方法包括层次聚类、k均值聚类、潜类别模型、判别分析、逻辑回归和k近邻算法,以及分类树和回归树。
第11章重点探讨一类特殊的数据结构,包括其基本概念以及可视化网络分析技术,igraph包是该章的重点。
第12章展示如何通过平滑、季节性分解以及ARIMA等方法处理分析时间-日期数据及其相关值,同时还将讨论有关预测和孤立点检测等技术。
第13章探讨一类重要的数据维度——空间维,重点会放在通过主题图、交互图、等高线和冯洛诺伊图完成空间数据的可视化。
第14章提供了一个更完整的样例,该样例中包含了很多前述章节中提到的方法来帮助读者复习这本书所学习到的主要内容,以及应对未来工作中可能遇到的问题和困难。
附录给出了R语言的帮助索引,以及对前述章节中涉及内容的补充阅读。

除了基础的R包,我们还会使用到部分用户自己提供的R包,它们大多都可以很容易地从R综合典藏网(Comprehensive R Archive Network,CRAN)处下载安装。附录中列出了本书用到的开发包以及多个版本。
如果要从CRAN安装包,读者要确保网络通畅。假如要下载二进制文件,可以在R控制台调用install.packages命令:

本书中所提到的部分包在CRAN上下载不了,但也许可以从Bitbucket或者GitHub处找到安装文件,然后再通过调用devtools包的install_bitbucket和install_github函数完成安装。Windows用户则需首先从https://cran.r-project.org/bin/windows/Rtools处安装rtools包。
安装完毕后,我们应该在使用包之前先将其装载到R会话中,附录中列出了所有包的目录,而每一章的一开始则对相关的源码和R命令做了介绍:

我们极力建议读者下载安装本书的样例源码(可以参考前言的“样例源码下载”小节),这样读者就可以在R控制台很容易地复制和粘贴相关命令,而不需要再按照书中文字输入代码。
如果读者之前没用过R语言,最好能够先从R主页上阅读一些免费的介绍性文章和帮助手册,本书附录中也列出了一些推荐阅读材料。
读者人群
如果你是数据科学家或者是R开发人员,希望更多地了解有关R的高级功能及工具,那么这本书就是为你而写。本书希望读者已经具备基础的R语言知识,了解数据库的逻辑。如果你是数据科学家、工程师或分析师,希望提高自己对R语言的开发能力,那么这本书也适合你。尽管需要掌握一些基本的R知识,本书还是为你提供了相关参考文档,能够帮助你快速进入角色并掌握相关技术。
本书约定
本书中任何将在R控制台输入或输出的命令行将采用如下格式:

符号“>”有提示的意思,指此处R控制台正在等待要输入执行的命令。如果命令长度超过一行,则第一行还是用“>”开头,但剩下的其余行都要在行首添加符号“+”,代表该行不是一个完整的命令(例如,缺圆括号或引号)。命令的输出不需要增加任何首字母,字体采用和输入文本相同的等宽字体。
新出现的术语和重要的文字将用粗体表示。
警告或重要提示将跟在这样的符号后面。

目  录

译者序
前言
第1章 你好,数据!
1.1 导入一个大小合适的文本文件
1.2 文本文件编译测试平台
1.3 导入文本文件的子集
1.4 从数据库中导入数据
1.4.1 搭建测试环境
1.4.2 MySQL和MariaDB
1.4.3 PostgreSQL
1.4.4 Oracle数据库
1.4.5 访问ODBC数据库
1.4.6 使用图形化用户面连接数据库
1.4.7 其他数据库后台
1.5 从其他统计系统导入数据
1.6 导入Excel电子表格
1.7 小结
第2章 从Web获取数据
2.1 从Internet导入数据集
2.2 其他流行的在线数据格式
2.3 从HTML表中读取数据
2.4 从其他在线来源获取数据
2.5 使用R包与数据源API交互
2.5.1 Socrata的开源数据API
2.5.2 金融API
2.5.3 使用Quandl获取时序数据
2.5.4 Google文档和统计数据
2.5.5 在线搜索的发展趋势
2.5.6 天气历史数据
2.5.7 其他在线数据源
2.6 小结
第3章 数据筛选和汇总
3.1 去掉多余的数据
3.1.1 快速去掉多余数据
3.1.2 快速去掉多余数据的其他方法
3.2 聚集
3.2.1 使用基础的R命令实现快速聚集
3.2.2 方便的辅助函数
3.2.3 高性能的辅助函数
3.2.4 使用data.table完成聚集
3.3 测试
3.4 汇总函数
3.5 小结
第4章 数据重构
4.1 矩阵转置
4.2 基于字符串匹配实现数据筛选
4.3 数据重排序
4.4 dplyr包和data.table包的比较
4.5 创建新变量
4.5.1 内存使用分析
4.5.2 同时创建多个变量
4.5.3 采用dplyr包生成新变量
4.6 数据集合并
4.7 灵活地实现数据整形
4.7.1 将宽表转换为长表
4.7.2 将长表转换为宽表
4.7.3 性能调整
4.8 reshape包的演变
4.9 小结
第5章 建模
5.1 多元模型的由来
5.2 线性回归及连续预测变量
5.2.1 模型解释
5.2.2 多元预测
5.3 模型假定
5.4 回归线的拟合效果
5.5 离散预测变量
5.6 小结
第6章 线性趋势直线外的知识
6.1 工作流建模
6.2 逻辑回归
6.2.1 数据思考
6.2.2 模型拟合的好处
6.2.3 模型比较
6.3 计数模型
6.3.1 泊松回归
6.3.2 负二项回归
6.3.3 多元非线性模型
6.4 小结
第7章 非结构化数据
7.1 导入语料库
7.2 清洗语料库
7.3 展示语料库的高频词
7.4 深度清洗
7.4.1 词干提取
7.4.2 词形还原
7.5 词条关联说明
7.6 其他一些度量
7.7 文档分段
7.8 小结
第8章 数据平滑
8.1 缺失值的类型和来源
8.2 确定缺失值
8.3 忽略缺失值
8.4 去掉缺失值
8.5 在分析前或分析中筛选缺失值
8.6 填补缺失值
8.6.1 缺失值建模
8.6.2 不同填补方法的比较
8.6.3 不处理缺失值
8.6.4 多重填补
8.7 异常值和孤立点
8.8 使用模糊方法
8.9 小结
第9章 从大数据到小数据
9.1 充分性测试
9.1.1 正态性
9.1.2 多元变量正态性
9.1.3 变量间的依赖关系
9.1.4 KMO和Barlett检验
9.2 主成分分析
9.2.1 PCA算法
9.2.2 确定成分数
9.2.3 成分解释
9.2.4 旋转方法
9.2.5 使用PCA检测孤立点
9.3 因子分析
9.4 主成分分析和因子分析
9.5 多维尺度分析
9.6 小结
第10章 分类和聚类
10.1 聚类分析
10.1.1 层次聚类
10.1.2 确定簇的理想个数
10.1.3 k均值聚类
10.1.4 可视化聚类
10.2 潜类别模型
10.2.1 潜类别分析
10.2.2 LCR模型
10.3 判别分析
10.4 逻辑回归
10.5 机器学习算法
10.5.1 k近邻算法
10.5.2 分类树
10.5.3 随机森林
10.5.4 其他算法
10.6 小结
第11章 基于R的社会网络分析
11.1 装载网络数据
11.2 网络中心性度量
11.3 网络数据的展现
11.3.1 交互网络图
11.3.2 绘制层次图
11.3.3 使用R包来解释包的依赖关系
11.4 更多网络分析资源
11.5 小结
第12章 时序数据分析
12.1 创建时序对象
12.2 展现时序数据
12.3 季节性分解
12.4 Holt-Winters筛选
12.5 自回归积分滑动平均模型
12.6 孤立点检测
12.7 更复杂的时序对象
12.8 高级时序数据分析
12.9 小结
第13章 我们身边的数据
13.1 地理编码
13.2 在空间中展示数据点
13.3 找出数据点的多边形重叠区域
13.4 绘制主题图
13.5 围绕数据点绘制多边形
13.5.1 等高线
13.5.2 冯洛诺伊图
13.6 卫星图
13.7 交互图
13.7.1 查询Google地图
13.7.2 Java脚本地图库
13.8 其他绘图方法
13.9 空间数据分析
13.10 小结
第14章 分析R社区
14.1 R创始团队的成员
14.2 R开发包的维护人员
14.3 R-help邮件列表
14.3.1 R-help邮件列表的规模
14.3.2 预测未来的邮件规模
14.4 分析用户列表的重叠部分
14.5 社交媒体内的R用户数
14.6 社交媒体中与R相关的贴子
14.7 小结
附录

时间: 2024-11-02 14:07:20

《R语言数据分析》——导读的相关文章

《深入理解Scala》——第1章,第1.2节当函数式编程遇见面向对象

1.2 当函数式编程遇见面向对象 深入理解Scala 函数式编程和面向对象编程是软件开发的两种不同途径.函数式编程并非什么新概念,在现代开发者的开发工具箱里也绝非是什么天外来客.我们将通过Java生态圈里的例子来展示这一点,主要来看Spring Application framework和Google Collections库.这两个库都在Java的面向对象基础上融合了函数式的概念,而如果我们把它们翻译成Scala,则会优雅得多.在深入之前,我们需要先理解面向对象编程和函数式编程这两个术语的含义

《深入理解Scala》——第1章,第1.4节与JVM的无缝集成

1.4 与JVM的无缝集成 深入理解Scala Scala的吸引力之一在于它与Java和JVM的无缝集成.Scala与Java有很强的兼容性,比如说Java类可以直接映射为Scala类.这种紧密联系使Java到Scala的迁移相当简单,但在使用Scala的一些高级特性时还是需要小心的,Scala有些高级特性是Java里没有的.在Scala语言设计时已经小心地考虑了与Java无缝交互的问题,用Java写的库,大部分可以直接照搬(as-is)到Scala里. 1.4.1 Scala调用Java 从S

《深入理解Scala》——第2章,第2.1节学习使用Scala交互模式(REPL)

第2章 核心规则深入理解Scala 本章包括的内容: • 使用Scala交互模式(Read Eval Print Loop 简称REPL) • 面向表达式编程 • 不变性(Immutability) • Option类 本章内容覆盖了每个新Scala开发者都需要知道的几个主题.本章不会深入到每个主题里,但是会讲到可以让你自己去接着探索的程度.你将学会使用REPL,学会如何利用这个工具做软件的快速原型开发.然后我们会学到面向表达式编程,并从另一个视角来看控制结构是怎么回事.在此基础上,我们来研究不

《深入理解Scala》——第1章,第1.3节静态类型和表达力

1.3 静态类型和表达力 深入理解Scala 开发人员中有一个误解,认为静态类型必然导致冗长的代码.之所以如此是因为很多继承自C的语言强制要求程序员必须在代码中多处明确地指定类型.随着软件开发技术和编译器理论的发展,情况已经改变.Scala利用了其中一些技术进步来减少样板(boilerplate)代码,保持代码简洁. Scala做了以下几个简单的设计决策,以提高代码表达力. • 把类型标注(type annotation)换到变量右边. • 类型推断. • 可扩展的语法. • 用户自定义的隐式转

《深入理解Scala》——第1章,第1.5节总结

1.5 总结 深入理解Scala 本章中,你学到了一些Scala的设计理念.设计Scala的初衷在于把不同语言中的多种概念融合起来.Scala融合了函数式和面向对象编程,尽管显然Java也已经这么做了.Scala精选其语法,极大地减少了语言中的繁冗之处,使一些强大的特性可以优雅地表达,比如类型推断.最后,Scala和Java能够紧密集成,而且运行在Java虚拟机上,这或许是让Scala变成一种实用选择的最重要的一点.几乎不花代价就可以把Scala用于我们的日常工作中. 因为Scala融合了多种概

《深入理解Scala》——第1章,第1.1节Scala一种混合式编程语言

第1章 Scala--一种混合式编程语言 Scala是一种将其他编程语言中的多种技巧融合为一的语言.Scala尝试跨越多种不同类型的语言,给开发者提供面向对象编程.函数式编程.富有表达力的语法.静态强类型和丰富的泛型等特性,而且全部架设于Java虚拟机之上.因此开发者使用Scala时可以继续使用原本熟悉的某种编程特性,但要发挥Scala的强大能力则需要结合使用这些有时候相互抵触的概念和特性,建立一种平衡的和谐.Scala对开发者的真正解放之处在于让开发者可以随意使用最适合手头上的问题的编程范式.

《深入理解Scala》——第2章,第2.2节优先采用面向表达式编程

2.2 优先采用面向表达式编程 深入理解Scala 面向表达式编程是个术语,意思是在代码中使用表达式而不用语句.表达式和语句的区别是什么?语句是可以执行的东西,表达式是可以求值的东西.在实践中这有什么意义呢?表达式返回值,语句执行代码,但是不返回值.本节我们将学习面向表达式编程的全部知识,并理解它对简化程序有什么帮助.我们也会看一下对象的可变性,以及可变性与面向表达式编程的关系. 作者注:语句VS表达式 语句是可以执行的东西,表达式是可以求值的东西. 表达式是运算结果为一个值的代码块.Scala

《深入理解Scala》——第2章,第2.3节优先选择不变性

2.3 优先选择不变性 深入理解Scala 编程中的不变性指对象一旦创建后就不再改变状态.这是函数式编程的基石之一,也是JVM上的面向对象编程的推荐实践之一.Scala也不例外,在设计上优先选择不变性,在很多场景中把不变性作为默认设置.对此,你可能一下子会不适应.本节中,我们将学到不变性对于判等问题和并发编程能提供什么帮助. Scala里首先要明白的是不变对象和不变引用(immutable referene)的区别.Scala里的所有变量都是指向对象的引用.把变量声明为val意味着它是个不变"引

《深入理解Scala》——第2章,第2.4节用None不用null

2.4 用None不用null深入理解Scala Scala在标准库里提供了scala.Option类,鼓励大家在一般编程时尽量不要使用null.Option可以视作一个容器,里面要么有东西,要么什么都没有.Option通过两个子类来实现此含义:Some和None.Some表示容器里有且仅有一个东西,None表示空容器,有点类似List的Nil的含义. 在Java和其他允许null的语言里,null经常作为一个占位符用于返回值,表示非致命的错误,或者表示一个变量未被初始化.Scala里,你可以用

《深入理解Scala》——第2章,第2.5节多态场景下的判等

2.5 多态场景下的判等 深入理解Scala 众所周知,为多态的面向对象系统定义合适的判等和散列方法是个特别难的过程.这是因为子类可能在整个过程中造成一些相当怪异的问题,尤其是当类型层次上有多个实体(concrete)级别的时候.一般来说,对于需要比引用判等更强的判等(译者注:比如需要判断对象内部数据)的类,最好避免多层实体类层次.这是什么意思呢?有些时候类只需要引用判等就够了.也就是说只要两个对象不是同一个实例就判为不等.但是如果我们需要判断两个不同实例是否相等,而且又有多层实体类层次(mul