数据科学家必备!12个基本命令行工具帮你摆脱鼠标

简介:

这篇文章概述了十二个可以用于数据科学项目的类Unix操作系统命令行工具。

这一系列工具不包括任何基本的文件管理命令(pwd、ls、mkdir、rm……)和远程桌面管理工具(rsh、ssh……),但是从数据科学角度来看,这些命令行工具都是比较实用的,通常用来进行不同程度的数据检验和数据处理。

这一系列命令行工具都包含在一种特殊的类Unix操作系统中。

这些固然都是最基础的操作命令,但我还是鼓励你针对某些命令行自行查找更多的应用实例。

在本文中,工具名都可以直接链接到维基百科词条,而不是Linux的使用手册页面,我觉得前者对于新手来说更友好一点。

Linux的使用手册页面:

https://linux.die.net/man/

wget

wget是一个文件检索工具,用于从远程位置下载文件,其下载远程文件的基本用法如下:

wget:

https://en.wikipedia.org/wiki/wget

~$ wget https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv

--2018-03-20 18:27:21-- https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv

Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.20.133

Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.20.133|:443... connected.

HTTP request sent, awaiting response... 200 OK

Length: 3716 (3.6K) [text/plain]

Saving to: ‘iris.csv’

iris.csv

100 [=======================================================================================================>] 3.63K --.-KB/s in 0s 

2018-03-20 18:27:21 (19.9 MB/s) - ‘iris.csv’ saved [3716/3716]

cat

cat是将文件内容标准输出的工具,此名称来自连接(concatenate)这个词。它可以用于实现一些较复杂的文件处理,包括将文件合并在一起(也就是真正的文件连接)、将文件追加到另一个文件中、以及给文件行编号等功能。

cat:

https://en.wikipedia.org/wiki/Cat_(Unix)

~$ cat iris.csv

sepal_length,sepal_width,petal_length,petal_width,species

5.1,3.5,1.4,0.2,setosa

4.9,3,1.4,0.2,setosa

4.7,3.2,1.3,0.2,setosa

4.6,3.1,1.5,0.2,setosa

5,3.6,1.4,0.2,setosa

...

6.7,3,5.2,2.3,virginica

6.3,2.5,5,1.9,virginica

6.5,3,5.2,2,virginica

6.2,3.4,5.4,2.3,virginica

5.9,3,5.1,1.8,virginica

wc

wc命令用于生成字数统计、行计数、字节计数以及与文本文件相关的内容。在没有设置其他选项的情况下,wc的默认输出是一行,由左到右依次是行数、字数统计(注意:每一行上没有空格中断的单个字符串被算作一个单词)、字符计数和文件名。

wc:

https://en.wikipedia.org/wiki/Wc_(Unix)

~$ wc iris.cs

151 151 3716 iris.csv

head

head命令是标准地输出文件的前n行(默认为10行),显示行数可以用-n项设置,如下。

Head:

https://en.wikipedia.org/wiki/Head_(Unix)

~$ head -n 5 iris.csv

sepal_length,sepal_width,petal_length,petal_width,species

5.1,3.5,1.4,0.2,setosa

4.9,3,1.4,0.2,setosa

4.7,3.2,1.3,0.2,setosa

4.6,3.1,1.5,0.2,setosa

tail

接下来猜猜看tail是用来实现什么功能的?

tail:

https://en.wikipedia.org/wiki/Tail_(Unix)

 
~$ tail -n 5 iris.csv

6.7,3,5.2,2.3,virginica

6.3,2.5,5,1.9,virginica

6.5,3,5.2,2,virginica

6.2,3.4,5.4,2.3,virginica

5.9,3,5.1,1.8,virginica
b6039f28c72fbe62dade97800493b60e4edbde08

运行命令行魔法

find

find是用于搜索特定文件的文件系统工具。以下命令就是在树结构中搜索特殊文件的例子,即从当前目录(“.”)开始,搜索以“iris”开头,并以任意字符结尾,类型为普通文件类型(“-type f”)的文件:

