命令行上的数据科学第二版 一、简介
原文:https://datascienceatthecommandline.com/2e/chapter-1-introduction.html
贡献者:Ting-xin
这本书是关于如何利用命令行做数据科学的。我的目标是通过教你使用命令行的力量,让自己成为一名更高效和多产的数据科学家。
在标题中同时使用的术语数据科学和命令行需要解释一下,命令行作为一项超过 50 年历史的技术,怎么会对一个只有几年历史的领域有帮助呢?
今天,数据科学家有大量激动人心的技术和编程语言选择,比如 Python、R、Julia 和 Apache Spark 等等,你可能已经有使用过一个或多个这方面技术的经验了。如果是,那你为什么还要在意命令行能在数据科学领域做一些什么呢?命令行是不是有什么东西是其他技术和编程语言所没有的呢?
这些都是真实存在的问题。在第一章,我将如下回答这些问题。首先,我提出了数据科学的实用定义,它将成为本书的指南。其次,我将列出命令行的 5 个优点。在这一章结束时,我希望能够说服你:对于数据科学这个领域来说命令行是值得学习的。
1.1 数据科学是 OSEMN
数据科学领域仍处于起步阶段,因此,它包含这各种各样的定义。在本书中,我借用了 Hilary Mason 和 Chris H. Wiggins 提出的非常实用的定义,他们按照以下 5 个步骤定义数据科学:(1)获取数据,(2)清理数据,(3)探索数据,(4)数据建模,(5)解释数据,这些步骤共同构成了 OSEMN 模型(发音为awesome
)。这个模型是本书的指南,因为每一步(除了第 5 步,解释数据,我将在下面解释)都有属于自己的章节。
虽然这五个步骤是以线性和递增的方式讨论的,但实际上这些步骤之间是来回重复执行或多个步骤同时进行的。图 1.1 说明了做数据科学是一个迭代的非线性过程。比如说,假如你对你的数据进行了建模,你看了看结果,你可能会决定回到清理数据的步骤,以调整数据集的特征。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vNwmkTTn-1680147472680)(null)]
图 1.1: 数据科学是一个迭代的非线性过程
接下来我将会解释每一步具体做什么。
1.1.1 获取数据
没有数据就没有数据科学。所以我们第一步都是获取数据,除非你足够幸运已经拥有了所有的数据,否则你可能需要执行以下一项或多项操作:
- 从其它地方(例如,网页或服务器)下载数据
- 从数据库或 API(如 MySQL 或 Twitter)中查询数据
- 从另一个文件(例如,HTML 文件或电子表格)中提取数据
- 自己生成的数据(例如,读取传感器或进行调查)
在第三章中,我讨论了几种使用命令行获取数据的方法。获得的数据很可能是纯文本、CSV、JSON、HTML 或 XML 等格式,所以下一步是清理这些数据。
1.1.2 清理数据
获得的数据可能会存在缺失值、数据不一致、错误和奇怪的字符或者有不感兴趣的列等情况。在这些情况下,你必须先清理数据,然后才能对它做任何有趣的事情。常见的清理操作包括:
- 过滤数据
- 提取某些列
- 替换值
- 提取值
- 处理缺失值和重复值
- 将数据从一种格式转换为另一种格式
虽然我们数据科学家都喜欢创建令人兴奋的数据可视化图表和有洞察力的模型(步骤 3 和 4),但我们通常需要先花费大量精力来获取和清理所需的数据(步骤 1 和 2)。在《Data Jujitsu》中, DJ Patil 指出“在任何数据项目中,80% 的工作都是在清理数据。”在第五章,我演示了命令行如何帮助清理数据的工作。
1.1.3 探索数据
清理完数据后,你就可以开始探索它了。这也是数据科学有趣的地方,因为当你在探索时,你将真正的了解你的数据。在第七章中,我们将使用命令行做一下工作:
- 查看你的数据
- 从数据中获取统计数据
- 创建有洞察力的可视化信息
第七章中介绍的命令行工具有:csvstat
和rush
。
1.1.4 建模数据
如果你想要解释数据或预测将会发生什么,你可能想为你的数据创建一个统计模型。创建模型的技术包括但不限于聚类、分类、回归和降维等。命令行不适合从头开始编程一个新类型的模型。然而,从命令行构建一个模型是非常有用的。在第九章中,我将介绍几个命令行工具,它们要么在本地构建模型,要么使用 API 在云中执行计算。
1.1.5 解释数据
OSEMN 模式中最后也可能是最重要的一步就是解释数据,这一步骤包括:
- 从你的数据中得出结论
- 评估你的结果意味着什么
- 沟通你的结果
说实话,电脑在这一步的用处不大,同样命令行在这个阶段也没有什么作用。一旦你走到这一步,一切就取决于你了。这也是是 OSEMN 模型中唯一没有自己章节的步骤。取而代之的是,我向你推荐 Max Shron 的《Thinking with Data》这本书。
1.2 其它章节
除了涵盖 OSEMN 步骤的章节外,还有四个其它的章节。它们每一篇都讨论了一个关于数据科学的常见的主题,以及如何使用命令行来实现这个目标。这些主题适用于数据科学过程中的任何步骤。
在第四章中,我们将讨论如何为命令行创建可重用的工具。这些工具既可以来自于你在命令行上输入的长命令,也可以来自于你用 Python 或 R 编写的现有代码。创建属于自己的工具会让你变得更加高效和多产。
由于命令行是一个进行数据科学的交互式环境,因此要跟踪你的工作流程可能会变得很有挑战性。在第六章中,我演示了一个叫做make
的命令行工具,它允许你用任务和任务之间的依赖关系来定义你数据科学的工作流。这个工具可以提高你工作流程的可重复性,不仅对你,对你的同事和同行也是如此。
在第八章,我解释了如何通过并行运行来加快你的命令行和工具的速度。使用一个叫做 GNU Parallel 的命令行工具,你可以将命令行工具应用于非常大的数据集,并在多个核心甚至是远程机器上运行它们。
在第十章,我们将讨论如何在其他环境和编程语言中使用命令行的强大功能,比如 R、RStudio、Python、Jupyter Notebooks,甚至是 Apache Spark。
1.3 什么是命令行?
在讨论“为什么你应该将命令行用于数据科学”之前,让我们先来看看“命令行实际上是什么样子”(你可能已经很熟悉了)。图 1.2 和图 1.3 分别显示了 macOS 和 Ubuntu 上默认出现的命令行工具的屏幕截图。Ubuntu 是 GNU/Linux 的一个特殊发行版,也是我在本书中要使用的一个版本。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1wQuLCN1-1680147472668)(null)]
图 1.2:maxOS 上的命令行工具
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BHAB8NP8-1680147472604)(null)]
图 1.3:Ubuntu 上的命令行工具
两张截图中显示的窗口称为终端。这是使你能够与 Shell 进行交互的程序。执行我输入的命令的就是 Shell。在第二章中,我会更详细地解释这两个术语。
我没有展示 MicrosoftWindows 的终端(它被叫做命令提示符或 PowerShell),因为它与本书介绍的命令有本质的不同,它们之间不兼容。好消息是,你可以在 Microsoft 上安装一个 Docker 镜像,这样你就能跟着做了。如何安装 Docker 镜像将在第二章讲解。
与通过图形用户界面(GUI)相比,输入命令是一种非常不同的与计算机交互的方式。如果你通常习惯于在 Microsoft Excel 中处理数据,那么这种方法一开始可能看起来有些吓人。不要害怕。相信我,你会很快习惯在命令行上工作。
在本书中,我所输入的命令和它们所产生的输出都以文本形式显示。例如,两张截图中终端的内容会是这样的。:
$ whoami
dst$ date
Thu Mar 3 10:38:33 AM CET 2022$ echo 'The command line is awesome!' | cowsay -f tux______________________________
< The command line is awesome! >------------------------------\\.--.|o_o ||:_/ |// \ \(| | )/'\_ _/`\\___)=(___/$
你还会注意到每个命令前面都有一个美元符号($
),这个就是一个提示符。这两张截图中显示了很多信息:用户名、日期和一只企鹅。在示例中显示美元符号是一种惯例,提示符有以下特点:(1)在会话中会改变(当你进入不同的目录),(2)可以由用户定制(例如,它还可以显示时间或你正在处理的当前git
分支),(3)与命令本身无关。
在下一章,我将更多地解释基本的命令行概念。现在是时候首先解释一下“为什么你应该学习使用命令行进行数据科学研究”了。
1.4 为什么在命令行中进行数据科学?
命令行有许多巨大的优势,它可以使你真正成为一个更有效率和生产力的数据科学家。粗略地对这些优势进行分组,命令行是:灵活的、不断增强的、可重复的、可扩展的和无处不在的。下面我将对每个优势进行阐述。
1.4.1 灵活的命令行
命令行的第一个优点是用起来灵活。数据科学具有很强的交互性和探索性,你的工作环境需要考虑到这一点,命令行通过两种方式实现这一点。
首先,命令行提供了一个所谓的读取-求值-打印循环(REPL,交互式解释器)。这意味着当你输入命令,按下Enter
,命令就会立即被执行。与脚本、大型程序和 Hadoop 作业相关的编辑-编译-运行-调试周期相比,REPL 通常更便于进行数据科学研究。你的命令是立即执行的,可以随意停止,可以快速更改。这个短的迭代周期可以真正的让你玩转你的数据。
第二,命令行可以很方便的操作文件系统。因为数据是数据科学的主要组成部分,所以能够轻松地处理包含你的数据集的文件是很重要的。命令行为此提供了许多方便的工具。
1.4.2 不断增强的命令行
命令行与其他技术集成得很好。无论目前你现在的数据科学工作流包含什么技术(无论是 R、Python 还是 Excel),请知道我并不是建议你放弃该工作流。相反,把命令行看作是一种辅助的技术,它可以增强你目前正在使用的技术的功能,主要通过以下三种方式:
首先,命令行可以充当许多不同数据科学工具之间的粘合剂。粘合工具的一种方法是将第一个工具的输出连接到第二个工具的输入。在第二章中,我解释了这是如何工作的。
其次,你通常可以从自己的环境中将任务委派给命令行。例如,Python、R 和 Apache Spark 允许你运行命令行工具并捕获它们的输出。我在第十章中用例子证明了这一点。
第三,你可以将你的代码(例如,Python 或 R 脚本)转换成可重用的命令行工具。这样,用什么语言写就不再重要了。现在,可以从命令行直接使用它,或者从前面提到的与命令行集成的任何环境中使用它。我在第四章.中解释了如何做到这一点。
最后,每种技术都有其优势和劣势,多了解几种技术并使用最适合手头任务的技术才是正道。有时这应该使用 R,有时是命令行,有时甚至是笔和纸。到本书结束时,你将对何时应该使用命令行、何时继续使用你最喜欢的编程语言或统计计算的环境有一个基本的理解。
1.4.3 可重复的命令行
正如我以前说过的,在命令行上工作与使用 GUI 有很大的不同。在命令行上,你通过输入来做事情,而在 GUI 上,你通过点击鼠标来做事情。
你在命令行上手动输入的所有内容也可以通过脚本和工具实现自动化。很多时候我们需要重新运行自己的命令行,比如我犯了一个错误、输入数据变了或者我的同事想要进行同样的分析,通过自动化脚本或者工具我们可以很容易的重新运行我们曾经输入的内容。此外,你的命令可以以一个特定的时间间隔运行,在远程服务器上运行,并在许多数据块上并行运行(更多信息请参见第八章)。
因为命令行是自动化的,所以它变得可伸缩和可重复。但是自动化 GUI 中的指向和点击并不简单,这使得 GUI 成为一个不太适合做可扩展和可重复的数据科学的环境。
1.4.4 可扩展的命令行
命令行本身是 50 多年前发明的,但是它的核心功能基本保持不变,但是它的工具,命令行的主力,每天都在被开发。
命令行本身是语言无关的,这允许用许多不同的编程语言来编写命令行工具。开源社区正在开发许多免费的高质量命令行工具,我们可以将它们用于数据科学。
这些命令行工具可以一起工作,这使得命令行非常灵活。你还可以创建自己的工具,让你扩展命令行的有效功能。
1.4.5 无处不在的命令行
因为命令行是任何类 Unix 的操作系统自带的,包括 Ubuntu Linux 和 macOS,所以在很多地方都可以找到。另外,排名前 500 的超级计算机 100% 都运行 Linux。因此,如果你曾经经手过一台超级计算机(或者如果你曾经发现自己在侏罗纪公园里门锁坏了),你最好知道如何使用命令行!
但是 Linux 不仅仅运行在超级计算机上。它也可以在服务器、笔记本电脑和嵌入式系统上运行。如今,许多公司都提供云计算,你可以很容易地在网络上启动新机器。如果你曾经登录过这样的机器(或一般的服务器),几乎可以肯定的是你将碰到命令行。
值得注意的是,命令行并不只是一种炒作。这项技术已经存在了五十多年,而且我相信它还会继续存在五十年。因此,学习如何使用命令行(对于数据科学和平时使用而言)是一项值得的投资。
1.5 总结
在这一章中,我向你介绍了做数据科学的 OSEMN 模型,并且我把它作为本书的指南。同时我也提供了一些关于 Unix 命令行的背景知识,希望能让你相信这是一个适合从事数据科学的环境。在下一章,我将向你展示如何开始安装数据集和工具,并解释它们的基本概念。
1.6 探索参考
- Brian W. Kernighan 所著的《UNIX: A History and a Memoir》讲述了 UNIX 的故事,解释了它是什么,它是如何开发的,以及它为什么重要
- 2018 年,我在 Strata London 做了一个题为《50 个学习 Shell 做数据科学的理由》的演讲。如果你需要更多的说服力,你可以看看它的幻灯片。
- 由 Max Shron 撰写的《Thinking with Data》一书简短而温馨,它关注的是 "为什么 "而不是 “怎么做”,并提供了一个定义数据科学项目的框架,这将帮助你提出正确的问题并正确的解决问题。
相关文章:

