写在前面

本系列推文为《R for Data Science (2e)》的中文翻译版本。所有内容都通过开源免费的方式上传至Github,欢迎大家参与贡献,详细信息见:
Books-zh-cn 项目介绍:
Books-zh-cn:开源免费的中文书籍社区
r4ds-zh-cn Github 地址:
https://github.com/Books-zh-cn/r4ds-zh-cn
r4ds-zh-cn 网站地址:
https://books-zh-cn.github.io/r4ds-zh-cn/


目录

  • 你将学到什么

  • 本书的组织方式

  • 你不会学习什么

  • 先决条件

  • 运行 R 代码

  • 致谢

  • 版权所有

数据科学是一门令人兴奋的学科,它可以让您将原始数据转化为容易理解的知识。《R for Data Science》的目标是帮助您学习 R 中最重要的工具,这些工具将使您能够高效且可重复地进行数据科学分析,并在此过程中获得一些乐趣😃。阅读本书后,您将拥有使用 R 的最佳部分来应对各种数据科学挑战的工具。

你将学到什么

数据科学是一个广阔的领域,你不可能通过阅读一本书来掌握它。本书旨在为您在最重要的工具和足够的知识方面打下坚实的基础,以便在必要时找到资源以了解更多信息。我们的典型数据科学项目步骤模型类似于 Figure 1。

Figure 1: 在我们的数据科学过程模型中,您从数据导入(import)和整理(tidy)开始。接下来,您通过转换(transform)、可视化(visualize)和建模(model)的迭代循环来了解您的数据。您完成这个过程是通过向其他人传达(communicate)您的结果。

Figure 1: 在我们的数据科学过程模型中,您从数据导入(import)和整理(tidy)开始。接下来,您通过转换(transform)、可视化(visualize)和建模(model)的迭代循环来了解您的数据。您完成这个过程是通过向其他人传达(communicate)您的结果。

首先,您必须导入(import)你的数据到 R。这通常意味着您将存储在文件、数据库或 Web 应用程序编程接口(API)中的数据加载到 R 中的 data frame 中。如果您无法将数据导入 R,则无法对其进行数据科学处理!

一旦您导入了数据,整理(tidy)它是一个好主意。整理数据意味着以与数据集语义匹配的方式存储它,使其形式一致。简而言之,当您的数据整洁时,每一列都是一个变量(variable),每一行都是一个观察值(observation)。 整洁的数据很重要,因为一致的结构让您可以专注于回答有关数据的问题,而不必纠结于让数据适应不同的函数。

一旦您拥有了整洁的数据,下一个常见的步骤就是转换(transform)它。转换包括缩小感兴趣的观察范围(例如一个城市中的所有人或过去一年中的所有数据)、创建现有变量的函数(例如根据距离和时间计算速度)和计算一组摘要统计量(例如计数或平均值)。整理(tidying)和转换(transforming)一起被称为梳理(wrangling),因为让您的数据呈现出自然易于处理的形式通常感觉像一场战斗!

一旦您拥有了您需要的整洁数据,就有两个主要的知识生成引擎:可视化(visualization)和建模(modeling)。这两者具有互补的优缺点,因此任何真正的数据分析都会在它们之间多次迭代。

可视化(Visualization)是一种基本的人类活动。好的可视化会向您展示您没有预料到的东西或提出关于数据的新问题。好的可视化也可能暗示您提出了错误的问题或需要收集不同的数据。可视化可以让您感到惊讶,但它们并不特别具有可扩展性,因为它们需要人类来解释。

模型(Models)是可视化的补充工具。一旦您已经使问题足够精确,就可以使用模型来回答它们。模型本质上是数学或计算工具,因此它们通常具有很好的可扩展性。即使它们没有,购买更多计算机通常也比购买更多大脑便宜!但是每个模型都有假设,并且根据其本质,模型不能质疑自己的假设。 这意味着模型不能从根本上让你感到惊讶。

数据科学的最后一步是沟通(communication),这是任何数据分析项目中绝对关键的部分。除非您也能将结果传达给他人,否则无论您的模型和可视化做得多好都没用。

所有这些工具都围绕着编程(programming)。编程是一个跨领域的工具,在几乎每个数据科学项目中都会使用到。您不需要成为专家程序员才能成为成功的数据科学家,但学习更多编程会得到回报,因为成为更好的程序员可以让您自动化常见任务并更容易解决新问题。

