admin管理员组

文章数量:1645531

原文:TowardsDataScience

协议:CC BY-NC-SA 4.0

1:长度(A)被认为是有害的——或者如何使 Julia 代码“通用安全”

原文:https://towardsdatascience/1-length-a-considered-harmful-or-how-to-make-julia-code-generic-safe-ac7b39cfc2f0

照片由埃里克·维特索在 Unsplash 上拍摄

Julia 允许在相当抽象和通用的层次上编写代码,因此提供了强大的表达能力。然而,这种优势也给程序员带来了特殊的挑战。这篇文章展示了如何克服它们。

Julia 的几个语言概念,如用户可扩展的类型系统、参数类型、可选的类型声明和多重分派,使得编写非常通用的代码成为可能,并且可以应用于许多情况——甚至代码的作者也经常无法预料的情况。这些可能性也是 Julia 高度可组合性的支柱。

这是一个明显的优势,也是很多人喜欢 Julia 胜过其他编程语言的原因之一。但是这是有代价的,因为它扩大了可能出错的范围。所以在编写这样的代码时必须特别小心。

如果您编写的 Julia 代码只是供自己使用,因此能够控制传递的参数以及代码如何与其他包组合,那么您就不需要太担心这些问题。但是如果你写的代码被其他人使用(特别是公开可用的包,比如 Julia 注册表中的包),那么你需要记住这些方面。

我将给出三个常见的例子来展示这些挑战是怎样的,以及如何克服它们。这些信息中的大部分都可以在 Julia 文档中找到,但是我怀疑该语言的许多新手是否读过它们,因为在许多其他编程语言中,这些情况并不存在。那么,如果你不知道有一个问题,你为什么要去寻找答案呢?此外,最近关于话语的讨论表明,即使是经验丰富的 Julia 程序员有时也会落入这些陷阱。

数组

让我们从 Julia 中最常见的数据结构之一开始:Array s .(一维)数组乍一看与其他编程语言中的数组非常相似(可能除了索引是基于 1 的)。

你可以在Array上使用一堆预定义的函数,例如length(A)给你数组A中包含的元素个数。这提供了迭代数组并以如下方式打印每个元素的可能性:

for i in 1:length(A)
    println(A[i])
end

您可以找到另一种方法,使用函数eachindex(A)返回A的迭代器:

for i in eachindex(A)
    println(A[i])
end

第二个版本看起来更优雅,但除此之外,两个版本似乎可以互换。…这就是问题开始的地方。

事实上,如果你使用(具体的)类型Array的数组,这两种变体只有可以互换。ArrayAbstractArray的一个亚型。如果你允许AAbstractArray的任何其他子类型,你可能会遇到麻烦。AbstractArray不保证第一个元素在索引 1 处,也不保证最后一个元素在索引length(A)处。

因此1:length(A)必须被视为有害。

如果您使用OffsetArrays(另一个AbstractArray的子类型),您可以自由定义索引边界。以下语句创建一个包含 11 个(随机)元素的数组,索引从-5 到 5:

B = OffsetArray(rand(11), -5:5)*--> 11-element OffsetArray(::Vector{Float64}, -5:5) 
    with eltype Float64 with indices -5:5*

如果您应用1:length(B)-变量进行索引,将会出现错误,因为在这种情况下将使用索引值> 5。除此之外,索引不会从第一个元素开始,而是从第七个元素开始。

另一方面,eachindex(B) -variant 是安全的,因为它保证你得到一个迭代器,覆盖从第一个到最后一个的所有元素,不管数据结构使用哪种索引方式。

如果您不需要索引值(如示例中的情况),下面的变体也是安全的(因为它更简洁,所以是首选的):

for a in A
    println(a)
end

用线串

另一种常见的数据结构是String s,在 Julia 中被定义为一系列Char s。乍一看,String s 可以像字符数组一样使用(类似于 Java 或 C)。所以要访问字符串s = "Hello"中的第二个字符,你可以写c = s[2]。该操作后,变量c包含字母“e”。

您可以使用s[3]来访问s中“e”后面的字符(本例中为“l”)。

只要只使用 ASCII 字符,这就可以工作。但是在 Julia 中,Char可能是任何 Unicode 字符(UTF 8 编码)。这些字符可能需要多于一个字节的存储空间(与纯 ASCII 字符相反)。

对于 Unicode 字符,上面的例子不再适用:

u = “α = alpha”    # string with a Unicode-characteru[1]     --> 'α': Unicode U+03B1 (category Ll: Letter, lowercase)u[2]     --> **ERROR:** StringIndexError: invalid index [2], 
             valid nearby indices [1]=>'α', [3]=>' '

u(‘α’)中的第一个字母是一个(2 字节)Unicode 字符。因此u[2]不是可打印字符(而是第一个字符的一部分)。

要安全地索引任意 Unicode 字符串,您需要以下函数:

  • firstindex(u)u的最小指数
  • lastindex(u)u的最大指数
  • nextind(u, i) —索引i之后的下一个有效索引
  • prevind(u, i) —索引i之前的前一个有效索引

因此,要获得u(‘α’)中的第一个字符,然后是‘α’后面的下一个字符,您应该使用:

i = firstindex(u)   --> 1
u[i]                --> 'α': Unicode U+03B1 
                        (category Ll: Letter, lowercase)i = nextind(u,i)    --> 3
u[i]                --> ' ': ASCII/Unicode U+0020 
                        (category Zs: Separator, space)

为了安全地迭代一个字符串的所有元素,下面的表达式完成了这项工作(只有当您想要在一个字符串内来回移动时,才需要上述函数):

for c in u
    println(c)
end

类型声明

到目前为止,我们看到的两个例子处理的是您应该在适当的抽象级别上访问数据结构的情况。也就是说,对数据结构的访问不应该依赖于对其实现的知识或(更糟的)假设。

下一个例子提出了另一个主题:关于类型声明的使用。

在 Julia 中,类型声明是可选的,但它们有助于编译器生成最佳代码。编译器至少需要知道输入参数的具体类型,以便为算法生成高效的代码。基于这个起点,它可以推断出大多数情况下所有其他变量的类型。

另一方面,您希望您的代码尽可能通用,以使其适用于广泛的情况。这两个要求相互冲突。

让我们看一个例子来更清楚地说明这种情况。二维空间中的点的类型定义可能如下所示:

struct Point
    x
    y
end

这是这种定义的最一般的方式。但是通常我们希望在我们的Point上定义依赖于一些算术函数的函数,如下例所示:

function distance(a::Point, b::Point)
    sqrt((b.x - a.x)^2 + (b.y - a.y)^2)
end

为了保证这些算术函数可用于xy,我们必须将这些字段声明为Number类型。这是最通用(即最不具体)的声明:

struct Point
    x :: Number
    y :: Number
end

所以保持代码尽可能通用的需求通过Point的定义得到了满足。但是对于编译器来说并不是真正有用的。

当创建Point s 的实例时,我们可以使用Number的任何子类型,如Int8Int64Int128Float16Float32Complex{Float32}Rational{Int64}等。例如,如果我们想要用我们的Point类型在屏幕上表示像素,那么xyInt32值可能适合这个任务。为了对一些数学应用的点进行建模,我们可以使用Float64来表示真实值。对于这两个用例,多边形(表示为点的向量)的定义是:

pixel_poly = Vector{Point}()real_poly  = Vector{Point}()

两个表达式是相同的。这意味着编译器不知道在每种情况下需要什么样的内存表示,因此无法为该特定类型生成优化的代码。相反,它必须提供一个非常通用的结构,能够存储上述每个子类型。这样效率不高。

解决这一冲突的方法是使用(受约束的)参数类型,如下所示:

struct Point{T <: Number}
    x :: T
    y :: T
end

当创建一个Point的实例时,使用参数类型T仍然给了我们使用任何具体类型T的自由。声明<: Number将可能的类型限制为Number的子类型(同上)。

但是,如果我们需要一个特定的实例,我们现在也可以指定它的类型,并将多边形的两个定义写成:

pixel_poly = Vector{Point{Int32}}()real_poly  = Vector{Point{Float64}}()

使用(受约束的)参数类型代替抽象类型满足了我们的两个要求:类型的广泛适用性和能够通知编译器在特定用例中需要的具体类型。

结论

我们已经看到了编写泛型 Julia 代码的一些最常见的挑战,以及如何使其安全。

前两个例子表明,您必须理解数据类型提供的抽象,并使用与该抽象级别匹配的函数来访问它:

  • AbstractArray表示(在一维情况下)可以使用索引访问的元素序列。但是它没有断言最小和最大索引。
    只有具体子类型Array保证第一个索引为 1,最后一个索引为length(A)
  • String表示一系列的Char,但是它没有断言它们的大小相等。
    只有当您将应用程序限制为 ASCII 字符时,您才可以假定大小相等(一个字节)。

在所有这些情况下,Julia 都提供了一组丰富的函数来以一种适当(并且安全)的方式处理数据结构。

最后一个示例演示了如何将类型声明与参数类型结合使用,以尽可能保持代码的通用性,同时为编译器提供足够的信息来生成最佳代码。

当然,这些并不是你必须小心这些问题的唯一情况。但我认为这些例子很有代表性,希望我能提高对这些挑战的认识。

定义 2021 年的 10 个人工智能模型

原文:https://towardsdatascience/10-ai-models-that-have-defined-2021-7d804b87b10

未来将建立在这些基础上

Kirichay D 在 Shutterstock 上拍照

人工智能不断加速。每年我们都会读到大量的新闻,谈论新的人工智能模型,这些模型将彻底改变 X 行业或将人工智能推向新的高度。但是,信噪比很低。只有一堆令人印象深刻的突破值得铭记。

2021 年没有什么不同,这就是为什么我按时间顺序列出了今年最相关和最有影响力的车型。尽管研究和开发的路线多种多样,但有几个明显的趋势:大型语言模型变得更大,未来的顶级模型很可能是多模态的,对效率的追求正在得到有趣的结果。我用一小段描述了每个模型对该领域的主要影响。尽情享受吧!

开关变压器:第一个+1T 参数模型

**影响:**稀疏性支持将模型扩展到巨大的规模,这对于密集架构是不可行的,同时保持计算负担不变。

2021 年 1 月,谷歌发表了论文“开关变压器:通过简单有效的稀疏性扩展到万亿参数模型他们提出了一种新的语言模型架构,以证明模型可以增长到超过 1T 参数(开关变压器具有 1.7T 参数),同时保持计算成本稳定。

为了保持较低的计算要求,switch transformer 使用了由深度学习先驱 Geoffrey Hinton 共同发明的专家混合范式的变体。模型的参数被分成 2048 个专家,使得输入仅由一个专家处理。在任何给定时间,只有一小部分参数是活动的,即稀疏模型。

GPT-3 和大多数其他语言模型是密集的——它们使用整个模型来处理每个输入。通过利用稀疏性,开关变压器降低了计算成本,同时提高了精度和功耗。

一张图片胜过千言万语

影响: DALL E 利用丰富的自然语言创造出各种各样的图像。这是最早流行的多模式人工智能之一。

OpenAI 于 2021 年 2 月建造了 DALL E 。该模型以西班牙著名画家萨瓦尔多·达利和可爱的皮克斯机器人瓦力命名,是 GPT 3(120 亿参数)的小型版本,并在文本-图像对上接受训练,以“通过语言操纵视觉概念”

DALL E 采用自然语言书写的句子,并使用预期的含义生成图像。它的力量依赖于它的零射击能力;它可以执行没有经过训练的生成任务,而不需要例子。DALL E 创造性地利用了语言和图像相结合的可能性——例如,将高层次的概念融合到一幅图像中。用“竖琴做的蜗牛”或“鳄梨形状的扶手椅”来提示它,会给出你所期待的确切的,尽管世界上不存在任何类似的东西。

DALL E 加入了人工智能画家的行列——谷歌的 DeepDream 、 Ai-Da 、显见等等。创造力曾经是我们的专利,但现在不再是了。DALL E 已经证明,人工智能更接近于赋予“一张图胜过千言万语”这句话新的含义。

谷歌输入/输出大会:妈妈和 LaMDA

影响:类似妈妈的模特会简化在互联网上搜索的过程。LaMDA 是创造类似人类的对话式人工智能的最新一步。

谷歌一年一度的输入输出事件发生在 2021 年 5 月。技术高管展示了最新的产品和研究,其中 MUM (多任务统一模型)和 LaMDA 被描绘成明星。两种语言模型,没有什么好羡慕流行的 GPT-3 的。MUM 是搜索引擎的未来,而 LaMDA 是一个能够进行有趣对话的聊天机器人。

基于 Transformer 架构和以前的系统,如 BERT 和 Meena,谷歌建立了 MUM 和 LaMDA 其技术规格仍未披露。但是我们知道一些关于他们的事情。MUM 的使命是进一步增强谷歌的搜索引擎——可能会让 SEO 过时,正如我在之前的一篇文章中所说的。MUM 比 BERT(谷歌目前支持搜索引擎的力量)强大 1000 倍,可以处理跨语言、跨任务、最重要的是跨模式的自然语言复杂查询——它理解文本和图像。

LaMDA 以与人交流为导向。作为一个明智、具体、有趣和实事求是的聊天机器人,LaMDA 可以管理开放式对话——正如首席执行官桑德尔·皮帅在演示中通过让 LaMDA 扮演冥王星和纸飞机的角色向展示的那样。人类可以从一个句子中创造出一千条独特的路径。我们只需要做出选择,整个世界就会从那里出现。LaMDA 更接近于能够做同样的事情。

中国的语言人工智能市场:悟道 2.0,M6

**影响力:**这些模型为中国在人工智能研究、开发和效率方面达到第一做出了巨大贡献。

中国一直在努力在技术开发和研究方面赶上美国,人工智能是一个特别热门的领域。去年有两款车型引起了分析师的关注:武道 2.0(1.75 吨)和M6(10 吨)。它们基于在性能、计算成本降低和污染减少方面利用稀疏性的承诺。

2021 年 6 月,Wu Dao 2.0 害羞地亮相,声称它是有史以来最大的神经网络,规模是 GPT-3 的 10 倍。两者的主要区别是吴导的多模态性;作为一个通用的语言模型,它是第一个像 DALL E 或 MUM 那样利用多模态的语言。然而,性能方面没有太多的信息,因为北京人工智能研究院(BAAI)没有给出任何结果。(我的猜测是,该模型并没有被训练成收敛,而是作为一个实验来分析专家混合范式的力量)。

由阿里巴巴 DAMO 学院建设的 M6 经历了一个阶段性的发展过程。它于 6 月首次以 1T 参数作为多模式和多任务模型推出。然后,在 2021 年底,研究人员发表了一篇文章,概述了一个惊人的结果:在 10 万亿个参数下,新版本的 M6 在训练期间消耗的计算成本只有 GPT-3 的 1%——在效率和减少碳足迹方面达到了一个新的里程碑。

微软和英伟达联手:MT-NLG

影响:这是最大的密集语言模型,也是 Nvidia 和微软合作的第一个潜在的其他发展。

10 月,Nvidia 在其博客中发布消息称,他们已经与微软联手打造了(至今)最大的密集语言模型。MT-NLG 在 530B 参数上大于 GPT-3、J1-Jumbo 和 Gopher(尽管明显小于稀疏模型)。在大多数基准测试中,MT-NLG 比 GPT-3 具有更好的性能,直到最近,它仍然是我们拥有数据的顶级语言模型。

我把它列入这个名单的另一个原因是 Nvidia 和微软的联盟。两家大型科技公司都是人工智能领域的佼佼者。英伟达是图形处理器的头号制造商和提供商,微软在云服务和人工智能软件方面有着非常强大的影响力。这种伙伴关系的未来努力将值得关注。

GitHub Copilot:你的互惠生程序员

影响: GitHub Copilot 是程序员迈向自动化最枯燥重复任务的第一步。它最终也会成为一种威胁。