命令行上的数据科学第二版 一、简介
原文:https://datascienceatthecommandline.com/2e/chapter-1-introduction.html 贡献者:Ting-xin 这本书是关于如何利用命令行做数据科学的。我的目标是通过教你使用命令行的力量,让自己成为一名更高效和多产的数据科学家。 在标题中同时使…...

utf-8转换到utf-16的转换过程你懂吗?
人生自是有情痴,此恨不关风与月。——唐代元稹《离思》 从UTF-8编码的文件中读取文本并将其存储到Java的String对象中,涉及到从字节序列到Unicode码点,再到UTF-16编码的转换。以下是详细的步骤: 从文件读取字节序列:首…...

C++编程大师之路:从入门到精通--持续更新中~
文章目录前言主要内容C基础入门初识C第一个C程序注释变量常量关键字标识符命名规则数据类型整型sizeof关键字实型(浮点型)字符型转义字符字符串型布尔类型 bool数据的输入运算符算术运算符赋值运算符比较运算符逻辑运算符程序流程结构选择结构if语句三目…...

面试阿里软件测试岗,收到offer后我却毫不犹豫拒绝了....
我大学学的是计算机专业,毕业的时候,对于找工作比较迷茫,也不知道当时怎么想的,一头就扎进了一家外包公司,一干就是2年。我想说的是,但凡有点机会,千万别去外包! 在深思熟虑过后&am…...