在每个数据科学项目中,您都会使用这些工具,但它们对大多数项目来说还不够。这里有一个粗略的 80/20 规则:使用本书中将学习到的工具,您可以解决每个项目约 80% 左右的问题,但需要其他工具来解决剩余 20% 左右。在本书中,我们将指引您了解更多资源。

本书的组织方式

数据科学工具的前面描述大致按照您在分析中使用它们的顺序组织(当然,您会多次重复它们)。然而,根据我们的经验,首先学习数据导入(importing)和整理(tidying)是次优的,因为 80% 的时间它是常规和无聊的,而另外 20% 的时间它是奇怪和令人沮丧的。这是开始学习新主题的糟糕地方! 相反,我们将从已经导入和整理过的数据的可视化(visualization)和转换(transformation)开始。这样,当您摄取并整理自己的数据时,您的动力将保持高涨,因为您知道痛苦是值得的。

在每一章中,我们都尽量遵循一致的模式:从一些激励性的例子开始,以便您可以看到更大的图景,然后深入细节。本书的每个部分都配有练习题,帮助您练习所学内容。尽管跳过练习可能很诱人,但没有比在真实问题上练习更好的学习方法了。

你不会学习什么

本书没有涵盖几个重要主题。我们认为,始终专注于基本要素非常重要,这样您才能尽快启动并运行。 这意味着本书无法涵盖所有重要主题。

建模

建模对于数据科学非常重要,但这是一个很大的主题,不幸的是,我们没有足够的空间来给予它应有的覆盖。要了解更多关于建模的信息,我们强烈推荐我们的同事 Max Kuhn 和 Julia Silge 撰写的 Tidy Modeling with R。这本书将教您 tidymodels 系列包,正如您从名称中猜到的那样,它们与我们在本书中使用的 tidyverse 包共享许多约定。

大数据

这本书主要关注小型、内存中的数据集。这是一个正确的起点,因为除非您拥有小数据的经验,否则您无法处理大数据。您将在本书的大部分内容中学习到的工具可以轻松处理数百兆字节的数据,并且只需一点注意,您通常可以使用它们来处理几千兆字节的数据。我们还将向您展示如何从数据库和 parquet 文件中获取数据,这两者都经常用于存储大数据。您不一定能够处理整个数据集,但这不是问题,因为您只需要一个子集或子样本来回答您感兴趣的问题。

如果您经常处理较大的数据(例如 10-100 GB),我们建议您了解更多关于 data.table 的信息。我们在这里不详细讲解是因为它使用与 tidyverse 不同的接口,并且需要您学习一些不同的约定。然而,它非常快速,并且性能回报值得投入一些时间来学习它,如果您正在处理大量数据。

Python, Julia, and friends 在这本书中,你不会学到任何关于 Python、Julia 或任何其他对数据科学有用的编程语言。这并不是因为我们认为这些工具不好。它们不是!而且实际上,大多数数据科学团队使用多种语言混合,通常至少使用 R 和 Python。但是我们坚信最好一次掌握一个工具,而 R 是一个很好的起点。

先决条件

我们假设您已经知道一些东西,以便您能够从这本书中获得最大的收益。您应该具备一般的数字素养,并且如果您已经具备一些基础编程经验,那将会很有帮助。如果您以前从未编程过,您可能会发现 Garrett 的 Hands on Programming with R 是本书的一个有价值的补充。

要运行本书中的代码,您需要四样东西:R、RStudio、一个名为 tidyverse 的 R 包集合、少量其他包。包(Packages)是可复制 R 代码的基本单元。它们包括可重用函数(functions)、描述如何使用它们的文档(documentation)和示例数据。

R

要下载 R,请访问 CRAN(comprehensive R archive network),https://cloud.r-project.org。每年都会发布一个新的 R 主要版本,每年还会有 2-3 个次要版本。定期更新是个好主意。升级可能有点麻烦,特别是对于需要重新安装所有包的主要版本,但推迟只会使情况变得更糟。我们建议使用 R 4.2.0 或更高版本来阅读本书。

RStudio

RStudio 是一个用于 R 编程的集成开发环境(IDE),您可以从 https://posit.co/download/rstudio-desktop/ 下载。RStudio 每年更新几次,它会自动通知您新版本何时发布,因此无需再次检查。定期升级以利用最新和最好的功能是个好主意。对于本书,请确保您至少拥有 RStudio 2022.02.0。

当您启动 RStudio 时,Figure 2,您将在界面中看到两个关键区域:控制台窗格(console)和输出窗格(output)。现在,您需要知道的是,在控制台窗格中输入 R 代码并按回车键运行它。我们将一路学习!

