《R数据科学实战:工具详解与案例分析 》
数据科学与工程技术丛书
R数据科学实战:工具详解与案例分析
刘 健 邬书豪 著
推荐语
本书不是晦涩难懂的学术教材,而是具备极高实践价值的R语言工具书,每章都针对R语言的核心应用问题进行讲解,对于任何想深度理解R语言及实践应用的爱好者来说,都是一本很好的参考学习书籍,值得推荐。
—黄小伟 有赞数据分析团队负责人
(R语言中文社区创始人、表哥有话讲公众号创始人)
本书是一本少见的深入浅出讲解R语言数据科学的著作。R语言作为基础的数据分析工具,对于数据分析师和数据挖掘工程师来说十分必要,相信任何一个有志于从事数据科学行业的读者,都能从本书中获益。
—张俊红《对比Excel,轻松学习Python数据分析》作者
数据科学的门槛可以很高,也可以很低,数据分析工具的熟练使用非常重要!本书通俗易懂地讲解了R语言当中常用的数据处理工具包的使用和R的核心应用,是R语言爱好者学习数据分析很好的入门教材。
—梁勇 天善智能CEO、Python爱好者社区公众号号主
本书前半部分详细有序地讲解了数据分析各个步骤所需工具包的使用方法,后半部分结合多个案例对前文所述工具包进行综合运用,同时切合案例实际情况对问题进行了逐步剖析和拆解,内容详尽,案例丰富,推荐给大家!
—崔庆才《Python3网络爬虫开发实战》作者、微软小冰工程师
前 言
为什么要写这本书
开始学习和使用R语言,初学者最开始往往会有各种困惑和纠结,可能会走过许多的弯路。和众多初学者一样,我们也深感R语言的学习道路荆棘密布。写这本书的初衷就是希望将我们的经历分享给大家,让学习R语言的道路变得平坦一些,降低初学者使用R语言的难度。
在我们学习交流R语言的过程中,发现最大的挑战是学习资料过剩却不精。另外,国内的技术社区关于R语言的问答内容相对较少。开源的R语言从来不缺免费的学习资料,这当然是好事一件。但凡事总有两面性,因为每个人学习R语言的目的和应用场景都略有不同,很多学习资料初看像是在介绍R语言不同方向的问题或者介绍一些新奇的R包和函数,但是我们发现初学者经常容易花费大量的时间重复阅读相同的概念性问题。比如说使用R语言进行数据清理,不同的数据来源和分析任务可能会让数据清理有上百种可行的方案。在耗费了很多时间尝试这些不同的方法却不得要领时,随之而来的挫败感往往让人心生怯意。所以,我们写下此书,系统性地讲解R语言最流行实用的不同数据运用主题的操作框架,核心是希望让读者能够快速上手并实际运用R语言。
R语言只是万千工具中的一种,熟练掌握工具的各种特性固然重要,但是更重要的是明确任务目标和处理问题的先后顺序。换句话说,使用R语言进行数据分析的首要任务是明确自己的目标,然后围绕该目标建立合理的流程图,其次才是寻找最合适的工具来帮助我们完成每一个具体的任务。所以,最后我们发现万变不离其宗的是清晰的数据分析逻辑。只有当有了自己的数据分析路线图之后,才不会被每天涌现的新的学习资料所淹没,反而是能高效地搜索和应用这些新内容。这也是本书希望传递给读者的信息,R语言则是传递信息的一种媒介。就如同在军事战争中,你有了高级武器,并不一定可以确保你能打败敌人,只有对这些武器有了系统性的认识后,才代表你真正拥有了这些武器。本书就是R语言这件武器的速成手册,希望读者在系统性地认识R语言在数据科学领域中的效力后,降低其在生产环境中的实际运用难度。
读者对象
使用R语言进行数据处理的R语言初学者
使用R语言进行大数据处理的R语言爱好者
数据分析师、数据挖掘工程师
转型的数据科学人员
大中专院校学生
本书特色
本书按照数据分析的一般流程,介绍和讨论了在各个流程中所需的常见的R函数,并对其中相对重要的函数做了较为详尽的参数解释和代码演示。相较于大部分R语言学习资料中粗略概况性地告知读者不同场景可能用到的R函数,本书更侧重于帮助读者建立自己的数据分析逻辑结构以及由一系列常见R函数组成的“工具箱”。特别是tidyverse系列工具箱和data.table包,目前的中文博客社区里很少有资料对这两者进行较为完整和系统的介绍。对于R语言初学者来说,tidyverse系列是学习使用R的最佳起点,而data.table包则对中高级用户大有助益。另外,本书对重要的“工具”函数,例如循环和迭代,做了较为详尽的解释和代码演示,来帮助读者理解其运行机制。最后,书中提供了5个实战案例,结合书中介绍的各种“工具”,强化使用R语言进行数据分析的路线图。
如何阅读本书
本书共11章,前6章(工具包篇)主要介绍和讨论使用R语言的一般流程以及常用的R包;后5章(案例篇)包含了5个实战案例,通过与前6章的内容相结合,展示如何使用这些R包。复现书中的代码需要读者对.Rproj有一定的了解,建议读者参阅相关网络教程学会使用.Rproj。使用.Rproj的原因在于其可以将每一次数据分析或练习都视为一个独立的项目(不必调用setwd函数重置工作路径),这样做不但可以减少代码出错的几率,而且还能更利于进行数据管理。
对于零基础的R语言初学者,建议按照章节顺序进行阅读,尤其是第1~3章,介绍了数据分析中相对重要的数据准备阶段。对于有一定基础的R语言用户,可以直接阅读自己感兴趣的部分。各章节的简要介绍如下所示。
第1章为数据读取,对比介绍不同格式数据读取所需的R包,着重介绍平面文档和Excel格式文件的读取。
第2章为数据清洗,主要介绍tibble(版本号:1.4.2)和tidyr(版本号:0.8.0)中常用的函数及其参数设置。
第3章为数据计算,主要介绍dplyr(版本号:0.7.4)中常用的函数及使用技巧。
第4章为R中的迭代循环,主要介绍基础for和while循环及apply家族函数的运行机制。
第5章主要介绍purrr包(版本号:0.2.4)的关键函数和运行机制。
第6章着重讲解data.table包(版本号:1.11.4)的使用技巧。
第7~11章为5个实战案例,在ggplot2(版本号:2.2.1)包的配合下,结合前6章中的常用函数完整地呈现了一般的数据分析流程和简单的探索性数据分析。5个案例具体如下:
数据科学从业者调查数据集清洗及探索性分析。
共享单车数据集初级分析。
星巴克店面数量数据集初级分析。
学生成绩数据集初级分析。
YouTube视频观看数据集处理及初级分析。
本书中的代码内容是在Rstudio内完成的,环境参数如下:
R version 3.5.0 (2018-04-23)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
locale:
[1] LC_COLLATE=Chinese (Simplified)_China.936 LC_CTYPE=Chinese (Simplified)_China.936
LC_MONETARY=Chinese (Simplified)_China.936
[4] LC_NUMERIC=C LC_TIME=Chinese (Simplified)_China.936
attached base packages:
[1] stats graphics grDevices utils datasets methods base
勘误和支持
由于作者的水平有限,写作时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。为此,特意创建一个在线支持的GitHub站点:https://github.com/frank0434/Data-Science-in-Action-R-Tools-and-Case-Studies。我们将尽力在线上为读者提供最满意的解答。书中的全部源文件都可以从上面的GitHub站点下载,我们也会将相应的功能及时更新出来。如果你有更多的宝贵意见,也欢迎发送邮件至邮箱gong0435@gmail.com,期待能够得到你们的真挚反馈。
致谢
刘健在此感谢我的同事及人生导师Linley Jesson。是她带我进入R语言的世界,并一直鼓励我不断尝试突破自我。是她的耐心指导,让我能够在短时间内熟练掌握R语言并应用到工作中解决实际问题。感谢我的父母,将我培养成人。最后感谢我的女儿和妻子,是你们的理解和默默付出让我能够占用陪伴你们的时间来完成大部分书稿。
邬书豪在此感谢我的大学老师徐磊教授7年来一直对我的鼓励和支持,是您的引导和启迪让我敢于多多尝试,坚定自己的信念走上了数据科学这条路,您谦谦君子的人格魅力与意志信念给予我人生中巨大的精神力量,感谢您一直与我分享您的待人接物的理念,使我受益匪浅。感谢我的好朋友石楠女士,你对我在数据科学成长道路上的关心、引导,使我坚定地在数据科学道路上解决了安身立命之本,指导我以严谨认真的态度对待工作和生活。感谢我的父母对我的养育与坚定的支持,让我有机会为自己的人生理想打拼,感谢我的领导给予我成长和贡献自己产出的机会,感谢我那些优秀的同事们,与你们一起共事让我成长良多。
感谢机械工业出版社华章分社的编辑杨福川和张锡鹏,在这一年多的时间中始终支持我们的写作,是你们的理解和支持帮助我们顺利完成全部书稿。
谨以此书献给和我们一样在数据科学领域摸索前行的伙伴,以及众多热爱R语言的朋友们!
刘健 邬书豪
目 录
推荐语
前言
1.1.2 read.delim/delim2—特定分隔符数据读取6
2.3.2 gather/spread—“长”“宽”数据转换40
2.3.4 replace_na / drop_na/—默认值处理工具44
2.3.6 separate_rows/nest/unest—行数据处理45
2.4.3 year/month/week/day/hour/minute/second—时间单位提取49
2.4.4 guess_formats/parse_date_time—时间日期格式分析49
第3章 数据计算工具58
3.1 baseR计算工具概览59
3.1.1 基本数学函数59
3.1.2 基本运算符号61
3.1.3 基本统计函数62
3.2 dplyr包实战技巧63
3.2.1 常见实用函数中英对照 63
3.2.2 dplyr—行(Row)数据处理64
3.2.3 dplyr—列(Column)数据处理 73
3.3 文本挖掘实操88
第4章 基本循环—loops和*apply92
4.1 for循环93
4.1.1 基本概念93
4.1.2 基本构建过程94
4.1.3 简单应用97
4.2 while循环98
4.2.1 基本概念98
4.2.2 基本构建过程99
4.2.3 简单应用100
4.3 “*apply”函数家族102
4.3.1 lapply—“线性”数据迭代103
4.3.2 sapply—简约而不简单106
4.3.3 apply—多维数据处理利器107
4.3.4 vapply—迭代的安全模式109
4.3.5 rapply—多层列表数据处理112
4.3.6 mapply—对多个列表进行函数运算115
第5章 优雅的循环—purrr包119
5.1 map函数家族120
5.1.1 map—对单一元素进行迭代运算120
5.1.2 map2和pmap—对两个及以上元素进行迭代运算125
5.1.3 imap—变量名称或位置迭代128
5.1.4 lmap—对列表型数据中的列表元素进行迭代运算130
5.1.5 invoke_map—对多个元素进行多个函数的迭代运算131
5.2 探测函数群134
5.2.1 detect/detect_index—寻找第一个匹配条件的值134
5.2.2 every/some—列表中是否全部或部分元素满足条件?136
5.2.3 has_element—向量中是否存在想要的元素?137
5.2.4 head/tail_while—满足条件之前和之后的元素138
5.2.5 keep/discard/com-pact—有条件筛选139
5.2.6 prepend—随意插入数据141
5.3 向量操纵工具箱142
5.3.1 accumulate和reduce家族—元素累积运算142
5.3.2 其他工具函数143
5.4 其他实用函数144
5.4.1 set_names—命名向量中的元素144
5.4.2 vec_depth—嵌套列表型数据探测器148
5.5 循环读取、清理和计算149
第6章 data.table—超级“瑞士***”152
6.1 data.table简介152
6.2 基本函数153
6.2.1 fread—速读153
6.2.2 DT[i, j, by]—数据处理句式基本结构158
6.2.3 “:=”—急速修改数值162
6.2.4 fwrite—速写,数据输出165
6.3 进阶应用167
6.3.1 有条件的急速行筛选168
6.3.2 列选择的多种可能171
6.3.3 批量处理列及列的分裂与合并173
6.3.4 合并数据集176
6.3.5 “长宽”数据置换177
6.3.6 计算分析178
第二部分 案例篇
第7章 数据科学从业者调查分析182
7.1 案例背景及变量介绍182
7.2 简单数据清洗183
7.3 数据科学从业者探索性数据分析186
7.4 封装绘图函数189
7.5 通过柱状图进行探索性分析数据190
7.6 未来将会学习的机器学习工具193
7.7 明年将学习的机器学习方法194
第8章 共享单车租用频次分析198
8.1 案例简介198
8.2 数据准备及描述性统计分析199
8.3 数据重塑201
8.4 柱状图在数据分析中的简单应用202
8.5 柱状和扇形图在数据分析中的运用204
8.6 折线图在数据分析中的运用207
8.7 相关系数图综合分析209
第9章 星巴克商业案例分析211
9.1 案例背景介绍及变量介绍211
9.2 数据描述性统计量分析212
9.3 数据统计分析213
第10章 学生成绩水平分析220
10.1 数据集220
10.2 探索性数据分析229
第11章 YouTube视频观看分析234
11.1 案例背景及相关内容介绍234
11.2 探索性数据分析237
- 点赞
- 收藏
- 关注作者
评论(0)