【c语言多线程编程】关于pthread_create()和pthread_join()的多线程详解
关于pthread_create()和pthread_join()的多线程详解 一、首先说一下pthread_create() 函数的用法: int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*start_routine) (void *),void *arg);各参数的含义: 1、pthread_t *thre…...

抖音seo矩阵系统源码搭建技术+二开开源代码定制部署
抖音已经成为了当今最为流行的短视频平台之一,拥有着庞大的用户群体和海量的视频资源。对于一些商家或者运营者来说,如何从这些视频资源中挖掘出有效的信息,进而提升自己的品牌、产品或者内容的曝光度,就成为了一个非常重要的问题…...

【周赛刷题】平衡树+图中最短环
2612. 最少翻转操作数(平衡树) 题目的难度有一部分在于数学推导。对于某个点 iii 进行反转是有一个范围的,这个范围需要考虑到边界的情况。可以的得到的一个结论是。对于窗口反转,KaTeX parse error: Expected group after ^ at p…...

C++笔记——第十篇 继承 的解析,详细易懂哦
目录 一、继承的概念及定义 1.继承的概念 2. 继承定义 2.1定义格式 2.2继承关系和访问限定符 2.3继承基类成员访问方式的变化 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、继承与友元 六、继承与静态成员 七、复杂的菱形继承…...