Figure 2: RStudio IDE 有两个关键区域:在左侧的控制台窗格中键入 R 代码,并在右侧的输出窗格中查找绘图。

Figure 2: RStudio IDE 有两个关键区域:在左侧的控制台窗格中键入 R 代码,并在右侧的输出窗格中查找绘图。

The tidyverse

您还需要安装一些 R 包。R 包(package)是一个函数、数据和文档的集合,它扩展了基础 R 的功能。使用包是成功使用 R 的关键。您将在本书中学习的大多数包都是所谓的 tidyverse 的一部分。tidyverse 中的所有包都共享一种数据和 R 编程的共同哲学,并且设计为协同工作。

您可以使用一行代码安装完整的 tidyverse:

install.packages("tidyverse")

在您的计算机上,在控制台(console)中输入该行代码,然后按回车键运行它。R 将从 CRAN 下载包并将它们安装到您的计算机上。

在您使用 library() 加载包之前,您将无法使用包中的函数、对象或帮助文件。安装包后,您可以使用 library() 函数加载它:

library(tidyverse)
#> ── Attaching core tidyverse packages ───────────────────── tidyverse 2.0.0 ──
#> ✔ dplyr     1.1.4     ✔ readr     2.1.5
#> ✔ forcats   1.0.0     ✔ stringr   1.5.1
#> ✔ ggplot2   3.5.2     ✔ tibble    3.3.0
#> ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
#> ✔ purrr     1.0.4     
#> ── Conflicts ─────────────────────────────────────── tidyverse_conflicts() ──
#> ✖ dplyr::filter() masks stats::filter()
#> ✖ dplyr::lag()    masks stats::lag()
#> ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

这告诉您 tidyverse 加载了九个包:dplyr、forcats、ggplot2、lubridate、purrr、readr、stringr、tibble、tidyr。这些包被认为是 tidyverse 的核心(core),因为您将在几乎所有分析中使用它们。

tidyverse 中的包变化相当频繁。您可以通过运行 tidyverse_update() 查看更新是否可用。

Other packages

有许多其他出色的软件包不属于 tidyverse,因为它们解决了不同领域的问题,或者是基于一套不同底层原则设计的。这并不意味着它们更好或更差,只是使它们不同。换句话说,与 tidyverse 相补充的不是混乱的宇宙,而是许多其他相关软件包的宇宙。随着您在 R 中处理更多的数据科学项目,您将学习新的软件包和关于数据的新思维方式。

在本书中,我们将使用许多 tidyverse 之外的软件包。例如,我们将使用以下软件包,因为它们为我们提供了有趣的数据集,以便我们在学习 R 的过程中进行实践:

install.packages(c("arrow", "babynames", "curl", "duckdb", "gapminder", "ggrepel", "ggridges", "ggthemes", "hexbin", "janitor", "Lahman", "leaflet", "maps", "nycflights13", "openxlsx", "palmerpenguins", "repurrrsive", "tidymodels", "writexl"))

我们还将使用一系列其他包作为一次性示例。你现在不需要安装它们,只要记住每当你看到这样的报错时:

library(ggrepel)
#> Error in library(ggrepel) : there is no package called ‘ggrepel’

您需要运行 install.packages("ggrepel") 来安装包。

运行 R 代码

上一节向您展示了几个运行 R 代码的示例。书中的代码如下所示:

1 + 2
#> [1] 3

如果您在本地控制台(console)中运行相同的代码,它将如下所示:

> 1 + 2
[1] 3

有两个主要的区别。在您的控制台中,您在 > 之后输入代码,称为提示符(prompt);我们在书中没有显示提示符。在书中,输出用 #> 进行注释;而在您的控制台中,它直接出现在您的代码之后。这两个区别意味着如果您正在使用电子版的书,您可以轻松地将代码从书中复制并粘贴到控制台中。

在整本书中,我们使用一套一致的约定来引用代码:

  • 函数(Functions)以代码字体显示,并跟随圆括号,例如 sum()mean()

  • 其他 R objects(如数据或函数参数)以代码字体显示,不带圆括号,例如 flightsx

  • 有时,为了清楚地表明一个对象来自哪个软件包,我们会使用软件包名称后跟两个冒号,例如 dplyr::mutate()nycflights13::flights。这也是有效的 R 代码。

致谢