find:

https://en.wikipedia.org/wiki/Find_(Unix)

~$ find . -name 'iris*' -type f

./iris.csv

./notebooks/kmeans-sharding-init/sharding/tests/results/iris_time_results.csv

./notebooks/ml-workflows-python-scratch/iris_raw.csv

./notebooks/ml-workflows-python-scratch/iris_clean.csv

...

cut

cut命令用于文本分割,虽然cut用于分割文本可以在各种标准下进行,但是它对于CSV文件中列数据的提取尤其有用。以下命令即为输出使用逗号分隔符("-d ','")的iris.csv文件的第五列(“- f 5”):

cut:

https://en.wikipedia.org/wiki/Cut_(Unix)

~$ cut -d ',' -f 5 iris.csv

species

setosa

setosa

setosa

...

uniq

uniq是通过将文本中的重复行进行去重,从而将文本输出标准化的工具。就其本身而言,这似乎并没多大用处,但是当其用于构建pipelines时(将一个命令的输出连接到另一个命令的输入等等)将变得非常有用。

uniq:

https://en.wikipedia.org/wiki/Uniq

以下命令结果是iris数据集的第五列中包含的不同类别及其计数:

 
~$ tail -n 150 iris.csv | cut -d "," -f 5 | uniq -c

50 setosa

50 versicolor

50 virginica
6e14c640392076ccd96414243f85fdd819ae7236

奶牛说了什么

awk

awk实际上不是一个"命令",而是一套完整的编程语言。它用于处理和提取文本, 且可以从命令行中以单行命令的形式调用。

awk:

https://en.wikipedia.org/wiki/AWK

完全掌握awk是需要一些时间的,但在此之前,这里有一个可以练习的例子。考虑到样本文件iris.csv相当有限的文本多样性,以下这行命令就可以调用awk,在给定的文件(“iris.csv”)中搜索字符串“setosa”,并将所有项(在$0变量中保存的)一个一个地标准输出如下:

~$ awk '/setosa/ { print $0 }' iris.csv

5.1,3.5,1.4,0.2,setosa

4.9,3,1.4,0.2,setosa

4.7,3.2,1.3,0.2,setosa

4.6,3.1,1.5,0.2,setosa

5,3.6,1.4,0.2,setosa

grep

grep是另一种文本处理工具,用来查找匹配字符串和正则表达式。

grep:

https://en.wikipedia.org/wiki/Grep

~$ grep -i "vir" iris.csv

6.3,3.3,6,2.5,virginica

5.8,2.7,5.1,1.9,virginica

7.1,3,5.9,2.1,virginica

...

当你需要花大量的时间进行文本处理时,grep无疑是你需要掌握的一个好工具,更多有用的信息请参考网站:

https://www.thegeekstuff.com/2009/03/15-practical-unix-grep-command-examples。

sed

sed是一个流编辑器,也是一个文本处理和转换工具,类似于awk。下面我们将用此命令把iris.csv文件中的“setosa”改为“irissetosa”:

sed:

https://en.wikipedia.org/wiki/Sed

~$ sed 's/setosa/iris-setosa/g' iris.csv > output.csv

~$ head output.csv

sepal_length,sepal_width,petal_length,petal_width,species

5.1,3.5,1.4,0.2,iris-setosa

4.9,3,1.4,0.2,iris-setosa

4.7,3.2,1.3,0.2,iris-setosa

...

history

history非常简单,但也非常有用,特别是当你需要用命令语句来完成一些重复性的数据准备工作时。

History:

https://en.wikipedia.org/wiki/History_(Unix)

~$ history547 tail iris.csv

548 tail -n 150 iris.csv

549 tail -n 150 iris.csv | cut -d "," -f 5 | uniq -c

550 clear

551 history

至此,这篇文章已经对这12个方便的命令行工具都进行了简单的介绍,这只是对数据科学(或其他任何目标)可能用到的命令行工具的一种粗浅的体验。现在,是时候让它们把你的生产力从鼠标中解放出来了。