SQL Server中的全文搜索
SQL Server中的全文搜索一、概述二、全文搜索查询三、将全文搜索查询与 LIKE 谓词进行比较四、全文搜索体系结构4.1、SQL Server 进程4.2、过滤器守护程序主机进程五、全文搜索处理5.1、全文索引过程5.2、全文查询流程六、全文索引体系结构6.1、全文索引结构6.2、全文索引片段6…...

自适应平移混音方法
一、简介: 自适应平移混音方法是一种常见的音频混音技术,它利用自适应滤波器对不同音频信号进行平移和加权,从而实现混音。 二、该方法的基本步骤如下: 采集和存储需要混音的音频信号。 对其中一个音频信号进行预处理,…...

炼钢厂VR职业技能实训软件,提高员工学习效率和掌握技能速度
炼钢作业是一个高危、高压、高温的行业,在实际操作中需要严格遵守安全规范和操作规程,一旦出现差错可能造成巨大的经济损失和人员伤亡。 利用广州华锐互动开发的炼钢厂VR职业技能实训软件,可以有效帮助员工更好地理解和掌握炼钢作业中的相关…...

MySQL数据库范式
文章目录MySQL数据库范式1、范式的优缺点2、第一范式3、第二范式4、第三范式5、BC范式6、第四范式MySQL数据库范式 1、范式的优缺点 应用数据库范式的好处: 减少数据冗余(这是最主要的好处,其他好处都是由此而附带的)消除异常&…...

