用于字符串操作的 5 个必备 SQL 函数
处理文本数据是数据分析的一个重要部分
照片由 Aaron Burden 在 Unsplash
SQL 用于管理关系数据库中的数据。然而,它提供的不仅仅是查询数据库。SQL 函数还允许高效地执行数据分析和操作。
因为大量的原始数据是以文本形式出现的,所以拥有多种操作字符串的方法是非常重要的。原始数据通常不是最理想的格式。我们操纵它们来创造有用的和信息丰富的特征。
在本文中,我们将介绍 5 个使用字符串的 SQL 函数。举例来说,我将使用 Kaggle 上的一小部分墨尔本房产数据集。
我创建了一个名为 melb 的表。让我们先来看看数据集。
(图片由作者提供)
数据集包含一些待售房屋的信息。
注:关系数据库管理系统有 MySQL、SQL Server、PostgreSQL 等几种。尽管它们大多采用相同的 SQL 语法,但可能会有一些细微的差别。在本文中,我们将使用 PostgreSQL。
1.串联
串联一个字符串基本上就是将多个字符串组合成一个。在我们的数据集中,我们可以将 address 和 region name 列组合起来创建一个完整的地址。
我们可以使用 concat 函数来执行这项任务。
SELECT CONCAT(address, ', ' , regionname) AS full_address
FROM melb
LIMIT 5; full_address
-----------------------------------------
85 Turner St, Northern Metropolitan
25 Bloomburg St, Northern Metropolitan
5 Charles St, Northern Metropolitan
40 Federation La, Northern Metropolitan
55a Park St, Northern Metropolitan
我们也可以使用“||”操作来连接字符串。
SELECT address || ', ' || regionname AS full_address
FROM melb
LIMIT 5;
limit 关键字限制要显示的行数。
2.裂开
一个字符串可能包含多条信息。在这种情况下,我们可能需要从字符串中提取一部分,并将其作为一个单独的特征。
地址栏包含门牌号。让我们用它来创建一个名为门牌号的新列。
SELECT SPLIT_PART(address, ' ', 1) AS house_number
FROM melb
LIMIT 5;house_number
--------------
85
25
5
40
55a
split_part 函数有 3 个参数。第一个是列名。第二个是定义分割点的字符,在我们的例子中是空格。第三个参数表示拆分后我们需要哪个部分。门牌号在地址的开头,所以我们取第一部分。
3.替换
replace 函数允许用一组新的字符替换字符串的一部分。当我们需要标准化一些文本时,它就派上了用场。
例如,我们可以将地址列中的“st”字符替换为单词“street”。
SELECT address, REPLACE(address, 'St', 'Street') AS new_address
FROM melb
LIMIT 5; address | new_address
-----------------+---------------------
85 Turner St | 85 Turner Street
25 Bloomburg St | 25 Bloomburg Street
5 Charles St | 5 Charles Street
40 Federation La | 40 Federation La
55a Park St | 55a Park Street
4.左边和右边
left 和 right 函数可用于从字符串中提取一部分。我们根据字符的数量来定义要选择的部分。例如,带有 5 的 left 函数将从左侧返回前 5 个字符(即从头开始)。
SELECT LEFT(regionname, 5) AS region_5
FROM melb
LIMIT 5;region_5
----------
North
North
North
North
North
右函数的工作方式类似。
5.喜欢
like 其实是一个 SQL 运算符,不是函数。然而,在处理字符串时,它是一个非常有用的工具。我们可以用它来过滤与另一个字符串或一系列字符“相似”的字符串。
例如,我们可以过滤包含字符串“Park”的地址。
SELECT address
FROM melb
WHERE address LIKE '%Park%'
LIMIT 5; address
----------------
55a Park St
49 Park St
159 Park St
17 Parkhill Dr
93 Parkmore Rd
“%”代表任何字符。因此,我们正在过滤以任何字符开头和结尾的地址。它必须在某个地方包含“公园”。
like 运算符区分大小写。我们很可能用“公园”得到不同的地址。让我们试试。
SELECT address
FROM melb
WHERE address LIKE '%park%'
LIMIT 5; address
-----------------
18 Spark St
14 Riverpark Dr
1 Riverpark Dr
23 Oakpark Dr
结论
文本数据是数据分析的重要组成部分。因此,我们需要有效的方法和技术来处理字符串。我们在本文中介绍的内容可以帮助您操作或更新字符串。您还可以使用这些函数从字符串中提取一条信息。
感谢您的阅读。如果您有任何反馈,请告诉我。
时间序列分析中 5 个必须知道的术语
数据科学的基础部分
马克西姆·霍普曼在 Unsplash 上的照片
时间序列是按时间顺序排列的一系列观察或测量结果。谈论时间序列时,首先想到的画面通常是股票价格。然而,时间序列是普遍存在的。
一个地理位置的年降雨量、超市产品的日销售量、工厂的月耗电量、化学过程的每小时测量值都是时间序列的例子。
时间序列分析是数据科学的一个基本领域,有着广泛的应用。如果你成为这方面的专家,你获得数据科学家工作的机会可能会大大增加。
在这篇文章中,我们将回顾时间序列分析中 5 个必须知道的术语和概念。
1.确定性和随机过程
我们最好从区分确定性过程和随机过程开始讨论。
可以计算确定性过程中的时间相关值。例如,两年后你的储蓄账户里会有多少钱可以通过最初的存款金额和利率计算出来。我们不能真正谈论确定性过程中的随机性。
另一方面,随机过程基于随机性。我们不能计算随机过程中的未来值,但我们可以谈论未来值在一个范围内的概率。
2022 年加州的降雨量有 90%的可能性是 21 英寸。我的假设是基于加州降雨量的概率分布,当然,我的假设带有随机性。
从这个意义上说,随机过程可以被认为是按时间排序的随机变量的集合。那么,时间序列就是一个随机过程的实现。
2.平稳性
我们刚刚把时间序列定义为一个随机过程的实现。平稳性意味着生成时间序列的过程的统计特性不会随时间而改变。
在平稳的时间序列中,我们无法观察到均值或方差的系统变化。假设我们从平稳时间序列中取两个间隔,如下所示:
- 从时间 t 到时间 t + N 的 N 次观察
- 从时间 t + k 到 t + N + k 的另外 N 个观察值
这两个区间的统计特性非常相似。这两个区间的均值或方差没有系统性差异。
因此,平稳的时间序列不具备
- 季节性
- 趋势
- 周期性波动
下图显示了一个平稳的时间序列。这些值可能是由随机噪声产生的,但我们没有观察到趋势或季节性。
(图片由作者提供)
下图显示了一个非平稳时间序列。我们可以清楚地观察到增加的趋势。
(图片由作者提供)
3.自协方差函数
我们首先要明白协方差是什么意思。
协方差是两个随机变量之间线性相关性的度量。它比较两个随机变量相对于其平均值(或期望值)的偏差。
随机变量 X 和 Y 之间的协方差公式:
X 和 Y 的协方差
如果 X 和 Y 的值以相同的方向变化(即它们都增加或减少),它们之间的协方差将为正。
如果你想了解更多,我试着更详细地解释协方差和相关性:
https://medium.com/swlh/covariance-vs-correlation-explained-34d1b4142e28
回到我们关于自协方差的讨论,回想一下时间序列是一个随机过程的实现,它可以被定义为一系列随机变量(X₁、X₂、x₃……)。
假设我们有一个平稳的时间序列,让我们从这个时间序列中取两个随机变量:
- Xₜ
- Xₜ ₊ ₖ
k 是这两个随机变量之间的时间差。这两个随机变量之间的自协方差函数为:
自协方差函数
因为我们假设平稳性,所以自协方差函数仅取决于时间差(即 k 的值)。平稳时间序列的性质在时间上移动时不会改变。
cₖ是滞后 k 时自协方差函数的估计
换句话说,这个时间序列的以下部分的属性是相同的。
- 从 Xₜ到 Xₜ ₊ ₖ
- 从 Xₜ ₊ ₙ到 Xₜ ₊ ₙ ₊ ₖ
4.自协方差系数
我们现在已经了解了自协方差函数。下一步是自协方差系数,它在时间序列分析中非常重要。
不同时滞的自协方差系数定义为:
无法精确计算有限时间序列的自协方差函数,因此我们计算估计值 cₖ,如下所示:
x-bar 值是样本平均值。
假设我们想要计算具有 50 个值(k=5,N=50)的时间序列的滞后 5 的自协方差系数。
上述等式的分子是针对 X₁对 X₆、X₂对 X₇、…、X₄₀对 X₄₅.而计算的然后,我们将所有组合的总和除以 50。
我们可以使用 acf 程序很容易地计算 R 中的自协方差系数。
让我们首先创建一个有 50 个值的随机时间序列。
random_time_series <- ts(rnorm(50))plot(random_time_series)
随机时间序列(图片由作者提供)
我们可以如下计算自协方差系数:
acf(random_time_series, type="covariance")
不同时滞的自协方差系数(图片由作者提供)
5.自相关函数
自协方差系数的值取决于时间序列中的值。不同时间序列的自协方差系数之间没有标准。
我们可以用自相关函数(ACF)来代替。滞后 k 处的自相关系数可计算如下。
自相关系数
我们用滞后 k 时的自协方差系数除以滞后 0 时的自协方差系数。
类似地,自相关系数的估计可以计算如下:
自相关系数的估计
自相关系数的值总是在-1 和 1 之间。
在 R 中,我们也可以使用 acf 例程来计算自相关系数。
acf(random_time_series)
ACF 图(图片由作者提供)
自相关系数总是从 1 开始,因为 C₀ / C₀等于 1。
蓝色虚线表示显著性水平。正如我们在图中观察到的,不同时间滞后之间的相关值非常低,因为我们随机生成了该数据。
ACF 图也称为相关图。
时间序列分析广泛应用于数据科学中。我们已经介绍了时间序列分析的 5 个基本术语和概念。
当然,这一领域还有更多的内容,因为时间序列数据有其自身的动态性,需要特定的分析技术。
你可以成为媒介会员来解锁我的作品的全部访问权限,以及媒介的其余部分。如果您使用以下链接,我将收取您的一部分会员费,无需您支付额外费用。
https://sonery.medium.com/membership
感谢您的阅读。如果您有任何反馈,请告诉我。
你应该考虑阅读的 5 本新的数据科学书籍
了解这些书的最新情况
汤姆·赫曼斯在 Unsplash 上的照片
今天,有一百多万种方法可以学习你想要的任何新技能。你可以去 youtube 寻找视频,你可以去 Medium 阅读一些有用的文章,或者你可以听播客,边做其他事情边学习。
但是,自从有了书面语言以来,其中一种学习方法就是书本。在我看来,书籍是信息的瑰宝,无论你想学什么,都有可能有一本书或几本书在谈论它。书籍是我最喜欢和最可靠的信息来源之一,不管是旧的还是新的。
它们可能不是每个人都喜欢的学习方法,但我们都承认,在某个时候,我们都会回去找一本书来查找信息。书籍不会神奇地教你一项技能;就像任何其他形式的学习一样,你需要付出努力并愿意学习,这样你就可以充分利用任何书籍或学习资源。
可以说,数据科学拥有无限数量的在线和离线学习资源。而你只能预测,资源的数量会随着领域的变大而变大。在过去的几年里,有那么多的数据科学书籍以你喜欢的语言出版。
在本文中,我将向您推荐 2020 年和 2021 年出版的 5 本新的数据科学书籍,我觉得无论您是数据科学新手还是已经在该领域工作了一段时间,这些书籍都非常值得一读。
№1:数据科学:初学者数据科学完全指南 Sabra Deal
不可否认的是,数据科学每天都在不断吸引新的聪明人加入。老实说,我不认为这种趋势会很快放缓。这份清单上的第一本书是针对这个领域的初学者的。
我最喜欢这本书的一点是,当你需要学习的主要信息只用 62 页解释时,它是多么的轻。这本书并不是要给你成为数据科学大师所需的所有细节。相反,您可以将这本书视为一份详细的、高水平的数据科学路线图,供任何对什么是数据科学以及如何成为数据科学家感到困惑的人使用。
这本书涵盖了数据科学中使用的主要语言和术语,从数学、统计学到机器学习和人工智能。基本上,如果你对数据科学完全陌生,这本书是很好的第一步。
</5-online-data-science-courses-you-can-start-now-748e4a2b5403>
№2:测量和数据科学加博尔·佩李策
数据科学是一个广阔的领域,几乎在生活的所有方面都有应用,从最简单的推荐一本书或一部电影到医学和医疗保健中的关键应用。任何数据科学项目中使用的数据都是根据应用程序以不同方式收集的。
有些是从传感器收集的;其他的是从网上收集的。由于来源的多样性,有不同的方法对数据进行测量。测量和数据科学涵盖了数据和测量主题的所有基础知识和更多内容。
本书的不同章节介绍了匈牙利测量和信息系统部进行的研究,并总结了将经典和理论测量与数据处理相结合的结果。这本 371 页的书将让你熟悉所有你需要知道的数据科学中的度量。
№3:数据科学之旅:并行学习 R 和 Python张乃龙
数据科学中最常用的两种编程语言是 Python 和 r。它们都是有用的语言,可以为该领域提供很多东西。然而,在数据科学项目的流程中,如果您使用 R 来执行某些任务,那么它们会更有效,反之亦然。
对于任何数据科学家来说,编写和理解用两种语言编写的代码都是一项有用的技能。这个列表中的下一本书可以让你同时学习和使用 R 和 Python,如果你决定独立学习它们,这会节省你大量的时间和精力。
这本 216 页的书将带你学习这两种编程语言,重点是数据科学,而不是抽象和一般的语法。您将学习如何用两种语言同时执行统计、优化、构建预测模型等。
</6-web-scraping-tools-that-make-collecting-data-a-breeze-457c44e4411d>
№4:由何西阿·德罗斯基撰写的初学者数据分析指南
正如我常说的,数据科学就是关于数据的,任何数据科学项目中的一个重要步骤是数据收集和分析。初学者数据分析指南专注于教你如何从不同来源收集原始数据,并从中提取有用的信息。
数据分析是您的项目做出正确预测并帮助您的客户或企业做出正确决策的关键流程。这本书将教授数据分析的所有基础知识,从数据挖掘到处理大数据和可视化结果。
此外,这些书涵盖了数据收集的一个重要方面,如网络搜集和使用机器学习来收集数据和形成替代数据集。最后,这本书深入探讨了数据管理和商业智能,总共 124 页。
№5:Charu c . Aggarwal 的《线性代数与机器学习优化》
促使人们远离数据科学的一个原因是,数据科学是建立在基础代数和概率概念之上的。对数学的恐惧是真实的,这就是为什么许多人会告诉我,他们不想成为数据科学家,因为数学太难了。
但是,数学是几乎所有技术领域的核心引擎,不仅仅是数据科学。数学,更准确地说是线性代数的一个主要用途是在机器学习模型的优化过程中。线性代数与机器学习优化涵盖了高效优化机器学习模型所需的所有线性代数。
这本书深入探讨了线性代数在机器学习优化中的应用。它涵盖了如何执行许多重要的应用程序,如奇异值分解(SVD),图形分析,矩阵分解,等等。它还涵盖了为什么机器学习模型需要优化,以及何时和如何这样做。这本书是我们清单上最长的一本书,将近 500 页。
</7-tips-for-data-science-newbies-d95d979add54>
外卖食品
当我第一次开始研究生学习时,我的导师在一个房间里有我所见过的最大的藏书。这些书不仅在书架上,而且到处都是。事实上,他找到了一种利用书籍来保持办公桌隐私的方法。这些书从门到他的椅子形成了一个迷宫。
记得有一次问他,为什么不捐旧书或者只用数字的。他说,对我来说,书不仅仅是学习一个话题的方式;而是学习一种新的人格。这就像你在窥探作者的内心。
从小到大,书籍——无论是印刷品还是电子书——一直是我生活中不可或缺的一部分。比起从其他途径获得的信息,我仍然更相信从书中获得的信息。今天,我列出了我认为非常有前途的 5 本书,我相信每个人都应该阅读的新数据科学书籍。
你需要了解的 5 个 NLP 模型
数据科学的很大一部分是与新技术和模型保持同步。
艾蒂安·吉拉尔代在 Unsplash 上拍摄的照片
语言,是我们生活中最复杂的方面之一。我们用它来相互交流,与世界交流,与我们的过去和未来交流。但是语言不仅仅是一种交流方式;这是唯一的方法,我们可以知道发生在我们时代之前的故事,并让我们的故事传到我们的后代。
因为语言在很大程度上是我们生活的中心,我们总是渴望计算机理解我们的语言,并以我们完全理解的方式与我们交流。这种欲望和计算机本身的反转一样古老。
这就是为什么研究人员孜孜不倦地驱动算法、建立模型和开发软件,以使计算机更容易理解我们并与我们交流。然而,在过去的几十年里,技术爆炸式发展,使得新算法比以往任何时候都更复杂、更准确、更简单、更好、更快。
作为一名数据科学家,工作的一个重要部分是跟上技术的最新发展,以便我们能够更好、更高效地开展工作。我们需要收集、分析和处理的数据量越来越大,但我们需要做得更快、更好。
实现这一目标的唯一途径是改变我们做事的方式;我们需要找到更好的方法,更复杂的方法,更先进的方法。那是研究人员的工作;作为数据科学家,我们的工作思路是了解最新进展,并知道使用它们的最佳方式。
本文将向您介绍 5 种自然语言处理模型,如果您想跟上该领域的发展并希望您的模型更准确地运行,您需要熟悉这些模型。
</6-nlp-techniques-every-data-scientist-should-know-7cdea012e5c3>
№1:伯特
BERT 代表来自变压器的双向编码器表示。BERT 是一个预先训练好的模型,旨在从单词的左右两边驱动单词的上下文。BERT 代表了 NLP 的一个新时代,因为尽管它非常准确,但它基本上是基于两个简单的想法。
BERT 的核心是两个主要步骤,预训练和微调。在模型的第一步中,用各种训练任务针对未标记的数据训练 BERT。这是通过执行两个无人监督的任务来完成的:
- Masked ML: 在这里,通过覆盖——屏蔽——一些输入标记来随机训练深度双向模型,以避免被分析的单词可以看到自己的循环。
- **下一句预测:**在这个任务中,每一次预训练各设定 50%的时间。如果一句 S1 后面跟着 S2,那么 S2 就会被贴上
IsNext
的标签。但如果 S2 是一个随机的句子,那么它将被标记为NotNext
。
完成之后,就是微调的时候了。在这一阶段,模型的所有参数都将使用标记数据进行优化。这个标记的数据是从“下游任务”中获得的每个下游任务都是具有微调参数的不同模型。
BERT 可以应用于很多领域,例如命名实体识别和问答。如果你想使用 BERT 模型,你可以使用 TensorFlow 或 PyTorch 来实现。
№2: XLNet
XLNet 由谷歌和卡内基梅隆大学的一组研究人员开发。它是为处理常见的自然语言处理应用而开发的,如情感分析和文本分类。
XLNet 是一个广义自回归模型,经过预训练,可以同时获得 Transformer-XL 和 BERT 的优点。XLNet 利用了 Transformer-XL 的自回归语言模型和自动编码或 BERT。XLNet 的主要优点是它被设计成具有 Transformer-XL 和 BERT 的优点,而没有它们的局限性。
XLNet 包含了与 BERT 相同的基本思想,即双向上下文分析。这意味着它会查看正在分析的令牌之前和之后的单词,以预测它可能是什么。XLNet 超越了这一点,计算了一个单词序列的对数似然性,涉及到它的可能排列。
XLNet 避免了 BERT 的局限性。它不依赖于数据损坏,因为它是一个自回归模型。实验证明,XLNet 的性能优于 BERT 和 Transformer-XL。
如果你想在你的下一个项目中使用 XLNet,开发它的研究人员在 Tensorflow 中发布了 XLNet 的官方实现。另外,XLNet 的一个实现可以在 PyTorch 上获得。
第三名:罗伯塔
RoBERTa 是一个自然语言处理模型,它建立在 BERT 的基础上,专门用来克服它的一些弱点并增强它的性能。罗伯塔是脸书·艾和华盛顿大学的研究人员进行研究的结果。
研究小组致力于分析双向上下文分析的性能,并确定了一些可以通过使用更大的新数据集来训练模型并删除下一句预测来增强 BERT 性能的更改。
这些修改的结果是 RoBERTa,它代表稳健优化的 BERT 方法。BERT 和 RoBERTa 之间的差异包括:
- 160GB 的大型训练数据集。
- 更大的数据集和迭代次数增加到 500K 导致训练时间更长。
- 移除模型的下一句预测部分。
- 更改应用于定型数据的掩码 LM 算法。
RoBERTa 的实现作为 PyTorch 包的一部分在 Github 上开源。
№4:阿尔伯特
艾伯特是另一个伯特修正模型。在使用 BERT 时,谷歌的研究人员注意到预训练数据集的大小不断增加,这影响了运行模型所需的内存和时间。
为了克服这些缺点,谷歌的研究人员推出了一个更轻版本的 BERT,或如他们所称的,ALBERT。ALBERT 包括两种方法来克服 BERT 的内存和时间问题。这是通过分解嵌入式参数化并以跨层方式共享参数来实现的。
此外,ALBERT 包括自我监督损失来执行下一句预测,而不是在预训练阶段建立该预测。这一步是为了克服 BERT 在句子间连贯性方面的局限性。
如果你想体验 ALBERT,谷歌开发的原始代码库可以在 Github 上的谷歌研究知识库中找到。您也可以使用使用 TensorFlow 和 PyTorch 的实现 ALBERT。
№5:结构伯特
也许到目前为止最新的扩展或 BERT 是 StructBERT 。StructBERT 是由阿里巴巴研究团队开发和构建的 BERT 的新增强模型。到目前为止,BERT 只考虑了文本的句子级排序,而 ALBERT 通过使用单词级和句子级排序克服了这一点。
这些技术包括在我们执行预训练过程时捕获句子的语言结构。他们对 BERT 的主要扩展可以概括为两个主要部分:一是单词结构,二是句子结构目标。
ALBERT 通过在掩蔽 LM 阶段混合特定数量的标记,提高了 BERT 预测正确句子和单词结构的能力。
使用 ALBERT 进行的实验表明,它在不同的自然语言处理任务中表现得比 BERT 好得多,例如 BERT 被开发用于的原始任务,包括问答和情感分析。
BERT 的源代码还没有以开源的形式提供,研究团队将来把它放在 Github 上的意图还不清楚。
外卖食品
总的来说,数据科学领域,尤其是自然语言处理领域,发展非常迅速。有时,对于已经在该领域工作了一段时间的有经验的数据科学家和打算从事数据科学职业的初学者来说,这种快速的步伐可能会令人不知所措。
老实说,阅读研究论文从来都不是一件有趣的事情;它们很长,故意以复杂的格式编写,并且通常不容易导航。这就是为什么我总是欣赏一篇概括算法的主要思想以及何时可以使用它们的直截了当的文章。
</7-tips-for-data-science-newbies-d95d979add54>
在本文中,我经历了 5 个自然语言处理模型,它们比之前的模型更先进、更复杂、更准确,并且只是朝着更好的模型迈出了一步。
我希望这篇文章能让你了解外面有什么,不同的模型是如何工作的,也许,仅仅是也许,激发了一个新的项目想法,在你读完这篇文章后,你可以马上投入进去。
你应该知道的 5 个 NLP 主题和项目!
应该添加到简历中的五个高级自然语言处理主题和项目想法
自然语言处理(NLP)是人工智能最吸引人和最迷人的方面之一。随着近年来 NLP 的不断演变和发展,了解最先进和高质量的主题是必不可少的,每个数据科学爱好者或有志者都必须关注这些主题,以在该领域取得更高的成功率。
由于自然语言处理领域的进步,软件和人类之间的交互变得越来越容易。人工智能程序倾向于计算、处理和分析大量自然语言数据,以向用户提供得体的语义和对用户的准确回复。
尽管在自然语言处理领域面临着许多挑战,比如让人工智能理解句子的真正语义,但我们已经取得了巨大的进步,在自然语言处理领域取得了长足的进步。
如果你对 Python 和数据科学的更棒的项目感兴趣,请随意查看下面的链接,这里涵盖了 2021 年及以后的 15 个这样的最佳项目。在这篇文章中,我们将集中讨论 NLP 的五个主题和项目,每个热衷于这个主题的人都应该了解它们,并致力于达到完美!
</15-awesome-python-and-data-science-projects-for-2021-and-beyond-64acf7930c20>
1.带 ML 和 DL 的 NLTK
用于解决许多类型问题的最基本的自然语言处理(NLP)工具之一是 NLTK 库。自然语言工具包(NLTK)为解决大量自然语言处理问题提供了许多实用工具。NLTK 库非常适合基于语言的任务。它为分类、标记化、词干化、标记、解析和语义推理等任务提供了广泛的选项。
将这个库与机器学习和深度学习结合使用的最大好处是,你可以创建大量高质量的项目。NLTK 库模块的特性非常广泛。使用这个库可以做很多事情,然后使用单词包、术语频率-逆文档频率(TF-IDF)、单词到向量以及其他类似的方法来处理这些任务和问题。
下面是一个示例代码,展示了如何为大型数据集创建数据集和文章向量,然后利用超参数调整以及 NLP 技术和机器学习算法,如朴素贝叶斯、决策树和其他类似的机器学习方法,轻松解决这些复杂的问题。
样本代码:
vectorizer = CountVectorizer(min_df=10,ngram_range=(1,4), max_features=50000)
vectorizer.fit(X_train['essay'].values) *# fit has to happen only on train data*
*# we use the fitted CountVectorizer to convert the text to vector*
X_train_essay_bow = vectorizer.transform(X_train['essay'].values)
X_cv_essay_bow = vectorizer.transform(X_cv['essay'].values)
X_test_essay_bow = vectorizer.transform(X_test['essay'].values)
要了解更多关于如何用正则表达式简化自然语言处理项目的信息,我强烈推荐大家查看下面提供的链接。它涵盖了你如何利用四个基本的正则表达式操作来对你的项目的论文和文本数据集进行大部分预处理。
2.预测系统
在人工智能的帮助下完成的最重要的任务之一是预测在下面的一行或多行中将出现的下一个单词或句子。这项任务是机器学习和深度学习中自然语言处理(NLP)的更基本和有用的功能之一。
为了解决机器学习中预测并发或最接近单词的后续任务,可以利用相似性的概念来实现期望的结果。距离较小的同现词向量是相通的。像支持向量机(SVMs)、决策树和其他类似方法这样的机器学习算法可以用于解决像下一个单词预测这样的任务和其他这样的不可区分的任务。
解决这些复杂问题的更流行的方法是确保我们有效地使用深度学习的概念来解决它们。使用递归神经网络构建神经网络结构的方法是解决下一个单词预测任务的一种常用方法。然而,由于爆炸和消失梯度的问题,rnn 的其他替代方法如长短期记忆(LSTM)被用作处理这些任务的惊人的替代方法。
解决这些任务的独特方法包括利用一维卷积神经网络来创建与单词向量的链接。我建议观众查看我的下一个单词预测项目,我在几个堆栈 LSTMs 的帮助下实现了下面的过程。
3.聊天机器人
由 Unsplash 上的 La Victorie 拍摄的照片
自然语言处理最流行的应用之一是聊天机器人的使用。聊天机器人被大多数主要的科技巨头、大公司、甚至更小的网站初创公司雇佣来问候人们,向访问者、观众或观众介绍公司的基本方面,还回答第一次访问网站的访问者可能会有的一些常见问题。
它们也有助于澄清用户在浏览网站时可能遇到的一些问题。聊天机器人也可以为大多数公众受众部署更通用的用例。最流行的虚拟助手像谷歌助手,Siri,Alexa 等。和许多其他软件一样,也具有充当聊天机器人的能力。
聊天机器人的对话既可以通过传统的在线短信方式进行,也可以通过更现代的语音翻译方式进行。当前一代聊天机器人的使用案例正在快速增加。越来越多的人和公司也在尝试实现它们。在 NLP 领域,聊天机器人的兴起是一个极其重要的场景,也是每个该主题的爱好者必须期待实现的事情。
我强烈建议检查一下这些聊天机器人的各种工作方法。有几种深度学习算法和方法可以在这些聊天机器人上获得理想的结果。一种独特的方法是通过利用一维卷积神经网络来构建这些聊天机器人。查看下面提供的文章链接,获得对以下内容更直观的理解。
4.变形金刚(电影名)
变形金刚是当前深度学习时代最重要的架构之一。他们的目标是更轻松地解决任务的排序问题。他们有能力保留长长的数据链。因此,它们在处理长距离序列时具有高范围的可靠性。他们利用自我注意的概念来解决复杂的任务,而不使用序列对齐的 RNNs 或卷积。
变形金刚是自然语言处理领域的创新发展。他们有能力更轻松地解决复杂的任务,如机器翻译。机器翻译的主题和项目概念将在本文的下一部分进一步讨论。
这些转换器还可以用于许多任务,如信息检索、文本分类、文档摘要、图像字幕和基因组分析。我强烈建议对变形金刚这一主题进行深入的研究和学习,以获得对变形金刚这一现代演变的进一步直觉和理解。
5.机器翻译
托马斯·凯利在 Unsplash 上的照片
当你试图和一个来自另一个国家的人交谈,而你们都不懂共同语言时,通常需要使用翻译来沟通并同意特定合同或交易的条款。每当你想用外语交流时,你可以利用谷歌翻译功能将句子从一种语言转换成另一种语言。
在键入一个特定的英语句子并要求 Google translate 将其转换为德语时,翻译人员通常会很好地将英语句子转换为德语句子,而不会改变句子的实际语义。这项任务被称为机器翻译。
机器翻译是自然语言处理中最有用和最重要的任务之一。每个爱好者都必须在 TensorFlow 库或 Pytorch 库的帮助下完成机器翻译任务。通过使用这些库,您必须尝试构建一个序列到序列模型,该模型可以实现解决机器翻译问题的任务,同时达到尽可能高的准确性。有许多令人惊奇的现代方法正在被开发来完成这些任务。
结论:
照片由 freestocks 在 Unsplash 拍摄
自然语言处理是人工智能中最好学的科目和子科目之一。有这么多的研究论文和文章正在不断发表。每天都有快速的发展和广泛的研究。在接下来的几年里,以下领域将会有更多惊人的发现。
在本文中,我们讨论了每个爱好者都应该了解和探索的五个自然语言处理(NLP)概念和项目主题。它们构成了这些现代 NLP 应用的最关键和最重要的方面。这些中等先进领域的需求和重要性每天都在迅速增加。因此,这段时间是有志之士投资和学习更多知识的最有效时期之一。
在我看来,所有对自然语言处理领域感兴趣和充满热情的观众都应该对这些主题进行更多的研究,并尝试了解这些概念的重要方面。在获得了相当数量的理论知识后,我会高度鼓励观众投入到现实世界中,开始自己实施这些项目。
如果你对这篇文章中提到的各点有任何疑问,请在下面的评论中告诉我。我会尽快给你回复。
看看我的其他一些文章,你可能会喜欢读!
</7-tips-to-crack-data-science-and-machine-learning-interviews-38b0b0d4a2d3> </8-best-visualizations-to-consider-for-your-data-science-projects-b9ace21564a> </15-tips-to-be-more-successful-in-data-science-c58aa1eb4cae>
谢谢你们坚持到最后。我希望你们都喜欢这篇文章。祝大家有美好的一天!
让数据工程师喜欢为你工作的 5 种不明显的方法
意见
以及如何在这个过程中成为更好的数据领导者。
“雇数据工程师是小菜一碟!”说从来没有人。
而且理由很充分。
虽然招聘工程师从来都不容易,但数据工程师是一个全新的领域。尽管数据工程职业飞速发展,雇佣数据团队的骨干却从未如此具有挑战性。
为什么?在我看来,这可以归结为两个关键因素:
- 供不应求 。数据生态系统正在快速发展,越来越多的公司在数据上下大赌注。这意味着数据团队要么培训现有的分析师和科学家来构建和扩展基础设施,要么从外部寻找来填补这些关键角色。不管怎样,它们都不够。
- 很难找到合适的人选。“数据工程师”这个头衔是新生事物,但是数据工程的工作已经存在很久了。多年来,数据科学家、分析师、数据库工程师、数据架构师和后端工程师一直在处理 构建和扩展数据平台 所需的接收、转换、测试和基础设施工作;如果你没有读过 Maxime Beauchemin 关于这种现象的里程碑式文章,我强烈推荐。考虑到构成数据工程思想共享的背景的多样性,寻找合适的候选人可能会很困难,对于候选人来说,仅根据工作描述来确定他们是否适合您的团队会更加困难。
抛开薪酬不谈,在招聘优秀的数据工程师时,最重要的是加入你的公司是否会让他们在职业生涯和公司本身取得成功。一天结束时,有竞争力的工资和令人印象深刻的标志可能会让你的数据工程师进门,但这并不意味着他们会留下来。
以下是一些最佳数据工程领导者吸引和留住顶尖人才的 5 种非显而易见的方式:
您衡量客户影响
我对传统的工程职业阶梯最大的不满之一是,晋升过程往往有利于大胆的人,而不总是更好的。我的意思是,高可见性的项目,而不是幕后或基础设施工作,这些工作同样重要,但往往比功能工程需要更多的时间和资源,特别是当你在一个精益团队中时。
类似地,与分析或数据科学工作相比,数据工程工作经常得不到认可或重视。(如果你还没看,我强烈建议你看一下这篇关于这个话题的辛辣黑客新闻跟帖和对应文章。你大概知道我说的是哪一个……)。
作为数据工程领导者,您如何克服这一障碍?它始于对客户的影响。在您开始招聘之前,确定有形的度量标准,将数据工程工作与其对团队内部客户的影响对应起来。人们希望在他们的努力受到重视的地方工作,围绕数据工程在更广泛的数据团队战略中所扮演的角色,设定利益相关者和领导层的一致性是至关重要的。
据 阿迪达斯 大数据平台工程总监 Javier Pelayo 称,与你的行政领导一起设定基准不仅需要强大的愿景,还需要将数据平台和其他数据产品的影响与公司更大的技术和业务目标联系起来。
一种测量方法?关于降低运营开销和加快数据产品价值实现的指标。
“最后,如果您提供了任何价值,并且最大限度地减少了分析团队和其他数据用户的运营开销,那么就很容易量化数据工程对利益相关者和更广泛的公司的价值。从那时起,您团队的数据产品将会得到认可和采用。”
对要跟踪的指标的其他建议:
- 你的数据工程师为公司节省了多少时间/金钱/资源?
- 他们的工作如何提高重要数据产品的价值实现时间?
- 他们的工作在哪些方面影响了更大的工程或分析策略?
有了这些数据点,你就能更好地向潜在雇员强调数据工程工作是如何被优先考虑、被推崇的,以及对你的公司的成功有多么重要。
他们可以与您的公司一起成长
像许多技术专业一样,数据工程正在快速发展。新的工具和最佳实践不断涌现,最优秀的工程师希望投入时间来跟上最新的发展和技术。而且,就像任何潜在的新员工一样,数据工程师会想知道他们将如何与您的公司一起成长。
如今,数据工程师的责任是拥有越来越多的端到端数据转换工作流,从摄取到建模,需要对空间和专业技能有更广泛的理解。
Ebunoluwa Oke ,加拿大食品配送市场的数据产品经理,SkipTheDishes(Just Eat take away . com 的一部分),正在与数据产品和技术团队合作,领导她的团队迁移到分散数据架构,由嵌入式从业者负责从头到尾拥有整个数据工程工作流程。
“我们现在和未来雇佣的任何数据工程师都需要能够完成接收数据和创建数据模型的端到端流程,因为我们希望工程师了解数据的背景,不仅仅是‘哦,这看起来不对’的意思,还包括数据如何被使用以及谁在使用它的背景,”她说。
随着责任的增加,重要的是潜在雇员知道他们的工作将得到认可,并直接与更广泛的数据团队的底线 KPI 和成功指标挂钩。对许多公司来说,情况并非如此。毫不奇怪,数据工程师经常被称为数据科学的“管道工”。毫无疑问,这是一个重要的角色,但肯定被低估了,这个角色可以让您的管道(生产线)保持运行。
投资职业发展不仅仅是写博客文章和在会议上发言;这是为你的直接下属建立一个职业生涯,他们可以随着团队的扩大而成长。
您的数据生态系统易于导航
如今,企业自称“数据驱动”已经是老生常谈了经验丰富的数据工程师可能已经亲眼看到,一家公司可能会大谈数据,但实际上并没有努力教育员工如何使用数据产品,甚至没有授权自助访问数据。
如果对何处查找、如何解释以及如何解决基本数据需求没有一些基本的了解,内部数据消费者可能会通过一次性请求或最后一刻的需求占用您的数据工程团队的大量时间。虽然提供指导和监督治理通常是工作描述的一部分,但最优秀和最聪明的数据工程师将了解一家空谈公司和一家通过投资数据素养和利用数据平台实现跨领域上下文理解的公司之间的差异。
挪威公共道路数据平台 Lead with Norwegian Public Roads 的 Lars Meisingseth 表示,为强大的数据发现和问责文化奠定基础,将帮助新的数据工程师和分析师在开始工作后取得成功。
“我们正在开发和操作一个社会框架的使用过程中,以辨别哪些数据集是重要的,哪些是不重要的,以及“谁在使用它?多久用一次?这种方法的使用频率如何?内部和外部的潜在价值是什么?“等等。确定哪些数据应该优先处理并在整个组织内共享,哪些数据可能会被否决。这也会因领域和业务用例而异,但通过利用面向领域的数据平台,将更容易让团队自己做出这些判断。”
这也有助于培养重视数据的文化——当您的数据工程师在一个他们的贡献得到认可的环境中工作时,他们更有可能对与团队其他成员一起成长感到满意和兴奋。
您投资了正确的工具
另一个常见的挑战?使用传统或过时的解决方案尝试构建“现代数据堆栈”
不要误解我。你不必成为 Airbnb 、网飞或优步到 建立一个好的数据平台 并使用花哨的工具。从本质上讲,数据平台只是所有数据的中央存储库,处理数据的收集、清理、转换和应用,以生成业务洞察。但这只有在你拥有合适的技术和流程来大规模实施的情况下才有可能。
除了构建数据平台的商业案例(增加创新、竞争优势、分散数据所有权、扩展数据分析等。),当谈到使用你的数据平台及其底层技术作为数据工程师的招聘工具时,有一个强有力的论点。
最近,有很多关于是使用开源还是闭源解决方案的讨论(最近 雪花 和 数据块 营销团队之间的对话真正揭示了这一点)。在我看来,无论你站在哪一边,都是开源的(Apache Spark,Airflow,dbt 等。)和同类最佳的 SaaS 解决方案(雪花、红移、Fivetran、Looker、Tableau 等)。)是你公司的优秀营销工具。事实上,大多数数据工程团队投资于两者的混合。
最终,您的从业者希望工具和技能集能够(1)随着他们的职业发展,(2)使他们的生活更容易,以及(3)降低复杂性,选择是走开源还是 SaaS 的路线很少是二元的。在选择新的解决方案或技术时,对话应始终寻求回答:“这是适合工作/我的团队的工具吗?”有时这是开源,有时这是 SaaS——这真的取决于你想要实现什么,以及你愿意投资什么类型的资源。
他们有自主权
一个好的数据工程领导者会给他们的团队以他们感兴趣的方式设计、构建和扩展项目的代理和影响力,并推动他们的技术和协作边界。
通常,这可以归结为确保他们对自己所做的事情有主人翁感,并且他们所做的事情将推动他们的职业发展,增加他们在公司跨职能团队中的曝光率。
查德·桑德森,车队的产品和数据平台负责人指出,优秀的数据工程经理会给他们的团队成员一些工作,这些工作不仅让他们感兴趣,还会给他们带来挑战。
“如果你的数据工程师只是运行管道,这不是很有趣的工作,”桑德森说。“但如果他们正在构建支持数据平台的系统和技术,那就更有说服力了。”
鼓励自主性始于建立一种信任文化,相信你的团队有能力拥有和执行委派给他们的项目,并在他们加入你的公司之前,就他们想做的事情征求他们的意见。通过保持沟通渠道的畅通,主动寻求反馈,甚至在招聘过程中鼓励讨论,你就可以为合作、信任的关系打下基础,无论他们是否选择在你的公司工作。
数据世界很小。你永远不知道下一次你们会在什么时候相遇——见鬼,也许有一天他们会成为你的经理。
他们觉得受到了挑战
这就引出了我的下一个观点:如果工程师所负责的工作对他们没有挑战性,无论是在技术层面还是文化层面,工程师都不太可能加入你的团队。无论是推出关键的新功能,领导 RFC,还是作为新工具实施的联系人,确保他们突破自己的专业界限都至关重要。
确保您的工程师从事具有挑战性并让他们兴奋的项目的一个重要部分?尽可能自动化机械或手工工作。
开发人员和站点可靠性工程师(数据工程师的前身,在很多方面)之间有一个共同的说法,即可靠系统的目标是 减少手工劳动 。在数据工程的上下文中,手工劳动可能包括处理来自下游涉众的特别查询、单元测试、数据质量检查和文档。所有这些活动,以及更多的活动,都可以通过正确的方法实现自动化。
正如一家电子商务公司的数据工程主管恰当地告诉我的那样,数据工程师不会整天进入现场测试管道。
“工程师不喜欢这项工作——这不是他们进入这个领域可能首先要完成的创新性问题解决方案。每当 API 发生变化时,每周都要编写用例测试,这可能很平常。”
特别是高级或职员工程师将会发现自动化的巨大价值,这使得他们可以将时间和精力花在设计、构建和创新上,而不是维护和排除现有系统的故障。端到端数据谱系、 数据可观察性 和 数据发现 工具可以帮助您构建更加可靠和容错的数据堆栈,同时减少手动测试和文档编制的工作量。根据您的需要,一些解决方案允许 ML 生成的可观察性和定制的规则设置。根据您的需要,一些解决方案允许 ML 生成的可观察性和定制的规则设置。
其他团队选择投资自动化数据接收(即 Fivetran 或 Stitch)或增强分析。无论如何,让您的数据工程师专注于对他们的职业生涯和专业成就产生影响的事情,而不是平凡或重复的事情。
雇佣下一代数据工程师
建立一个数据工程团队并不容易,尤其是考虑到这个行业发展的速度,但在我看来,这正是这种经历如此有益的原因——对经理和新员工都是如此。
创建一个能够吸引最优秀、最聪明的数据工程师的环境,将使您在招聘时获得优势,并为未来几年蓬勃发展的数据组织奠定基础。
我错过了什么吗?请随时联系Lior GAVI sh或蒙特卡洛团队的其他成员,分享您的见解、反馈和建议。
我的 5 个最佳数据科学组合项目
我做过的最好的数据科学项目
Bram Naus 在 Unsplash 上拍摄的照片
作为一名初学者进入数据科学行业,你需要证明你拥有从事这项工作所必需的技能。
如果你没有任何正式的数据科学资格,最好的方法是建立数据科学项目。
当你在你的投资组合中展示这些项目时,它会给潜在的雇主信心,让他们相信你能够胜任这份工作。
然而,并不是所有的数据科学项目都适合放在你的投资组合中。有些项目太普通太简单了——比如泰坦尼克号数据集上的机器学习,或者波士顿房价数据集上的线性回归。
展示这样的项目实际上对你的投资组合弊大于利。他们给人的印象是,你是一个新手,只学过初级数据科学课程,无法展示其他技能。
那么,你应该在你的作品集里展示什么样的项目呢?
展示讲述故事的项目。做一些你热爱的事情。
人们喜欢故事。
招聘人员会收到数百份求职简历。
要脱颖而出,你需要展示一些能吸引他们注意力的东西。
如果你的招聘人员是非技术人员,他们不会理解你 GitHub 存储库中的一堆代码。
你需要建立一些他们可以互动的东西,或者借助数据讲述一个他们可以理解的故事。
这将使你的申请在数百份简历中脱颖而出。
这也表明你对自己的工作充满激情。
我过去从事过无数的数据科学项目。
当我还是编程新手的时候,我就开始了其中的一些。老实说,大部分都很糟糕。
我回顾我的一些项目,意识到我的编码实践很糟糕。我本可以做得更好的。
然而,正是这些项目帮助我获得了第一份数据科学实习工作。这些也是我仍然收到消息和问题的项目。因为人们记得他们。它们是独一无二的,它们讲述了一个故事。
项目 1: 好莱坞女性形象分析
克里斯蒂娜@ wocintechchat.com 在 Unsplash 上的照片
我想出了这个项目的想法时,看了一个节目名为简的处女。
节目中有一个小插曲谈到媒体中的性别差异。
有一种测试被称为 Bechdel 测试,用来衡量女性在小说作品中的代表性。只有满足以下条件,影片才能通过 Bechdel 测试:
- 电影里至少要有两个女人
- 他们互相交谈
- 关于一个男人以外的东西
我认为通过分析来回答以下关于好莱坞电影的问题会很有意思:
- 女性导演的电影通过 Bechdel 测试的几率更高吗?
- 电影的类型对它能否通过 Bechdel 测试有影响吗?
- 随着时间的推移,女性在好莱坞的代表性有所提高吗?
- 通过 Bechdel 测试的电影是否比未通过测试的电影评级更高?
这是我的第一个真实数据分析项目。我开始借助互联网上提供的多个数据集来回答所有这些问题。
我展示了数据清理、操作、分析和可视化等技能。
一旦我完成了这个项目,我就写了一篇关于它的文章,并且把所有的代码和结果都发布到了网上。
项目 2: 一款区分真假面孔的应用
作者形象
我被人工智能应用程序创造虚假面孔的能力迷住了。
在这个项目中,我收集了一个真实和虚假人脸的数据集。然后,我做了一个测验,让你辨别一张脸是假的还是真的。
你可以参加我的测验,只要你愿意。每次刷新页面或点击next,系统将随机选择一幅图片并呈现给你。你所需要做的就是猜测它是一个人工智能生成的图像还是一个真实的图像。
演示的技能:Javascript、HTML、CSS、Flask、Python
项目 3: 对 YouTube 不和的情绪分析
由 Pablo Rebolledo 在 Unsplash 上拍摄的照片
从 12 岁开始,我就喜欢看 YouTube 视频和戏剧频道。
最近,一场巨大的争议浮出水面,涉及到两个受欢迎的 YouTubers 用户——詹姆斯·查尔斯和塔蒂·威斯布鲁克。
这两位有影响力的人都发现自己陷入了一场非常公开的纠纷,这场纠纷导致他们失去了数百万粉丝和品牌交易。
为了更好地了解公众对他们的看法,我认为对这两个有影响力的人进行分析会很有趣。
我从 Twitter 和 YouTube 上搜集数据,建立了一个情绪分析模型,以了解公众对这场争斗的看法。我想看看人们站在哪一边,以及人们对这场争论的看法是否会随着时间的推移而改变。
展示的技能:数据采集、API 使用、Python、情感分析、数据可视化
项目四:名人形象识别模型
作者图片
有没有想过你的名人模仿者是谁?
你只需要上传一张你自己的照片,然后点击“预测”按钮。
深度学习模型将为你提供与你最相似的名人的预测。
展示的技能:Javascript、HTML、CSS、Flask、Python、模型部署、Keras
项目 5: 用 Python 进行客户细分
Unsplash 上的粘土银行图像
该项目是列表中唯一一个具有业务应用程序的项目。
我在 Kaggle 上使用了一个数据集,并提出了一个 K 均值聚类模型,以得出不同的消费者细分市场。
这是一个非常流行的无监督学习数据集,许多人已经用它来建立分割模型。
为了将我的分析与其他分析区分开来,我分析了最后构建的不同部分。我根据细分市场的行为建立了消费者档案,并针对每个细分市场的客户提出了不同的营销策略。
展示的技能:Python,K 均值聚类,PCA,聚类解释,数据分析
结论
Coursera 上有超过 400 万人注册了吴恩达的机器学习课程。
每一个有抱负的数据科学家都会在简历上有一门这些入门级别的机器学习课程。
然而,如果你不能在现实生活中应用你所学的技能,这些课程就没有任何意义。
它们也不足以向招聘人员证明你有胜任这份工作的必要技能。
要让自己与众不同,你需要打造一些与众不同的东西。构建一个最终用户可以使用的应用程序,或者围绕您的项目写一篇博文。
创建这些项目并在网上分享帮助我接触到来自世界各地的人们。
由于这些项目,我收到了许多工作邀请、合作机会和自由职业邀请。
参与这些项目还帮助我提高了数据科学和编程技能。
每当我想出一个项目想法时,我都会写下构建项目所涉及的不同步骤。然后,我画一张我想要的最终产品的图。
一路上我遇到了很多困难,但是我从克服困难中学到了很多。事实上,我的大部分编程知识都来自我参与的这些个人项目。
本文到此为止,感谢阅读!
用心创造,用心建设——克里斯·伊斯兰大教堂
5 我最喜欢的朱莉娅·麦可斯
我最喜欢在 Julia 编程语言中使用的一些宏的概述!
(src =https://pixabay.com/images/id-637062/
介绍
Julia 编程语言为数据科学领域带来了全新的特性集。而且很多便利的特性已经被重新认识到,尤其是在数据科学应用中,至少对我来说是这样。我非常喜欢 Julia 编程语言中来自 Lisp 和元编程世界的一个特性,那就是添加了宏。这些不仅方便元编程,而且在更广泛的意义上也非常适合使用。它们可以作为使用某些函数的快捷方式,无需调用就可以自动将值转换成表达式。因为我非常喜欢 Julia 中的宏,所以我想展示一些我最喜欢的宏,您可能想在自己的 Julia 编程中尝试一下!
№1:代码 _llvm
code_llvm 宏在我看来棒极了。它可以用来查看 Julia 在后端使用的实际 llvm 代码。这对于从底层角度分析 Julia 代码的性能非常有用。此外,我认为这是一个学习更多关于 Julia 编译器及其工作原理的好方法。该宏采用一个方法或表达式,并返回用于获取返回结果的 llvm 代码。例如,考虑以下函数:
function ThisIsAFunction(n)
n = n + 5
n - 1
for z in 1:n
n -= 1
end
return(n)
end
这个函数会取任何值,然后用增量的方法把它减 1 到零。这是在加上 5,然后减去 1 之后的结果,所以这是一个非常愚蠢的函数,但是它将演示 code_llvm 宏的循环和操作:
[@code_llvm](http://twitter.com/code_llvm) ThisIsAFunction(20)
作者图片
№2:断言
下一个我非常喜欢的宏是 assert 宏。该宏用于在不满足条件时提供快速抛出。这主要用于测试。我不确定我是在哪里听到的,也许是在学校,但是你不应该在代码中使用 assert 来抛出。我必须承认,我不确定这句话的有效性,也不知道我最初是从哪里听到的——但我怀疑我是从我的教授那里听到的。无论如何,我们可以通过首先提供一个需要满足的条件,然后提供一个错误语句来使用这个宏。也许我们不应该在真正的包开发中使用它,而应该在测试中使用它的原因是因为它的错误返回总是相同的,只有字符串文本识别什么是错误的。使用这个宏时,抛出的总是 AssertionError。考虑以下阵列:
y = [5, 10, 15]
x = [5, 10]
假设我们希望这些长度相同:
[@assert](http://twitter.com/assert) length(x) == length(y) "X and Y dimensions do not match!"
作者图片
№3:宏扩展
Julia 的 Base 中另一个非常酷的宏是 macroexpand 宏。此宏可用于将宏视为一组符号。符号在很多方面都是 Julian 元编程的骨干,这是一种通过将宏制作成符号来使事情更上一层楼的简单方法。这可以对宏有一个更广泛的理解,因为乍一看,人们可能把宏看作是功能等同物,但事实并非如此。有了这个宏,就很容易明白为什么宏在 Julia 的元编程中如此盛行。
[@macroexpand](http://twitter.com/macroexpand) [@assert](http://twitter.com/assert) length(x) == length(y) "X and Y dimensions do not match!"
如果我们将其断言为一个新的变量 alias,然后检查其类型,我们会看到这会返回一个表达式:
z = [@macroexpand](http://twitter.com/macroexpand) [@assert](http://twitter.com/assert) length(x) == length(y) "X and Y dimensions do not match!"
typeof(z)
这意味着我们可以将这个表达式与其他元编程方法一起使用,比如 eval:
eval(z)
№4:测试宏
Julia 中的测试是用一种完全不同于其他编程语言的方法来完成的。如果你问我,我主观上喜欢它们的实现,因为我认为这是保持测试有组织的好方法。如果您想了解更多关于如何测试 Julia 包的内容,我实际上写了一整篇文章,您可以在这里查看:
[## 如何用 Julia 测试你的软件
towardsdatascience.com](/how-to-test-your-software-with-julia-4050379a9f3)
Julia 中的测试利用宏使测试变得更快更方便。这也使得测试包端变得更加容易,因为你的测试交给 Julia 是一个表达式,这意味着它可以以任何方式分析和运行它,而不需要解析你的代码。在 Julia 中,我们可以通过使用@testset 宏并提供一个名称来启动一个测试集:
[@testset](http://twitter.com/testset) "Numbers" beginend
然后我们可以通过使用 test 宏来测试一些条件,它类似于 assert,但会将其布尔值返回给 testset 宏。
using Test
[@testset](http://twitter.com/testset) "Numbers" begin
x = 5
y = 5
[@test](http://twitter.com/test) x == y
end
当我们运行这个程序时,我们得到了一些非常酷的、组织良好的、全面的关于我们的测试是如何运行的输出。这是非常方便的,有这一切自动生成到一个表格,并与我们的集合的标题组织,没有打印的必要。看一看:
№5:评估聚合
Julia 库中另一个很棒的宏是 evalpoly 宏。这个宏计算一个多项式∑k**ZK-1c[k的系数c[1]
、c[2]
。换句话说,系数是由 z 的幂按升序提供的。用来计算这些数字的代码非常高效,我肯定会说它是科学计算的一个伟大工具!
[@evalpoly](http://twitter.com/evalpoly)(3, 1, 0, 1, 5, 1, 2)
(加分)№6:内嵌
内嵌数学本质上更有效率。在 Julia 中,使用 inline 和 noline 宏很容易控制这一点。如果您希望执行大量的线性代数,这些宏肯定会派上用场,因为这些宏的应用会严重降低您的内存消耗。一般来说,内联处理大多数数组可能是一种好的做法,尤其是如果您希望在项目中节省大量内存的话:
@inline foo_in(n) = (n, Vector{Int}(n))
@noinline foo_ni(n) = (n, Vector{Int}(n))
**function** ft_in(n)
s= 0
**for** i= 1:n
jj,v = foo_in(i)
s+=sum(v)
**end
** s
**end**
**function** ft_ni(n)
s= 0
**for** i= 1:n
jj,v = foo_ni(i)
s+=sum(v)
**end
** s
**end**
@time ft_in(1000)
0.001948 seconds (1.00 k allocations: 3.962 MiB)
@time ft_ni(1000)
0.002083 seconds (2.00 k allocations: 3.992 MiB)
结论
宏是 Julia 编程语言中非常有用的特性。它们不仅可以作为调用方法的“快捷方式”,还可以用来将正则代码自动转换成表达式。不用说,这在许多不同的应用程序中都很方便,比如测试应用程序。我希望这篇文章是有趣的,并且可能让你熟悉一些你可能不知道的新的宏!非常感谢您的阅读!
5 个我最喜欢的 sci kit-用于增强数据分析的学习工具
使用 SkLearn 中的一些分析方法来更好地理解你的数据
(图片由作者提供)
介绍
如果您长期从事 Python 中的数据科学工作,您可能会对 Scikit-Learn 或 SkLearn 模块很熟悉。该模块提供了一系列有用的模块,这些模块被设置用于衡量某些问题,并且实际上非常常用于解决遵循分类或连续准则的问题。
也就是说,虽然这可能是 SkLearn 模块的主要吸引力,但也有许多非常酷的扩展类和功能。这些不仅很棒,而且为 Python 中的机器学习建立了一整套语法体系,现在几乎所有其他建模包都在遵循这一体系。如果你想了解这方面的更多信息,我写了一篇关于 SkLearn 如何用标准化的函数和类改变 Python 中机器学习模型的适当编程的许多方面的文章,请查看:
我认为这个包对整个行业的影响是令人印象深刻的,而且非常酷!不用说,这个包在将 Python 和机器学习带到这个领域的前沿方面做了很多工作。然而,我们很容易沉迷于其中的一些工具,而忽略许多其他非常棒的工具,只喜欢少数几个,因为这个模块非常全面,实际上相当大。
这肯定是真的,其中一个方法就是分析。SkLearn 有各种不同的方法来处理和试验经常被忽略的数据,如果模块是一个依赖项,这些方法已经可用了——所以只要有可能,它们当然值得使用。此外,许多这些技术对于数据科学和数据分析的某些方面来说是真正非常有价值的资产。
SkLearn 中不仅有专门为分析构建的工具,还有可以与无监督学习模型一起使用的分析方法,这些方法通常可以教授许多有关您可能正在处理的数据的信息。记住这一点,这里是我最喜欢的 10 个工具,我从 SkLearn 中最常用来进行数据和模型分析!
№1:线性判别分析
SkLearn 有一个我非常喜欢但并不突出的特性,那就是线性判别分析的能力。这些话听起来比实际意思可怕得多。线性当然意味着直线,我希望任何数据科学家都能自然地理解这一部分。数学中的判别式是一个基于多项式系数的非任意值。这些系数当然可以用多种方法计算,所有这些方法都会显著影响结果。
记住这个新的措辞,我们现在可以考虑这个模型实际上会对我们的数据做什么。我们将对系数进行线性比较,以便分析某组多项式连续数据。在处理连续特征但目标明确的情况下,该模型也是一个很好的选择。当然,这是模型;不是一个分析工具,但是该模型也有能力将多项式组转换成系数。任何时候涉及到系数,它们都可以被可视化。这是因为系数只是一些非任意的单位,是要乘以一个多项式。
也就是说,SkLearn 实现相当深入,将允许使用几个不同的参数,这些参数可以完全改变分类器和多项式转换器的有效性。我想关注的第一个论点是解算器论点。此参数可用于更改计算系数所依据的线性模型。这样做的好处是,一些数值应用可能需要不同的方法来拟合这条线。可用的值及其匹配描述如下:
- 奇异值分解;SVD 是奇异值分解的缩写。虽然这是转换器的默认设置,但我想说,在许多情况下,真正的默认设置应该是线性最小二乘法,因为它通常最适合应用于大多数情况下的连续问题。也就是说,使用 lsqr 求解器的一个特殊困难和缺点是,它已经是一个处理高维数据的模型。奇异值分解也不会计算协方差矩阵,因此建议将此求解器用于包含大量要素的数据。
- lsqr 线性最小二乘法对于这个模型的大多数用例来说都是一个很好的应用,我想说我认为这真的应该是这个模型求解器的默认选项。为什么?因为这个模型是简单的,数学的,并且当它不使用成本时通常用典型的斜率公式计算。也就是说,成本仍然用于确定斜率值和 y 截距,因此该模型是我们都熟悉的典型线性模型之一。
- eigen 提供本征解算器将为我们提供本征分解——这基本上只是一个花哨的术语,表示我们将把向量转换成本征向量,将值转换成本征值。这是什么意思?在不深入研究的情况下,特征分解将通过重构来分解我们的数据,直到它成为规范形式。这在计算机科学中很常见,基本上就是说,我们把一个向量减少到它在数学中可以表示的最小可能的公式。虽然我认为这些都是有趣的概念,但关于这个模型和其他模型还有很多要讨论的,所以我现在将放下数学,但如果你想了解更多关于规范形式的知识,我写了一篇文章,你可能会感兴趣!:
另一个我认为对调整这个模型/变压器至关重要的参数是收缩参数。如果您正在处理大量稀疏数据,并且似乎找不到合适的数据,则此参数肯定很有用。也就是说,这些只能与协方差矩阵一起使用,因此 SVD 求解器在处理参数时是不可用的。该参数可以采用三种不同的选项:
- none:No shrink,这也是缺省值,很大程度上意味着要使用 SVD 求解器,尽管我不会说在处理一些紧密的低方差连续数据时不使用 shrink 是完全不可能的。
- 在 0 和 1 之间浮动:这将给你一个固定的收缩参数。这样做的好处是收缩是手动的,程序员可以很容易地控制。然而,话虽如此,不允许统计学发挥作用也有一些不利之处——尤其是在多变量分析方面。
- ’ auto ':使用 Ledoit-Wolf 引理的自动收缩。这个收缩估计器真的很酷,所以我坚持认为,如果你想了解更多,你可以查看这个完全集成的 PDF(非常酷的媒介),它是最初由 Oliver Ledoit 和 Michael Wolf 发表的论文:
№2:主成分分析
不经过主成分分析(PCA)就很难谈论分析建模方法。PCA 是另一种形式的分解。主成分分析和其他类似的分解方法的最大区别是主成分分析只使用奇异值分解方法。
该模型的输入数据也是集中的,但是在应用 SVD 分解方法之前,不对每个特征进行缩放。很可能大多数数据科学家都熟悉这个模型,因为它是分析行业的一个主要部分。这是因为降低数据的维度确实有助于更好地理解数据,以及特征之间的差异和它们各自的方差水平。我认为对于这种无监督学习方法来说,唯一至关重要的参数是 svd_solver 参数。该参数为算法提供了一个基础,使用了 SkLearn 中已经提供的一整套奇异值分解方法。
№3:排列重要性
虽然置换重要性可能不是 SkLearn 库中的一个众所周知的工具,但我确实认为它们是解决复杂分类问题的一个绝对重要的工具。通常,每当讨论排列重要性时,我们都在谈论基尼系数不纯。吉尼杂质只是随机森林分类器使用的排列测量的一个花哨名称。
此模型中要素的重要性可以告诉您许多关于您正在处理的数据和要素的信息。它不仅可以给出删除一些不重要特性的可靠提示,而且还可以从您的模型中提供重要的反馈,说明是什么使它变得更准确或更不准确!不用说,这肯定是我们大多数人想要了解和利用的来自 SkLearn 的东西。
您可以通过从 Scikit-learn 的检查模块导入此方法来使用排列重要性:
**from** **sklearn.inspection** **import** permutation_importance
r = permutation_importance(model, x_val, y_val)
№4:随机投影
一个非常酷的概念是随机投影,我们可以把它作为一个整体来看待,我认为这个概念被低估了,并且已经完全应用到 SkLearn 中。随机投影是一种计算非常简单的技术,用于计算分解和降低数据的维数。
这种分解方法是不同的,因为它以更高的精度换取更好的性能。如果您的数据中有很多需要缩减的内容,这将非常有用。然而,我认为随机投影不如 SVD 使用得好的部分原因是因为 SVD 实际上是一种非常高效和可伸缩的分解方法。然而,我确实看到了许多应用,其中一些非常高维的数据,可能具有许多非常重要的特征,可以真正利用这样的分解方法。
№5:功能集聚
你听说过数据争论,但你听说过数据聚集吗?好消息是,我刚才提供的上下文线索应该已经给了你一个凝聚这个词的确切定义。我必须承认,在我的一生中,我从来没有听到这个词被大声地说出来,我仍然不确定如何发音,但它肯定可以毫无问题地被书写和阅读——所以
不要大声读出来。
这也是你大声朗读的一个非常奇怪的选择。无论如何,使用我们刚刚学到的这个奇怪词汇的定义,如果不是数学,我们不会接触到它,我们可以假设这意味着功能的集合-这将是一个正确的假设!这一过程与凝聚聚类非常相似,但它合并的是特征而不是样本。当然,这只是 SkLearn 提供的庞大武器库中做降维的又一个选择。然而,当涉及到数据科学时,学习如何利用 SkLearn 中提供的大量工具肯定会非常有用。
结论
作为一名数据科学家,这篇文章包含了很多我觉得非常令人兴奋的东西。这当然不仅适用于排列和系数,甚至更进一步;我也很喜欢分解这个话题。我认为很多在幕后工作的非常酷的线性代数,实际上在数学上相对简单,是非常了不起的——很难想象如果没有这些算法,我们会在哪里。
特别是 SVD 可能是现实世界机器学习中最好的数学概念之一。这是因为实际上经常需要对真实数据进行分解。在现实世界中,特性并不总是默认的特性,所以利用这篇关于分解的文章中提出的概念将会非常有用——我认为这些工具既没有被充分利用,又非常有用。
您可以在 1 天内完成 5 门在线数据科学课程
在周末结束前学点新东西!
尼克·莫里森在 Unsplash 上拍摄的照片
我们不都希望我们的日子比 24 小时更长吗?这样我们每天就能装下更多的东西?但是,不幸的是,今天的时间是——而且一直都是——非常难以把握的,尤其是如果你试图在已经排得满满的日程表中挤出时间来学习一项新技能的话。这就是为什么找到一个可以在相对较短的时间内教会你新东西的资源总是一件很棒的事情。
当我想学习一项新技能、库或编程语言时,我必须在下班后(这并不理想)或周末去做。我经常尽我最大的努力在周末学习所有必要的知识。然而,我们都知道数据科学是一个广阔的领域,其下有许多特定的主题。
</10-newsletters-you-need-to-subscribe-to-as-a-data-scientist-d12c7f33fbab>
如果每天都能学到一个新的技能或者概念岂不是很棒?然后进入下一个概念?例如,我知道你可以在一天或 24 小时内学会任何数据科学概念的基础知识。然后,一旦你很好地学习了这些基础知识,你就可以积累这些知识并开始构建应用程序。
在这篇文章中,我将与你分享 5 门在线课程,都可以在 Coursera 上找到,并且都很短,内容丰富,可以在一天内完成。如果你想在周末学习一些东西,但又不想注册 50 多个小时的课程,这些课程是一个很好的选择。
№1:基础:数据,数据,无处不在
没有比数据分析课程更好的方式来开始一系列数据科学课程了。列表中的第一门课程是谷歌提供的,是数据分析方面的入门课程。基础:数据,数据,无处不在是一系列课程中的第一门,旨在为你获得谷歌分析证书做准备。
本课程分为 5 个模块,总体设计在 20 小时内完成。在这 20 个小时中,您将学习分析数据的关键技能,如清理和可视化数据,了解这样做所需的基本工具,如 SQL、R 和 Tableau,并建立一个专业、高效的开发环境。
</5-python-books-to-transfer-your-code-to-the-next-level-a5af0981e204> [## 5 本 Python 书籍,让你的代码更上一层楼
towardsdatascience.com](/5-python-books-to-transfer-your-code-to-the-next-level-a5af0981e204)
№2:生产中的机器学习介绍
接下来是一门课程,面向那些对深度学习、Python 和 AI 有一些了解的人。生产中的机器学习介绍是 DeepLearning 提供的课程。AI 和是他们关于机器学习生产工程(MLOps)系列的第一门课程。本系列课程旨在让您超越实现机器学习算法,并为其发布做好准备。
本 MLOps 入门课程分为三个部分,所有部分都应在 10 小时内完成。通过这三个模块,您将学习成为一名成功的机器学习专家所需的生产工程技能。此外,您将学习 ML 生命周期,如何以结构化的方式解决任何问题,以及如何进行高效的分析以了解您的 ML 模型。
№3:数据工程简介
我认识的每一个数据科学家,包括我自己,可能都不止一次被问到,“那么数据科学家是做什么的?”。这个简单却不简单的问题是所有数据科学角色命名极其混乱的原因之一。这些令人困惑的头衔之一是数据工程师。单子上的下一门课,数据工程简介,应该要你回答这个问题。
IBM 提供此课程,分为 4 个模块,可在 10 小时内完成。在本课程中,您将了解基本概念、工具和数据工程流程。您还将了解现代数据生态系统,以及数据科学家、数据工程师和数据分析如何在这个生态系统中互动。
</5-databases-that-you-can-use-for-free-841cf81834bf>
№4:使用 AutoML 分析数据集和训练 ML 模型
接下来是另一个机器学习相关的课程。使用 AutoML 分析数据集并训练 ML 模型。DeepLearning 提供这门入门课程。AI 和 AWS,并专注于使用 AutoML 为 ML 模型训练准备数据集。要学习本课程,您需要掌握一些基本的 Python 和 Jupyter 笔记本技能。
本课程分为 4 个模块,预计在 14 小时内完成。这是一系列课程中的第一门,将向您传授应用探索性数据分析(EDA)、在模型上使用 AutoML 以及一些文本分类算法所需的所有基础知识。在本课程结束时,您将能够使用 AWS 云构建、培训和部署可扩展的 ML 管道。
№5:谷歌云大数据和机器学习基础
这个短期课程名单的最后一个是关于大数据和机器学习的课程。谷歌云大数据和机器学习基础是谷歌提供的许多数据工程和数据分析相关课程的中级课程部分。
本课程由 4 个模块组成,预计在 14 小时内完成,将向您介绍谷歌云平台的大数据功能。本课程将带您了解如何使用云 SQL 将您现有的 MySQL 工作负载迁移到 Google Cloud,以获得更快、更高效的管道。您还将学习如何查询数据和执行交互式分析,以便更好地理解您的数据。
</9-free-quality-resources-to-learn-and-expand-your-python-skills-44e0fe920cf4>
外卖食品
数据科学是一个经常用来同时描述许多概念和术语的术语。数据科学是一个包含许多更小的领域和概念的领域。要成为一名数据科学家或深入数据科学世界,您需要学习所有这些较小的领域和概念。
我认为你可以在 24 小时内学会每个小领域或概念所需的所有基本信息。那是专门的 24 小时学习。如果你能找到设计在 24 小时内学习的资源,这通常是很好的,因为我们都知道找到资源需要 24 小时——如果不是更长,有时。
这就是为什么我决定与你分享一些在线课程,这些课程设计得简短,简明,切中要害,最重要的是,可以做到,在 1 天内开始完成。所以,下次你想学点新东西,而又只有周末时间的时候,不妨试试这篇文章中的一门课程。
您现在可以开始学习的 5 门在线数据科学课程
在家舒适地学习数据科学的所有基础知识。
尼克·莫里森在 Unsplash 上拍摄的照片
所以,你决定进入数据科学领域。你可以花几个小时(如果不是几天的话)在谷歌上搜索如何学习数据科学的基础知识,可以用来学习的材料,以及可以参加的课程和训练营,这些都将增加你在完成工作后找到工作的机会。
所有这些都很棒;唯一的问题是,如果你尝试谷歌数据科学课程或材料,你最终会得到数百万个结果。你怎么能选择什么是好的,什么不是?什么值得你花时间,什么会浪费时间?
当我开始我的数据科学之旅时,我问了自己所有这些问题以及更多问题。关于如何成为一名数据科学家,你需要学习什么,以及你应该做什么的大量信息让我不知所措。我花了大量时间浏览课程、教程和书籍,试图掌握数据科学的基础知识。
我知道我不是唯一一个经历过或者将要经历这个挑战的人。我知道每个人对适合自己的东西有不同的偏好;适合我的不一定适合其他人,反之亦然。然而,我想提供一个简单的指南,涵盖 5 门在线数据科学课程,这些课程有很好的评论,并为您提供一个开始学习之旅的好地方。
我选择这些课程是因为它们都可以在你舒适的家中免费学习。不是每个人都有能力去几千美元的训练营,或者他们所在的地区可能没有。你可以免费浏览这些课程的所有资料——审核它们——或者支付一笔可观的费用,最终获得一个证书。
№1: IBM 数据科学专业证书
这个清单上的第一门课程是 IBM 的。在推进技术方面,IBM 一直处于领先地位;他们总是有很棒的团队和资源,其他人可以用来学习所有不同类型的技术,如 web 开发、应用程序开发,甚至量子计算。
IBM 提供了一个专业证书项目,通过 9 门课程让你从一个数据科学新手变成一个数据科学专家,你可以按照自己的进度学习。该课程提供实践经验和现实生活中的问题,可以帮助你建立一个强大的投资组合。
在这个证书课程中,您将学习编程、数据科学和机器学习的基础知识,如何使用 Jupyter 笔记本电脑,使用 SQL 与数据库进行交互,有效地可视化您的结果,并了解该领域的最新进展。
</5-data-science-programming-languages-not-including-python-or-r-3ad111134771>
№2:哈佛数据科学专业证书
接下来,我们有另一个由哈佛大学提供的证书项目。哈佛是世界上最负盛名的学校之一,虽然不是每个人都能上它,但任何有好奇心的人都可以上这门课,如果他们想从哈佛获得证书的话。
该证书课程包含 9 门课程,使用 R 编程语言涵盖数据科学基础知识。您还将学习数据科学背后的数学背景、Git 和版本控制基础知识,以及每个数据科学家的一些基础知识,如 Unix/ Linux 系统交互。
这个证书真正好的地方在于,每门课程如何利用案例研究来解释主要概念,并提出你需要熟悉的真正问题,以建立一个成功的数据科学组合。
№3:约翰·霍普斯金数据科学课程
约翰·霍普斯金大学提供了一个 10 门课程的数据专业化项目,它会让你经历成为一名数据科学家所需的一切,从使用 R 编程语言编程的基础到形成机器学习领域的算法。
关于这套课程,我最喜欢的一点是它如何为基本但往往仓促的概念指定课程,例如构建一个良好的开发环境,处理 markdown 和 Github,以及使用 RStudio。此外,关于清理和收集数据以及 EDA 的两门课程涵盖了从数据中提取有用信息并最终获得准确结果所需的所有内容。
该证书还揭示了该领域的研究方面,以及如何才能产生可重复的数据科学研究的一些线索。作为一名学术界人士,很高兴看到数据科学在线课程指向学术界,而不是只关注工业用途。
</10-nlp-terms-every-data-scientist-should-know-43d3291643c0>
№4:密歇根大学应用数据科学与 Python 专业
如果你想进入数据科学,尤其是自然语言处理,密歇根大学提供了一个很棒的 5 门课程的项目,专注于数据科学的应用方面。
虽然这套课程本身不是针对自然语言的,但它确实有两门课程专注于基本的自然语言处理概念,主要是文本挖掘和社会网络分析。这些课程使用 Python 作为主要的编程语言,涵盖数据科学的基础知识。它还将更深入地介绍构建应用程序常用的不同 Python 包的细节。
课程设计者建议你按这个顺序学习课程,数据科学导论,应用绘图,应用机器学习,然后是文本挖掘和社交网络分析。如果你完成了所有 5 门课程,你可以付费获得官方证书。
№5: Dataquest 数据科学家职业道路
该列表中的最后一组课程是 Dataquest 的数据科学家职业道路。Dataquest 可能是所有数据科学最著名的在线资源之一;不管你是想学 R 还是 Python,网站都有针对不同水平人群的课程。
数据科学职业道路包含许多课程,涵盖你需要深入学习的一切,从编程基础到数据库,到可视化,到数学和统计,到机器学习和深度学习的更多技术算法。
Dataquest 提供的课程旨在在一个地方找到您需要学习的所有内容,您无需去其他地方继续学习。这为您节省了大量时间和精力。
</6-data-science-certificates-to-level-up-your-career-275daed7e5df>
最后的想法
成为一名数据科学家似乎是一项具有挑战性的任务。完全老实说,这并不容易;就像任何其他的学习旅程一样,它需要时间、练习、耐心和毅力。但它不需要的是学位。
许多人认为,要成为一名数据科学家,你需要去上学或参加训练营。这两种选择成本都很高,而且对每个人都不可行。幸运的是,你可以通过参加涵盖数据科学所有基础知识的在线课程获得所需的知识,而不必离开舒适的沙发或破产。
网上有许多资源可供您用来学习数据科学,这些资源太多了,很容易让人不知所措,找不到最适合您的资源。
</6-web-scraping-tools-that-make-collecting-data-a-breeze-457c44e4411d>
我写这篇文章的唯一目的是帮助您找到一个开始学习不同数据科学分支的好地方。我在本文中介绍的 5 门课程并不是你可以使用的唯一课程。尽管如此,他们帮助许多数据科学家建立了他们的知识库,构建了他们的投资组合,并开始了他们的新职业生涯,希望他们也能为你做同样的事情。
掌握数据科学的 5 种免费资源
课程、书籍和讲座将带你从新手到高级
你参加了一门数据科学 MOOC,并完成了所有的讲座和作业。你甚至拿到了证书。现在怎么办?
一旦我完成了我的第一个数据科学在线课程,我就不知道接下来该做什么了。我不知道下一步该上什么课,也不知道如何将学到的概念应用到现实世界的问题中。
我花了很长时间寻找一门中级数据科学课程,它将有助于弥合我的理解差距,向我介绍案例研究,并加强我对统计概念的理解。
我花了将近一年的时间才意识到,没有一门课程能教会我这些东西。
我创建了一个路线图,概述了我想学习的概念,并开始寻找涵盖这些特定主题的资源。
这些资源帮助我加强了对机器学习和统计学的理论理解。
他们还帮助我理解了可以通过预测建模解决的不同类型的问题,并用 Python 演示了一些例子。
在这篇文章中,我将结合我在过去一年中整理的所有资源,并将其分解给你。你可以用这些资源按照你想要的任何顺序来补充你的学习。
这些资料有助于加快我的数据科学学习过程,希望对您有所帮助。
YouTube 频道
首先,我将列出几个在我的数据科学学习过程中有很大帮助的 YouTube 频道。
从 YouTube 视频中学习有时会被看不起,因为这些材料不一定是由合格的专业人士教授的,如果你不小心,你可能会学到错误的东西。
然而,在像数据科学这样的领域,从 YouTube 学习会非常有帮助。
在 YouTube 频道上解释概念的老师通常是自学成才的个人,他们在数据科学行业工作过。
他们能够更多地与他们的观众联系起来,并且理解他们的学习者并不总是来自强大的学术背景。正因为如此,他们使他们的材料更容易理解。
如果你没有很强的统计学或数学背景,我强烈建议你从 YouTube 频道学习数据科学概念。
他们不使用数学符号来解释机器学习/数据科学概念。相反,我将要推荐的 YouTubers 能够用简单的英语分解困难的概念,同时为你提供对材料的强有力的理论理解。
1.克里斯·纳伊克
克里斯·纳伊克是最好的机器学习在线教育者之一。他在数据科学领域有超过 8 年的工作经验,他的教程包括许多行业用例。
他有关于统计学、机器学习和 Python 的播放列表。他的视频几乎涵盖了数据科学的每个方面,并将教你入门所需的一切。
他的机器学习教程不仅涵盖实际实现,还包括算法背后的底层数学。只需按照播放列表的顺序完成每个视频。
他还为想要学习数据科学的学生制定了路线图。他的路线图如下:
计算机编程语言
他的机器学习播放列表的第一部分涵盖了 Python 编程。他首先教你编码的基础知识,然后继续学习特定于数据科学的库。
你可以在这里找到他的机器学习播放列表。前 30 个视频会让你很好的掌握 Python 编程。
统计数字
学习完 Python 之后,Krish 建议继续学习统计学。机器学习播放列表中的下几个视频涵盖了统计概念。他教授概率、分布类型和假设检验等概念。
就我个人而言,虽然我觉得他的统计学讲座非常全面,但我认为最好是用他的播放列表来补充你的学习,而不是让它成为你的核心重点。
在文章的后面,我会列出其他关于统计和概率的课程,我建议在这些课程的同时做他的讲座。
特征工程
Krish 有一个完整的播放列表致力于功能工程。特征工程是数据科学最重要的方面之一。
作为一名数据科学家,您的大部分时间将花在选择用于模型的变量、缩放要素以优化模型性能以及编码预测值上。
Krish 建议在进入机器学习部分之前,先完成他的特征工程播放列表。
机器学习
完成了前三个板块,就可以从他的机器学习播放列表的机器学习板块开始了。这与我在 Python 部分链接的播放列表相同。
在这一部分,他涵盖了不同的机器学习算法。他首先解释模型背后的直觉,并用简单的英语解释。然后,他继续解释算法的数学基础。
如果你是机器学习的新手,我强烈建议从 Krish 关于不同算法的视频讲座中学习。它将让你很好地理解机器学习算法如何工作,以及它们建模数据的不同方式。
他的讲座很容易理解,即使对那些没有数学背景的人来说也是如此。
模型部署
最后,我强烈建议学习他的模型部署教程。
一旦你创建了你的机器学习模型,你需要把它投入生产,这样这个模型就可以被其他人大规模使用。
Krish 教授 Heroku、Azure 和 AWS 上的模型部署。
额外资源
Krish 有一个完整的深度学习播放列表,你可以在这里访问。
此外,如果你正在寻找数据科学方面的工作,他有一个完整的面试准备播放列表,你可以在这里访问。
2.丹尼尔·伯克
Daniel Bourke 是一名自学成才的数据科学家。自学数据科学后,他找到了一份机器学习工程师的工作。
我将 Daniel 添加到列表中,因为他在我的数据科学学习之旅中一直是一个巨大的灵感。
他不像克里斯·纳伊克那样在 YouTube 上制作机器学习教程。
相反,他记录了他的学习历程,并为你指出正确的学习资源。
比如自学深度学习,做 TensorFlow 开发者认证考试。他通过了,然后制作了一个视频,告诉我们其他人如何做同样的事情。
他列出了为通过考试而阅读的书籍和选修的课程,以及完成每项学习计划所需的时间。
他的视频和博客帖子对想要在数据科学领域找到工作或通过特定认证考试的人非常有帮助。
他还创建了一个机器学习路线图,你可以在这里访问。
课程
尼克·莫里森在 Unsplash 上拍摄的照片
我在这里列出的在线课程是面向那些想学习统计学和数据科学理论方面的人的。
在我参加了机器学习入门课程并学习了 Python 之后,我发现自己对算法的工作原理缺乏正确的理解。
我使用这些课程来加强我对数据科学统计方面的理解,以及机器学习模型背后的工作。
概率统计(to P 还是不 to P?)
这是一门介绍性的统计学课程,将教授你描述性和推断性统计、假设检验和不确定性下的决策等概念。
如果你没有统计学的背景,这个课程可以帮助你入门。您将学习描述性统计的基础知识,如人口的平均值、中位数和众数。
然后,您将学习推断统计学,它允许您使用样本对真实总体进行推断。James 介绍了不同的抽样技术,然后解释了如何从样本总体中估计总体参数。
他还解释了如何使用简单的真实世界的例子进行假设检验,你甚至需要完成假设检验的同行评分作业。
一旦你完成了这门课程,你将对概率和统计有一个基本的了解,以及在不确定的情况下做决策的方法。
你可以用克里希·纳伊克的统计学讲座来补充本课程,以便更好地理解所教授的概念。
这门课在 Coursera 上,可以免费旁听。你也可以申请经济资助。如果你的申请被批准,你可以免费获得一个课程证书。
统计学习
完成以上课程后,建议在 edX 上参加统计学习。
注意:你可以免费旁听这门课。如果你想要一个证书,你可以申请经济资助,并获得课程总费用的 90%的折扣。这是我列出的唯一一个不是完全免费的资源,但是如果你申请经济资助,你只需要支付全部课程费用的 10%。
本课程由斯坦福大学的教授特雷弗·哈斯蒂和罗伯特·蒂布拉尼教授主讲。
两位讲师都很有热情,他们的能量会让你有动力完成课程。
本课程教你不同的机器学习算法,可用于数据建模。它涵盖了监督学习技术,如线性回归,逻辑回归,支持向量机和决策树。
它还涵盖了无监督学习算法,如 K-均值聚类和主成分分析。
我建议你先完成我上面列出的统计学入门课程,然后再去上这门课。此外,在开始学习这门课程之前,至少要学习一门机器学习入门课程。
我建议在开始本课程之前,先完成克里希·纳伊克的机器学习播放列表,因为其中涵盖的概念对初学者来说并不友好。如果你以前没有数学/统计学背景,你可能会对课程材料感到困惑。
我也强烈建议看一下这门课所依据的电子书,叫做统计学习入门。
这本书涵盖了很多课程中没有解释的额外材料,如果你想更全面地了解机器学习,你应该考虑阅读这本书。
额外资源
深度学习是人工智能一直让我着迷的一个方面,我每天都试图在这个领域学习一些新的东西。
Francois Chollet 的《用 Python 进行深度学习》是一本帮助我更好地理解深度学习概念的书。
弗朗索瓦涵盖了神经网络的数学构建模块,并解释了反向传播等概念。他没有使用复杂的数学符号,而是用简单的英语和 Python 代码解释了一切。
他涵盖了文本处理、计算机视觉和图像生成的深度学习。
如果你对深度学习感兴趣,我也建议订阅莱克斯·弗里德曼的 YouTube 频道。Lex 是麻省理工学院的一名人工智能研究员,他在 YouTube 上创建了深度学习播客。
他还在麻省理工学院教授深度学习,你可以在这里访问他的讲座。在他的播客中,他与埃隆·马斯克、诺姆·乔姆斯基和李奥纳特·苏士侃等有影响力的人物进行了发人深省的对话。
结论
上述资源有助于加快我的数据科学学习过程。如果你已经参加了初级水平的机器学习课程,但不确定如何继续,请尝试上面的一些资源。
另外,请记住,建立机器学习模型只是你需要知道的一部分。如果你想成为一名数据科学家,一定要参加特征工程课程,因为作为一名数据科学家,你的大部分工作将涉及到寻找好的预测器来添加到你的模型中。
您还应该学习模型部署。作为一名数据科学家,您的工作范围通常要求您将模型投入生产。在建立一个模型之后,你需要确保它在其他人的手中,并且确保它是可用的。
仅此而已!感谢您的阅读,我希望您能从这篇文章中获得一些有用的东西。
任何停止学习的人都老了,不管是二十岁还是八十岁。坚持学习的人永远年轻——亨利·福特。
您可以使用 5 种开源工具来训练和部署 OCR 项目
第一部分:如果你正在做文本检测,你应该知道这些工具
图片来自pexels.com
Part I - 5 open-source tools you can use to train your own data and deploy it for your next OCR project!
Part II - From labelling to serving your OCR model! (Coming soon)
在很多情况下,我们需要检测图像中的文本。
- 为了实现运营数字化,银行需要将所有文书工作存储到云数据库中。为此,文档必须被扫描并转换成机器可读的格式。
- 在房地产行业,购房者和代理商通常以纸质形式填写他们的协议表格。要在云中保存表格,你需要 OCR 软件,该软件将文本转换成机器可读的文件。
- 在 Edtech 初创公司中,有一些严重依赖 OCR。举个例子, Photomath ,一家将问题分解成简单步骤来帮助人们理解数学的初创公司。该应用程序为用户提供了扫描他们在纸上的问题并通过扫描将其翻译成机器可读格式的便利。
OCR 可以使用传统的计算机视觉技术或更先进的深度学习技术来完成。本文的重点将只放在使用深度学习模型的工具上。作为奖励,我还将包括脚本,让您一次体验所有的模型。
EasyOCR
https://github.com/JaidedAI/EasyOCR
EasyOCR 是一款开源的、随时可用的 OCR,支持近 80 种语言。您可以选择用您自己的数据训练模型(您可以遵循他们的示例数据集来格式化您自己的数据集)或使用现有模型来为您自己的应用服务。
以下脚本可用于运行代码:
# installation
pip install easyocr# import
import easyocr# inference
reader = easyocr.Reader(['en'])
result = reader.readtext(img_path)
这里有一个快速测试,看看这个 OCR 软件有多准确。下图来自 pexels.com,OCR 工具会检测图片中的文字。在一个完美的模型中,它应该能够输出“让这一天变得伟大!”。
照片由 Alexas Fotos 从 Pexels 拍摄
结果如下:
你可以看到结果并不完美。它误解了字母 G,把 H 误认为是小写字母 H。
PaddleOCR
https://github.com/PaddlePaddle/PaddleOCR
PaddleOCR 是中国百度团队开发的开源产品。我使用这个软件工具已经有一段时间了,我真的很惊讶这个团队做了多少工作来使这个免费的产品像市场上任何商业 OCR 软件一样强大。框架中使用的模型使用最先进的(SOTA)技术(如 CML 知识提炼和复制粘贴数据扩展策略)和大量打印和手写图像进行训练。这使得它成为最强大的开源 OCR 软件之一。下面是一些你可以用开源代码做的事情:
- 您可以在您的应用程序中使用他们现有的模型。它们还提供了一个极其轻量级但功能强大的模型,称为 PP-OCRv2,这样您就不需要担心大内存问题。
- 他们支持多种语言,如中文,英语,韩语,日语,德语等。
- 他们有多种工具来支持您进行数据标注。例如,它们为您提供 PPOCRLabel 来快速标记图像中的文本。由于数据对于训练 OCR 模型非常重要,他们还有一个名为 Style-text 的工具,可以让您快速合成图像,以便您有更多的图像来训练您的模型,使其在生产环境中使用起来更加强大。
- 您可以使用提供的脚本对数据集上的模型进行微调。
你可以这样使用它:
# installation
pip install paddleocr paddlepaddle# import
from paddleocr import PaddleOCR# inference
ocr = PaddleOCR(use_angle_cls=True, lang='en')
result = ocr.ocr(img_path, cls=True)
让我们使用上面的同一个图像来检查模型性能:
令人惊讶的是,从一个之前已经在类似图像上训练过的模型中看到如此精确的输出。
TrOCR
图片来自来源。根据麻省理工学院的许可。
https://huggingface.co/transformers/model_doc/trocr.html https://github.com/microsoft/unilm/tree/6f60612e7cc86a2a1ae85c47231507a587ab4e01/trocr
TrOCR 最初是由、吕腾超、等人在 TrOCR:基于变压器的光学字符识别中提出的。它是基于图像转换器编码器和自回归文本解码器(类似于 GPT-2)开发的。代码已经包含在著名的 Huggingface 库中,因此我们可以直接从库中使用训练好的模型。
# installation
pip install transformers# import
from transformers import TrOCRProcessor, VisionEncoderDecoderModel
from PIL import Image# inference
model_version = "microsoft/trocr-base-printed"
processor = TrOCRProcessor.from_pretrained(model_version)
model = VisionEncoderDecoderModel.from_pretrained(model_version)
image = Image.open(img_path).convert("RGB")
pixel_values = processor(image, return_tensors="pt").pixel_values
generated_ids = model.generate(pixel_values)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
与其他两个模型不同,这些模型只输出最终的文本输出,而不输出文本位置。该模型是用于文本识别的,所以你不应该期望它检测图像中的文本。运行上述脚本后,您将收到的输出是“MASKAY”。正如所料,结果很差,因为管道中没有文本检测模型。
MMOCR
https://github.com/open-mmlab/mmocr
MMOCR 是另一个开源 OCR 工具,它是在著名的 OpenMMLab 项目下开发的。该项目由香港中文大学的团队开发,已成为计算机视觉领域的领先项目之一。
它支持多种 SOTA 模式,还允许您进行培训和部署。这个开源工具的亮点之一是它能够在同一管道中提供除其他模块(文本检测和识别)之外的关键信息提取模型。关键信息提取解决了用户必须匹配某个模板才能从文档中提取数据的问题。传统的方法很难使用带有未知模板的文档。
一旦我们安装了工具(是的,它没有前两个工具方便),我们就可以用它来检测我们的样本图像并测试它的性能。我们得到与 PaddleOCR 类似的结果,只是感叹号没有出现在“GREAT”的末尾。总的来说,这个工具将几乎所有的东西都放在一个管道中,所以使用起来非常强大。
宇宙魔方光学字符识别
https://github.com/tesseract-ocr/tesseract https://pypi.org/project/pytesseract/
对于之前做过 OCR 项目的人来说,你应该对这个库非常熟悉。这里有一点关于宇宙魔方光学符的历史:
Tesseract 最初是由布里斯托尔的惠普实验室和科罗拉多州格里利的惠普公司在 1985 年到 1994 年间开发的,1996 年做了一些修改以移植到 Windows,1998 年做了一些 c++化。2005 年,宇宙魔方被惠普开源。从 2006 年到 2018 年 11 月,它由谷歌开发。—来自https://github.com/tesseract-ocr/tesseract
python-pytesserac 是 tesserac-OCR 引擎的包装器。使用它非常简单。由于该模型自 2019 年 12 月 26 日以来一直没有更新,并且使用了一个非常简单的 LSTM 模型,因此结果可能不如该方法的其他部分理想。尽管如此,该模型可以使用新的数据进行训练,这样你就可以根据自己的需要对其进行定制。
为了测试这个工具,我使用了上面同样的图片。尽管用 OpenCV 对图像进行了预处理,我还是得到了一个空的结果。该工具似乎不能很好地处理场景中的文本。对于背景相对干净的普通文档,性能应该更好。
摘要
以下是不同开源 OCR 工具的比较:
按作者分类的表格
这个评级完全基于我自己对开源工具的体验。他们每个人都有自己的优势。我们的项目要求我们根据一组特定的需求选择正确的工具。
如果你想试一试,这是 Colab 笔记本!
作者代码
下一步是什么?
在为现实世界服务部署时,不能完全依赖开源工具。特别是对于一些应用,需要 99%以上的准确率。为了实现这一点,我们可以从我们的业务中收集数据,并在训练开源工具之前对它们进行标记。我的下一步将向您展示 Label Studio 如何简化整个过程。从贴标签到服务模特,我全包了!
如果您没有读过我的 Label Studio 文章,请在这里阅读:
请关注我并喜欢我的帖子,以获得该系列的最新更新。
关于作者
Woen Yon 是新加坡的一名数据科学家。他的经验包括为几家跨国企业开发先进的人工智能产品。
Woen Yon 与一些聪明人合作,为当地和国际初创企业主提供网络解决方案,包括网络爬行服务和网站开发。他们非常清楚构建高质量软件的挑战。如果你需要帮助,请不要犹豫,给他发一封电子邮件到 wushulai@live.com。
他喜欢交朋友!在 LinkedIn 和 Medium 上随时与他联系
https://laiwoenyon.medium.com/
每个“数据爱好者”都必须知道的 5 种异常检测技术
异常检测方法(视觉和代码)
来自源的修改图像
异常值是那些与总体的样本中的其他数据点有强烈*(不同属性)*差异的观察值。在这篇博客中,我们将经历 5 种离群点检测技术,每个“数据爱好者” 都必须 知道 。但在此之前,让我们看看并了解离群值的来源。
数据集中异常值的可能来源是什么?
数据集中可能存在异常值有多种原因,如人为错误*(错误的数据输入)、测量错误(系统/工具错误)、数据操作错误(错误的数据预处理错误)、采样错误(从不同来源创建样本)等*。重要的是,检测和处理这些异常值对于学习一个健壮的和可推广的机器学习系统是重要的。
z 得分
Z 值 *(也称标准值)*是统计学中的一个重要概念,表示某一点距离均值有多远。通过应用 z 变换,我们移动分布,使其平均值为单位标准差0。例如,Z 值为 2 意味着数据点距离平均值有 2 个标准偏差。
此外,任何数据点的 z 分数都可以按如下所示计算—
z 得分(I)=(x(I)-平均值)/标准差
它假设数据呈正态分布,因此数据点的百分比位于-/+1 标准偏差之间。是~68%,-/+2 stdev。是大约 95%和-/+3 标准偏差。就是~99.7%。因此,如果 Z 值是> 3,我们可以安全地将该点标记为异常值。 参考下图
带有异常标记的正态分布|图片由作者提供
你可以使用 python 来实现它,如下所示—
*import numpy as np**data = [1, 2, 3, 2, 1, 100, 1, 2, 3, 2, 1]* *threshold = 3**mean = np.mean(data)
std = np.std(data)**z_score_outlier = [i for**i in**data if (i-mean)/std > threshold]
print (z_score_outlier)
>> 100 (outlier)*
在 Python 中也可以使用 Scikit learn 和 Scipy 提供的内置函数。(链接在 资源部分 )
力线
在局部异常因素 (LOF)中,这个想法围绕着局部区域的概念。这里,我们计算并比较焦点的**局部密度和它的邻居的局部密度。**如果我们发现焦点的局部密度与其邻居相比非常低,这将暗示焦点在该空间中是孤立的,并且是潜在的异常值。该算法取决于超参数 K,该超参数 K 决定了在计算局部密度时要考虑的邻居数量。该值介于空间中的 0 *(无邻居)和总点数(所有点都是邻居)*之间。
局部密度函数定义为平均可达距离的倒数*,其中平均可达距离定义为从焦点到邻居中所有点的平均距离。*
LOF =邻居的平均局部密度/焦点的局部密度
如果,
- LOF ≈ 1 密度与邻国相似
- LOF < 1 密度高于邻国(正常点)
- LOF > 1 密度比邻国低(异常)
此外,下图显示了空间中样本焦点*(深蓝色)*的 LOF 和局部密度的计算。这里 K=3 (邻居),d *(距离)*可以计算为欧几里德,曼哈顿等。
您可以使用 python 的 Scikit-learn 库来实现它,如下所示—
*from sklearn.neighbors import LocalOutlierFactor**data = [[1, 1], [2, 2.1], [1, 2], [2, 1], [50, 35], [2, 1.5]]**lof = LocalOutlierFactor(n_neighbors=2, metric='manhattan')
prediction = lof.fit_predict(data)
>> [ 1, 1, 1, 1, -1, 1]*
请随意探索超参数调谐库等。(链接在 资源部分 )
此外,如果你想继续享受阅读与数据科学和机器学习相关的精彩文章,你可以通过我的推荐链接:)购买中级会员资格
ABOD 和凸包方法
我已经有一篇关于离群点检测的几何模型的非常详细的博客文章,其中我主要关注于基于角度的技术 (ABOD) 和 基于深度的技术(凸包)** 。你可以在这里查看 ABODhttps://blog.paperspace.com/outlier-detection-with-abod/。下图显示了检测异常值的两种技术的图示视图—
**
隔离森林
隔离森林是一种基于树的算法,它试图根据决策边界(就像我们对决策树一样)*的概念找出离群值。这里的想法是继续在随机阈值和特征上分割数据,直到每个点都变得孤立 *(这就像在数据集上过度拟合决策树)。一旦隔离完成,我们就把在这个过程中很早就被隔离的点分出来。我们将这些点标记为潜在的异常值。如果您直观地看到这一点,那么一个点离多数越远,就越容易被隔离,而隔离属于一个组的点将需要更多的切割来隔离每个点。
如果你在下图中看到,我们随机选择特征和值到我们切割的地方。经过 4 次切割后,我们能够分离出异常点,这意味着这些节点会在我们的树构建阶段很早就出现。
隔离森林流程|作者图片
您可以使用 python 的 Scikit-learn 库来实现它,如下所示—
**from sklearn.ensemble import IsolationForest**data = [[1, 1], [2, 2.1], [1, 2], [2, 1], [50, 35], [2, 1.5]]**iforest = IsolationForest(n_estimators=5)
iforest.fit(data)**actual_data = [[1, 1.5]]
iforest.predict(actual_data)
>> 1 (Normal)**outlier_data = [[45, 55]]
iforest.predict(outlier_data)
>> -1 (Outlier)**
请随意探索超参数调谐库等。(链接在 资源部分 )
自动编码器
自动编码器是一种神经网络架构,被训练来重现输入本身。它包括两个可训练的组件,即编码器和解码器。其中编码器的目标是学习输入的潜在表示(原始维度到低维度),解码器的目标是学习从该潜在表示(低维度到原始维度)中重构输入。因此,为了让 autoencoder 正常工作,这两个组件应该针对各自的任务进行优化。
自动编码器广泛用于检测异常情况。这种工作方式背后的一个典型直觉是,如果特征空间中的一个点远离大多数点(这意味着它拥有不同的属性,例如——狗图像聚集在特征空间的某个部分周围,而牛图像离该集群相当远),在这种情况下,自动编码器学习狗分布(因为与牛相比,狗图像的数量将非常高——这就是为什么它是异常的,因此模型将主要专注于学习狗集群)。这意味着,模型将能够或多或少地正确重新生成狗的图像,导致低损失值,而对于牛的图像,它将生成高损失(因为这是它第一次看到的奇怪的东西,并且它已经学习的权重主要是重建狗的图像)。我们使用这些重建损失值作为异常得分,因此得分越高,输入异常的几率就越高。
在下图中—将绿点视为狗,将蓝点视为牛。我们用这种输入分布来训练我们的系统,并期望它输出相同的结果。但我们可以看到,该模型或多或少完美地重新生成了黄色圆点,但不太适合蓝色圆点(因为它不在黄色圆点的相同特征范围内)**
Autoencoder |图片作者培训流程
在下图中——在推理过程中,当我们给我们的模型一个黄点时,它能够重新生成误差较小的点(正常点的信号),而对于蓝色点,它返回较高的误差(异常/异常值的信号),因为无法重新生成相同的点。
自动编码器的推理流程|按作者排序的图像
你可以使用 python 的 PyOD 库来实现它。我推荐你关注这篇 的博文 同样适用。(链接在 资源部分 )
在使用入度数 (ODIN)的异常值检测中,我们计算每个数据点的入度。这里,入度被定义为该点所属的最近邻集的数量。该值越高,该点属于空间中某个密集区域的置信度越高。然而,另一方面,较小的值意味着它不是许多最近邻集的一部分,在空间中是孤立的。你可以把这种方法看作是 KNN 的逆方法。
使用度数内数字(ODIN) |图像的离群点检测
在该图中,我们设置 k 的值(最近邻点)* =3,红点仅属于蓝点的一个最近邻集,而所有其他点都是多于一个最近邻集的一部分。因此,我们得出结论,红点是一个离群值。*
你可以使用 python 的包离群库来实现它,如下所示—
**import package_outlier as po**data = [[1, 1], [2, 2.1], [1, 2], [2, 1], [50, 35], [2, 1.5]]**result = po.LocalOutlierFactorOutlier(data)* *print (result)**
请随意探索超参数调谐库等。(链接在 资源部分 )
另外,如果你对研究论文感兴趣,你可以查看我写的一些研究论文摘要。
资源
- https://pypi.org/project/pyod/
- sci kit-Learn:https://scikit-learn.org/stable/index.html
- 包装异常值:https://pypi.org/project/package-outlier/
我希望你喜欢读这篇文章。如果你愿意支持我成为一名作家,可以考虑注册成为的媒体成员。每月只需 5 美元,你就可以无限制地使用 Medium。
这篇博客到此为止。感谢您的宝贵时间!
5 熊猫的功能科学家必须知道的鼓舞人心的数据
数据科学家日复一日使用熊猫函数
照片来自 Unsplash,作者: Erik Mclean
不,它不是来自中国的巨大的黑白相间的吃竹子的熊。
Pandas 是 Python 中的一个库,专注于数据操作和分析。该库提供了各种用于操作和更改数据结构和数据集的函数。
你为什么需要了解熊猫?
- 数据科学家 80%的工作是清理数据集。使用移除或更改值的函数来清理数据集。这些功能的很大一部分来自熊猫图书馆。
2.当数据科学家被问到…
“你会推荐一位鼓舞人心的数据科学家首先学习哪种编程语言”
在一个 Kaggle 调查, 79%的人说 Python 。
Python 正迅速成为那些进入数据科学领域的人学习的首选语言,了解其最强大的库之一已成为一项要求。
所以说了这么多,让我们来看看本质,看看熊猫的 5 个功能,科学家们需要知道的鼓舞人心的数据。
1) .行,列
。loc 可能是熊猫图书馆中最重要和最常用的功能。该函数用于索引数据框以访问特定的行或列。
的输入参数。loc[]包含要作为第一个输入索引的行,以及要作为第二个输入索引的列。这些输入可以是整数,也可以是标签。
让我们通过一些例子来展示这个函数的功能并付诸实践。
代码示例:
df
- 返回 B 列的 6
df.loc[2,'B']
2。返回 C 列的所有内容
df.loc[:,'C']
3。返回第 1 行的所有内容
df.loc[1,:]
4。从 B 列返回 4&5
df.loc[0:1,'B']
2) .合并( )
就像 SQL 中的连接一样,pandas 中的合并功能基于索引或键列将数据帧合并在一起。
输入参数包括:
- on-这是您输入要进行连接的列的位置。
- 方式-选择所需的连接类型。可以从{ ‘左’,‘右’,,,【外’,,,【内’, }中选择。默认情况下是一个“内部联接”。
理解合并是很重要的,因为你经常会处理多个数据集。
您会遇到这样的情况:一个数据集有您需要的一列,而另一个数据集有您需要的另一列。不要来回地看每一个,将它们组合起来要容易得多。
代码示例:
df1,df2 相应地
1。将两个数据帧连接在一起
df1.merge(df2, on = ['C'], how = 'inner')
结果:
3) .应用( )
的。apply()函数正如其名所示。它将函数应用于列或行。
的输入。apply()是一个特殊的函数。该函数可能已经存在于 Python 中,或者您可以创建自己的函数。
让我来演示一下这两者。
代码示例:
1。计算 C 列中所有值的平方
df['C'].apply(np.sqrt) #uses the square root function from numpy
2。将 A 列中的每个数字加 2
df['A'].apply(lambda x: x + 2)
3。创建您自己的函数,如果值大于 5,则返回 True,否则返回 False。应用于整个数据框。
def above(x):
if x > 5:
return True
else:
return Falsedf.apply(above)
4) .groupby()
更高级的熊猫功能之一。groupby()根据列中的值创建不同的组。
主输入参数是**‘by’**,它等于您要分组的列。
假设我有一个 1000 人的数据框架,包括他们居住的国家和他们的工资。如果我想查看同一个国家所有人的工资,我可以使用。groupby()函数,其中“by”等于国家/地区列。
此外。groupby()函数通常与聚合函数一起使用。这些包括总和、平均值、最小值、最大值等。
因此,如果我们想查看每个国家的平均工资,代码应该是这样的…
df.groupby(by = ['Country']).mean()
5) .drop_duplicates()
很抱歉告诉你,你从网上得到的数据并不总是完美的。您下载的大多数数据集都会有缺失值、列中不正确的类型和重复值。
。drop_duplicates()处理了其中的一个问题,我将让您来猜测是哪个问题。
的输入参数。drop_duplicates()包括:
- 子集-它不会删除整个数据框中的重复项,只会移除您输入的列中的重复项。
- 保留—确定要保留哪些副本。‘第一个’:除去第一个出现的重复项。 【最后一个】 :除去最后一个出现的重复项。 【假】 :丢弃所有重复的。
df.drop_duplicates(subset = ['C'], keep = 'first')
#removes duplicate values from column C
奖金:。read_csv()
在使用上述任何函数之前,您需要将数据集导入 Python。
您找到的大多数数据集都位于 CSV(逗号分隔值)文件中,要将该数据集导入 Python,您可以使用。读取 csv()函数。
主要输入参数是数据集的文件路径。
import pandas as pd #this imports the pandas library in Python
df = pd.read_csv(C:\Documents\dataset.csv)
最后一条建议
如果你还没有使用 Python,你迟早会使用的。
据报道,2020 年,LinkedIn 上 90%的数据科学招聘广告都提到了 Python。
Python 很大程度上与其最著名的库 Numpy 和 Pandas 有关。这意味着如果公司要求你了解 Python,他们也要求你了解它的库。
现在,当然,还有更多你应该知道的熊猫的功能,但是这 5 个功能通常每天都在使用,并且是理解熊猫的其他功能的很好的基础。
与 1k+人一起加入我的电子邮件列表,免费获得完整的 Python for Data Science 备忘单小册子。
你从未用过的 5 种熊猫方法…而且你没有失去任何东西!
你知道他们到底什么时候能帮上忙吗?
作者图片
总的来说,Python 的 pandas 库是一个非常有效的处理列表数据的工具,有时它会让用户感到惊讶。在这篇文章中,我们将讨论 5 个怪异的熊猫方法,这些方法由于各种原因看起来完全是多余的:笨重,有一个更简洁和众所周知的同义词,或者就是没用。
1.[ndim](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.ndim.html)
这个方法继承自 numpy。它返回一个对象的轴数,即 1 表示系列,2 表示数据帧:
import pandas as pd
df = pd.DataFrame({'A':[6, 8], 'B':[9, 2], 'C':[1, 5]},
index =['a', 'b'])
print(df, '\n')
print('ndim for a dataframe:', df.ndim)
print('ndim for a Series:', df['A'].ndim)**Output:**
A B C
a 6 9 1
b 8 2 5
ndim for a dataframe: 2
ndim for a Series: 1
实际上,我们用这种方法唯一能做的就是区分 Series 和 dataframe 对象。然而,出于同样的目的,我们可以简单地使用一种更广为人知和通用的方法— type()
。此外,结果将以更容易理解的方式输出:
print(type(df))
print(type(df['A']))**Output:**
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.series.Series'>
2.[keys](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.keys.html)
与 Python 字典一样,可以在 pandas 结构上使用方法keys()
来获取它的“信息轴”,即数据帧的系列和列的索引。该语法不隐含任何参数:
print(df.keys())
print(df['A'].keys())**Output:** Index(['A', 'B', 'C'], dtype='object')
Index(['a', 'b'], dtype='object')
然而,与字典不同的是,pandas 对象本质上代表具有行和列的表格。因此,用columns
和index
来代替更自然(也更常见)。此外,通过这种方式,我们可以获得一个数据帧的索引,而不仅仅是一个序列的索引:
print(df.columns)
print(df.index)
print(df['A'].index)**Output:**
Index(['A', 'B', 'C'], dtype='object')
Index(['a', 'b'], dtype='object')
Index(['a', 'b'], dtype='object')
3.[bool](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.bool.html)
另一个不太实用的方法是bool()
,也没有任何参数。它唯一做的事情是返回一个具有布尔值的单元素熊猫结构的 bool。如果这两个条件中至少有一个不满足,If 将返回一个ValueError
。换句话说,该方法只返回系列或数据帧的唯一值(bool 类型):
print(pd.Series([True]).bool())
print(pd.Series([False]).bool())
print(pd.DataFrame({'col': [True]}).bool())
print(pd.DataFrame({'col': [False]}).bool())**Output:** True
False
True
False
很难想象什么情况下有必要进行这种手术。无论如何,有更熟悉(也更通用)的方法可以做到这一点:
print(pd.Series([True]).values[0])df2 = pd.DataFrame({'col': [False]})
print(df2.loc[0, 'col'])
print(df2.iloc[0, 0])
print(df2.at[0, 'col'])
print(df2.squeeze())**Output:** True
False
False
False
False
4.[assign](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.assign.html)
此方法向数据帧添加新列:
df = df.assign(D=df['A']+df['B'])
print(df)**Output:
** A B C D
a 6 9 1 15
b 8 2 5 10
或者覆盖现有的:
df = df.assign(D=df['B']+df['C'])
print(df)**Output:
** A B C D
a 6 9 1 10
b 8 2 5 7
或者创建多个列,其中一列是基于在同一个assign
中定义的另一列进行计算的:
df = df.assign(E=lambda x: x['C'] + x['D'],
F=lambda x: x['D'] + x['E'])
print(df)**Output:
** A B C D E F
a 6 9 1 10 11 21
b 8 2 5 7 12 19
同样的结果可以用一种不太麻烦、可读性更好的方式获得,尽管:
df['D']=df['B']+df['C']
df['E']=df['C']+df['D']
df['F']=df['D']+df['E']
print(df)**Output:
** A B C D E F
a 6 9 1 10 11 21
b 8 2 5 7 12 19
5.[swapaxes](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.swapaxes.html)
顾名思义,该函数适当地交换数据帧的轴和相应的值:
print(df, '\n')
print(df.swapaxes(axis1='index', axis2='columns'))**Output:
** A B C D E F
a 6 9 1 10 11 21
b 8 2 5 7 12 19
a b
A 6 8
B 9 2
C 1 5
D 10 7
E 11 12
F 21 19
这里一件奇怪的事情是,我们总是必须指定参数'index'
和'columns'
(否则,将会抛出一个TypeError
),尽管很明显这个方法的唯一应用就是交换这两个轴。在这种情况下,transpose()
方法似乎是更好的选择:
print(df.transpose())**Output:
** a b
A 6 8
B 9 2
C 1 5
D 10 7
E 11 12
F 21 19
尤其是它的快捷方式:
print(df.T)**Output:**
a b
A 6 8
B 9 2
C 1 5
D 10 7
E 11 12
F 21 19
结论
冗余熊猫方法的列表可以继续下去,同义词方法做完全相同的事情,甚至具有相同的语法,但是其中一个方法更常见或具有更短的名称,如isnull()
和isna()
,或mul()
和multiply()
。如果你知道其他类似的例子,或者其他奇怪的熊猫方法,欢迎在评论中分享你的想法。
感谢阅读!
如果你喜欢这篇文章,你也可以发现下面这些有趣的:
https://medium.com/mlearning-ai/11-cool-names-in-data-science-2b64ceb3b882
你应该知道的 5 个熊猫展示技巧
当你需要与他人分享你的分析时,这些建议会对你有所帮助
这些建议将帮助你与他人分享你的分析。无论你是学生、数据科学家还是博士研究员,每个项目都以某种形式的报告结束。希望这是 Confluence 上的一个帖子,GitHub 上的 Readme 或者一篇科学论文。
没有必要将数据帧中的值逐个复制粘贴到另一个软件中。Pandas 的格式化功能可以将一个数据帧转换成多种格式。
介绍
让我们用随机值创建一个 10 行 3 列的数据帧。
n **=** 10
df **=** pd**.**DataFrame(
{
"col1": np**.**random**.**random_sample(n),
"col2": np**.**random**.**random_sample(n),
"col3": [[random**.**randint(0, 10) **for** _ **in** range(random**.**randint(3, 5))] **for** _ **in** range(n)],
}
)
1.用 HTML 共享结果
用 HTML 展示熊猫数据框架(图片由作者制作)。
熊猫数据帧可以用 to_html 函数转换成 HTML。如果您需要通过 HTML 发送自动报告,这很有用。您还可以在 pandas-analytics-server 上创建一个 API,这样您就可以在 web 浏览器中跟踪数据帧中的最新值。
注意,lxml 包是必需的。你可以用:pip install lxml 来安装它。
df_html **=** df**.**to_html()**with** open('analysis.html', 'w') **as** f:
f**.**write(df_html)
甚至还有一个 read_html 函数,使您能够将 html 解析回熊猫数据帧。我还没有用通用的 HTML 试过——如果能用就好了。
df_list **=** pd**.**read_html('analysis.html')
df_list
从 HTML 加载数据帧(图片由作者制作)。
2.撰写科学论文
大多数高质量的研究论文都是使用 LaTeX——一种高质量的排版系统——撰写的。许多 LaTeX 作者制作一个数据帧的截屏,然后将它包含在他们的论文中,其他人花费相当多的时间将数据帧值格式化为 LaTeX 表。
如果我告诉你熊猫体内有一种可以帮你负重前行的功能,你会怎么想?让我们看看例子。
df**.**to_latex()
将熊猫数据帧转换为 Latex(图片由作者制作)。
您可以将它与 print 一起使用,以获得格式良好的输出。
**print**(df**.**to_latex())
乳胶熊猫数据框的漂亮印刷(图片由作者制作)。
3.撰写自述文件
Github 对存储库中的 README 和 Wiki 使用 Markdown 格式化语言。一个好的自述文件会让你的项目更容易被其他人使用。在 GitHub 上制作一个一步一步的例子是很常见的,但是手动格式化熊猫数据帧来降低价格会花费很多时间。熊猫保护了我们。
**print**(df**.**to_markdown())
降价中的熊猫数据框(图片由作者制作)。
4.Excel 电子表格
Excel 是商业世界事实上的标准。有了熊猫,我们可以轻松阅读 Excel 电子表格。它有一个将数据帧转换成 Excel 电子表格的功能。
注意,xlwt 和 openpyxl 包是必需的。你可以用 pip 安装它们。
df**.**to_excel('analysis.xlsx', index**=**False)
Excel 中的熊猫数据框(图片由作者制作)。
pd**.**read_excel('analysis.xlsx')
从 Excel 中读取熊猫数据帧(图片由作者制作)。
5.编写文档
在代码中编写注释时,将 DataFrame 转换为字符串可能很有用。
**print**(df**.**to_string())
Python 字符串中的熊猫数据帧(图片由作者制作)。
结论
这些是我在做我的分析的最后陈述时经常使用的一些熊猫陈述技巧。
你学到新东西了吗?请在下面的评论中告诉我。
在你走之前
- [Intro to Machine Learning with PyTorch](https://imp.i115008.net/c/2402645/788201/11298) [Course]- [Deep Learning Nanodegree](https://imp.i115008.net/c/2402645/788202/11298) [Course]- [Free skill tests for Data Scientists & Machine Learning Engineers](https://aigents.co/skills)- [Correlation Analysis 101 in Python](https://dataanalysis.substack.com/p/correlation-analysis-101-in-python)
上面的一些链接是附属链接,如果你通过它们进行购买,我会赚取佣金。请记住,我链接课程是因为它们的质量,而不是因为我从你的购买中获得的佣金。
在推特上关注我,在那里我定期发关于数据科学和机器学习的推特。
照片由Courtney hedge在 Unsplash 上拍摄
你应该在 2021 年开始使用的 5 个熊猫技巧
用一个最好的新年决心开始新的一年:多了解熊猫。
andas 无需介绍,因为它已经成为 Python 中事实上的数据分析工具。作为一名数据科学家,我每天都使用熊猫,它总能以更好的方式实现我的目标,让我感到惊讶。
对于熊猫新手— 熊猫为 Python 编程语言提供了高性能、易于使用的数据结构和数据分析工具。
熊猫这个名字来源于术语“面板数据”,这是一个计量经济学术语,指的是包括同一个人在多个时间段的观察结果的数据集。
在这篇文章中,我将向你展示 5 个熊猫的小技巧,它们会让你在以下情况下更有效率:
- 用熊猫数据框连接数据,
- 处理日期和时间,
- 制作 Excel 报表,
- 将数据帧存储到磁盘。
我们开始吧。
https://romanorac.medium.com/pandas-data-analysis-series-b8cec5b38b22
1.日期范围
在 Unsplash 上由 Waldemar Brandt 拍摄的照片
当从数据库或外部 API 获取数据时,通常需要指定查询的开始日期和结束日期。
操作日期可能会很棘手,但别担心,熊猫会掩护我们的!
有一个 data_range 函数,返回按天、月或年等递增的日期。它也和时间一起工作。
假设您需要一个按天递增的日期范围。
date_from **=** "2019-01-01"
date_to **=** "2019-01-12"
date_range **=** pd**.**date_range(date_from, date_to, freq**=**"D")
date_range
熊猫日期范围函数的输出。
让我们将生成的 date_range 转换为开始和结束日期,这可以直接传递给 API 或数据库查询。
**for** i, (date_from, date_to) **in** enumerate(zip(date_range[:**-**1], date_range[1:]), 1):
date_from **=** date_from**.**date()**.**isoformat()
date_to **=** date_to**.**date()**.**isoformat()
**print**("%d. date_from: %s, date_to: %s" **%** (i, date_from, date_to)# the output with date_from and date_to
1\. date_from: 2019-01-01, date_to: 2019-01-02
2\. date_from: 2019-01-02, date_to: 2019-01-03
3\. date_from: 2019-01-03, date_to: 2019-01-04
4\. date_from: 2019-01-04, date_to: 2019-01-05
5\. date_from: 2019-01-05, date_to: 2019-01-06
6\. date_from: 2019-01-06, date_to: 2019-01-07
7\. date_from: 2019-01-07, date_to: 2019-01-08
8\. date_from: 2019-01-08, date_to: 2019-01-09
9\. date_from: 2019-01-09, date_to: 2019-01-10
10\. date_from: 2019-01-10, date_to: 2019-01-11
11\. date_from: 2019-01-11, date_to: 2019-01-12
2.与指示器合并
Pandas 有一个合并功能,顾名思义,它用一个数据库风格的连接合并两个数据帧。
合并两个数据集是将两个数据集合并为一个数据集,并根据公共列对齐每个数据集的行的过程
如果你和我一样,你也用过很多次 merge 函数。但让我惊讶的是,我并不知道指标的说法。
指示符参数向数据帧添加一个_merge
列,告诉您该行来自哪个数据帧:
- 左侧数据帧,
- 右侧数据帧,
- 或者两个数据帧。
当使用更大的数据集来验证合并操作时,_merge
列非常有用。
让我们定义两个数据帧,并用合并指示器将它们合并。
left **=** pd**.**DataFrame({"key": ["key1", "key2", "key3", "key4"], "value_l": [1, 2, 3, 4]})
左侧数据框中的行
right **=** pd**.**DataFrame({"key": ["key3", "key2", "key1", "key6"], "value_r": [3, 2, 1, 6]})
右侧数据框中的行
df_merge **=** left**.**merge(right, on**=**'key', how**=**'left', indicator**=**True)
带有合并列的 df_merge 数据帧中的条目
我们可以使用_merge
列来检查是否有预期数量的行具有来自两个数据帧的值。
df_merge**.**_merge**.**value_counts()# output of values count function
both 3
left_only 1
right_only 0
Name: _merge, dtype: int64
3.最近合并
当处理股票或加密货币等金融数据时,我们可能需要将报价(价格变化)与实际交易结合起来。
假设我们希望将每笔交易与之前几毫秒发生的报价合并。我们如何通过熊猫来实现这一目标?
Pandas 有一个函数 merge_asof ,它能够通过最近的键(在我们的例子中是时间戳)合并数据帧。数据集报价和交易取自熊猫的例子。
报价数据框包含不同股票的价格变化。通常,报价比交易多得多。
quotes **=** pd**.**DataFrame(
[
["2016-05-25 13:30:00.023", "GOOG", 720.50, 720.93],
["2016-05-25 13:30:00.023", "MSFT", 51.95, 51.96],
["2016-05-25 13:30:00.030", "MSFT", 51.97, 51.98],
["2016-05-25 13:30:00.041", "MSFT", 51.99, 52.00],
["2016-05-25 13:30:00.048", "GOOG", 720.50, 720.93],
["2016-05-25 13:30:00.049", "AAPL", 97.99, 98.01],
["2016-05-25 13:30:00.072", "GOOG", 720.50, 720.88],
["2016-05-25 13:30:00.075", "MSFT", 52.01, 52.03],
],
columns**=**["timestamp", "ticker", "bid", "ask"],
)
quotes['timestamp'] **=** pd**.**to_datetime(quotes['timestamp'])
报价数据框架中的条目
交易数据框包含不同股票的交易。
trades **=** pd**.**DataFrame(
[
["2016-05-25 13:30:00.023", "MSFT", 51.95, 75],
["2016-05-25 13:30:00.038", "MSFT", 51.95, 155],
["2016-05-25 13:30:00.048", "GOOG", 720.77, 100],
["2016-05-25 13:30:00.048", "GOOG", 720.92, 100],
["2016-05-25 13:30:00.048", "AAPL", 98.00, 100],
],
columns**=**["timestamp", "ticker", "price", "quantity"],
)
trades['timestamp'] **=** pd**.**to_datetime(trades['timestamp'])
交易数据框中的条目
我们通过报价器合并交易和报价,最新的报价可能比交易晚 10 毫秒。
如果报价落后于交易超过 10 毫秒,或者没有任何报价,该报价的买价和卖价将为空(本例中为 AAPL 股票)。
df_merge = pd**.**merge_asof(trades, quotes, on**=**"timestamp", by**=**'ticker', tolerance**=**pd**.**Timedelta('10ms'), direction**=**'backward')
df_merge DataFrame
中的条目
4.创建 Excel 报表
卢卡斯·布拉塞克在 Unsplash 上的照片
我们可以直接在 pandas 中创建 Excel 报表(借助 XlsxWriter 库)。
这大大节省了时间——不再需要将数据帧保存为 CSV 格式,然后在 Excel 中进行复制粘贴和格式化。我们还可以添加各种图表等。
让我们定义一个数据框架,然后用它创建一个 Excel 报表。
df **=** pd**.**DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns**=**["a", "b", "c"])
下面的代码片段创建了一个 Excel 报表。
report_name **=** 'example_report.xlsx'
sheet_name **=** 'Sheet1'writer **=** pd**.**ExcelWriter(report_name, engine**=**'xlsxwriter')
df**.**to_excel(writer, sheet_name**=**sheet_name, index**=**False)*# writer.save()*
我们还可以在 Excel 报告中添加图表。
我们需要定义图表的类型(我们示例中的折线图)和图表的数据系列(数据系列需要在 Excel 电子表格中)。
*# define the workbook* workbook **=** writer**.**book
worksheet **=** writer**.**sheets[sheet_name]*# create a chart line object* chart **=** workbook**.**add_chart({'type': 'line'})*# configure the series of the chart from the spreadsheet
# using a list of values instead of category/value formulas:
# [sheetname, first_row, first_col, last_row, last_col]* chart**.**add_series({
'categories': [sheet_name, 1, 0, 3, 0],
'values': [sheet_name, 1, 1, 3, 1],
})*# configure the chart axes* chart**.**set_x_axis({'name': 'Index', 'position_axis': 'on_tick'})
chart**.**set_y_axis({'name': 'Value', 'major_gridlines': {'visible': False}})*# place the chart on the worksheet* worksheet**.**insert_chart('E2', chart)*# output the excel file* writer**.**save()
用熊猫创建的 Excel 报表
5.节省磁盘空间
当处理多个数据科学项目时,您通常会从不同的实验中获得许多预处理数据集。笔记本电脑上的小型固态硬盘很快就会变得杂乱无章。
Pandas 使我们能够在保存数据集时对其进行压缩,然后以压缩格式读回。
让我们用随机数创建一个大熊猫数据框架。
import numpy as npdf **=** pd**.**DataFrame(np**.**random**.**randn(50000,300))
带有随机数的数据帧。
当我们将这个文件保存为 CSV 格式时,它会占用硬盘上将近 300 MB 的空间。
df**.**to_csv('random_data.csv', index**=**False)
我们可以通过使用 gz 扩展名而不是 csv 将文件大小减少到 136 MB。
df**.**to_csv('random_data.gz', index**=**False)
我们不会失去任何功能,因为将 gzipped 数据读入 DataFrame 也很容易。
df **=** pd**.**read_csv('random_data.gz')
结论
Johannes Plenio 在 Unsplash 上拍摄的照片
如果你想运行这些例子,你可以下载 Jupyter 笔记本。
这些技巧帮助我每天与熊猫相处时更有效率。让我在评论中知道你最喜欢的熊猫戏法是什么。
在你走之前
- [Correlation Analysis 101 in Python](https://dataanalysis.substack.com/p/correlation-analysis-101-in-python)- [Free skill tests for Data Scientists & Machine Learning Engineers](https://aigents.co/skills)- [Data Science for Business Leaders](https://imp.i115008.net/c/2402645/880006/11298) [Course]- [Intro to Machine Learning with PyTorch](https://imp.i115008.net/c/2402645/788201/11298) [Course]
上面的一些链接是附属链接,如果你通过它们购买,我会赚取佣金。请记住,我链接课程是因为它们的质量,而不是因为我从你的购买中获得的佣金。
在 Twitter 上关注我,在那里我定期发布关于数据科学和机器学习的消息。
在 Unsplash 上由Courtney hedge拍摄的照片