Uploaded avatar of iHiD

分析四月到啦!

@iHiD
3年多前
视频

大家好!我们经历了 Functional February 和 Mechanical March。现在轮到 Analytical April 了,这个月我们将聚焦非常适合数据科学的语言。

正如你从过去几个月以来已经习惯的那样,在这个视频里,Erik 和我将为你快速介绍这个月的主题,以及我们会探索的不同语言。

和往常一样,稍后 Erik 会带我们逐一了解这些语言,不过我先来讲讲这个月的一些实际细节。

首先是这个月的重点语言。这个月我们只有 3 门:Julia、Python 和 R。这三门语言各有不同,而且显然 Python 是一门用途非常广泛的语言,但我们鼓励你在这个月尝试用数据科学的思维来使用它们。

要获得 Analytical April 徽章,你需要在其中一门语言里完成 5 道练习。稍后我们会探讨它们之间的差异,但用 Exercism 的话来说,我们的 Python track 有一套非常棒的教学大纲,所以我强烈推荐你去试试。我们还希望在这个月内推出 Julia 的教学大纲,这方面的大量工作已经完成,只需要再打磨一下。R 没有教学大纲,但有很多有趣的练习供你把玩。

我们精选了 5 道练习供你尝试:

  • etl:在这里你可以探索如何将数据重塑成不同的格式
  • largest-series-product:练习在数字字符串中高效地寻找规律
  • saddle-points:探索如何处理多维数组/矩阵
  • sum-of-multiples:练习对一串数字进行筛选和求和
  • word-count:把字符串拆成单词并计数

提醒一下,除了 Analytical April 徽章,还有一个为期一年的 #12in23 徽章,只要你在今年任意时间完成这些精选练习就能获得。所以,你需要在今年内用 Python、R 或 Julia 完成那 5 道练习,才能拿到那个徽章!完整的练习列表,可以在 Analytical April 页面找到链接的论坛帖子。

最后,在深入这些语言之前,提醒一下,我们在三月上线了新的 Discord 服务器。那里有很多有趣的活动,一定要去看看。链接就在下方的描述里!

好,我们来探索这些语言。先快速了解每一门语言,然后再深入它们的特性和适用场景。先从 Python 开始。

Python

  • 由 Guido van Rossum 在 20 世纪 80 年代末构想并开发,作为 ABC 编程语言的继任者。1991 年首次发布。
  • 在荷兰的 Centrum Wiskunde & Informatica(CWI)(因是 Edsger Dijkstra 完成大部分工作的地方而闻名)开发,这是一个政府资助的研究实验室。
  • Guido 曾用 C 和 shell 脚本编程,但两者都有缺点。Python 旨在兼取两者的长处,而避开它们的缺点。
  • 由 Python Software Foundation 管理,语言变更通过 Python Enhancement Proposals(PEPs)进行(类似 RFC)

R

  • 由奥克兰大学的 Ross Ihaka 和 Robert Gentleman 创建。R 可以看作 S 语言的另一种实现(差异相对较小),S 的后继是 S-plus,即 S 的商业(非开源)实现。虽然 R 与 S 共享大部分语法,但它的语义受到 Scheme 的启发
  • 目标:创建一门更适合统计计算和图形、且比计算机科学家设计的同类软件更易用的语言

Julia

  • 由 Jeff Bezanson、Stefan Karpinski、Viral B. Shah 和 Alan Edelman 公开开发,目前有超过 1000 名贡献者
  • 目标:构建一门免费的高级语言,它拥有 C 的速度、Ruby 的动态性、LISP 的元编程能力、Python 的通用性、R 的统计支持、MatLab 的线性代数支持以及 Perl 的字符串处理能力,同时还能支持大规模并行执行
  • 非常适合科学计算,同时也是一门通用语言(用于 Web 应用的 Genie 框架)

和许多语言一样,这三门语言都是在不满现状中诞生的 :)

好,很好。那么从适用场景来看,什么时候该用其中一门语言,而不是另外两门?

Python

  • 真正的通用语言(网站、脚本、科学计算)
  • 可用于许多不同用途:AI(TensorFlow)、科学计算(NumPy)脚本、网站(Django)、嵌入式系统(MicroPython)、与硬件交互(例如 Raspberry Pi)、游戏(EVE Online),Python 甚至上过火星
  • 非常适合用来学编程:资源丰富,社区庞大。关于如何编写 Pythonic 代码(即写出地道的 Python 代码,例如“显式优于隐式”和“可读性很重要”)有大量指导。许多操作系统默认就装好了它
  • 目前使用最广泛的语言之一,所以有大量文档、库和庞大的社区

R

  • R 的用途非常广泛,包括研究人员用它分析实验数据、大学用它教授统计学和数据分析、金融行业因为统计至关重要而使用它(例如保险)、零售业也是如此(Amazon 用 R 做数据分析),制造业也一样(John Deere 估算该生产多少备件)、美国国家气象局用它帮助预测天气和灾害、数据新闻(分析真实世界的数据并从中提炼意义,常常配合可视化),在医疗领域也大量使用,例如根据临床前试验判断一种药物的安全性