GitHub 的母公司微软和 OpenAI 联手创造了 GitHub Copilot ,许多开发者已经在日常工作中使用它。copilot——扩展了 GPT-3 强大的语言技能,并作为 OpenAI 编码模型 Codex 的基础——擅长编程。它可以跨语言工作,可以完成代码行,编写完整的函数,或者将注释转换成代码,还有其他功能。

一些用户指出由于版权和许可的潜在法律问题。副驾驶从哪里学的?使用它所有的完成是否安全?如果最终触犯了法律,该怪谁?但是不管它的大图限制,它是编码未来的一个重要里程碑。它很可能成为开发人员工具箱中的必备工具。

DeepMind 进入语言 AI 的入口:地鼠,复古

影响: Gopher 是目前排名第一的语言模型。复古证明,新技术可以提高效率(降低成本和碳足迹)数量级超过以前的模式。

DeepMind 这些年一直保持沉默,而全球的公司都参与了人工智能语言的爆炸。自从谷歌发明了 Transformer 架构以来,语言人工智能已经成为研究的主要焦点,超过了视觉、游戏和其他领域。作为主要的人工智能公司之一,DeepMind 的缺席令人惊讶。

2021 年 12 月,情况发生了变化。DeepMind 发表了三篇关于语言 AI 的论文。首先,他们提出了 Gopher ,一个 280B 参数密集模型,在 124 个任务中的 100 个任务中抹杀了能力——包括 GPT-3、MT-NLG 和 J1-Jumbo。一夜之间,DeepMind 不仅成为了强化学习的领导者,也成为了语言人工智能的领导者。Gopher 现在是有史以来无可争议的最好的语言模型。

第三篇论文更令人印象深刻。在 7B 参数下, RETRO (检索增强的 Transformer)是一个小一点的语言模型。然而,尽管它比 GPT-3 小 25 倍,但在各项基准测试中,它的性能不相上下。与 GPT-3 相比,DeepMind 通过该模型实现了 10 倍的计算成本降低。RETRO 使用一种检索机制,允许它实时访问大型数据库,避免模型必须记住所有的训练集。

这具有重要的后果。首先,它证明了新技术可以显著提高语言模型的效率。随着成本变得更可承受,这也有利于较小的公司参与进来。最后,它有助于减少人工智能对环境的影响。

如果你喜欢这篇文章,可以考虑订阅我的免费周报https://mindsoftomorrow.ck.page/!每周都有关于人工智能和技术的新闻、研究和见解!

您也可以使用我的推荐链接 这里 直接支持我的工作,成为中级会员,获得无限权限!😃

2023 年你应该知道的 10 个惊人的机器学习可视化

原文:https://towardsdatascience/10-amazing-machine-learning-visualizations-you-should-know-in-2023-528282940582

用较少的代码创建机器学习图的黄砖

戴维·皮斯诺伊在 Unsplash 上的照片

数据可视化在机器学习中起着重要的作用。

机器学习中的数据可视化用例包括:

  • 超参数调谐
  • 模型性能评估
  • 验证模型假设
  • 寻找异常值
  • 选择最重要的功能
  • 识别特征之间的模式和相关性

机器学习中与上述关键事物直接相关的可视化称为 机器学习可视化

创建机器学习可视化有时是一个复杂的过程,因为即使用 Python 也需要编写大量代码。但是,由于 Python 的开源 Yellowbrick 库,即使复杂的机器学习可视化也可以用较少的代码创建。该库扩展了 Scikit-learn API,并为视觉诊断提供了 Scikit-learn 没有提供的高级功能。

今天,我将详细讨论以下类型的机器学习可视化,它们的用例以及 Yellowbrick 实现。