这本书不仅仅是 Hadley、Mine、Garrett 的成果,而是与 R 社区中许多人进行的许多对话(面对面和在线)的结果。我们非常感谢与大家进行的所有对话;非常感谢你们!

版权所有

本书的在线版本可在 https://r4ds.hadley.nz 获得。它将在实体书重印之间继续发展。本书的源代码可在 https://github.com/hadley/r4ds 获取。这本书由 Quarto 提供支持,这使得编写结合文本和可执行代码的书籍变得容易。


  1. 如果您想全面了解 RStudio 的所有功能,请参阅 RStudio 用户指南,网址为 https://docs.posit.co/ide/user

--------------- 本章结束 ---------------

本期翻译贡献:

  • @TigerZ生信宝库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/915201.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/915201.shtml
英文地址,请注明出处:http://en.pswp.cn/news/915201.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何 ASP.NET Core 中使用 WebSocket

如何在 ASP.NET Core 中使用 WebSocket在现代 Web 应用程序中&#xff0c;WebSocket 连接非常流行且使用率极高。它可以帮助企业满足数字环境需求&#xff0c;并处理来自最终用户的实时数据。它还能提升生产力、输出率和用户体验。如果您还没有使用 WebSocket&#xff0c;那么您…

Python之--元组

定义是 Python 中内置的不可变序列。在 Python 中使用&#xff08;&#xff09;定义元组&#xff0c;元素与元素之间使用英文的逗号分隔。元组中只有一个元素的时候&#xff0c;逗号也不能省略。元组的创建方式&#xff08;1&#xff09;使用&#xff08;&#xff09;直接创建元…

工业相机GigE数据接口的优势及应用

工业相机不同的数据接口适用的应用场景也不同&#xff0c;选择合适的数据额接口&#xff0c;可大大提高效率。今天我们来看看常见的GigE接口的优势及应用。基于GigE Vision标准的千兆以太网&#xff08;GigE&#xff09;相机通过提供快速、灵活且成本效益高的成像解决方案&…

【53】MFC入门到精通——MFC串口助手(二)---通信版(发送数据 、发送文件、数据转换、清空发送区、打开/关闭文件),附源码

文章目录1 完整 功能展示2 添加控件变量及声明2.1 添加控件及变量2.2 SerialPortDlg.h: 头文件3 函数实现3.1 数据发送3.1.2 写数据、字符串转3.2 发送文件3.2.1 打开文件3.2.2 发送文件3.3 清空发送区4 完整MFC项目项下载1 完整 功能展示 串口通信助手 页面展示&#xff0c;功…

算法学习笔记:27.堆排序(生日限定版)——从原理到实战,涵盖 LeetCode 与考研 408 例题

堆排序&#xff08;Heap Sort&#xff09;是一种基于二叉堆数据结构的高效排序算法&#xff0c;由计算机科学家 J. W. J. Williams 于 1964 年提出。它结合了选择排序的思想和二叉堆的特性&#xff0c;具有时间复杂度稳定&#xff08;O (nlogn)&#xff09;、原地排序&#xff…

I/O 多路复用select,poll

目录 I/O多路复用的介绍 多进程/多线程模型的弊端 网络多路复用如何解决问题&#xff1f; 网络多路复用的常见实现方式 常见的开源网络库 select详细介绍 select函数介绍 套接字可读事件,可写事件,异常事件 fd_set类型介绍 select的两次拷贝&#xff0c;两次遍历 se…

最终分配算法【论文材料】

文章目录一、最终分配算法1.1 平衡的情况1.2 不平衡的情况1.3 TDM 约束一、最终分配算法 上一步合法化后&#xff0c;group 的 TDM 情况大致分为两类&#xff0c;一类是平衡的&#xff0c;最大的一些 group 的 TDM 比较接近。另外一种情况就是不平衡的&#xff0c;最大的 group…

《大数据技术原理与应用》实验报告七 熟悉 Spark 初级编程实践

目 录 一、实验目的 二、实验环境 三、实验内容与完成情况 3.1 Spark读取文件系统的数据。 3.2 编写独立应用程序实现数据去重。 3.3 编写独立应用程序实现求平局值问题。 四、问题和解决方法 五、心得体会 一、实验目的 1. 掌握使用 Spark 访问本地文件和 HDFS 文件的…

机器学习漫画小抄 - 彩图版

斯坦福机器学习漫画小抄&#xff0c;中文版来啦&#xff01; 下载地址&#xff1a; 通过网盘分享的文件&#xff1a;机器学习知识点彩图版.pdf 链接: https://pan.baidu.com/s/1-fH9OpC_u_OrTqWy6gVUCA 提取码: 246r