原文发布时间为:2018-04-18

本文作者:文摘菌

本文来自云栖社区合作伙伴“大数据文摘”,了解相关信息可以关注“大数据文摘”。

相关文章
|
存储 缓存 Cloud Native
[Snowflake核心技术解读系列二]云原生技术
Snowflake取得了巨大的商业成功,技术是如何支撑起它的千亿美元市值呢?它技术强在哪?本文为大家倾情解读Snowflake的核心技术原理。
[Snowflake核心技术解读系列二]云原生技术
|
开发者 知识图谱
免费下载!《阿里工程师的自我修养》公开10位阿里大牛解决问题的思维方式
今天,阿里技术公布一波阿里P8、P9技术大牛的思维模型,将他们的思维模式呈现出来。你可以在阿里资深专家职业生涯的真切感悟中,找到应对危机的最佳方法。《阿里工程师的自我修养》现已正式公开,可免费下载阅读。
136506 1
免费下载!《阿里工程师的自我修养》公开10位阿里大牛解决问题的思维方式
|
7月前
|
人工智能 安全 数据挖掘
MCP
模型上下文协议(MCP)是一种全新开放标准,旨在解决大型语言模型(LLM)与外部世界连接的局限。它为LLM与工具、数据库、硬件等建立统一、安全、标准化的通信机制,让AI从“全能模型”转变为可连接万物的“生态核心”,推动AI应用向更广泛领域扩展,开启通往通用人工智能(AGI)的新篇章。
|
10月前
|
监控 数据可视化 数据挖掘
HarmonyOSNext性能调优圣典可视化分析+命令行实战避坑指南
本文详解HarmonyOS Next性能调优技巧,涵盖DevEco Studio可视化分析与命令行实战操作,助力开发者快速定位CPU瓶颈、抓取跟踪日志,提升应用性能。
|
搜索推荐 应用服务中间件 PHP
301重定向完整指南: 原理、应用与实现方法
301重定向是一种永久性URL转发技术,用于将旧链接的权重传递给新URL,有助于SEO优化、提升用户体验和维护网站流量。本文介绍了301重定向的应用场景(如更换域名、HTTP转HTTPS等)、实现方法(Apache、Nginx、PHP等)及最佳实践,并解答了常见问题,帮助用户正确配置以确保网站无缝过渡。建议在操作前备份配置并使用工具验证效果。
1065 10
|
人工智能 前端开发 程序员
通义灵码2.0深度评测:当AI程序员握住我的手写代码
体验通义灵码2.0 AI程序员:Deepseek智能编码的魅力
568 4
|
人工智能 Cloud Native 数据挖掘
|
前端开发 JavaScript 小程序
印象最深的一个bug——使用uinapp做混合开发静态图片在安卓端不显示
这几天一直在做混合开发,使用的是uni-app开发的,一套代码,多端使用,适用于各个平台。听起来很完美,使用过程不可多说,不知道是因为我们的需求变态还是我们团队两端技术水平太差。总之,开发联调过程十分痛苦,加上uniapp的调试十分困难,一度让我们两端互怼。这其中我印象最深的一个bug就是在对接联调总出现的
1665571 33
印象最深的一个bug——使用uinapp做混合开发静态图片在安卓端不显示
|
弹性计算 安全 网络协议
云服务器ECS安全组实践(三)Tips篇
在使用安全组的过程中,一个常见的错误是将所有的云服务器放置在一个安全组之中,这样虽然减少了初期配置的工作量,但是长期来看将会使得您的业务系统网络交互变得复杂和不可控,在执行安全组变更的时候没办法明确的知道添加和删除规则的影响范围。
32907 72
|
自然语言处理 JavaScript Java
天猫精灵开放平台体验创建语音技能
天猫测评活动——创建一个语音技能的真实操作流程记录
天猫精灵开放平台体验创建语音技能

热门文章

最新文章