**Yellowbrick ML Visualizations
-----------------------------** 01\. [Priniciapal Component Plot](#4662)
02\. [Validation Curve](#7375)
03\. [Learning Curve](#3a38)
04\. [Elbow Plot](#fd50)
05\. [Silhouette Plot](#3848)
06\. [Class Imbalance Plot](#f055)
07\. [Residuals Plot](#a31d)
08\. [Prediction Error Plot](#8e09)
09\. [Cook’s Distance Plot](#e1a7)
10\. [Feature Importances Plot](#9389)

黄砖—快速入门

装置

Yellowbrick 的安装可以通过运行以下命令之一来完成。

  • pip 软件包安装程序:
pip install yellowbrick
  • 康达包装安装程序:
conda install -c districtdatalabs yellowbrick

使用黄砖

Yellowbrick 可视化工具具有类似 Scikit-learn 的语法。可视化工具是从数据中学习以产生可视化效果的对象。它通常与 Scikit-learn 估计器一起使用。为了训练可视化工具,我们调用它的 fit()方法。

保存情节

为了保存使用 Yellowbrick visualizer 创建的绘图,我们调用 show()方法如下。这将把图保存为磁盘上的 PNG 文件。

visualizer.show(outpath="name_of_the_plot.png")

1.主成分图

使用

主成分图在 2D 或 3D 散点图中可视化高维数据。因此,该图对于识别高维数据中的重要模式极其有用。

黄砖实施

用传统的方法创造这个情节是复杂和费时的。我们需要首先对数据集应用 PCA,然后使用 matplotlib 库来创建散点图。

相反,我们可以使用 Yellowbrick 的 PCA visualizer 类来实现相同的功能。它利用主成分分析方法,减少了数据集的维数,并用 2 或 3 行代码创建了散点图!我们需要做的就是在 PCA()类中指定一些关键字参数。

让我们举个例子来进一步理解这一点。在这里,我们使用乳腺癌数据集(见最后的引文),它有 30 个特征和两个类别的 569 个样本(恶性良性)。由于数据的高维数(30 个特征),除非我们对数据集应用 PCA,否则不可能在 2D 或 3D 散点图中绘制原始数据。

以下代码解释了我们如何利用 Yellowbrick 的 PCA 可视化工具来创建 30 维数据集的 2D 散点图。

(作者代码)

主成分图——2D(图片由 autr 提供)

我们还可以通过在 PCA()类中设置projection=3来创建一个 3D 散点图。

(作者代码)

主成分图— 3D (图片由作者提供)

PCA 可视化工具最重要的参数包括:

  • 小数位数: bool,默认True。这表示数据是否应该缩放。我们应该在运行 PCA 之前缩放数据。点击了解更多关于的信息。
  • 投影: int,默认为 2。当projection=2出现时,一个 2D 散点图被创建。当projection=3时,创建一个 3D 散点图。
  • **类:**列表,默认None。这表示 y 中每个类的类标签。类名将作为图例的标签。

2.验证曲线

使用

验证曲线描绘了单个超参数对训练和验证集的影响。通过查看曲线,我们可以确定模型对于给定超参数的指定值的过拟合、欠拟合和恰到好处的条件。当一次有多个超参数要调整时,不能使用验证曲线。相反,你可以使用网格搜索或随机搜索。

黄砖实施

使用传统方法创建验证曲线既复杂又耗时。相反,我们可以使用 Yellowbrick 的 ValidationCurve 可视化工具。

为了在 Yellowbirck 中绘制验证曲线,我们将使用相同的乳腺癌数据集构建一个随机森林分类器(参见最后的引文)。我们将绘制随机森林模型中 max_depth 超参数的影响。

以下代码解释了我们如何利用 Yellowbrick 的 ValidationCurve 可视化工具,使用 breast_cancer 数据集创建验证曲线。

(作者代码)

验证曲线(图片作者提供)

最大深度值为 6 之后,模型开始过度拟合。当max_depth=6时,该模型非常适合训练数据,并且在新的看不见的数据上也推广得很好。

验证曲线可视化工具最重要的参数包括:

  • **估计器:**这可以是任何 Scikit-learn ML 模型,如决策树、随机森林、支持向量机等。
  • **参数名称:**这是我们想要监控的超参数的名称。
  • **参数范围:**这包括参数名称的可能值。
  • cv: int,定义交叉验证的折叠数。
  • **评分:**字符串,包含模型的评分方法。对于分类,精度优先。

3.学习曲线

使用

学习曲线绘制了训练和验证误差或准确度与时期数或训练实例数的关系。您可能认为学习曲线和验证曲线看起来是一样的,但是迭代次数绘制在学习曲线的 x 轴上,而超参数的值绘制在验证曲线的 x 轴上。

学习曲线的用途包括:

  • 学习曲线用于检测模型的欠拟合过拟合恰到好处情况。
  • 当找到神经网络或 ML 模型的最佳学习速率时,学习曲线用于识别低收敛振荡**振荡发散适当收敛* 场景。*
  • 学习曲线用于查看我们的模型从添加更多训练数据中获益多少。以这种方式使用时,x 轴显示训练实例的数量。

黄砖实施

使用传统方法创建学习曲线既复杂又耗时。相反,我们可以使用 Yellowbrick 的学习曲线可视化工具。

为了在 Yellowbirck 中绘制一条学习曲线,我们将使用相同的乳腺癌数据集构建一个支持向量分类器(参见最后的引文)。

以下代码解释了我们如何利用 Yellowbrick 的 LearningCurve 可视化工具,使用 breast_cancer 数据集创建验证曲线。

(作者代码)

学习曲线(图片作者提供)

该模型不会从添加更多的训练实例中受益。该模型已经用 569 个训练实例进行了训练。在 175 个训练实例之后,验证准确度没有提高。

学习曲线可视化工具最重要的参数包括:

  • ***估计器:*这可以是任何 Scikit-learn ML 模型,例如决策树、随机森林、支持向量机等。
  • cv: int,定义交叉验证的折叠数。
  • ***评分:*字符串,包含模型的评分方法。对于分类,精度优先。

4.肘图

使用

肘图用于选择 K-Means 聚类中的最佳聚类数。该模型最适合折线图中肘形出现的点。肘是图表上的拐点。

黄砖实施

使用传统方法创建弯头图既复杂又耗时。相反,我们可以使用 Yellowbrick 的 KElbowVisualizer。

为了在 Yellowbirck 中绘制学习曲线,我们将使用 iris 数据集构建 K-Means 聚类模型(参见最后的引文)。

下面的代码解释了我们如何利用 Yellowbrick 的 KElbowVisualizer,使用 iris 数据集创建肘图。

(作者代码)

肘情节(图片由作者提供)

**弯头出现在 k=4 处(用虚线标注)。该图表明该模型的最佳聚类数是 4。换句话说,该模型很好地拟合了 4 个聚类。

KElbowVisualizer 最重要的参数包括:

  • 估计量: K 均值模型实例
  • k: int 或者 tuple。如果是整数,它将计算(2,k)范围内的分类分数。如果是元组,它将计算给定范围内的聚类的分数,例如,(3,11)。

5.轮廓图

使用

侧影图用于选择 K-Means 聚类中的最佳聚类数,也用于检测聚类不平衡。该图提供了比肘图更精确的结果。

黄砖实施

用传统方法创建轮廓图既复杂又耗时。相反,我们可以使用 Yellowbrick 的轮廓可视化工具。

为了在 Yellowbirck 中创建一个剪影图,我们将使用 iris 数据集构建一个 K-Means 聚类模型(参见最后的引文)。

以下代码块解释了我们如何利用 Yellowbrick 的 SilhouetteVisualizer,使用具有不同 k(聚类数)值的 iris 数据集创建轮廓图。

k=2

(作者代码)

具有 2 个聚类(k=2)的轮廓图(图片由作者提供)

通过更改 KMeans()类中的聚类数,我们可以在不同的时间执行上述代码,以创建 k=3、k=4 和 k=5 时的剪影图。

k=3

具有 3 个聚类的轮廓图(k=3) (图片由作者提供)

k=4

具有 4 个聚类(k=4) 的轮廓图,(图片由作者提供)

k=5

具有 4 个聚类的轮廓图(k=5) (图片由作者提供)

轮廓图包含每个簇的一个刀形。每个刀形都是由代表聚类中所有数据点的条形创建的。因此,刀形的宽度代表了集群中所有实例的数量。条形长度表示每个实例的轮廓系数。虚线表示剪影得分—来源: 动手 K-Means 聚类 (我写的)。

具有大致相等宽度的刀形的图告诉我们,聚类是平衡的,并且在每个聚类中具有大致相同的实例数量——这是 K-Means 聚类中最重要的假设之一。

当刀形条延伸到虚线时,聚类被很好地分开,这是 K-Means 聚类的另一个重要假设。

当 k=3 时,团簇很好地平衡并且很好地分离。因此,我们示例中的最佳集群数是 3。

轮廓可视化工具最重要的参数包括:

  • 估计器: K 均值模型实例
  • 颜色: string,用于每种刀形的颜色集合。“yellowbrick”或 Matplotlib 颜色映射字符串之一,如“Accent”、“Set1”等。

6.阶级不平衡图

使用

类别不平衡图检测分类数据集中目标列中类别的不平衡。

当一个类的实例明显多于另一个类时,就会发生类不平衡。例如,与垃圾邮件检测相关的数据集有 9900 个“非垃圾邮件”类别的实例,而只有 100 个“垃圾邮件”类别的实例。该模型将无法捕获少数类别(垃圾邮件类别)。这样做的结果是,当一个阶层失衡时,模型将无法准确预测少数阶层—来源: 在幕后偷偷发生的 20 大机器学习和深度学习错误 (我写的)。

黄砖实施

用传统方法创建类不平衡图既复杂又耗时。相反,我们可以使用 Yellowbrick 的 ClassBalance 可视化工具。

为了绘制 Yellowbirck 中的等级不平衡图,我们将使用乳腺癌数据集(分类数据集,参见最后的引文)。

以下代码解释了我们如何利用 Yellowbrick 的 ClassBalance 可视化工具,使用 breast_cancer 数据集创建一个类别不平衡图。

(作者代码)

阶层失衡剧情(图片由作者提供)

恶性类中有 200 多个实例,在良性类中有 350 多个实例。因此,我们在这里看不到太多的类不平衡,尽管实例在两个类中的分布并不均匀。

ClassBalance 可视化工具最重要的参数包括:

  • ***标签:*列表,目标列中唯一类的名称。

7.残差图

使用

线性回归中的残差图用于通过分析回归模型中的误差方差来确定残差(观察值-预测值)是否不相关(独立)。

残差图是通过绘制残差和预测值来创建的。如果预测值和残差之间存在任何类型的模式,则表明拟合的回归模型并不完美。如果这些点围绕 x 轴随机分布,回归模型与数据吻合得很好。

黄砖实施

使用传统方法创建残差图既复杂又耗时。相反,我们可以使用 Yellowbrick 的 ResidualsPlot 可视化工具。

为了在 Yellowbirck 中绘制残差图,我们将使用Advertising*(Advertising . CSV,参见最后的引文)数据集。*

以下代码解释了我们如何利用 Yellowbrick 的 ResidualsPlot 可视化工具,使用广告数据集创建残差图。

(作者代码)

残差图(图片由作者提供)

在残差图中,我们可以清楚地看到预测和残差之间的某种非线性模式。拟合的回归模型并不完美,但已经足够好了。

残差图可视化器最重要的参数包括:

  • ***估计量:*这可以是任何 Scikit-learn 回归量。
  • hist: bool,默认True。是否绘制残差直方图,该直方图用于检查另一个假设-残差近似正态分布,平均值为 0,标准偏差固定。

8.预测误差图

使用

线性回归中的预测误差图是一种用于评估回归模型的图形方法。

预测误差图是通过将预测值与实际目标值进行对比来创建的。

如果模型做出非常准确的预测,这些点应该在 45 度线上。否则,这些点会分散在该直线周围。

黄砖实施

用传统方法创建预测误差图既复杂又耗时。相反,我们可以使用 Yellowbrick 的 PredictionError 可视化工具。

为了在 Yellowbirck 中绘制预测误差图,我们将使用广告* ( 广告. csv ,参见引用结尾)数据集。*

以下代码解释了我们如何利用 Yellowbrick 的 PredictionError 可视化工具,使用 Advertising 数据集创建残差图。

(作者代码)

预测误差图(图片由作者提供)

点不完全在 45 度线上,但模型足够好。

PredictionError 可视化工具最重要的参数包括:

  • ***估计量:*这可以是任何 Scikit-learn 回归量。
  • 身份: bool,默认True。是否画 45 度线。

9.库克距离图

使用

库克距离衡量实例对线性回归的影响。具有较大影响的实例被视为异常值。含有大量异常值的数据集不适合未经预处理的线性回归。简单地说,库克距离图用于检测数据集中的异常值。

黄砖实施

用传统方法创建库克距离图既复杂又耗时。相反,我们可以使用 Yellowbrick 的 CooksDistance 可视化工具。

为了在 Yellowbirck 绘制库克距离图,我们将使用广告* ( 广告. csv ,参见引用在最后)数据集。*

以下代码解释了我们如何利用 Yellowbrick 的 CooksDistance 可视化工具,使用广告数据集创建一个 Cook’s distance 图。

(作者代码)

库克的距离图(图片由作者提供)

有一些观察延长了阈值(水平红色)线。他们是局外人。所以,我们应该在建立回归模型之前准备好数据。

CooksDistance 可视化工具最重要的参数包括:

  • draw_threshold: bool,默认True。是否画门槛线。

10.特征重要性图

使用

特征重要度图用于选择产生 ML 模型所需的最少重要特征。由于不是所有的特性都对模型有相同的贡献,我们可以从模型中删除不太重要的特性。这将降低模型的复杂性。简单的模型易于训练和解释。

要素重要度图显示了每个要素的相对重要度。

黄砖实施

使用传统方法创建特征重要性图既复杂又耗时。相反,我们可以使用 Yellowbrick 的 FeatureImportances 可视化工具。

为了在 Yellowbirck 中绘制特征重要性图,我们将使用包含 30 个特征的乳腺癌数据集(见最后的引文)。

以下代码解释了我们如何利用 Yellowbrick 的 FeatureImportances 可视化工具,使用 breast_cancer 数据集创建特征重要度图。

(作者代码)

特征重要性图(图片由作者提供)

并非数据集中的所有 30 个要素都对模型有很大贡献。我们可以从数据集中移除带有小横条的特征,并用所选特征重新装配模型。

FeatureImportances 可视化工具最重要的参数包括:

  • ***估计器:*任何支持feature_importances_属性或coef_属性的Scikit-learn 估计器。
  • ***相对:*布尔,默认True。是否以百分比形式绘制相对重要性。如果False,显示特征重要性的原始数值分数。
  • ***绝对:*布尔,默认False。是否通过避免负号只考虑系数的大小。

ML 可视化的使用总结

  1. 主成分图: PCA() ,用途——在 2D 或 3D 散点图中可视化高维数据,可用于识别高维数据中的重要模式。
  2. 验证曲线: 验证曲线(),用途——绘制单个超参数对训练和验证集的影响。**
  3. 学习曲线: LearningCurve() ,用途——检测模型的欠拟合*、过拟合恰到好处条件,识别低收敛*、振荡振荡发散适当收敛
  4. ****肘图:kelbow visualizer(),用法—选择 K-Means 聚类中的最优聚类数。
  5. ****Silhouette Plot:Silhouette visualizer(),用法——选择 K-Means 聚类中的最优聚类数,检测 K-Means 聚类中的聚类不平衡。
  6. 类不平衡图: ClassBalance() ,用法-检测分类数据集中目标列中类的不平衡。
  7. 残差图: 残差图(),用法-通过分析回归模型中误差的方差,确定残差(观察值-预测值)是否不相关(独立)。
  8. 预测误差图: PredictionError() ,用法-用于评估回归模型的图形方法。
  9. 库克距离图: CooksDistance() ,用法-根据实例的库克距离检测数据集中的异常值。
  10. 特征重要度图: 特征重要度(),用法-根据每个特征的相对重要度选择所需的最少重要特征,以生成一个 ML 模型。

今天的帖子到此结束。

如果您有任何问题或反馈,请告诉我。

阅读下一篇(推荐)

  • 黄砖,使用单行代码可视化特性的重要性

**https://rukshanpramoditha.medium/yellowbrick-for-visualizing-features-importances-using-a-single-line-of-code-33c87572eada

  • 解释验证曲线——绘制单个超参数的影响
  • 绘制学习曲线以分析神经网络的训练性能

https://rukshanpramoditha.medium/plotting-the-learning-curve-to-analyze-the-training-performance-of-a-neural-network-4a35818d01f2

  • 动手 K 均值聚类

https://medium/mlearning-ai/k-means-clustering-with-scikit-learn-e2af706450e4

支持我当作家

我希望你喜欢阅读这篇文章。如果你愿意支持我成为一名作家,请考虑 注册会员 以获得无限制的媒体访问权限。它只需要每月 5 美元,我会收到你的会员费的一部分。

https://medium/membership/@rukshanpramoditha

非常感谢你一直以来的支持!下一篇文章再见。祝大家学习愉快!

乳腺癌数据集信息

  • 引用: Dua,d .和 Graff,C. (2019)。UCI 机器学习知识库[http://archive . ics . UCI . edu/ml]。加州欧文:加州大学信息与计算机科学学院。
  • 来源:https://archive . ics . UCI . edu/ml/datasets/breast+cancer+Wisconsin+(诊断)
  • 许可: 威廉·h·沃尔伯格(威斯康星大学
    普通外科学系)w·尼克街(威斯康星大学
    计算机科学系)奥尔维·l·曼加里安(威斯康星大学计算机科学系)持有该数据集的版权。尼克街在知识共享署名 4.0 国际许可(CC BY 4.0)下向公众捐赠了这个数据集。您可以在此了解有关不同数据集许可类型的更多信息。

虹膜数据集信息

  • 引用: Dua,d .和 Graff,C. (2019)。UCI 机器学习知识库[http://archive . ics . UCI . edu/ml]。加州欧文:加州大学信息与计算机科学学院。
  • 来源:https://archive.ics.uci.edu/ml/datasets/iris
  • 许可: R.A. Fisher 拥有该数据集的版权。迈克·马歇尔在知识共享公共领域专用许可 ( CC0 )下向公众捐赠了这个数据集。您可以在此了解有关不同数据集许可类型的更多信息。

广告数据集信息

  • 来源:https://www.kaggle/datasets/sazid28/advertising.csv
  • **许可:**该数据集在知识共享公共领域专用许可 ( CC0 )下公开可用。您可以在此了解有关不同数据集许可类型的更多信息。

参考

  • https://www.scikit-yb/en/latest/
  • https://www.scikit-yb/en/latest/quickstart.html
  • https://www.scikit-yb/en/latest/api/index.html

鲁克山普拉莫迪塔
2022–11–04**

要避免的 10 个可怕的 Python 错误

原文:https://towardsdatascience/10-atrocious-python-mistakes-to-avoid-12fb228d60a1

Python 程序员经常犯的一些常见错误,但可能不应该犯

(图片由 Pixabay 上的 Klinkow 提供)

介绍

在我们编程和/或数据科学职业生涯中的某个时刻,我们可能不得不学习一门新语言,并了解它的所有知识。在许多情况下,我们可以用多种方式来解决问题。然而,当谈到编程时,有时有“正确的”方法来处理一些事情,有时有“错误的”方法来处理一些事情。Python 也不例外,如果说有什么事情倾向于仅仅因为它的可访问性而将这些问题变成现实的话;任何说英语的人都可能会假设 Python 中最基本的东西,当有多种更好的方法可供选择时,很容易陷入一种技术来解决问题。

今天,我想看看一些新的 Python 程序员做的一些糟糕的事情,并谈谈为什么有更好的方法来处理和解决他们的 Python 代码中的问题。虽然其中一些不一定是功能性的,这意味着您的代码可能会以两种方式运行,但它们确实提供了更好地了解的好处。此外,他们中的许多人使代码更加简洁,或者有时加快了代码的速度。不管是哪一种情况,编程技能都在不断提高,这些是我的一些建议,它们将改善您的 Python 技能中包含的外观和技术!

№1:将 Python 视为一种完全解释的语言

虽然在一些数据科学场景中,Python 将被更多地解释——例如当我们使用 Jupyter 内核时,许多人可能会惊讶地发现 Python 只是被部分地解释了。语言不仅被解释,而且被编译。在您使用 Python 的经验中,您可能已经注意到。pyc 文件和 Python 文件一起运行。这些文件包含编译后的 Python,信不信由你。

然而,还有另一个重要的区别。通常,编译器将代码放入一个新文件中,该文件模拟汇编中处理器的调用。然而,在 Python 的情况下,编译后的版本是字节码——这意味着它们仍然需要 C 来管理内存并推送到注册表,但是它们不需要在每次运行 Python 代码时都进行解释。请记住,虽然这种区别更多的是一种想法,而不是一个实际问题,但在您按下 return 键后,改变您对 Python 工作方式的看法(至少在一定程度上)是一个好主意。

№2:总是在范围内循环

我认为在线教程的一个问题是在范围内循环,在线教程只是展示一个选择的例子。简而言之,我们对范围的循环太多了。当你来自另一种语言时,这很有意义,因为在其他语言中,我们通常只考虑循环遍历索引,而不是元素。然而,在 Python 中,事实并非如此,最终会比您想象的更多地阻碍您的代码。

相反,您可以直接循环元素,就像这样

x = [5, 10, 15]
for n in x:
    pass

范围通常也用于一次获取多个列表的元素,但是如果是这种情况,使用 enumerate()或 zip()可能会更好。有很多方法可以完成这类事情,但是如果你马上索引你的值,迭代枚举的全部意义就是索引你的结构,那么让这些值成为循环不变量就更有意义了。

№3:导入*

我认为网上教程中的一个错误是引入 star 的想法。导入 star 有其使用案例,例如,我认为在笔记本中从 NumPy 导入 star 很有意义,因为如果您正在处理矩阵等,您可能需要 NumPy 中的所有内容。导入 star 的问题是,我们现在从这个模块全局定义名字,用新的定义在运行时环境中乱丢东西,其中大部分我们可能不会使用。

即使这样,您也可以在 Python 中给名称空间起别名,所以如果您想导入整个模块,那么只给模块起别名更有意义。通过别名,您可以将名称空间/模块的调用转换成一两个字母,因此拥有所有这些全局定义的方法、值等就没有什么意义了。那可能最终会打乱你的通话。而是直接导入或者别名如下。

import numpy as np
from numpy.linalg import dot

№4:字符串串联

在 Python 中,字符串连接非常简单,用加法运算符就可以完成。虽然这绝对是一种很好的方法,并且使用这个操作符连接字符串没有任何问题,但是在某些情况下使用 f 字符串可能更有意义。当然,有些时候使用加法运算符更有意义,因为有时您只是连接一个或两个值,例如,如果运算符版本用于类似这样的情况,我不会发疯:

"hi" + "hi"

然而,如果你有很多值,不管什么原因,使用 f 字符串更有意义。这些类型的字符串允许您插入带有某种程度插值的字符串。

f"Hello my name is {name} and I like {food}"

№5:手动关闭文件

新的 Python 程序员犯的一个大错误是以这样的方式处理文件:

file = open("whatever.txt", 'r')
file.write("spaghetti")
file.close()

这种方法的问题是,如果在创建文件对象和关闭文件之间出现任何异常,文件将保持打开状态。相反,使用 with 块是一个更好的主意。这实际上不仅仅是文件的情况,通常是流的情况,尤其是开放这种语法是一个好主意。这是因为每当我们这样做的时候,我们就创建了一个新的范围级别,在这个范围中定义了文件,在语句运行之后,这个范围就被删除了,因此,在那个时刻创建的所有对象都被立即删除了。相反,应该这样编写上面的示例:

with open("whatever.txt", 'r') as file:
    file.write("spaghetti")
    file.close()

№6:使用裸露例外

另一个新手常犯的错误是在 try/except 块中使用简单的异常。这是一个坏主意的原因是因为这些异常是开放式的。每当一个例外是开放式的,我们就为任何可能出现的例外留有余地。例如,我们可以在块下处理一个中断异常。然后我们的代码无缘无故地运行,因为它被中断了,而不是中断简单地停止我们正在做的事情,它做得更多。相反,您应该在其中插入一个真正的异常。

№7:可变默认值

我经常看到 Python 代码不应该做的事情是为位置参数提供可变的默认值。参数默认值是在定义给定函数时设置的,而不是在运行时设置的。

def hello(x : int, y = []):

这意味着对这个函数的每个调用现在都共享 y,所以如果我们要向 y 追加一些东西,那么我们 hello()函数的每个后续调用都将使用这个 y 作为缺省值,我们将使用一个现在充满值的 y。相反,应该将它设置为 None 作为占位符,然后用一个有条件的。

def hello(X : int, y = None):
    if y is None:
        y = []

№8:错过理解

理解是完成很多事情的捷径。此外,作用域和类似的东西可以在我们不使用理解的时候打开,这样只会耗尽内存和编译时间。我们可以对列表、字典甚至生成器使用理解。下面是一个简单的列表理解的例子,与迭代的对应部分相比,它节省了时间:

lst = [5 * 5 for _ in range(1, 10)]lst = []
for _ in range(1, 10):
    lst.append(5 * 5)

№9:使用==检查类型

在 Python 中可以做的一件愚蠢的事情是用==一前一后地调用 type()方法,以便检查特定对象的类型。首先,在这种情况下使用 is 关键字可能是一个更好的主意,但这可能有问题的另一个原因是 Python 将子类表示为同一个类,所以如果我们问一个命名的元组是否是元组,我们会得到 true——尽管从技术上讲这不是元组。我同意;Python 可以使用某种单一调度系统,它要求参数在提供时是某种类型,而不是在函数的后面,然而,不管我们认为什么可能更好,这仍然是事实。也就是说,在某些情况下,您可能希望像这样检查您的类型,但在大多数情况下,这是绝对应该避免的。

if typeof(x) == tuple:
    pass

根据 Liskov 替换原则,子类型应该能够替换其父类型。这种用==检查类型的想法直接违反了这个原则。我不相信所有这些花哨的标签和定义,但肯定有理由认为这是一个坏主意。相反,您可能应该使用 isinstance()方法,该方法能够直接检查给定的 pyobject 是否是构造函数的实例。

if isinstance(x, tuple):

№10:单身人士的平等

我长期以来犯的一个错误是检查平等性而不是同一性。按位相等运算符==,是我们熟悉的东西,而且它很有效,所以很多人最终都这么做是有道理的。但是,如果我们想检查某个东西是真、假还是被定义为无,我们应该使用 is。这是因为 is 和==在语义上是不同的,虽然它们可能都在这些场景中工作,但是一个对另一个的使用对于代码的逻辑是很重要的。

if x is None

结论

Python 是一种很棒的编程语言,但是结合吸收少量代码和简单地不知道任何更好的东西,它确实让你很容易暴露自己没有经验。此外,有些事情你可以继续以更糟糕的方式去做,导致错误,或者在某些情况下是错误的,但在其他情况下不是,即使你已经非常有经验了。

要明确的是,对于其中的一些人来说,犯这些错误并没有什么错。您的代码可能仍然会运行,但您的代码也会脱颖而出。像这样的编程可能会很成问题。感谢您阅读这篇文章,我希望它对您复习 Python 技巧有所帮助,并为您可能偶然学到的东西提供更多的背景知识!

Docker 容器入门的 10 个命令

原文:https://towardsdatascience/10-commands-to-get-started-with-docker-containers-deffdcbf90fe

安心构建、交付和部署您的应用

伊恩·泰勒在 Unsplash 上拍照

Docker 是一个很好的工具,可以很容易地开发你的应用程序,将它们装入容器并部署到任何地方。

在我作为一名数据科学家的工作中,每当我需要将一个具有多种底层服务(如后端、数据库、前端等)的应用程序打包成一个我可以运行、更新、停止、共享并明确部署到任何云的映像时,我都会频繁地使用 Docker:IT 界从未见过这样的灵活性。

在这篇文章中,我分享了一些我经常用来操作 Docker 容器的 Docker 命令。虽然这不是对 Docker 的全面介绍,但它至少应该给你一些做大事的基础知识。

👉如果你是一名数据科学家,打算转向生产领域,让自己的应用在本地笔记本之外获得第二次生命,那么学习 Docker 是一个不错的选择。

我希望你都准备好了。让我们开始吧🏊

这篇文章假设读者对 Docker 的基本概念有一点熟悉,比如 Docker 客户端守护进程图像容器主机Docker 文件等。如果你不熟悉这些术语,我强烈建议你查看官方文件的概述部分:最多两分钟。

1 —构建 Docker 映像

“一个图像是一个只读模板,带有创建 Docker 容器的指令。通常,一个图像是基于另一个图像的,并有一些额外的定制。例如,您可以构建一个基于ubuntu映像的映像,但是安装 Apache web 服务器和您的应用程序,以及运行您的应用程序所需的配置细节。”
—资料来源:Docker docs 。

为了便于学习,我们将构建并使用一个自定义的 Docker 图像,而不是从注册表中提取一个图像(将注册表想象成一个存储 Docker 图像的中心位置,类似于 Github,但用于图像)

这个映像封装了一个 Python 3.7 环境,它拥有在端口 80 上运行 Flask API 所需的一切。

为了构建这个 Docker 映像,我们需要在 Docker 文件中定义一系列指令:本文不会涉及 Docker 文件命令的细节。要了解更多,我建议你查看这个链接。

我们将使用的 docker 文件如下:它基本上是一组连续的指令,包含用户在命令行上调用的所有命令来组合一个图像。

让我们一行一行地理解这个 does 文件的作用:

  • 它首先提取一个封装了轻量级 python 3.7 环境的基础映像
  • 它设置了 Flask 应用程序将在容器上运行的工作目录
  • 它将 requirements.txt 文件从主机复制到容器中(即在工作目录中)
  • 它运行pip来安装 Python 需求
  • 它将当前目录的内容(尤其是app.py文件)复制到容器中
  • 它表示容器在运行时正在监听网络端口 80
  • 当图像运行时,它执行 Python 代码

我们将要运行的 Python 代码是一个简单的 hello-world Flask API,没有什么特别的。

要构建图像并用特定的名称标记它(我选择了flask_image,运行以下命令:

docker build -t flask_image

一旦构建开始执行,它会检查 over 文件中的每个步骤。

这里肯定有很多内容,所以我将跳过细节,以免你不知所措。不过如果你有兴趣的话,我推荐你查看一下这个 章节

作者截图

2 —运行 Docker 容器

容器是图像的可运行实例。您可以使用 Docker API 或 CLI 创建、启动、停止、移动或删除容器。您可以将容器连接到一个或多个网络,为其附加存储,甚至根据其当前状态创建新的映像。”—资料来源:Docker docs 。

一旦构建了 Docker 映像,您可以首先检查它是否存在于您的文件系统中。

作者截图

然后,您可以运行它:这将创建一个容器。如果您再次运行映像,这将创建另一个容器,依此类推。事实上,正如官方文档所指出的,容器只不过是映像 的一个 运行实例。

让我们通过运行我们的映像来运行一个容器:

作者截图

正如所料,这个容器触发一个监听 TCP 端口 80 的 Flask 服务器。

太好了!但是似乎我们不能在不杀死容器的情况下退出控制台。如果我们能在后台运行容器,那就太好了。

3-在后台运行容器

大多数时候,你的容器需要作为服务在后台运行。这可能是一个类似我们正在使用的 API,也可能是一个数据库、代理服务器、React 应用程序等。

你可以这样做:你只需添加-d(分离的)选项:

docker run -d flask_image

作者截图

要检查容器是否确实在后台运行,可以使用列出正在运行的容器的ps Docker 命令。

作者截图

现在,容器正在运行并提供一个令人惊叹的 API(我们可以看到端口号被打印到控制台),我们是否可以从外部(即从主机)访问它,并开始向它发送查询?

4 —映射容器和主机之间的端口

为了让主机可以访问我们的 Flask API,我们需要将当前容器的端口(80)映射到主机上的一个可用端口。让我们挑选,说… 1234

语法如下:

docker run -p 1234:80 flask_image

如果我们点击 http://localhost :1234,Chrome 表明这个 API 确实可以从主机访问。

作者截图

如果我们多次点击刷新按钮,我们可以看到容器上的 HTTP 日志。

作者截图

您也可以通过添加-d选项在后台运行该命令:

docker run -d -p 1234:80 flask_image

现在您已经有了一个可以从容器外部访问的运行 API。

5-停止容器运行

假设您在后台运行一个容器,现在您想停止它。

首先,使用ps查找它的id:

作者截图

并在以下命令中使用它:

docker stop 11bca8ee1f8c

作者截图

通过再次运行ps,容器不再可见。

作者截图

但是,您仍然可以将其视为已停止的容器(以及其他先前已停止的容器):

docker ps -a

作者截图

6-启动停止的容器

给定它的 id,您可以用docker start启动一个停止的容器

你只需要提供它的 id:

docker start 11bca8ee1f8c

7-移除停止的容器

一旦一个容器被停止,您需要删除它,您首先需要使用docker ps -a获取它的 id,然后启动一个docker rm命令。

docker rm 11bca8ee1f8c

8-移除所有停止的容器

现在,如果您需要移除所有停止的容器,并且不想手动执行,您可以使用prune命令。

docker container prune

9-运行容器,并在它停止后将其移除

如果您想在容器停止后自动移除它,您可以在运行它时使用—rm选项。

这是一个很好的选项,可以提供清理。

docker run --rm -d -p 1234:80 flask_image

10-重命名容器

如果出于某种原因,您需要重命名您的容器,您可以使用docker rename命令来完成。

结论

我们只是触及了容器的表面,它们是做什么的,以及如何用简单(并且有用)的命令来使用它们。

然而,由于容器通常只有一个职责,所以它们通常与其他容器组合在一起形成一个完整的堆栈:这是通过 docker-compose 实现的,我们可能会在以后的文章中对此进行研究。

今天就这些了。直到下一次更多的编程技巧和教程。👋

新到中?你可以每月订阅 5 美元,并解锁各种主题的无限文章(技术、设计、创业……)你可以通过点击我的推荐链接来支持我

https://ahmedbesbes.medium/membership

照片由卡斯滕·怀恩吉尔特在 Unsplash 上拍摄

初学者和专家的 10 个数据分析工具

原文:https://towardsdatascience/10-data-analysis-tools-for-beginners-and-experts-2d083203b06e

为你的事业或职业选择合适工具的指南

米利安·耶西耶在 Unsplash 上拍摄的照片

有许多数据分析工具,每一个都是为特定的用例而设计的。有时,工具会重叠并服务于相同的用例,两者各有利弊。这使得寻找满足您需求的合适工具变得非常困难。

今天,我将向您展示在选择工具时应该注意什么,我将介绍 10 款最优秀、最受初学者和数据科学家欢迎的工具。

如何选择正确的分析工具

选择数据分析工具时,需要考虑几个因素:

  • 您的企业拥有什么类型的数据?它们需要特定的分析程序吗?(例如数据建模)
  • 我们要处理多大规模的数据?大数据?
  • 这项工作的技术性如何?我们面对的是数据科学家还是数据分析师?也许是营销人员和销售人员?
  • 你需要任何特定类型的可视化吗?(例如地理热图)
  • 你的公司有多少人?预算是多少?

目录

  • 最适合存储/编辑数据&创建图形:Excel
  • 最适合非技术用户:聚合物搜索
  • 最容易建立预测模型:Akkio
  • 最适合查询大数据:SQL
  • 最适合机器学习&自动化:Python
  • 最适合高级统计分析:R
  • 最适合科学&学术界:SPSS
  • 最佳商业智能&报告:表格
  • 商业智能的廉价替代品:Power BI
  • 最适合定性数据分析:ATLAS.ti

最适合存储/编辑数据和创建图表:Excel

作者截图

**非常适合:**存储/编辑数据、基本分析、操作数据、图形/图表。
**专长等级:**初级到中级

Excel 和 Google 的工作表 99%相似,所以我把它们都放在这里。Google Sheets 是免费工具,而 Excel 不是。它们做的事情完全一样,所以如果你的工作场所没有 Excel,你可以随时使用谷歌工作表。

Excel 是我快速创建图形和图表的首选工具,因为它们制作方便,并提供多种图表类型:条形图、堆积条形图、簇状条形图、饼图、散点图、盒须图、雷达图——应有尽有!Excel 都有。

您可以快速定制颜色,并为每种图形类型选择多种布局。如果你想在网上发布一幅图像,而又不想让它因为缩小/压缩而变得模糊,调整大小功能也很方便。

Excel 的另一个常见用例是数据操作。使用其广泛的函数和公式,您可以对数据进行几乎任何类型的操作,例如,想看看每一列中的第 5 个字母是否是元音,并输出 TRUE 或 FALSE?使用 Excel 公式很容易做到这一点。

最后,Excel 对于基础分析还是不错的。如果您对数据有某些疑问,您可以通过创建一个数据透视表并添加切片器来过滤数据来轻松回答这些问题。

如果你发现自己每天使用 Excel 几个小时,建议学习 VBA,它是 Excel 的本地编程语言(Visual Basic)。VBA 允许你自动完成任务,这对那些花大量时间在 Excel 上的人来说是有益的。我想说,如果你每天花一个多小时在 Excel 上,这是值得学习的。

Excel 的最大缺点是它不适合更复杂的数据操作(如连接数据集)和分析大数据,因为它有 100 万行的限制。它也不是更高级的统计分析(如回归建模)的最佳工具。

示例使用案例:

**双变量分析:**您有一些结构化数据,并且您想要快速创建一组条形图和散点图,以便对您的数据进行单变量或双变量分析。Excel 在这方面又快又方便,提供了您需要的几乎所有图表类型。

**数据透视表:**您有一些餐馆的销售数据,并且您想要回答一些基本问题,例如“在一天的不同时间,哪种饭菜最受欢迎?”通过在 Excel 中创建数据透视表,您可以轻松快捷地得到答案。

**计算:**您想要对您的数据执行计算。Excel 为您提供了多种方法,例如,您有关于产品销售和评级的电子商务数据,并且想要使用 Wilson 的下限创建一个“加权分数”。即使像这样半复杂的公式也可以在 Excel 中复制。

**数据操作:**你想清理或者操作数据。Excel 有多种方法来编辑数据的某些部分(例如,删除每个单元格中的第 4 到第 6 个字符位置,将一列拆分为多列,使用 if 语句)。

总的来说,每个人都使用 Excel——包括数据科学家,因为它可以方便地执行简单的任务,如图形/图表和数据透视表。它也适合存储/编辑/操作数据。

最适合非技术用户:聚合物搜索

作者截图

**适合:**营销/销售/调查数据、数据演示、商业智能。
**专长等级:**初级

Polymer Search 是一款无代码人工智能工具,旨在分析销售和营销数据。这是最容易学习的数据分析工具之一,比 Excel 简单。

你把你的数据上传到它的网络工具上,它会在几秒钟内把你的数据转换成一个交互式的网络应用。在这里,您可以执行几个分析功能:

1.交互式数据透视表:如果你对数据有某些疑问,你可以使用数据透视表快速得到答案,只需点击几下鼠标,在“智能数据透视表”下选择你的变量。由于一切都是互动的,你不需要浪费时间设置切片器,你可以通过点击标签轻松地过滤输入/输出数据。

2.交互式可视化:为您呈现一些图表类型。主要是条形图、时间序列、散点图、气泡图和热图。这些可用于发现模式、趋势、相关性、数量和其他关于数据的见解。它们还可以用来创建交互式仪表板。由于一切都是交互的,您可以轻松地过滤掉某些数据点(例如,删除异常值或查看没有某些数据点的数据会是什么样子)。

3.Auto-Explainer:允许您生成关于数据的摘要,显示数据中的异常和表现最佳的组合。例如,PPC 营销人员可以选择他们想要最大化的指标(如“转化率”),该工具可以生成影响该指标的因素组合,如受众定位/人口统计、广告创意、竞价策略等。

还有一个人工智能功能,可以提出关于数据的见解。

我非常喜欢 Polymer 的一个特性是它能自动识别数组并自动拆分它们。例如,如果你做了一个调查,并要求人们“选择最多 5 个项目”,在 Excel 中分析这一点可能会很棘手(甚至在 R 中),但 Polymer 会将每个项目检测为独立的,因此分析它变得很简单。如果检测不正确,您可以在列设置中关闭此功能(每个列都有自己的设置)。

Polymer 的最大缺点是它不能处理大数据,并且在进行更高级的分析时灵活性有限。例如,你不能对聚合物进行多元分析。还有数量有限的图形/图表类型。

示例使用案例:

**营销/销售数据:**你正在运行脸书广告或任何类型的 PPC 活动,你想找到表现最好的组合。Polymer 的 Auto-Explainer 工具会自动为您完成这项工作。

如果你想找到合适的目标受众,你只需输入性别、年龄、地点和设备类型,Polymer 就会给出从最佳表现到最差表现的不同结果组合。该报告还显示了任何异常值/异常值,并给出了每个数字的上下文信息(如 X 的表现高于平均水平 56%)。

**商业智能:**您有一个电子表格,您希望将它快速转换成交互式仪表板,用于演示或商业智能目的。Polymer 会自动将您的文件转换为交互式数据库,并让您创建交互式图形/图表,您可以通过 URL 共享这些图形/图表,使主管或客户可以轻松访问。

总的来说,Polymer 是非技术人员创建交互式仪表板、数据透视表和分析营销、销售或调查数据的工具。尽管该工具是为初学者设计的,但我发现它可以做一些非常强大的事情,为我节省了大量的编码时间。

最容易建立预测模型:Akkio

作者截图

**理想适合:**预测分析、销售、营销
**专业水平:**初学者

Akkio 是一个人工智能工具,可以让普通人成为数据科学家。你把数据集上传到 Akkio 上,选择你想要预测的变量,Akkio 就会围绕这个变量建立一个神经网络。不需要编码经验。

Akkio 自动进行 80–20 的训练/测试分割,这意味着您上传的数据的 80%用作训练数据,20%用作验证集。这使得 Akkio 能够确定和显示模型的统计有效性。

我喜欢 Akkio 的一点是,它不只是预测结果。它有一个准确度等级,它认为模型有多准确,并指出假阳性。

同样,只需点击几下鼠标,你就可以将模型部署到 web 应用程序、Zapier 或 API 中。

Akkio 的主要缺点是定价从每月 50 美元开始,并且仅限于表数据。你将无法进行物体检测、图像和音频分类等工作。此外,已经了解 R 或 Python 的人可以创建更好的模型。

示例使用案例:

你经营着一家电子商务商店,想开始向你的商店推荐产品并发送电子邮件简讯。你不是数据科学家,雇一个也太贵了。相反,你可以使用 Akkio 建立模型,根据客户过去的购买行为预测他们可能会购买什么。

总的来说,Akkio 是一个供非技术背景的用户开始预测分析的工具。

最适合查询大数据的:SQL

来源:https://commons . wikimedia . org/wiki/File:SQL _ ANATOMY _ wiki . SVG # File links

**非常适合:**查询和操作大数据。
**专长等级:**中级

SQL 是一种编程语言,主要用于查询和数据操作。

简而言之,SQL 做了 Excel 做的大部分事情,但在处理大数据方面效率要高很多倍。在 Excel 中需要一个多小时的事情,用 SQL 可以在几秒钟内完成。

与 Excel 相比,SQL 允许您轻松地发送更大的文件,因为 Excel 文件可能非常大。SQL 允许你在更小的纯文本文件中存储数据。

当您必须将多个数据集连接在一起时,SQL 也会大放异彩。

SQL 的缺点是学习起来比 Excel 要复杂一些,对于真正基本的任务,它的效率比 Excel 低。

示例使用案例

**大数据操作:**您有非常大的文件(例如,数百万条 Twitter tweets 数据),并且需要清理和编辑这些数据。在 Excel 中这样做是不可能的,但是 SQL 允许您用不到 15 行代码做几乎任何类型的操作。

**将数据集连接在一起:**假设您有 3 个包含 10 列的电子表格文件,您想要将它们连接在一起。你不能把它们垂直复制粘贴到 Excel 中。您需要将它们横向组合成一个包含 30 列的新数据集。在 Excel 中这样做是非常困难和耗时的,所以你需要 SQL 来完成。

机器学习和自动化的最佳选择:Python

Artturi Jalli 在 Unsplash 上拍摄的照片

**非常适合:**机器学习、自动化、应用部署、大数据。
**专长等级:**高级

Python 是一种免费的开源编程语言,在数据分析师和数据科学家中非常流行。你想使用 Python 的三个主要原因是它的高级、快速和包含大量的库。

Python 是一种高级编程语言,内部用 C 语言编写,这意味着您不必处理内存/RAM 的使用,它存储在哪里,以及处理耗时的位和字节。作为一种高级编程语言,Python 是分析数据的理想编程语言。

我喜欢 Python 的一点是它是开源的,并且有很多社区支持。你可以找到各种各样的图书馆,例如,无需自己编码就能找到访问者的位置。目前有超过 200,000 个软件包,用于数据分析的流行软件包包括、Matplotlib 、Plotly 和 Seaborn。

它的主要用例是机器学习、自动化和数据分析。

  • 大数据——Python 处理大数据的速度极快
  • 即使对于较小的数据集,Python 在执行困难的计算时也非常灵活
  • 对于大多数组织来说,Python 可以通过自动化流程节省大量时间,这使得它成为一项非常值得拥有的技能。

因为它是开源的,所以它可以访问数量惊人的库。有超过 200,000 个软件包,最受欢迎的包括 Matplotlib、Plotly 和 Seaborn。

Python 最大的缺点是它不利于移动应用程序,因为没有人为此使用 Python。它也是为更高级的用户设计的,因为你可能需要几个月的时间来学习这个工具。对于基本任务,在 Excel 或其他工具上完成会更有效率。

示例使用案例:

**自动化:**每天你的工作场所会给你 10 个数据集来分析。他们希望你查看数据中的某些变量,为其创建图形/图表,并将其发送到特定的电子邮件。

虽然在 Excel 中可以做到这一点,但每天分析 10 个数据集非常耗时,因为您需要手动分析每个数据集。

使用 Python,您可以通过编写 15 行代码来自动化这一过程,这些代码将分析他们每天发送给您的每个数据集,并将信息发送到这些特定的电子邮件。

**清理数据:**你从网飞搜集了一系列电视节目,包括预告片链接、分级、描述等。你意识到网站上有一些丢失的数据。例如,并不是所有的节目都有预告片。

使用 Python,你可以解决这个问题,首先检测丢失的链接,然后编写一个脚本来检查 IMDb 是否有预告片。如果有,从那里抓取链接。如果没有,就去 Youtube 上看看预告片,然后从那里下载。

探索性数据分析: EDA 可能是一个耗时的过程,但使用Pandas Profiling(Python 中的一个开源模块),您可以在几行代码中生成数据的交互式摘要。这允许您通过可视化数据和查看数据的分布来理解数据。

总的来说,Python 是该领域最常用的语言,由于它是一种高级语言,所以相对容易掌握,这使得它成为数据科学家非常需要的技能。

最适合高级统计分析:R

来源:https://commons . wikimedia . org/wiki/File:r studio _ IDE _ snapshot . png

**理想适用:**高级学术统计分析、机器学习、大数据
**专业知识水平:**高级

R 和 Python 在处理大数据的能力上都极其相似。使用这两种方法中的任何一种,您都可以完成大多数工作,但是当涉及到统计分析过程,尤其是探索性数据分析(EDA)时,R 具有优势。

如果一个工具是通用的,它可以做很多事情(例如,Python 不仅仅是一个数据分析工具,还允许您创建和部署生产级应用程序)。然而,如果一个工具是特定的,它可以做得更好。r 是专门为数据分析设计的,当涉及到非常高级的统计分析(学术水平的东西)时,它可以打败 Python。

此外,在 R 上做一般的分析比 Python 更容易。使用 Python,你需要找到正确的库,弄清楚它是如何工作的,然后编写代码。Matplotlib 缺乏用户直观性,可能会让许多人感到害怕,而 R 的 ggplot2 更容易使用。

但总的来说,他们大多能做同样的事情,大多数人仍然会从 Python 中获益更多。就用例而言,R 和 Python 是相似的,但是用 R 你不能像 Python 一样创建生产级应用,而用 Python,更难做高级的学术数学。

科学和学术界的最佳选择:SPSS

来源:https://upload . wikimedia . org/Wikipedia/commons/7/72/sort column。JPG

理想情况: t 检验、方差分析、方差分析、线性&逻辑回归、聚类分析、置信区间。
**专长等级:**中级

SPSS 主要是一个点击式工具,主要由教育和社会科学专业人士使用。它在政府、市场研究和零售业中也有应用。

我喜欢 SPSS 的一点是,它允许各种测试和多元回归类型,以适应所有类型的数据和场景。SPSS 需要中级的统计学知识来进行更精细的假设检验技术,如 t 检验、MANOVAs 和 ANOVAs。

SPSS 最大的缺点就是 99 美元/月起的价格。

示例使用案例

**采样数据:**你在心理学、社会学或医学领域工作,在那里你正在进行需要采样的科学实验。一个例子是当测试一种药物是否能提高测试分数时——你需要有一个对照组和一个实验组。t 检验允许您根据您设置的 p 值找出这两组在统计上是否不同。

**多变量分析:**多变量分析侧重于同时跨多个变量分析组间差异。举个例子:就像上面这个关于药物是否能提高考试成绩的例子,你也要考虑年龄、性别、种族等等。

总的来说,SPSS 是一个“中级”工具,介于 R、Python 等高级编程语言和 Excel、Polymer Search 等初级工具之间。它的理想受众是希望分析样本数据以发现统计意义的科学专业人士。

最佳商业情报和报告:Tableau

作者截图

**非常适合:**创建交互式仪表盘和图表,基本数据清理。
**专长等级:**初级到中级

Tableau 是创建视觉上吸引人的图形和交互式仪表盘的最佳工具,无需编码。

虽然 R 和 Python 等其他工具更适合分析数据和创建预测模型来推动业务决策,但 Tableau 提供了一种更好的方式来将数据传达给不精通技术的人,并允许他们通过交互式仪表盘监控这些信息。

Tableau 也可以用于分析数据,但它不能很好地处理需要彻底清理的杂乱数据。地址就是一个例子。由于地址有这么多正确格式(不同的信息顺序,缩写和非缩写),在 Tableau 中分析这种格式将是一场噩梦。R & Python 更适合这个。

Tableau 的另一个缺点是它主要针对大型企业。他们的定价从每月 70 美元开始。

示例使用案例:

**演示:**你是一名数据科学家或数据分析师,需要向高管展示一些发现。ggplot/matplotlib 中的可视化效果是静态的,缺乏交互性,也不美观。您需要创建漂亮的、可定制的、交互式的报告,以便团队中的任何人都可以轻松访问。BI 工具允许您创建这些类型的可视化,以及轻松连接多个表的能力,以便更深入地研究数据,并在数据允许的情况下将数据分解到任何级别。Tableau 让您能够以简单的拖放方式完成所有这些工作。

**实时交互式仪表盘:**您想要创建实时交互式仪表盘,但在 Matplotlib/Seaborn/Plotly 中对它们进行编程过于复杂和耗时,而在 r 中则不可能。使用 Tableau,您可以节省数小时的时间,并使它们看起来好 10 倍。

更便宜的解决方案:Power BI

来源:https://commons . wikimedia . org/wiki/File:dado sabertos-ms-PWR bi-demo 02 . png

**非常适合:**创建交互式仪表盘、图表和数据操作。
**专长等级:**初级到中级

Power BI 是 Tableau 的替代产品,提供了比数据可视化更全面的 BI 包。它不需要编程就可以开始,但提供了使用 DAX 语言的选项,对于没有编程知识的人来说,这很容易掌握。

在快速和简单的可视化方面,Tableau 有优势,但使用 Power BI,操纵和清理数据更容易,因为 DAX 是一种强大的编程语言。Power BI 还可以与其他微软产品很好地集成。

Power BI 计划起价为 9.99 美元/月,可以与其他微软产品很好地集成,并提供与 R & Python 的集成以构建模型。

总的来说,虽然这两个工具都适合商业智能,Tableau 在视觉方面提供更多,但 PowerBI 更便宜,更适合处理数据。

最适合定性数据分析:ATLAS.ti

作者截图

**理想适合:**文本挖掘、情感分析
**专业水平:**初级到中级

ATLAS.ti 是一款用于分析定性数据的工具,例如社交媒体上的评论、开放式调查问题和采访。该工具允许非技术用户执行复杂的任务,如情感分析。

其特点包括:

  • 词云
  • 单词表
  • 文本搜索
  • 情感分析
  • 实体识别
  • 通过形容词、名词、连词等过滤。
  • 同义词
  • 演示功能

Atlas.ti 还支持上传视频和图像进行多模态分析,并能很好地处理地理数据/地图。

缺点是他们的定价从每月 35 美元开始,用于非商业用途,他们的情感分析只支持 4 种语言:英语,德语,西班牙语和葡萄牙语。

示例使用案例:

**非结构化数据:**您录制了一系列面对面的采访,并希望从这些记录中发现真知灼见。你不熟悉 Python,所以你求助于 ATLAS.ti,它允许你在没有任何编码的情况下执行文本挖掘。

**社会科学实验:**你在社会科学领域工作,你进行一些实验,比如让你的参与者在看完一段视频后写下他们的感受并画一幅画,看看这段视频如何影响他们写/画的东西。这通常是一个很难分析的任务,但是 ATLAS.ti 使多模态分析变得简单多了。

结论

选择正确的工具取决于您的组织想要分析的数据类型、您的预算和专业水平。

大多数情况下,最好是在工作中使用多种工具的组合。

例如,数据科学家的堆栈通常包括 Excel/Google Sheets、R/Python 和 Tableau。一个营销人员的堆栈可能涉及 Excel,聚合物搜索和 Akkio。社会科学的人可能会用 Excel,ATLAS.ti,SPSS。

大多数工具都有某种形式的免费试用,所以如果你不确定的话,试一试也无妨。

10 个来自 Kaggle 的数据集,你应该练习一下,以提高你的数据科学技能

原文:https://towardsdatascience/10-datasets-from-kaggle-you-should-practice-on-to-improve-your-data-science-skills-6d671996177

通过这 10 个数据集磨练你的技能

来自 Unsplash 的照片由 Arjan van den berg 拍摄

Kaggle 是一个网站,在那里你可以找到解决数据科学问题的比赛。

它是免费加入的,给你机会在不同行业的真实数据集上实践你的技能。

这篇文章将介绍 10 个数据集,它们对你在面试前练习技能很有帮助,或者仅仅因为它们很有趣!

让我们开始吧!

1.泰坦尼克号数据集(初学者)

泰坦尼克号数据集可能是 Kaggle 上最受欢迎的数据集之一。这是一个很好的数据集,因为它有很多变量(13)和记录(超过 1500)。该数据集包含泰坦尼克号上的乘客信息。

该数据集的目标是根据乘客的特征预测他们是否幸存。

例如,基于数据集,你可以看到已婚女性比单身男性存活的概率更高。

数据集中的变量示例如下:

  • 年龄
  • 已婚还是单身
  • 帆船班(一等、二等、三等)
  • 从(伦敦、南安普敦)出发
  • 乘客机票号码

有很多关于如何处理这个数据集的教程。如果你在寻找一个挑战,试着预测不同出发点的存活率。

数据集可以从这里下载: 泰坦尼克号数据集

2.虹膜数据集(初学者)

这个数据集是最流行的二元分类问题。这项比赛的目标是预测鸢尾花是否属于两个物种之一(鸢尾,杂色)。

一些例子是鸢尾比杂色鸢尾有更短的花瓣和更宽的萼片。

一个示例预测可能是,如果花瓣长度大于 3 厘米,而萼片小于 6 厘米,则该花更有可能属于鸢尾。

该数据集中的变量示例如下:

  • 花瓣长度
  • 萼片宽度
  • 花瓣宽度

有许多教程来研究这个数据集。其中最受欢迎的一个叫做“在 Iris Flower 数据集上使用 Scikit Learn”。对于初学者来说,这是一个非常好的教程,因为它向您展示了如何使用 scikit learn,它具有预构建的功能,允许您轻松地训练模型。

数据集可以从这里下载: 虹膜数据集

3.训练数据集(初学者)

训练数据集是 Kaggle 上另一个流行的数据集。该数据集包含乘坐美国国家铁路客运公司列车在波斯顿和华盛顿特区之间旅行的乘客的信息

该数据集的目标是预测乘客是否会在某个站点下车。

例如,根据数据集,您可以看到在巴尔的摩下车的乘客比在费城下车的乘客有更高的下车概率。

数据集中的变量示例如下:

  • 年龄
  • 轨道类型(公路、货运)
  • 如果是周末或假日

基于这些变量,有各种方法来预测某人是否会在某一站下车。

数据集可以从这里下载: 训练数据集

4.波士顿住房数据集(初学者)

波士顿住房数据集是 Kaggle 上另一个受欢迎的数据集。该数据集包含波士顿市的住房信息。它有超过 20 万条记录和 18 个变量。

该数据集的目标是预测房价是否昂贵。数据集有三个不同的类(昂贵、普通和廉价)。

您可以看到如下功能示例:

  • 卧室数量
  • 浴室数量
  • 平均房间数

如果您对数据科学领域感兴趣,这个数据集是一个很好的尝试。这并不太难,但仍然非常有趣。

数据集可以从这里下载:波士顿房屋数据集

5.酒精和毒品的关系(中级)

酒精和药物关系数据集是练习数据可视化技能的绝佳数据集。它包含不同药物之间的药物相互作用的信息。

该数据集的目标是根据两种药物的化学结构预测它们是否会相互作用。

例如,数据集表明布洛芬和扑热息痛可能会相互作用,因为它们都是抗炎药(NSAIDs)。

该数据集中的变量示例包括:

  • 药物 A 结构(化合物)
  • 药物 B 结构(化合物)
  • 药物 A 和 B 活性(是/否)

这是一个很好的数据集,可以用来练习您的数据可视化技能。尝试创建一个图表来显示不同药物之间的相互作用。

数据集可以从这里下载: 酒精&药物关系数据集

6.乳腺癌威斯康星(中级)

对于那些在数据科学方面更有经验的人来说,乳腺癌威斯康星州数据集是一个巨大的挑战。该数据集包含威斯康星州乳腺癌患者的相关信息。

该数据集的目标是根据患者的特征预测其是否患有癌症。

比如,你可以从数据集中看到,肿瘤大小小于 0.50 cm 的患者有 98%的生存机会,而肿瘤大小大于或等于 0.80 cm 的患者只有 15%的生存机会。

该数据集中的变量示例如下:

  • 肿瘤大小
  • 肿瘤分级
  • 淋巴结受累

有一些关于如何处理这个数据集的教程。如果你在寻找挑战,试着预测不同肿瘤大小的存活率。

数据集可以从这里下载: 乳腺癌威斯康星数据

7.皮马印第安人糖尿病(中级)

这个数据集是关于预测糖尿病的。这个比赛有超过 150,000 个例子,你需要预测病人是否会发展成糖尿病(二元分类)。

变量非常简单,因为只有一个特性:

  • 糖尿病

这个挑战的目标是看你能否预测一个病人是否会在五年内患上糖尿病。这是练习二进制分类问题技巧的好方法。

数据集可以从这里下载: 皮马印第安人数据集

8.亚马逊评论(中级)

亚马逊评论数据集是一个很好的文本分析数据集。它包含对 Amazon 产品的评论。

这个数据集很有趣,因为它混合了正面和负面的评论。数据集的目标是预测评论是正面的还是负面的。

变量的例子有:

  • 查看文本(字符串)

有很多关于如何处理这个数据集的教程。如果你正在寻找一个挑战,尝试预测情绪分析,然后在此基础上建立自己的模型。

数据集可以从这里下载: 亚马逊点评数据集

9.MNIST 手写数字(高级)

MNIST 数据集是一组手写数字的玩具。它由大小为 28x28 像素的图像组成,具有 60,000 个训练示例和 10000 个测试案例。

这个数据集的目标是正确地对训练集和测试集中的所有数字进行分类。

对于这种类型的问题,你通常会使用卷积神经网络(CNN)。

有很多关于如何处理这类问题的教程,所以我建议你从基础开始,然后学习更高级的方法。

数据集可以从这里下载: MNIST 手写数字

10.CIFAR-100(高级)

CIFAR-100 数据集是练习机器学习技能的绝佳数据集。该数据集包含 100 张物体图像,分为六类:飞机、汽车、猫、鹿、狗和船。

每个图像为 32x32 像素,有三个颜色通道(红、绿、蓝)。

数据的目标是预测每张图片属于六个类别中的哪一个。

该数据集中的变量示例如下:

  • 像素
  • 红色通道
  • 绿色通道
  • 蓝色信道

有许多关于如何应对这一挑战的教程。如果你正在寻找一个挑战,试着预测那些以某种方式被扭曲或变形的图像的标签。

数据集可以从这里下载: CIFAR-100

今天就尝试使用 Kaggle

Kaggle 是解决数据科学实践问题的绝佳资源。本文列出的 10 个数据集非常适合磨练你的技能。如果你刚刚开始,试着先做一些简单的数据集。

随着你的进步,转向更难的。经过足够的练习,你将能够解决任何出现在你面前的问题!

与 5k+人一起加入我的邮件列表,免费获得“如何在 2023 年学习数据科学 cheat sheet”

业余分析师和专业分析师的 10 个区别

原文:https://towardsdatascience/10-differences-between-amateurs-and-professional-analysts-3a1be1a06a4d

成为“真正的”数据分析师的旅程

亚历山大·辛恩在 Unsplash 上的照片

分析就像写作职业:基础知识很容易入门,是一门艺术,所以进入门槛很低,任何人都可以自称为“作家”。标题中没有质量保证。

然而,有足够的文化来写一些推文并不能让你成为托尼·莫里森或加布里埃尔·加西亚·马尔克斯——最好的作家比初学者超前好几光年。他们的观察很有力量。他们的洞察力改变了世界。

分析也是如此。这个行业的差异是巨大的。另一方面,比如说,统计的准入门槛更高,所以最低水平的统计学家比最低水平的分析师更令人印象深刻……但也有更窄的技能范围。比起统计学家和 ML 工程师,专家分析师给我的印象要深刻得多。

业余分析师和专业分析师之间有很大的不同,在这篇文章中,我将为你总结其中的 10 点。对于每一个,我都有一个更深入的博客帖子,所以请随意跟随链接的线索,找到让你好奇的兔子洞。

专业数据人员与业余数据人员的区别#1 —软件技能

专业分析师努力学习最有效、最快速、最灵活的工作工具,这意味着他们可以快速超越点击式分析界面,学习编码。如果他们想宣称自己是一名专业人士,他们至少在这三种语言中的两种语言上掌握了惊人的技能: R、Python 和 SQL了解更多

专业数据与业余数据的区别之二——轻松处理大量数据

“大数据”有多大?这取决于你可以利用的技术——10 年前可能有价值的东西今天已经没有价值了。当你需要额外的工程技能来访问和移动数据时,数据就是“大”的。如果您可以将整个数据集加载到笔记本电脑的内存中,那么它肯定不是“大”的。

照片由兰迪·塔兰皮在 Unsplash 上拍摄

与新手不同,专业分析师不会被数据集的规模吓倒。如果需要额外的工程技能来应对,那就这样吧。你会学到你必须学的东西。因此,专家分析师经常在这个过程中学会数据工程技能。 了解更多

专业数据与业余数据的区别#3 —不受数据科学偏见的影响

业余分析师和专家分析师之间的另一个巨大区别是,专家已经形成了对数据的全面不尊重。他们从不把数据以大写字母“D”发音。

“有了数据,你仍然只是另一个有观点的人。”

我最喜欢的统计学先驱之一,W. Edwards Deming ,有一句名言*“没有数据,你只是另一个有观点的人。这是真的,但不幸的是:“有了数据,你仍然只是另一个有观点的人。专家分析家们从骨子里明白这一点。*

我在 LinkedIn 上的一篇帖子的评论中隐藏着一颗宝石。

数据会让毫无戒心的业余爱好者产生虚假的安全感,但专家知道如何避免量化的轻信。要开始建立相同的免疫力,停止将数据视为特殊。 了解更多

专业数据与业余数据的区别# 4——了解职业

与业余分析师不同,专业分析师是通过选择 成为 分析师的,而不是因为运气不好。对他们来说,分析本身就是一门优秀的学科,而不是通往其他职业的敲门砖(比如机器学习或统计学)。

图片由作者制作,为我的“数据科学到底是什么?”博文。

专业分析师明白,让你成为分析师的不是你的职位,也不是你使用的工具和技术。让你成为专家分析师的是你在探索和灵感方面的专长——所以这是思考分析职业微妙之处的最佳出发点。 了解更多

专业数据与业余数据的区别之五——拒绝成为数据骗子

专业分析师拒绝成为数据骗子:有毒后见之明的兜售者。

数据骗子的第一个警告信号是未能理解分析和统计是非常不同的学科 。不管你的正式职位是什么,没有规定说你不能想学就学,只要你不把它们弄混。为了避免意外成为数据骗子,一次解决一个问题。 了解更多

专业数据与业余数据的差异# 6——抵抗确认偏差

确认偏差 意思是我们都可以看着同一个数字,对它有不同的感知。

由 Paul J 提供的确认偏差图解,经允许使用。

换句话说,确认偏差 是数据驱动决策的死对头,因为这意味着一个事实不再仅仅是一个事实,无论你投入多少数学和科学去得到它。它从分析数据中吸取了所有的价值。

如果你渴望成为一名专业分析师,你需要绝地级别的确认偏差解药。这意味着将有意的练习放在磨练防御确认偏差的两个最佳技能上:预注册面对 脱敏学习如何

专业数据与业余数据的差异#7 —对数据的现实预期

如果你是专业分析师,你知道数据不欠你什么。对你的麻烦来说连像样的质量都没有。

对分析师来说,处理别人留下的烂摊子是工作的一大部分。由 Oleksii Hlembotskyi 在 Unsplash 上拍摄的照片

对于分析师来说,坏数据是一个职业现实,很大程度上是因为他们的工作涉及花更多的时间处理二手数据,而不是一手数据。分析师痛苦地意识到,你经常需要从坏数据开始,以找出如何制造更好的数据。要理解这些区别的重要性,并查看帮助分析师处理杂乱数据的技能列表,请点击 了解更多信息。

专业数据与业余数据的区别# 8——知道如何增加价值

如果你是一个决策者的混合体,你的价值由你的决策和行动的质量来判断。你的分析技能是达到这一目的的手段——分析只是你武库中的众多武器之一。

分析师充当决策者的某种感觉器官。照片由 Gerax Sotelo 在 Unsplash 上拍摄

如果你是一个纯粹的分析师,你的价值取决于你为决策者服务的能力。决策者的工作是将信息转化为更好的行动,如果他们不能获得大量信息,这是没有希望的。这就是分析师的用武之地,他们既被动地支持决策者的信息需求(通过查找能够回答他们特定问题的数据),也主动地支持决策者的信息需求(通过探索数据来启发他们考虑新的方向,使他们更具创新性和抵御威胁的能力)。

分析师充当决策者的某种感觉器官。

专家分析师知道,从任何地方开始,除了你的决策者的需求和优先事项,一定会把你引入歧途。 了解更多

专业数据与业余数据的区别之九——对时间的不同思考

很少有角色像激光一样专注于时间的投资回报(ROI)。

一个经验丰富的分析师知道他们的工作不是一件有保证结果的确定的事情,而是在灵感、创新和早期威胁检测方面的时间投资。这就是为什么他们会找那些也明白这一点的老板——那些不会因为他们空手而归而惩罚他们的老板。

照片由 MK 汉密尔顿在 Unsplash 上拍摄

如果他们在为一个精明的组织工作,他们的团队相信他们会最大限度地利用分配给他们的时间,所以他们会不断地考虑他们行动的潜在时间 ROI。要了解这如何指导专家分析师的工作方式, 在这里了解更多

专业数据与业余数据的差异# 10——对卓越的细微看法

分析游戏就是优化每分钟的灵感。

与业余爱好者不同,专业分析师不认为速度是一个肮脏的词,而是一个微妙的概念,指导他们如何看待自己的工作,如何优先考虑,如何评估业绩,以及如何发展自己的技能。

巴纳巴斯·赫特伦迪在 Unsplash 上拍摄的照片

作为专业分析师,速度也是你技能发展的北极星。诚然,数据格局正在快速变化,因此您不能停滞不前。你今天使用的工具不会持续很久。继续磨爪子,但不要追流行语。

不要再问:“我是不是应该学习所有酷小孩都在谈论的这个工具/方法/技术?” 开始提问:“学这个会让我更快吗?”

学习任何能让你更快的东西(用所有重要的方式)。既然你的工作包括加速别人,那就从加速自己开始吧。 了解更多

熟能生巧!

如果你只是想稍微了解一下分析,那就去看看一些数据吧。不要等待特别许可。你不需要任何花哨的训练。跳过这些课程和书籍,如果你还不是专家也不要担心…开始吧!一旦看数据开始变得有趣,你就可以称自己为分析师了。

但是如果你渴望成为专家,我有个坏消息要告诉你。虽然我希望你能探索我的分析迷你课程,但我(或其他任何人)教你的东西都不会让你精通。阅读分析可以帮助你调整心态和态度,但是精通需要天赋和实践。很多很多很多的练习。

http://bit.ly/quaesita_sminianalytics

如果你渴望用一些核心概念和对分析职业的思考来补充你的实践课程,请参加我的迷你分析课程。

哦,如果你在这里玩得开心,看看如果你不止一次点击拍手按钮会发生什么。

你应该知道的 10 个基本的 Julia 数组方法

原文:https://towardsdatascience/10-essential-julia-array-methods-you-should-know-bedb07b5488a

用这十个你可以使用的好方法把你的阵列带到一个新的水平

(图片由 Pixabay 上的 Boskampi 提供)

介绍

Julia 编程语言是一种非常著名的面向科学计算的语言。虽然这种语言肯定是一种具有许多不同功能的通用语言,但它令人惊叹的数字能力无疑是人们关注的焦点。在很多方面,Julia 在处理数组和矩阵数据的能力上就像一个高级 FORTRAN。

在数据科学领域,伟大的数值方法和快速计算肯定会在做任何事情时派上用场。也就是说,学习 Julia 中数组的来龙去脉,以及分派给数组的方法可能是个好主意。今天我想回顾一下在 Julia 中使用传统的一维数值数组的一些最基本的方法。我认为这是在 Julia 身上学到的最有价值的东西之一,因为它经常被用于科学,在科学中,我们的阵列变成了我们的特征,我们的元素变成了我们的观察。关于科学等价性的另一个注意事项是,在 Julia 中,“Vector”这个名字只是一个数组的别名,所以如果我或者代码,比如说 Vector,记住它的基本意思是数组。最后一件事,如果您想亲自尝试一下这段代码,看看它在笔记本上是什么样子,这里有一个我在本文中使用的笔记本的链接:

https://github/emmettgb/Emmetts-DS-NoteBooks/blob/master/Julia/10 Julia array methods.ipynb

№1:推!()

我想说的第一个方法是推!方法。如其名称结尾的解释点所示,push!是一种会改变我们血型的功能。用力!只是用来将元素移动到几乎任何可迭代的对象中…这实际上是另一件需要注意的事情——由于多重分派,这些方法并不总是只适用于数组。用力!可以用在许多其他类型的收藏上,甚至那些不是来自 Base 的库中的收藏。再者,你甚至可以自己写推送!,我在一篇完整的文章中谈到了推送!。如果你想更多地了解这种方法,以及它的用途,你可以在这里阅读我写的关于它的文章:

使用 push!非常简单,我们将从定义要推送的数组开始!收件人:

x = [5, 10, 15, 20, 25, 30, 35, 40, 45]

我们现在可以叫推了!方法,首先提供我们想要推送的 iterable,然后是我们想要推送的 item:

push!(x, 50)
10-element Vector{Int64}:
  5
 10
 15
 20
 25
 30
 35
 40
 45
 50

需要注意的一点是,我们的 x 数组是一个向量{Int64}。每当我们构造这种类型时,括号中的类型 Int64 作为 T 从内部构造函数提供给外部构造函数。如果我刚才说的没有任何意义,不要担心——因为这里有一篇文章解释了我刚才到底说了什么!:

无论如何,因为这个类型,我们称之为 T(可能在代码中就是这么叫的),是 Int64,我们只能把整数压入它。例如,字符串会导致类型字符串不能转换为 Int64:

push!(x, "hi")
MethodError: Cannot `convert` an object of type String to an object of type Int64

有两种方法可以解决这样的问题…

  • 编写一个新的 convert()方法,将字符串转换为整数。
  • 把 T 的类型改成 any,那么这个数组的类型可以是任意的。

对于这样的东西,最好的选择当然是第二种。在大多数情况下,这可能是你要做的选择,我们可以用一个简单的造型来做到这一点。

xany = Vector{Any}(x)

注意,虽然我可能说了 cast,但我们实际上是在这里调用一个构造函数。这是有区别的,因为转换/转换是通过方法完成的,而构造当然是通过构造函数完成的。

push!(xany, "hi")
11-element Vector{Any}:
  5
 10
 15
 20
 25
 30
 35
 40
 45
 50
   "hi"

№2:滤镜!()

另一个不合理的有用的方法是过滤器!()方法。这也是一种在 Julia 生态系统中随处可见的方法,那些在数据科学领域工作的人可能需要格外关注,因为这种方法经常被用作我们的条件屏蔽。该函数将根据函数的假返回值过滤值。这个函数当然可以是我们环境中的一个定义好的别名,但是它也可以是匿名的,甚至是一个闭包函数。由于在 Julia 中函数被视为与类型相同,并且该语言是词汇范围的,这使得像这样使用函数的调用非常容易应用于许多不同的场景。用法很简单,我将使用一个匿名函数,如果你想了解更多,我也有一篇文章:

filter!(z -> z < 40, x)
7-element Vector{Int64}:
  5
 10
 15
 20
 25
 30
 35

我希望 Base 中包含的一件事是 BitArray 能够做到这一点。我创建的 OddFrames 包实际上解决了这个问题,但是使 BitArray 索引成为类型间的通用特性。这样,您可以使用条件语句快速索引任何内容,而无需使用函数。也就是说,Julia 的优点在于,即使该方法的默认系统不符合我们的需求,比如用一个位数组屏蔽,我们也可以自己编写这样的代码!为此,我们还将方便地使用这个列表中的下两个函数,findall()和 deleteat!():

import Base: filter!function filter!(mask::BitArray, x::AbstractVector)
        pos = findall(x -> x == 0, mask)
        [deleteat!(x, p) for p in pos]
end

请注意,由于我们将 mask 分派给 bitarray,我们还需要将下面的数组转换为 vector,否则我们将得到“bool is not callable”,这是因为我们仍在使用常规过滤器!()方法,并试图将其作为函数调用。我们也可以将这种类型作为 Vector{Bool}来避免这种类型转换(不过,我们还是像以前一样构造了一个类型,只是在精神上可以认为这是一种类型转换,我只是想详细说明一下。)

mask = BitArray([typeof(z) == Int64 for z in xany])
11-element BitVector:
 1
 1
 1
 1
 1
 1
 1
 1
 1
 1
 0filter!(mask, xany)

1-element Vector{Vector{Any}}:  [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]

美味的肉汁…朱莉娅是个很酷的人。

注意,返回并不重要,它只是 for 循环的产物——我们可以不返回任何东西来抑制这个输出,因为我们的数组已经在函数内部变异了。

print(xany)

Any[5, 10, 15, 20, 25, 30, 35, 40, 45, 50]

№3:删除 at!()

下一个方法非常简单。删除 at!()方法允许我们通过索引删除数组中的一个元素。在前面的例子中,我们使用了 deleteat!()删除数组中每个有错误的位置。在我们的 x 数组的例子中,我将用它来删除我们的第一个索引,它将是 5。

deleteat!(x, 1)
6-element Vector{Int64}:
 10
 15
 20
 25
 30
 35

№4:查找所有()

findall()方法是另一个我一直在使用的非常好的方法,这也是为什么在上面使用它的原因。这个函数是我们列表中的第一个非突变函数,也是第一个返回非原始向量的函数。方法收集特定值的所有实例,然后返回找到这些值的索引数组。例如,我们可以对 x 上的数字 10 使用 findall(),因为它只有一个 10,现在在位置 1,我们将获得包含该位置的 1 元素数组。返回的类型总是 array,所以如果你的值是一个集合(不是按类型,而是按定义),那么你可以总是在第一个元素索引新的数组,以获得奇异位置。

findall(y -> y == 10, x)[1]1

使用这个,我们最终可以做三倍的工作来得到第一个元素的索引。

x[findall(y -> y == 10, x)[1]]10

我很搞笑。

№5: vcat/hcat

接下来要知道的方法分别是 vcat()和 hcat()方法。您可能已经猜到了,这些是用于数组的垂直和水平连接的。这些方法也可以用来将一维数组转化为多维数组。如果数组水平连接,这将把类型变为矩阵。在垂直连接的情况下,这基本上就像我们将每个值推入数组。

x3 = vcat(x, x, x)
18-element Vector{Int64}:
 10
 15
 20
 25
 30
 35
 10
 15
 20
 25
 30
 35
 10
 15
 20
 25
 30
 35

hcat 将创建一个矩阵:

xh = hcat(x, x, x)
6×3 Matrix{Int64}:
 10  10  10
 15  15  15
 20  20  20
 25  25  25
 30  30  30
 35  35  35

№6: .*, .+, …

接下来的清单上几乎所有的。运营商,其中有很多。基本上所有这些都只是常规操作符的迭代版本。虽然它们并不存在于每一个操作符绑定中,但是它们确实存在,并且比打开一个完整的循环来给数组中的每一个元素加一个数要方便和漂亮得多。这不仅适用于按位运算符,也适用于一元运算符。

x .== x
6-element BitVector:
 1
 1
 1
 1
 1
 1x .^ 26-element Vector{Int64}:
  100
  225
  400
  625
  900
 1225.- x6-element Vector{Int64}:
 -10
 -15
 -20
 -25
 -30
 -35

№7:插入!()

我们要看的下一个函数是 insert!()函数。正如您所料,这将给定的值插入到数组中。方法推的区别!()和 insert()方法的区别在于,insert 允许您指定要推进到的索引。如果在某个时候需要添加数据,或者特别是希望在不改变任何其他索引的情况下改变元素,这是非常方便的。这个函数也很容易使用,并且只接受三个位置参数。

insert!(x, 1, 5)7-element Vector{Int64}:
  5
 10
 15
 20
 25
 30
 35

根据我的经验,这种方法非常有用,但是在很多情况下,对于稍微改变的算法,我们可以切换到另一种类似的方法,splice!()

№8:拼接!()

拼接!方法很像 insert!方法,然而在插入时!将保留我们正在更改的索引周围的值,拼接!不会。拼接!函数也有更多的细节要处理,因为我们可以拼接!一次输入几个值。同样,我们可以一次选择多个索引——这种方法非常方便,使得可变数组成为可能并且易于使用。

splice!(x, 1:5, [50, 45, 40, 35, 30])7-element Vector{Int64}:
 50
 45
 40
 35
 30
 30
 35

№9:累加()

累积值可能是一件有点烦人的事情。虽然由于我们周围的基本函数,我们经常不需要使用累加器,但它们对于某些算法仍然非常有用。也就是说,这个列表中的下一个函数是 accumulate()函数。这将返回一个与我们提供的数组维数完全相同的数组。然而,这些元素将被操作成它之前的每个元素的累积。也就是说,新累积数组中的最终值将是整个数组的总和。最棒的是,我们可以用 Julia 的大多数操作符做到这一点,所以我们可以做一个累加器,它可以进行乘法、减法、平方等运算。

accumulate(*, x)7-element Vector{Int64}:
          50
        2250
       90000
     3150000
    94500000
  2835000000
 99225000000accumulate(+, x)[length(x)] == sum(x)true

№10:地图切片()

我想看的最后一个方法是 mapslices()。我们可能都习惯于 map()函数,但是 mapslices 的工作方式与该函数略有不同。这个函数只允许你把一个给定的函数映射到整个数组,但是只接收返回的某些值,例如,如果我们想以一种奇怪的方式对某个东西求和:

mapslices(sum, x, dims = [1])

结论

数组不仅是 Julia 编程语言的一个非常重要的方面,也是整个科学计算的一个非常重要的方面。Julia 有一个相当健壮的处理数组的接口,包括一维数组和其他数组,所以在使用这种语言时利用它是一个很好的主意。这些简单的方法可能看起来不会改变生活,但它们肯定是必不可少的、令人敬畏的和有用的。感谢您阅读我的文章,我希望这篇关于 Julia 中奇妙的 vector 实现的简短旅程是一篇很棒的阅读!

掌握 ggplot2 的 10 个示例:线形图

原文:https://towardsdatascience/10-examples-to-master-ggplot2-line-plots-3e43e9aec8f

R 的绘图包

约翰尼斯·安德森在 Unsplash 上拍摄的照片

你如何传递信息和信息本身一样重要。数据可视化是数据科学中传递信息、讲故事或分析的必要工具。

数据科学生态系统中最大的两个参与者是 Python 和 r。它们都有大量的包来加速和简化常见的任务。

在本文中,我们将通过 10 个示例来学习如何使用 ggplot2 创建和定制线图,gg plot 2 是 tidyverse 中的一个数据可视化包,它是数据科学的 R 包集合。

你可以成为 媒介会员 解锁我的全部写作权限,外加其余媒介。如果你已经是了,别忘了订阅https://sonery.medium/subscribe如果你想在我发表新文章时收到电子邮件。

我们将在示例中使用 3 个不同的数据集。你可以从我的 GitHub 页面上的数据集库中下载它们。

第一个是包含 2022 年苹果股票价格的 CSV 文件。我们先用数据表包的 fread 函数创建一个数据表。

*library(data.table)
library(ggplot2)apple <- fread("datasets/apple_stock_prices_2022.csv")head(apple)
**# output** Date   High    Low   Open  Close    Volume Adj Close
1: 2022-01-03 182.88 177.71 177.83 182.01 104487900  181.2599
2: 2022-01-04 182.94 179.12 182.63 179.70  99310400  178.9595
3: 2022-01-05 180.17 174.64 179.61 174.92  94537600  174.1992
4: 2022-01-06 175.30 171.64 172.70 172.00  96904000  171.2912
5: 2022-01-07 174.14 171.03 172.89 172.17  86709100  171.4605
6: 2022-01-10 172.50 168.17 169.08 172.19 106765600  171.4804*

示例 1

我们将创建一个简单的线图,在 x 轴上显示数据,在 y 轴上显示收盘价。

*ggplot(apple, aes(x = Date, y = Close)) + 
  geom_line()*

ggplot 函数指定数据以及到 x 和 y 的映射。aes 代表美学映射,描述数据中的变量如何映射到 geom 的视觉属性(例如 geom_line)。

geom_line 是绘制线图的函数。以下是上述代码片段的输出:

(图片由作者提供)

例二

我们可以在外观上做很多定制。让我们改变线条的大小和颜色,这可以在 geom_line 函数中完成。

*ggplot(apple, aes(x = Date, y = Close)) + 
  geom_line(size = 1.2, color = "blue")*

(图片由作者提供)

我们也可以使用 linestyle 参数(linestyle = "dashed ")将其设为虚线。

示例 3

y 轴上的范围根据数据集中的值自动定义。但是,可以使用 ylim 函数对其进行更改。

默认值通常是好的,但我们有时需要调整它们,以保持多个图之间的标准或有一个从零开始的轴。让我们将范围设置为 100–200。

*ggplot(apple, aes(x = Date, y = Close)) + 
  geom_line(color = "darkgreen") + 
  ylim(100, 200)*

(图片由作者提供)

实例 4

我们可以添加点来指示数据点的位置。当我们没有很多数据点时(即观察的密度很低),这是很有帮助的。

在本例中,我们将使用测量数据集。

*measurements <- fread("datasets/measurements.csv")measurements
**# output**
   day value
1:   1    80
2:   2    93
3:   3    94
4:   4    76
5:   5    63
6:   6    64
7:   8    85
8:   9    64
9:  10    95*

让我们创建一个线图,在 x 轴上显示日期,在 y 轴上显示数值。我们还将使用 geom_point 函数添加点。

*ggplot(measurements, aes(x = day, y = value)) + 
  geom_line() + 
  geom_point()*

(图片由作者提供)

这些点被放置在我们在数据集中进行观察的位置。例如,数据集没有第 7 天,所以不显示。

实例 5

在前面的例子中,观察值的 x 值不是很清楚。为了在 x 轴上显示每一天的值,我们可以将其转换为一个因子,并使用 ggplot 函数的 group 参数。

*measurements[, day := factor(day)]ggplot(measurements, aes(x = day, y = value, group = 1)) + 
  geom_line() + 
  geom_point()*

(图片由作者提供)

实例 6

我们可以在一个线图上有多条线。对于这个例子,我们将使用另一个数据集,它包含 2022 年 9 月苹果和谷歌的股票价格。

*stock <- fread("datasets/apple_google_stock_prices_092022.csv")head(stock)
**# output** Date   High    Low   Open  Close   Volume Adj Close Stock
1: 2022-09-01 158.42 154.67 156.64 157.96 74229900    157.96  AAPL
2: 2022-09-02 160.36 154.97 159.75 155.81 76905200    155.81  AAPL
3: 2022-09-06 157.09 153.69 156.47 154.53 73714800    154.53  AAPL
4: 2022-09-07 156.67 153.61 154.82 155.96 87449600    155.96  AAPL
5: 2022-09-08 156.36 152.68 154.64 154.46 84923800    154.46  AAPL
6: 2022-09-09 157.82 154.75 155.47 157.37 68028800    157.37  AAPL*

股票栏表示股票的名称。

对于每一天,我们有两个不同的值,一个是苹果的,一个是谷歌的。因此,如果我们像前面一样绘制日期和收盘价,我们最终会得到如下图:

(图片由作者提供)

我们需要用不同的线条显示苹果和谷歌的股票价值。做这件事有几种不同的方法。例如,我们可以使用颜色参数并指定区分苹果和谷歌的列。

*ggplot(stock, aes(x = Date, y = Close, colour = Stock)) + 
  geom_line()*

(图片由作者提供)

例 7

让我们重新创建以前的情节,但对苹果和谷歌使用不同的线条样式。我们只需要使用线型参数,而不是颜色。

*ggplot(stock, aes(x = Date, y = Close, linetype = Stock)) + 
  geom_line(size = 1.2)*

(图片由作者提供)

实施例 8

在示例 4 和 5 中,我们添加了点来标记数据集中的观察值。这些点的大小和形状也可以定制。

让我们在示例 7 的图中添加点,并更改 y 轴的取值范围。

*ggplot(stock, aes(x = Date, y = Close, color = Stock)) + 
  geom_line() +
  geom_point(size = 3, shape = 22, fill = "white") +
  ylim(90, 200)*

(图片由作者提供)

示例 9

我们可能想要更改默认的轴标签或给绘图添加标题。让我们通过这样做使我们的情节更有知识性和吸引力。

labs 功能可用于添加标题和副标题。可以使用 xlab 和 ylab 函数更改轴标签。

*ggplot(stock, aes(x = Date, y = Close, color = Stock)) + 
  geom_line(size = 1) +
  labs(title = "Apple vs Google Stock Prices",
       subtitle = "September, 2022") +
  xlab("") +
  ylab("Closing Price")*

(图片由作者提供)

实例 10

我们可以为情节添加一个主题,这允许进行许多自定义,包括:

  • 更改标题和副标题的字体大小和样式
  • 更改轴标签的字体大小和样式
  • 更改刻度线的字体大小、样式和方向

让我们使用这些来定制前一个例子中的情节。

*ggplot(stock, aes(x = Date, y = Close, color = Stock)) + 
  geom_line(size = 1) +
  labs(title = "Apple vs Google Stock Prices",
       subtitle = "September, 2022") +
  xlab("") +
  ylab("Closing Price") +
  theme(
    plot.title = element_text(size = 18, face = "bold.italic"),
    plot.subtitle = element_text(size = 16, face = "bold.italic"),
    axis.title.y = element_text(size = 14, face = "bold"),
    axis.text.x = element_text(size = 12),
    axis.text.y = element_text(size = 12)
  )*

(图片由作者提供)

Ggplot2 是一个高效的库,提供了很大的灵活性。我认为它与 Matplotlib 相似,我们可以在图上定制几乎任何东西。

本文中的示例涵盖了创建和定制线图所需的大部分内容。在一些边缘情况下,您需要做一些进一步的定制,但是到了那个时候,您可以担心它们。

感谢您的阅读。如果您有任何反馈,请告诉我。

10 本关于数据工程的精彩书籍

原文:https://towardsdatascience/10-fantastic-classic-books-for-data-engineering-84de7fb7e061

让你成为成功数据工程师的 10 本必读书籍

艺术之星在 Unsplash 上拍摄的照片

数据工程十大奇书介绍

许多在线免费资源教你如何成为一名数据工程师,但是这些在线资源的深度是有限的。阅读领域专家的书籍是获得这种深入知识的更有前途的方法。

2023 年数据工程读什么书,你在找建议吗?我有一个答案给你。作为一名成功的数据工程师,我为你列出了十本经典书籍。

在2021 年数据/AI 薪资调查、 PythonSQL 是最基础的技术技能。要想成功,你至少要精通这两种语言。我推荐了两本中级水平的书来扩展你的 Python 和 SQL 知识。

但是,认识那两个大概也只是敲开了做数据工程师的门。许多公司希望你有使用 Apache Spark 等批处理系统、Apache Flink 或 Apache Beam 等流系统以及 Apache Airflow 和 Kubernetes 等工作流编排工具的经验。我对每一个议题都有四点建议。

数据工程师需要设计原则才能在职业生涯中更上一层楼。总的来说,关于分布式系统和维度建模(OLAP),我强烈推荐两本书给你,让你对这些主题有更多的了解。

最后,数据工程将获得更多的奖金,拥有一些数据分析技能以及数据沟通技能。我找到了另外两本书,它们会提高你的技能。

先说我推荐的十本数据工程经典书籍:

1.关于分布式系统的主要书籍:设计数据密集型应用

我的短评:如果我有一本书可以推荐的话,这是我的首选。这本书涉及广泛的主题,有许多参考资料。你可以用这本书作为目录,从引用的内容中积累深入的知识。

这本书将众多与数据相关的技术与三个主要部分结合在一起:可靠性、可伸缩性和可维护性。这本书涵盖了分布式系统如何广泛地工作。马丁在这本书里真的很博学,分享了他的经验,他引用了很多书和论文供进一步阅读。这些书籍和论文可以成为数据和软件工程师的另一份权威清单。从他的书中,这里有一些突出的主题:

  • 你会学到一个类似于“如何设计 Twitter 的经典系统设计面试问题?”。
  • 如果数据不适合单台机器,如何横向扩展数据?领导者和追随者如何确保高可用性?
  • 明确的酸解释(原子性、一致性、隔离性、持久性)。
  • 更好地理解最少一次、最多一次和恰好一次语义在流应用程序中至关重要。

唯一的缺点是,自从这本书于 2017 年 3 月出版以来,随着许多新技术的发展,一些图书馆已经褪色,少数内容不再新鲜。然而,数据系统设计的核心概念在 2022 年的今天仍然适用。任何数据系统都需要达到**可靠性、可伸缩性和可维护性的原则。**通常也是买来作为学习系统设计的参考书。如果你正在寻找一本更新鲜的书来学习系统设计或去面试,我也推荐两本来自 Alex Xu 的书:

  • 系统设计面试—内部人员指南
  • 系统设计访谈—内部人员指南:第 2 卷

2.SQL 基础书: T-SQL 查询(开发者参考)

我的短评 : Ben-Gan 从 ANSI/ISO 标准的角度解释了 SQL,并教你从过程化编程的心态去思考。读了他的书后,作为一名数据工程师,编写复杂的查询和调试任何与 SQL 查询相关的问题变得容易了。

Ben-Gan 之前写过一些关于写 T-SQL 的经典书籍。这总结了他在教导人们如何先思考,然后编写 SQL 查询方面的最新专业知识。不要跳过这本书,即使 T-SQL 不是你的主要 SQL 语言。这本书的核心思想不是教你 SQL 的奇特语法;相反,它很好地解释了如何从过程化编程的角度思考 SQL。理解了核心概念后,您会对编写 SQL 逻辑感到更加舒适。此外,您成为了调试 SQL 语句的专家,因为您知道它在内部是如何工作的。书中的材料为你奠定了坚实的基础,使你成为编写 SQL 的专家,而这是数据工程师必须具备的。

3.OLAP/数据仓库必读:数据仓库工具包(维度建模权威指南,第 3 版)

我的短评:一本定义维度建模/ OLAP 系统的经典书籍。作为一名数据工程师,维度建模和 OLAP 是需要大量工作才能理解的主题。理解它们可以让你的日常工作顺利进行,并让你有更大的机会在数据仓库主题的面试中表现出色。

这本书没有制作虚假的模式,而是在每一章中利用了不同的行业,并展示了不同的数据模型作为例子。它没有马上进入设计模式的技术部分。这本书首先提出了一些问题,比如为什么你需要一个数据仓库,以及如何与最终用户合作来交付一个最终会成功的模型。这本书教你使用“企业数据仓库总线矩阵”来弥合技术设计差距和用例。然后,它涵盖了维度建模的四个关键步骤,并为本书的其余部分奠定了基础。

作为一名数据工程师,您需要构建一个 ETL 管道,并以分析格式存储数据。维度建模还没有过时。许多行业仍然大量使用它来开发他们的 OLAP 系统。

4.Python 深度:流畅的 Python:清晰、简洁、有效的编程第二版

我的短评:深入了解 Python。这些书展示了如何作为开发人员编写有效的 Python,并探索了 Python 的独特特性以及它们与其他语言的不同之处。它揭示了 Python 在幕后是如何工作的,这使得这本书成为提高您的 Python 技能的绝佳选择。

这本书无疑不是 Python 101 的书。它要求您对 Python 有中级水平的理解。它的目标读者是那些能够编写 Python 但不知道自己是否编写了有效的 Python 代码或遵循 Python 模式的人。这些中级和高级知识是许多数据工程师错过的空白。

Python 使得给每个用户一条快乐的上船之路变得简单。但是,有效地编写 Python 来利用它的最佳特性只是在某些时候。Python 作为数据工程师和您的首选编程语言已经被广泛采用。这本书可以真正让你重新思考用 Python 写代码。

5.向创造者学习: Spark:权威指南:让大数据处理变得简单

我的短评:向 Matei Zaharia(Apache Spark 的创造者)学习 Spark 让这本书成为一种独特的阅读体验。

在那个年代,Apache Spark 及其生态系统对于任何数据工程师来说都不应该是陌生的。这本书带给你一个 Apache Spark 的创造者视角。它回顾了 Spark 的历史,并深入探讨了 Scala 和 Python 中的 RDD 和 DataFrame API。它更详细地介绍了 Spark 生态系统,比如批处理、流、ML 和 Graph,还重点介绍了部署和 Spark 作业调优。

虽然 Spark 3.0 已经发布,但核心概念变化不大。这本权威性的指南仍然是获得更深刻的 Apache Spark 知识的理想选择。

6.工作流管理工具:带有 Apache Airflow 的数据管道

我的短评:Apache Airflow 的分步指南,从创建简单的 DAG 到将 air flow 部署到生产环境。

Apache Airflow 正在成为工作流管理的首选开源包。这本书给人的第一感觉就像是 Apache Airflow 在线文档的增强版。但是很快,你就会意识到作者从部署气流的工业经验中增加了更多的内容。主要是在某些情况下气流设计不正确的地方,它会显示关于如何解决它们的合理提示。

气流有特定的用例,而不是像流数据这样的用例。也需要一些人去理解它的核心概念。我有一些关于气流的博客帖子,在社区中很受欢迎,也可以随意阅读:

  • 气流状态 101 概述阿帕奇气流状态
  • 了解气流执行器的温和介绍
  • 气流计划间隔 101

7.关于串流基础,你需要知道的一切:串流系统:大规模数据处理的内容、地点、时间和方式

我的短评:阅读构建了最初的谷歌流媒体系统 Millwheel 的谷歌工程师,在本书中系统地阐述他的论文和流媒体的概念。这本书是流媒体的首选书籍。它为现代流行的流媒体系统如 Beam、Flink 和 Spark 流媒体奠定了基础。

作为一名数据工程师,除了传统的批量数据处理之外,随着人们越来越渴望更快地获得数据,流式系统变得越来越普遍。流式系统始终如一地全天候处理数据。早期做得最好的公司是谷歌。

谷歌已经建立了一个名为 Millwheel 的内部流媒体系统,但尚未开源。几位谷歌工程师发表了一篇论文,“ MillWheel:互联网规模的容错流处理”,详细解释了 MillWheel 作为一个流媒体平台。泰勒是这篇论文的第一作者。这篇论文启发了德国的一些研究生,他们后来构建了 Apache Flink 作为一个开源项目。

这本书涵盖了为什么我们需要一个流系统,并设置了流系统背后的基本思想。我强烈推荐他的书和 MilllWheel 报纸,因为他在流媒体领域很有权威。这本书的数字版本展示了一些很酷的动画来演示流式思想。我强烈建议你也去看看。

8.了解数据科学: R 对于数据科学:导入、整理、转换、可视化和建模数据

我的短评:数据工程师应该不仅仅致力于 ETL 数据管道。数据工程师的一组用户是数据科学家。了解基本的数据科学思想将使沟通更加轻松,并帮助数据工程师从数据中获得更多商业意识,以提供更好的解决方案。

Wickham 先生还是 R-gg plot 2 中最流行的数据可视化工具之一的作者。如果你想了解为什么 ggplot2 如此神奇,即使你不是用 R 开发也应该花时间学习,请查看我的文章— 为什么 ggplot2 对数据可视化如此好?

这本书不全是关于 ggplot2 的。它讲述了数据科学流程以及如何执行探索性分析。对于任何数据项目,如何有效地扯皮数据。虽然用 R 开始编程是一个学习曲线,但这本书让它不那么痛苦。

9.数据交流:用数据讲故事:商业人士数据可视化指南

我的简短评论:“技术并不能促成交易。一个好故事可以。”无论你投入多少时间和精力来分析数据和构建管道,适当的沟通都可能导致不良的结果。这本书告诉你该做什么和不该做什么,以帮助你吸引观众。

构建仪表板很简单,但是开发一个自我解释的仪表板需要更多的思考和努力。作者在 Google 辅导数据可视化方面有多年的经验。这也是另一本从领域专家那里学到的书。

这本书没有给你留下优秀的图形,而是指导你在会议或文档等不同渠道上与他人交流数据时的良好实践。它还教会了你如何恰当地进行面对面的讨论,并在 3 分钟内抓住听众的注意力来展示数据。我发现这对于任何推动对话以获得更好结果的数据工程师来说都特别实用。

10.获取云基础知识: Kubernetes 在行动

我的短评:随着越来越多的数据基础设施迁移到云端,数据工程师应该了解他们的数据是如何流动的。随着许多基础设施被容器化,学习 Kubernetes 对于数据工程师来说变得很有必要,尤其是那些在多家云提供商工作的数据工程师。

这本书通过介绍 Docker 和 Kubernetes 很好地充当了第一本 Kubernetes 书;构建本地集群,并向 Kubernetes 集群添加更多特性。在此过程中,您还会熟悉kubectl命令。这是一本非常好用的入门书,可以用来调试 Kubernetes 生态系统中任何关于云的数据工程错误。

最后的想法

我选择的书籍涵盖了各种数据工程主题,包括基本编程语言、流行的批处理和流框架、数据通信和云。这里还有很多书我没有展示,也很棒。我想提出我认为一个数据工程师应该经历的最明确的清单。我希望更多关于数据工程的精彩书籍不断涌现,并且你能享受阅读这些书籍的美好时光!

作为数据工程师,你是如何获得所有这些技能的?答案是观察其他数据工程师做什么,阅读经典的数据工程书籍,实践数据工程概念和技能。获得知识和经验需要一些时间。一旦你承诺去做,它最终会回报你。

请评论你对这份名单的看法,以及你是如何喜欢阅读它的。干杯!

免责声明:这篇文章有亚马逊联盟链接,如果你从上面的链接购买这本书,我可能会得到一小笔佣金。它不会增加你的成本。感谢您的支持!

希望这个故事对你有帮助。本文是我的工程&数据科学故事系列的一部分,目前包括以下内容:

赵承志

数据工程和数据科学故事

View list47 stories

你也可以 订阅我的新文章 或者成为 推荐媒介会员 无限制访问媒介上的所有故事。

如果有问题/评论,请不要犹豫,写下这个故事的评论或者通过 Linkedin 或 Twitter 直接联系我

2022 年你应该知道的 10 个领先的 Python 库

原文:https://towardsdatascience/10-leading-python-libraries-you-should-know-in-2022-a3287498c4b4

破折号,不平衡学习, FlashText,PyFlux,还有更多

由布雷特·乔丹在 Unsplash 上拍摄的照片

Python 编程充满了可能性。它简单明了,有许多优秀的库和函数,可以使任务更易于管理。每个 Python 开发者都必须使用流行的库,比如 OS、pandas、datetime、scikit-learn、seaborn、Tkinter 等等。

在本文中,我将讨论十个您可能感兴趣的 Python 库。让我们仔细看看一些不常见但很有价值的 Python 编程库。

1。Wget

数据科学家最重要的职责之一是数据提取,尤其是从网站提取数据。Wget 是一个用于下载非交互式在线文件的免费模块。即使用户没有登录,该模块也可以在后台运行,因为它是非交互式的。因此,它是从网站或页面下载所有照片的理想选择。

我们通常使用这个模块来实现自动化,我们想让它在后台继续运行。

安装:

pip install wget

2。钟摆

如果您需要在 python 项目中使用日期和计时,钟摆是一个很好的项目。这个 python 包简化了日期和时间操作。它能够完全取代 Python 的原生类。

安装:

pip install pendulum

如果我们想获得任何特定时区的当前时间,那么钟摆模块的一行代码可以完成如下任务。

import pendulum# Getting current UTC time
**utc_time =****pendulum.now('UTC')**

3。不平衡学习

事实上,当每个类别中的样本数量几乎相等时,分类算法的性能最佳,但在实际项目中,大多数数据集是不平衡的。

这些数据集影响机器学习算法的学习阶段和后续预测。为了解决这些问题,不平衡学习正在发展。IB 项目的组件 Scikit Learn 与之兼容。当您下次遇到不平衡的数据集时,请记住这一点。

安装:

pip install -U imbalanced-learn# orconda install -c conda-forge imbalanced-learn

4。FlashText

在大多数 NLP 任务中,替换句子中的单词或从短语中移除单词是文本数据清洗。这个过程通常使用正则表达式来执行,但是随着搜索关键字的数量接近数千,它变得非常困难。

Python 中的 flash 文本模块基于 flash 文本算法,在这种情况下提供了一个合适的替代方案。Flashtext 的运行时间是一致的,不管搜索查询的数量是多少,这是它最健壮的特性。

安装:

pip install flashtext

5。模糊模糊和多模糊

这个名字听起来很有趣,但是 fuzzywuzzy 是一个方便的字符匹配库。它可以快速实现字符串匹配和令牌匹配等操作。它还可以很容易地匹配来自几个数据库的条目。

有许多高级模糊匹配替代方法可用,如 polyfuzz,它使用变形器、手套、快速文本和嵌入来进行高效匹配。

安装:

pip install fuzzywuzzy
pip install polyfuzz

如果我们想用 transformers、FastText、Td-IDF 或 Embeddings 等高级算法在两个文本列表之间应用模糊匹配,那么下面几行代码可以帮助我们。

from polyfuzz.models import TFIDF                                from polyfuzz import PolyFuzz                                                           tfidf = TFIDF(n_gram_range=(3, 3))                              model = PolyFuzz(tfidf)                             model.match(from_list, to_list)

直接从行业专家那里获得 Python 和数据科学的优质内容——使用我的推荐链接成为中级会员以解锁内容:https://pranjalai.medium/membership

6。PyFlux

机器学习中最普遍的困难之一是时间序列分析。Pyflux 是一个开源 Python 包,旨在处理时间序列挑战。该模块包含几个良好的当前时间序列模型,包括 Arima、GARCH 和 VaR 模型。最后,flux 为时间序列建模提供了一种有效的方法。值得一试。

安装:

pip install pyflux

7。Ipyvolume

数据科学是关于交流结果的,可视化是一个巨大的帮助。Ipyvolume 是一个 Python 模块,用于在 Jupyter 笔记本中查看 3D 视觉效果(如 3D 立体图)。

安装:

# Using pippip install ipyvolume# Using Conda/Anacondaconda install -c conda-forge ipyvolume

这是你如何使用它。

import ipyvolume as ipv
import numpy as np
x, y, z, u, v, w = np.random.random((6, 1000))*2-1
ipv.quickquiver(x, y, z, u, v, w, size=5)

由作者添加

8。破折号

Dash 是一个用于开发 web 应用程序的轻量级 Python 框架。它是用 Flash Plotly.js 和 React.js 构建的,Dash 是创建数据可视化应用程序的理想选择。这些应用程序可以通过网络浏览器查看。

安装:

pip install dash==0.29.0 # This will install the core dash backendpip install dash-html-components==0.13.2 # This command will install HTML componentspip install dash-core-components==0.36.0 # Supercharged componentspip install dash-table==3.1.3 # Interactive DataTable component

9。Bashplotlib

Bashlotlib 是一个 Python 库和命令行实用程序,用于在终端创建简单的图形。当用户不能访问 GUI 时,可视化数据变得非常有用。

安装:

pip install bashplotlib

下面是如何使用它来制作一个交互式直方图。

import numpy as npfrom bashplotlib.histogram import plot_histrand_nums = np.random.normal(size=700, loc=0, scale=1)plot_hist(rand_nums, bincount=100)

由作者添加

10。Colorama

Colorama 是一个 Python 包,可以在终端和命令行上生成彩色文本。它使用标准 ANSI 转义码对终端输出进行着色和样式化。它是跨平台的,在 Windows 和 Linux 上运行良好。

安装:

pip install colorama

下面是使用方法。

from colorama import init, Fore, Backinit()# Fore changes the text's foreground color
print(Fore.BLUE + "These are Blue Letters")#Back changes the text's background color
print(Back.WHITE + "This is White Background")

结论

许多现实世界的应用程序经常使用易于理解的 Python 编程语言。由于它是一种高级的、动态类型的、解释型的语言,所以它在错误调试领域迅速发展。此外,因为 Python 库是可用的,所以用户可以完成各种活动而无需构建他们的代码。

因此,学习 Python 及其库对于当今任何有抱负的人才来说都是至关重要的。作为开发人员,这些库可以让您的生活更加轻松。

在你走之前……

如果你喜欢这篇文章,并且想继续关注更多关于 Python &数据科学精彩文章——请点击这里https://pranjalai.medium/membership考虑成为中级会员。

请考虑使用 我的推荐链接 报名。通过这种方式,会员费的一部分归我,这激励我写更多关于 Python 和数据科学的令人兴奋的东西。

本文标签: 中文翻译博客TowardsDataScience