1.初始化

业务模块核心技术栈业务&#xff08;亮点&#xff09;解决方案课程安排01 认识Vue3为什么需要学Vue3?Vue3组合式API体验Vue3更多的优势2 使用create-vue搭建Vue3项目认识 create-vue使用create-vue创建项目3 熟悉项目目录和关键文件项目目录和关键文件4 组合式API - setup选项…

Milvus分布式数据库工作职责

主导腾讯云Milvus服务化项目&#xff0c;设计多租户隔离方案&#xff0c;支撑日均10亿向量请求&#xff0c;延迟降低40%。优化IVF_PQ索引构建流程&#xff0c;通过量化编码压缩使内存占用减少60%&#xff0c;QPS提升35%。开发基于Kubernetes的Milvus Operator&#xff0c;实现自…

FMEA-CP-PFD三位一体数字化闭环:汽车部件质量管控的速效引擎

FMEA-CP-PFD三位一体数字化闭环&#xff1a;汽车部件质量管控的速效引擎 全星FMEA软件系统通过​​FMEA&#xff08;失效模式分析&#xff09;、CP&#xff08;控制计划&#xff09;、PFD&#xff08;过程流程图&#xff09;三大工具的一体化协同管理​​&#xff0c;为汽车部件…

VUE2 学习笔记1

目录 VUE特点 文档tips 开发者工具 从一个Hello world开始 hello world Demo 容器和实例的对应关系 差值语法{{}} VUE特点 构建用户界面&#xff1a;可以用来把数据构建成用户界面。 渐进式&#xff1a;自底向上&#xff0c;可以先从一个非常轻量级的框架开始&#xf…

嵌入式学习系统编程(四)进程

目录 一、进程 1.程序和进程 2.进程的八种状态 3. 几个状态 4.关于进程常用命令 二、关于进程的函数 1.fork 2.面问 3.孤儿进程 后台进程 2. exec函数族 (只保留父子关系&#xff0c;做新的事情) strtok函数 三、进程的结束 1.分类 exit和_exit的区别 wait函数…

Linux中添加重定向(Redirection)功能到minishell

前言&#xff1a;在谈论添加minishell之前&#xff0c;我再重谈一下重定向的具体实现等大概思想&#xff01;&#xff01;&#xff01;方便自己回顾&#xff01;&#xff01;&#xff01; 目录 一、重定向&#xff08;Redirection&#xff09;原理详解 1、文件描述符基础 2、…

Django由于数据库版本原因导致数据库迁移失败解决办法

在django开发中&#xff0c;一般我们初始化一个项目之后&#xff0c;创建应用一般就会生成如下的目录&#xff1a;django-admin startproject myproject python manage.py startapp blogmyproject/ ├── manage.py └── myproject/ | ├── __init__.py | ├── se…

C++STL系列之vector

前言 vector是变长数组&#xff0c;有点像数据结构中的顺序表&#xff0c;它和list也是经常被拿出作对比的&#xff0c; vector使用动态分配数组来存储它的元素。当新元素插入时候&#xff0c;这个数组需要被重新分配大小&#xff0c;如果扩容&#xff0c;因为要开一个新数组把…

Functional C++ for Fun Profit

Lambda Conf上有人讲C函数式编程。在Functional Conf 2019上&#xff0c;就有主题为“Lambdas: The Functional Programming Companion of Modern C”的演讲。演讲者介绍了现代C中函数式编程相关内容&#xff0c;讲解了如何使用Lambda表达式编写符合函数式编程原则的C代码&…

Python基础理论与实践:从零到爬虫实战

引言Python如轻舟&#xff0c;载你探寻数据宝藏&#xff01;本文从基础理论&#xff08;变量、循环、函数、模块&#xff09;启航&#xff0c;结合requests和BeautifulSoup实战爬取Quotes to Scrape&#xff0c;适合零基础到进阶者。文章聚焦Python基础&#xff08;变量、循环、…

ThingJS开发从入门到精通:构建三维物联网可视化应用的完整指南

文章目录第一部分&#xff1a;ThingJS基础入门第一章 ThingJS概述与技术架构1.1 ThingJS平台简介1.2 技术架构解析1.3 开发环境配置第二章 基础概念与核心API2.1 核心对象模型2.2 场景创建与管理2.3 对象操作基础第三章 基础开发实战3.1 第一个ThingJS应用3.2 事件系统详解3.3 …