Julia:

  • 非常适合科学计算、数据挖掘、机器学习、线性代数和分布式计算。写法会让人感觉接近数学记号,因此从公式到代码相对容易
  • 分布式计算:任务(=协程)和通道让代码可以并行运行并相互通信,通过消息传递支持多进程(非常适合高性能计算)
  • 用于 Celeste 项目(一台运行 Julia 代码的超算,分析 178 TB 的天文数据)(这让 Julia 因此跻身 petaflop 俱乐部,当时只有 C、C++ 和 Fortran 在列,Julia 是第一门动态语言,每秒一千万亿次浮点运算,也就是 1 后面 15 个零)、Clima(气候建模联盟)汇集了来自 Caltech、MIT 和 NASA 喷气推进实验室的人,开发气候预测模型,还有 CERN、ASML

那从编程的角度看,它们有何不同?它们是函数式的、面向对象的,还是别的什么?

Python:

  • 动态且强类型
  • 多范式:命令式、函数式,但本质上是一门面向对象的语言(一切皆对象)
  • 默认解释器 CPython 先编译成字节码,然后在虚拟机中解释执行。PyPy 是 CPython 的替代品,它会即时编译成机器码

R:

  • 动态且强类型
  • 多范式,以函数式为核心,但也支持过程式或面向对象的风格

Julia:

  • 动态且强类型,即时编译
  • 多范式:命令式、面向对象(通过多重分派实现重载)、函数式(高阶函数、部分应用、管道运算符)
  • 代码在运行时即时编译

继续从编程的角度看这些语言,它们有没有什么特别突出的特性?

Python:

  • 语法宜人:对空白敏感,让作用域一目了然。代码通常易读,例如可读性强的布尔条件(and/or)
  • 富有表现力:用相当少的代码做很多事(列表推导式、生成器、装饰器)
  • 有海量可用于各种用途的库
  • 如前所述,它是一门真正的通用语言,可以用在许多不同的场景中

Julia

  • 多重分派。根据所有参数的类型来决定调用哪个函数(类似函数重载)
  • 动态但性能极佳。Julia 的性能可以与 Fortran 媲美,并接近 C。“普通”的代码往往性能就不错(不需要疯狂的黑客手段,反而鼓励把函数写小一些)。还有支持在 GPU 上运行代码的库
  • 分布式计算:任务(=协程)和通道让代码可以并行运行并相互通信,通过消息传递支持多进程(非常适合高性能计算)
  • 非常适合科学计算、数据挖掘、机器学习、线性代数和分布式计算。写法会让人感觉接近数学记号,因此从公式到代码相对容易

R:

  • 灵活的数据类型:向量是核心类型,连标量也是向量。向量可以带有与之关联的元数据(例如其元素的名字)。列表是异构的(可以含有不同类型的元素)。还有一种特殊的数据框类型,用于容纳一组向量(长度都相同)。
  • 向量化操作让向量的更新简洁、高效、易读
  • R 是一套集成的软件设施,用于数据操作、计算和图形显示。通过 RStudio 可以轻松地探索、可视化和操作数据。非常适合数据挖掘
  • 优秀的社区,友好而多元。R for Data Science 在线学习社区由各种水平的 R 学习者组成,大家共同努力提升技能。还有一个开放的 Slack 群组,成员可以保持联系,互相帮助解决问题。

如果有人拿不准四月该试哪一门,你会建议他们怎么做决定?

就像 IT 里的一切:视情况而定!在这个例子里,我觉得主要取决于你的目标和个人经验。

如果你编程经验还比较浅,对 AI 或机器学习感兴趣,或者想学一门能用在许多不同地方的语言,我大概会建议从 Python 开始: Python 可用的资源数量极其庞大,其中包括许多免费的在线课程 Python 在 AI 和机器学习领域随处可见 Python 可以用于非常多不同的用途 Python track 启用了学习模式,能帮你以有趣的方式掌握这门语言的核心概念

如果你对做统计工作感兴趣,想探索和可视化数据,或者对另一种处理数据的方式感到好奇,R 语言是个很好的选择: R 的数据类型基于数据的集合(向量/列表),操作可以轻松地作用在集合上(无需循环) RStudio 这个 IDE 非常适合探索和可视化数据 R 对统计分析有极佳的支持 R 能轻松地绘制数据图表

如果你对科学计算感兴趣,想并发地运行代码,非常在意性能,或者想学一门现代、优雅、与大多数其他语言都不太一样的语言,我会推荐 Julia:

  • 多重分派对很多人来说会很新鲜,而且威力无比
  • Julia 非常适合科学计算
  • Julia 的类型系统灵活而富有表现力
  • Julia 性能极佳
  • Julia 非常适合并发执行

当然,如果你有时间,我建议你把三门都试一遍!一门语言你不真正试试,就永远不知道自己会不会喜欢它。

2023年04月01日 · 觉得有用吗?