通过多层方法重塑网络安全
多年来,网络安全威胁的复杂性不断增加。此外,随着远程和混合工作场所模式的兴起,网络犯罪分子可以利用的漏洞数量显着增加。由于可能存在的网络威胁的范围如此之广,因此没有一种单一的解决方案可以应对所有威胁。 由于多种原因&a…...

Golang学习+深入(四)-运算符
目录 一、概述 1、算数运算符 2、关系运算符 3、逻辑运算符 4、赋值运算符 5、运算符优先级 6、位运算符 7、其他运算符 二、进制 1、进制转换 1、其他进制转十进制 2、十进制转其他进制 3、二进制转其他进制 4、其他进制转二进制 5、二进制在运算中的说明 三、…...

C++ 运算符重载:C++ 运算符重载的高级技巧和最佳实践
C 运算符重载:深入剖析与实现I. 引言A. 什么是运算符重载B. 为什么要使用运算符重载C. C运算符重载的优缺点II. 运算符重载基本概念A. 运算符重载的定义B. 运算符重载的分类1. 一元运算符2. 二元运算符C. 限制与规范1. 无法重载的运算符2. 重载运算符的规范与建议II…...

软件测试找了2个月了,找不到工作怎么办?
那就问你一些问题,看你能回答多少 1:测试流程是什么?测试用例包含哪些内容?测试用例设计都有哪些?给你一个一次性杯子,你会怎么测试? 2:数据库怎么查看前十行数据?内连接和外连接的区别&#…...

满足高并发的TB API接口接入说明
大家都知道,淘宝的反爬虫机制十分严,而很多时候,没办法高效的拿到数据内容响应终端需求,而依赖爬虫就会造成动不动就出现滑块验证,让人很无解。这里我们分享让采集不再出现任何滑块验证码,完全解密通过&…...

Themis Pro版将正式推出,3次迭代到底在酝酿什么?
最近在社区内讨论火热的Themis Pro,终于要来了!4月2日Themis官网(themis.capital )全新升级改版上线,并宣布Themis Pro 即将于4月下旬正式推出。 Themis Pro 是基于Ve(3,3)模型在FVM公链上搭建的新一代去中…...

边缘检测和轮廓检测
边缘检测 什么是边缘: * 图像中像素值发生剧烈变化的位置(高频信息区域) * 这些区域往往都是图像的边缘 方法:滤波、形态学处理等 边缘的作用 本质上,边缘是不同区域之间的边界。 其中包含了图像的区域信息,形状信息 一方面,可以利用这些信息来作为特征对图像进行理解(甚至…...

二分法模板以及例题 (三)
167. 两数之和 II - 输入有序数组 输入:numbers [2,7,11,15], target 9 输出:[1,2]。 解释:2 与 7 之和等于目标数 9 。因此 index1 1, index2 2 。返回 [1, 2] 解题思路:首先散列表可以直接秒了,双指针也秒了 二分…...

向下转型和向上转型(易理解)
向上转型:父类引用指向子类对象 定义A B C D 四个类,分级继承 对象 a 的编译类型是A,运行类型是B,A是B的父类,父类的引用 a 指向的是B这个子类的对象,因为new的是B这个类,创建的也就是B这个类的…...

华为OD机试用JS实现 -【机智的外卖员】(2023-Q2 押题)
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:机智的外卖员 题目描述: 外…...

同态加密:一个基于多方计算的CKKS方案
这篇文章主要介绍LattiGo团队搞出来的一个多方同态加密的工作。个人觉得比较优雅,而且有库支持,方便把玩,所以记一下。 在攒毕业论文的时候整了这么个看上去很烂,但是(个人觉得)有一点意思的烂活࿰…...

最小生成数
题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出 orz。 输入格式 第一行包含两个整数 �,�N,M,表示该图共有 �N 个结点和 �M 条无向边。 接下来 …...

【模板】树状数组
目录: 单点修改,区间查询: 题目描述: lowbit()运算: 插入、修改单点数据: 计算前缀和: 完整代码: 区间修改,单点查询: 计算差分数组: 计算每个点的…...

网站都变成灰色了,怎么实现的?
有些时候我们需要把网站页面变成黑白色或灰色,特别是对于一些需要悼念的日子,以及一些影响力很大的伟人逝世或纪念日的时候,都会让网站的全部网页变成灰色(黑白色),以表示我们对逝者或者英雄的缅怀和悼念。…...

NeRF详解
论文标题:《NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis》 论文地址:https://arxiv.org/abs/2003.08934 推荐代码:https://github.com/yenchenlin/nerf-pytorch 文章目录前言隐式表达NeRF的训练位置编码体渲染&…...

Java之静态代码块和静态类、静态导入
前言 在上一篇文章中给大家讲解了static静态关键字,以及静态变量、静态常量和静态方法等内容。但是关于static,还有其他的一些内容,比如静态类、静态代码块和静态导入等,接下来给大家继续分析讲解。我们一起来看看这些内容都是怎…...

Python3 File isatty() 、os.chflags()方法
Python3 File isatty() 方法Python3 File(文件) 方法概述isatty() 方法检测文件是否连接到一个终端设备,如果是返回 True,否则返回 False。语法isatty() 方法语法如下:fileObject.isatty(); 参数无返回值如果连接到一个终端设备返回 True&…...

【SH_CO_TMT_PACKAGE保留60天数据和增加索引】
1. 保留60天数据 DELETE FROM SH_CO_TMT_PACKAGE WHERE CREATED_ < SYSDATE - 195SH_CO_TMT_PACKAGE 这个表是tmt的数据统计表,数据量极大,大概有1500W 里头的数据都是从TMT机台运行状况表(比如满管率,断丝数,下次落纱时间)同步过来的。 朗通针对这些数据,做了个…...