数据可视化的前 3 篇文章
如果您想更好地构建数据可视化,这些文章很有帮助。
艾萨克·史密斯在 Unsplash 上拍摄的照片
对数据科学家来说,可视化数据是一项很有价值的技能。学起来容易,掌握起来难。数据可视化是您的数据、聚合和模型结果的图形表示,总结为最终用户可访问的可视元素。这些可视化允许用户快速看到数据中的趋势、异常值和存在的模式。当你开发可视化时,你需要记住用户将如何与你的作品交互。您的可视化应该有助于用户分析数据。如果操作正确,可视化和表格可以让数据更容易被他人访问和理解。
绘制您的仪表板
我想与你分享的第一篇文章是由约翰·麦卡利斯特写的,他谈到了首先绘制你的仪表盘,然后实现它们。在研究使用 Tableau 创建仪表板的示例之前,John 详细介绍了数据可视化。在他的文章中,John 提出了一个很好的观点,即为什么你应该首先用手绘制你的可视化效果。
花时间手绘一个可视化图需要你思考你实际上在做什么…手绘图表让常识占上风。手绘视觉效果的每一个细节都倾注了心血。
在绘图时,花些时间退后一步思考可视化的设置,可以让您思考如何最好地可视化数据。我们经常发现自己在确定制作的视觉效果是正确的之前,就在快速制作仪表盘和视觉效果。问问你自己,为什么你使用一种特定类型的可视化,比如条形图和折线图。当你处理视觉效果时,想想你希望用户如何与这些数据进行交互。使用不同的视觉效果和表格的过程对其他人来说是直观的吗,还是会让他们感到困惑?
如果你想更深入地探讨为什么这种方法有效,可以看看 John 的文章!
为什么手绘仪表盘能培养更强的数据可视化技能
towardsdatascience.com](/my-tableau-dashboards-sucked-until-i-started-drawing-them-ec4c9d4a4fe8)
理解科学绘图
为科学出版物、白皮书和会议开发情节可能非常耗时,以确保您以简洁的格式获得正确的信息,尤其是如果您受限于页数或海报大小。在一篇关于使用 Matplotlib 进行科学绘图的文章中,作者 Rizky Maulana Nurhidayat 讨论了如何定制 Matplotlib 参数并创建色盲友好的可视化。
这篇文章是我希望能早点看到的,因为它详细介绍了如何为你的论文或海报设计漂亮的视觉效果。我特别喜欢这篇论文,因为他指出了通过 Matplotlib 可以获得的许多不同的绘图风格以及如何使用它们。为了更深入地了解这篇文章,Nurhidayat 讨论了 rcParams,它允许您使用 LaTeX 字体、自定义字体大小等等。他提出了每一点,并详细介绍了如何使用它们,这有助于理解如何使用每一个特性并在图中实现它。我发现这篇文章很有帮助,因为他在一个例子中遍历了 rcParams,向您展示了如何创建一个看起来相似的图。
他的文章的第二部分讨论了色盲友好的情节实现,以及如何为色盲的个人开发调色板。创建这些调色板后,您可以在 Matplolib 图和其他设计元素中使用它们。他论文的这一半给出了调色板的优秀例子,以及如何在你的可视化中使用它们。
如果你想改善你的科学情节,或者想就开发色盲友好的调色板进行一次很好的讨论,我建议你看看他的文章。
为您的科学数据可视化定制 Matplotlib
towardsdatascience.com](/matplotlib-styles-for-scientific-plotting-d023f74515b4)
定制你的支线剧情
继续与 Matplotlib 合作制作科学图的主题, Rizky Maulana Nurhidayat 发表了另一篇有用的文章。在本文中,Nurhidayat 讨论了如何使用多个子情节来创建更复杂的可视化效果。当试图将不同的数据联系在一起时,支线剧情会派上用场。学会在引人注目的情节中将这些数据联系起来可以帮助你通过你的视觉引导你的用户。
当需要在同一轴上将不同的数据联系在一起时,我经常创建情节和支线情节。我主要处理在确定的时间段内共享一个轴的时间序列数据,例如用三个时间序列数据集创建从当前日期开始的 90 天回顾。理解如何获取这些数据,并用一个共享轴将它们组合成不同的支线剧情是很有价值的。
像他的上一篇文章一样,Nurhidayat 很好地分解了他的过程,从一个情节开始,以不同的方式添加额外的次要情节。这篇文章分享了简单和复杂的多重支线剧情设计,以及如何在最终的可视化中设置不同大小的剧情。他使用不同的方法来添加支线剧情,这让你可以学习多种添加支线剧情的方法。
这篇文章是理解如何使用 Matplotlib 开发支线剧情的很好资源。
使用 subplot、add_subplot 和 GridSpec 在 Matplotlib 中创建复杂 subplot 的指南
towardsdatascience.com](/customizing-multiple-subplots-in-matplotlib-a3e1c2e099bc)
最后的想法
数据可视化是数据科学的重要组成部分。这是我们通过仪表板、科学论文/海报等与他人分享我们见解的一种方式!在这三篇文章中,你将学到一些重要的经验:
- 后退一步,在做之前把你的想象画出来。这个动作会让你思考你为什么要制作视觉效果,以及用户会如何与他们互动。
- 您将在期刊、白皮书、海报等中使用的科学可视化。使用 Matplotlib 创建您的可视化风格并开发您的可视化。
- 要明白,如果你的可视化用户是色盲,他们可能很难与你的可视化用户互动。看看创建色盲友好的调色板用于您的可视化。
- 当试图将不同的数据联系在一起时,支线剧情会派上用场。学会在引人注目的情节中将这些数据联系起来可以帮助你通过你的视觉引导你的用户。
如果你想阅读更多,看看我下面的其他文章吧!
当我参加大学讲座时,最常被问到的问题是“我需要具备什么技能?”
towardsdatascience.com](/top-8-skills-for-every-data-scientist-79e6b1faf3e1) [## 停止浪费你的时间,咨询一个主题专家
在从事数据科学项目时,请一位主题专家来审查您的工作可能会有所帮助。
towardsdatascience.com](/stop-wasting-your-time-and-consult-a-subject-matter-expert-f6ee9bffd0fe) [## 采用现有数据科学项目的成功关键
代码本来可能不是你的,但现在是你的了。那么接下来呢?
towardsdatascience.com](/keys-to-success-when-adopting-a-pre-existing-data-science-project-9f1225fb0275) [## 利用您的一对一会议
您如何从一对一会议中获得更多价值,从而更好地了解您自己和您的工作?
medium.com](https://medium.com/the-innovation/leveraging-your-1-1-meetings-c0de2d3c8704) [## 不要太骄傲而不愿寻求帮助
如果你被一个 bug 卡住了或者感到不知所措,你可以寻求你需要的帮助。
towardsdatascience.com](/dont-be-too-proud-to-ask-for-help-76f21d16f318)
每位数据科学工程师的前三本书
软件开发
我放在书架上的伟大资源,我喜欢介绍给软件工程师和数据科学家。
在大学里,我不太喜欢课本。但自从毕业并全职工作以来,我发现自己收集了一些关于数据科学和软件工程的书籍,放在办公桌上以备工作之用。我正在开发一个小型的参考图书馆,当我解决一个问题或者学习一个特定的领域时,我可以参考这个图书馆。到目前为止,我发现最有帮助的三本书是《干净的代码》、《统计学习入门》和《每个程序员都应该知道的 40 种算法》。
清洁码
来自亚马逊列表的图书封面图片
**作者:**罗伯特·塞西尔·马丁
《干净的代码》对软件工程师来说是一本完美的书,但也适用于主要从事代码工作的数据科学家,尤其是面向对象的代码。我第一次接触这本书是在我以前工作的一个工程师读书俱乐部。来自所有不同部门的工程师每周聚在一起阅读一章,讨论它如何应用到他们的工作中,以及为什么他们可能会或可能不会遵循基于他们团队制定的标准的方法。在读书俱乐部会议期间有许多有趣的讨论。这些对话包括整个组织的团队如何看待编码标准,以及如何在其工作范围内定义干净的代码标准。
通过阅读这本书,你会明白写不好的代码意味着什么,以及如何才能写出更干净的代码。每一节都详细介绍了如何将代码从不好的转变为好的,讨论了命名、创建函数、对象和类。作者还详述了如何最好地格式化代码以获得最大的可读性,我发现这是最有帮助的。在这本书的结尾,他讨论了错误处理和单元测试,这些不会混淆编码逻辑,并有助于测试驱动的开发。《干净的代码》是迄今为止我最喜欢的技术书籍之一,也是必读之作。
统计学习导论
来自亚马逊列表的图书封面图片
**作者:**加雷斯·詹姆斯,丹妮拉·威滕,特雷弗·哈斯蒂,罗伯特·蒂布拉尼
作为我在硕士期间阅读的唯一的教科书之一,这是我的必读书籍之一,因为它是统计学习的极好指南。本书涵盖了可用于建模和理解数据的不同工具。我喜欢这本书,因为它解决问题的实用方法是针对最终应用的,而不仅仅是算法的数学实现。这本书还使用 R 中的例子来分解主题,允许读者跟随并自己实现这些例子。你需要理解统计学的术语和概念,但是这本书是书架上很好的参考资料。
在统计学习的开始讨论了评估模型准确性和解释不同类型的机器学习的概念。通读开篇章节后,本书对不同种类的算法进行了更详细的描述,如线性回归、分类、基于树的模型和支持向量机。然而,我最喜欢的一章是关于重采样方法的,它更详细地介绍了交叉验证和引导。这一章是关于如何在机器学习中使用交叉验证的很好的参考。当我寻找一些关于 ML 模型的信息时,我经常会参考这本书,然后用它作为垫脚石来确定我缺少什么信息来解决我的问题。
每个程序员都应该知道的 40 种算法
亚马逊列表的封面图片
**作者:**伊姆兰·艾哈迈德
《40 算法》是我书架上最新的一本书,因为它讨论了标准的软件算法,包括机器学习算法。这本书是一个算法的集合,涵盖了排序,搜索,图形,机器学习,自然语言处理,推荐引擎,数据,密码学和大规模的需求。我被这本书吸引是因为它的评论是一个很好的资源,有清晰的材料和 Python 代码片段。这本书的实际应用例子是理解如何在实践中使用这些算法的好方法。
这本书的第一章介绍了算法设计技术、性能分析和算法验证。在这个介绍之后,这本书讨论了算法中常用的不同的数据结构,如果你还没有关于数据结构的单独的书,这是一个很好的复习。这本书然后用两个不同的例子分解了如何设计一个算法:旅行推销员问题和页面排序问题。本书另一个令人兴奋的章节讨论了开发者在开发算法时可能会考虑的实际问题。这一章着眼于算法的伦理和可解释性。总而言之,这是一个很好的参考资料,可以添加到我的书架上,因为它从数据科学问题的角度讨论了计算机科学算法。
摘要
最后,如果我必须向对数据科学和软件开发感兴趣的人推荐 3 本书,我会推荐:
- 罗伯特·塞西尔·马丁的《干净的代码》
- 统计学习介绍作者 Gareth James,Daniela Witten,Trevor Hastie,Robert Tibshirani
- 每个程序员都应该知道的 40 种算法
你的书架上有什么有用的书吗?如果有,它们是什么?
本文包含会员链接。如果你想了解更多,可以看看我下面的其他文章!
理解你的听众,回答问题,并寻求反馈
towardsdatascience.com](/top-3-reasons-public-speaking-can-help-you-in-data-science-18cdbf4bb2f2) [## 远程工作很难让你成为一名出色的数据科学家
不要因为你太安静而被忽视
towardsdatascience.com](/remote-work-can-make-it-hard-to-stand-out-as-a-strong-data-scientist-71e9a2a6bc0) [## 离开我热爱的工作的三大教训
跳槽到下一个机会:成为数据科学顾问
towardsdatascience.com](/top-3-lessons-learned-from-leaving-a-job-i-loved-6c71a76cae7)
启动你的机器学习之旅的前三本书
无论你是数据分析师还是程序员
机器学习不像以前那么难了。每天都有新的书籍和课程出现,选择你会坚持的书籍和课程变得越来越难。这个列表应该能帮助你更快地到达那里,与你的背景无关。
在 Unsplash 上由 Toa Heftiba 拍摄的照片
该列表对每个人都有帮助——不管你的时间安排是否很紧,或者几乎没有机器学习经验。这些书没有任何顺序,所以挑一本你觉得最舒服的。
请记住——下面你会找到我推荐的书籍的附属链接。这对你来说没什么,因为价格是一样的,但是如果你决定购买,我会得到一点佣金。我只收录了我亲自阅读过的书籍,可以保证 100%的质量。
先说第一个。
一百页的机器学习书
它更像一本 150 页的机器学习书,但你明白了。它是为赶时间的人设计的,因为它不太关注细节,但仍然设法涵盖所有重要的事情。
【https://amzn.to/340xXJ6
它从基础开始——机器学习和最重要的统计概念(如随机变量和贝叶斯定理)的介绍。
故事还没有结束,因为每一个主要的监督算法都得到了很好的解释,从线性回归到支持向量机。无监督算法也涵盖在内,但稍后。还涵盖了来自特征工程的基本概念,如一键编码、标准化和丢失数据处理。
这本书还通过最重要的模型评估指标,如准确性,精确度,召回,和 AUC/ROC 曲线。你也可以期待获得一些深度学习技术的覆盖面,但这本书在那里相当模糊。
总的来说,对于任何刚开始阅读的人或者没有时间看完一本 800 页的书的人来说,这都是显而易见的。
你可以在这里得到书。
使用 Scikit-Learn、Keras 和 TensorFlow 进行机器实践学习
如果你是那种愿意花几个月的时间阅读 800 多页的书的人——恭喜你,你会得到一份享受。
这本书在亚马逊上长期畅销,只是因为它涵盖了人们在该领域工作可能需要的一切,解释得非常清楚。说真的,这本书涵盖了从机器学习定义到 GANs 和强化学习的主题。
我很高兴这本书是我的机器学习大学课程的必修课,因为我从它身上学到的比从教授那里学到的多得多。如果你的教授不是吴恩达,而是更多像西拉杰这样的人,我估计也会这样。
如前所述,这些书籍从简单的主题,如数据收集、EDA、功能扩展,到通过决策树、随机森林和梯度增强等算法进行的实际机器学习。它还涵盖了主要的降维技术和无监督学习。所有这些都在头 300 页里!
剩下的留给神经网络和深度学习,从理论到应用在 TensorFlow 库中。期望学到很多关于 ann、CNN、RNNs、自动编码器、gan 和强化学习的知识。
如果你有时间的话,另一个简单的方法。还有威尔。
你可以在这里得到书。
利用 Fastai 和 PyTorch 为编码人员提供深度学习
PyTorch 是我一直以来最喜欢的深度学习库,而 FastAI 是另一个值得你花时间的库,因为它使用 PyTorch 快速开发生产就绪的模型——你已经猜到了。
它是针对软件开发人员的,因为它更侧重于实践部分。它也非常适合不愿意深入理论的数据科学家。理论部分会在书的后面提供,但我不认为它是必读书。
如前所述,主要关注的是 FastAI 库,它广泛用于以尽可能少的代码处理计算机视觉、表格、NLP 和推荐系统任务。官方网站提供一些免费课程,所以去看看是个好主意。
这本书非常深入地涵盖了前面提到的四个主题,这足以在您的应用程序中使用深度学习的力量。
总的来说,这是一本优秀的书,绝对值得你花时间去读。
你可以在这里得到这本书。
离别赠言
这三本书我觉得特别有用,也很容易读懂。没有必要全部读完,所以如果你不能决定,请参考下面的要点:
- 如果你是从机器学习开始,并且没有太多的空闲时间,读第一本书
- 如果你对实用的机器学习和深度学习感兴趣,请阅读上一本书
- 如果你有时间和意愿去学习该领域的理论和实践,请阅读第二本书
这次就这样了。感谢阅读。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
原载于 2020 年 10 月 16 日 https://betterdatascience.com。
2020 年 3 大免费深度学习课程
你可以在网上免费找到一些最好的高质量资源来学习深度学习
由 Unsplash 上的 Element5 数码拍摄。
# 1 Fastai Coders 2020 实用深度学习
2020 年 8 月 21 日,fastai 发布了 fastai 库和他们深度学习课程的新版本!
这是我给任何想开始实用深度学习的人的第一条建议。Fastai 自上而下的教学方法允许您从第一天开始将您的知识应用于现实世界的问题,并逐渐深入细节。此外,您将学习使用 fastai 库,这是一个非常强大的工具,可以提高您所有深度学习项目的生产率!
#2 deeplearning.ai 深度学习专业化
Coursera 上的 deeplearning.ai 在线课程并不是免费的。但是,所有的课程视频都可以在 YouTube 上免费观看!
- 课程一: 神经网络与深度学习
- 课程 2: 改进深度神经网络:超参数调整、正则化和优化
- 课程三: 结构化机器学习项目
- 课程四: 卷积神经网络
- 课程 5: 序列模式
此外,你可以从这些对顶级深度学习研究人员的采访中获得进一步的灵感:深度学习的英雄
这些课程让你对深度学习有一个很好的概述,涵盖了一些有深度的重要主题,但吴恩达以简单的方式进行了解释。我建议在完成 fastai 课程后观看这些播放列表。
排名第三的麻省理工深度学习课程
麻省理工学院的课程是另一个很好的资源!如果你想在网上更深入地研究深度学习,可以考虑下面的播放列表。
如果您观看了前两个课程,这些课程可能会为您提供一些之前未涉及的主题的补充信息和额外视角。
接下来呢?
学习任何技能都需要练习和许多小时的工作。可用的免费在线资源对你成为顶级深度学习实践者来说绰绰有余。有时候最难的部分是保持动力。观看课程不会让你成为专家,将你的知识应用于实践会让你成为专家。因此,Kaggle 可能是最好的地方,在那里你可以实践现实世界中的问题,并与成百上千的其他竞争者分享想法。当你第一次参加 Kaggle 比赛时,你可能会努力争取一个好成绩。不放弃会让你学到最多,获得直觉,成为该领域的专家。
结束语和进一步阅读
如果你觉得这个故事有用,请随时在 Twitter 上关注我,这样你就不会错过我接下来的任何故事了!你可以在下面的故事中了解更多关于我的深度学习之旅!
[## 我的 3 年历程:从零 Python 到深度学习竞赛高手
自从 2017 年开始学习 Python 以来,我一直遵循的道路是成为一名独自参加 Kaggle 比赛的大师…
towardsdatascience.com](/my-3-year-journey-from-zero-python-to-deep-learning-competition-master-6605c188eec7) [## 今天学习人工智能-走向数据科学
阅读《走向数据科学》中关于学习人工智能的文章。共享概念、想法和代码的媒体出版物。
towardsdatascience.com](https://towardsdatascience.com/tagged/learn-ai-today)
感谢阅读!祝您愉快!
使用基于查询的 ML 自动化发票处理的三大见解
RPA 中的 ML 1)可能很容易,2)它需要不同的思维模式,3)它有许多使用案例
在 Posti 项目中,一个软件机器人使用机器学习来填写采购发票流程表单。照片由 Unsplash 上的 Mantas Hesthaven 拍摄
芬兰物流巨头 Posti 的 RPA 团队开始使用机器学习来提升他们的发票自动化。这些是那个项目的关键见解。这是一本很好的读物,适合那些在利用机器学习实现现有自动化并使其智能化时领导或做出贡献的人。
你可以在这里阅读更多关于这个项目的信息。简而言之,问题是 Posti 一个月收到一万张购物发票。出于会计、支付和税务目的,每张发票需要与 1)审核人 2)预算/账户 3)部门和 4)增值税代码相关联。
在采购发票自动化流程中,目标是根据 4 个已知的发票字段自动填充 4 个缺失字段。几乎所有组织中的无数高级雇员、会计师、经理和主管不断地填写这种表格。图片来源:Aito
作为解决方案,UiPath 用于将历史发票复制到预测数据库。然后使用预测性数据库查询来预测缺失的字段:
{
“from” : “purchase_invoices”,
“where”: {
“purchase_number “: “XY12345678”,
“company_id”: “234234–3”,
“vendor_number”: “0002948810”,
“currency” : “EUR"
},
“predict”: “reviewer”
}
然后,RPA 机器使用具有高置信度/概率估计值的预测来填充发票中缺失的字段,并使流程的不同阶段自动化。
这是我们学到的。
洞察力 1:使用正确的工具,智能自动化并不难
在实施的发票自动化中,基本的交互非常简单:
- 首先,RPA 机器人将已处理的发票表单从会计系统中抓取到预测数据库中。
- 其次,机器人读取收到的发票,进行 4 次简单的预测查询来预测缺失的字段
- 第三,机器人使用预测将缺失的字段写入会计系统,并改变发票处理状态。
有许多 RPA+ML 问题可以用类似的简单方式解决。本质上,无论何时您看到一个带有表单的流程,有点像这样,它都可能以同样的方式被自动化:
任何包含表单的流程都是基于 ML+RPA 的自动化的潜在目标。在本例中:客户可以根据电子邮件进行统计推断,而产品、问题类别和正确的客户支持人员可以根据标题和描述进行推断。因此,支持人工智能的机器人可以完美地处理大多数案件。图片来源:Aito
尽管 RPA 部分可能相对简单,但 ML 部分可能正好相反。在典型场景中,您会要求数据科学团队花费时间来拟合、部署和集成 4 ML 模型,这些模型对 4 个不同的领域进行预测。数据科学项目可能需要一段时间,可能会很昂贵,本质上:数据科学团队将根据更广泛的公司优先级来安排时间。
另一方面,如果您使用预测数据库来查询未知字段,体验类似于使用 SQL 数据库来查询已知字段。对于大多数 RPA 开发人员来说,这种类似 SQL 的体验非常简单,相关的工作和时间投入更适合紧张的 RPA 预算和计划。Posti RPA 开发人员评论道:“我最喜欢 Aito 的一点是它易于使用”,这反映了这种方法的内在简易性。还有一种观点认为,预测性数据库集成只是项目的一小部分。
因此,使用正确的工具,RPA+ML 很容易实现。在可供选择的 ML 工具中:预测数据库似乎特别有前途,因为用预测查询进行机器学习非常容易。
洞察力 2: RPA+ML 需要业务影响思维
虽然在传统的基于规则的 RPA 中,您可以有力地保证流程没有错误,但使用智能自动化很难创建完全没有错误的解决方案。这是因为机器学习组件以统计方式运行。
统计系统引入了可控的误差率。由micha Parzuchowski在 Unsplash 拍摄的照片
虽然你不可能拥有一个完美无误的系统,但你可以拥有:
- 可控的误差率。在 Posti 案例中,ML 组件能够在 99%的案例中以小于 1%的误差填充缺失税码字段,在 63%的成本中心案例中以小于 5%的误差填充缺失税码字段。在发票自动化的情况下,会计部门会对内容进行双重检查,因此小的错误率通常不是问题。
- 极端复杂系统的自动化速度大大提高。在 Posti 案例中,您可以看到成千上万种不同的采购发票类型&特殊案例。在这种情况下,开发和维护数以千计的不同规则来实现基于规则的高覆盖率 RPA 是完全不可行的。虽然复杂的基于规则的自动化可能设法处理例如 10%的发票,但我已经看到基于 ML 的解决方案的 80%或 90%的自动化率。
RPA+ML 的本质是:你接受一个受控的错误率,以换取一个根本上更高的自动化率、更低的维护成本和解决无法解决的问题的能力。
在实践中,这需要改变思维模式,并与业务所有者直接讨论统计误差和最佳误差率/自动化率的权衡。还可能需要在流程中增加一个步骤来审查和纠正错误率超过 1%的统计决策。
作为 Posti 项目的一部分,RPA 团队和会计团队开会决定自动化率和错误率之间的权衡。由 You X Ventures 在 Unsplash 上拍摄的照片
你可以在 TDS 关于 ML 投资回报的文章中找到更多相关信息
洞察力 3:有许多用例
RPA 和流程自动化通常是机器学习应用非常有益的领域,因为:
- 公司往往对其核心业务流程有高质量和完整的记录,因为没有这些记录(如订单或发票)企业就无法运营,如果业务记录保存不好,在最坏的情况下可能会产生法律影响(如发票)。
- 大多数过程都有非常强的模式。例如,来自“停车公司”的发票往往总是进入“停车预算”。这种模式很容易从数据中获取并用于过程自动化,例如允许 20%-99%的自动化率,以换取统计过程中 1%-5%的误差。
- 大公司的核心流程可能会有大量的数据。例如:Posti 每月处理大约一万张发票。
由于良好的数据、高自动化率和高容量,现有的过程数据通常很容易在智能自动化中开发和重用,从而获得巨大的业务收益。
RPA+ML 领域有巨大的机会,尤其是现在,当机器学习的经济学更适合有限的 RPA 项目预算时。照片由 Unsplash 上的 Mantas Hesthaven 拍摄
根据与项目团队的讨论:
- 如果使用预测数据库,RPA+ML 项目与传统 ML 项目相比并不昂贵。Posti RPA 团队估计,中等 RPA 项目可能平均需要 3 个月(通常涉及大量分析、沟通和组织开销),而 RPA+ML 项目可能需要 4 个月(因为 ML 部分、额外的数据集成、额外的沟通和处理可能错误的额外步骤)。尽管如此,为您的组织完成的第一个 RPA+ML 项目预留更多的时间还是有好处的。
- RPA+ML 应用程序的商业收益可能很高:可能高达数十万欧元,因为在适度复杂的大容量流程中自动化率很高
- 总体而言,可能 10%-20%的 Posti RPA 用例会受益于类似预测数据库的机器学习。
作为这些讨论的结果:团队已经确定了许多有价值的商业案例和机会,并决定使用相同的工具设置来扩展 ML 的部署。
结论和建议
RPA+ML 不需要太难,不需要数据科学家,并且可以立即产生业务影响。
然而,我们发现大多数公司在识别 RPA+ML 用例方面存在困难。这是完全可以理解的,因为 RPA 团队通常缺乏市场上大多数解决方案所需的机器学习经验和专业知识。
虽然 RPA+ML 机会很多,但在识别用例方面存在挑战,因为 RPA 团队缺乏机器学习专业知识。照片由马库斯·斯皮斯克在 Unsplash 拍摄
结果是:虽然一个公司可能有大量好的用例,但是这些用例很大程度上没有被认识到。现在来解决关于用例的问题:
- 一个简单的思维练习会有所帮助。就像之前提到的:任何可以被认为是表单的业务流程都是潜在的 RPA+ML 自动化目标。
- 网上有很多用例描述。
- 你也可以随时咨询智能自动化专家或像我们这样的 T2 供应商的建议。
如果您对该主题有任何疑问或意见,我们很乐意在 https://aito.ai/contact-us/提供帮助,或者您可以通过 Sisua Digital 联系我们的 RPA 顾问朋友。Sisua 在 ML 支持的 RPA 自动化方面拥有丰富的专业知识,他们在 Posti 发票自动化项目中担任顾问角色。
前 3 名 JavaScript 机器学习库
基于社区支持和个人经验的排名
avaScript 是最受欢迎的编程语言之一,拥有庞大的粉丝群。不再局限于网页设计,可以用于移动开发,游戏设计,甚至机器学习(ML) 。在过去的几年中,许多新的 ML 库被创建,其功能已经变得相当令人印象深刻。
可以说 Python 是机器学习的唯一语言。虽然在一定程度上这是真的,但人们已经很难忽视 JavaScript(JS) 在该领域的日益流行。在对其中的一些库进行实验后,我决定发布一份最有前途和最实用的 JavaScript 机器和深度学习库的列表。
找什么?
Shane Aldendorff 在 Unsplash 上拍摄的照片
在进入本文之前,让我们考虑一下 ML 库中我们关心的是什么。以下是您可能需要考虑的几点:
流行
听起来很明显,拥有活跃社区的图书馆经常更新。在机器学习这样一个快速发展的领域,我们必须确保我们的应用程序能够支持最新的功能。
功能
这一点不一定是关于功能和模型的数量,而是关于它们的可定制性和可扩展性。如果你需要改变算法的某些部分,你可能不想重写整个应用程序。
可利用的资源
对于任何刚接触 JavaScript,特别是使用 JavaScript 的 ML 的人来说,拥有一份编写良好的文档是非常有用的。任何指南和 YouTube 教程在学习过程中也会派上用场。
Brain.js
Robina Weermeijer 在 Unsplash 上拍摄的照片
特点:
- 简单的
- 最适合小型应用
Brain.js 是目前最流行的用 JavaScript 编写的 ML 库之一。它提供了多种实现神经网络的方法,并具有良好的浏览器支持。既然它如此受欢迎,许多公司实际上使用它,你可以在网上找到各种项目。文档可以在 GitHub 上获得,并且组织得相当好。我在寻找特定功能及其用法时没有任何问题。
例如,与 Tensorflow 相比,代码和函数似乎更简单一些。然而,这可能受到了我以前的 JavaScript 经验的影响。
ConvNetJS
特点:
- 复杂的
- 仅浏览器
这个库在更有经验的开发者中是众所周知的。该项目的代码是开源的,可以在 GitHub 上获得。该库在支持社区的帮助下不断更新。它也可以在 Nodejs 下获得,这是一个很好的特性。ConvNetJS 因其功能性和专业性而获得好评。它当然值得更多的关注,在使用它之后,你也可能成为一个支持者。
Tensorflow.js
特点:
- NodeJS 供电
- 流行的
- 出色的表现
Tensorflow 是最广为人知的 Python ML 库之一,也是最广为人知的 ML 库。TensorFlow for JS 的发布是影响 JavaScript 上 ML 发展的事件之一。知道 TensorFlow 有如此海量的粉丝群以及更新改进的规律性,这个库很难出错。TensorFlow 知识是任何一个 ML 应用开发者的必备。
开发人员非常重视优化浏览器对该库的支持。它允许更多的互动和更好的反馈。从用户的角度来看,在浏览器窗口中运行 ML 不需要任何软件包或安装,它简单而实用。查看表情符号寻宝游戏获得一些想法。这个游戏利用你的手机摄像头来实时检测物体。这是相当令人印象深刻的,尤其是记住你可以在你的浏览器中玩这样的游戏。
该库支持 GPU 和 CPU 培训。现有的预训练模型可以很容易地转换为 Tensorflow.js 格式并加载到浏览器中。在收集了一些用户数据之后,它也可以在浏览器本身中被重新训练。对于游戏开发等诸多领域,创造了无尽的机会。
最后的想法
当想到机器学习时,JavaScript 可能不是第一个想到的语言。然而,它一直在朝着这个方向稳步前进。开发人员喜欢使用 JavaScript 的交互性支持和不断增长的社区。请随意与这些库分享您的经验,不要害怕尝试新的东西!
链接:
brain . js:【https://brain.js.org/#/的
https://cs.stanford.edu/people/karpathy/convnetjs/
tensor flow . js:https://www.tensorflow.org/js
三大鲜为人知的熊猫功能
作为一名现代数据科学家,您需要了解熊猫的功能
说到 Python 中的数据科学库,Pandas
可能是最有用的一个。它已经存在了相当长的一段时间,包含了很多节省时间的功能。本文以实用的方式介绍了三个鲜为人知的Pandas
函数。
不想看书?看看我关于这个主题的视频:
你需要一个房价数据集来跟进,所以请从这个链接下载。让我们把熊猫装进去:
import pandas as pd df = pd.read_csv('HousingPrices.csv')
df.head()
以下是数据集的外观:
图片 1-房价数据集标题(图片由作者提供)
事不宜迟,让我们直接进入第一个函数。
select_dtypes()
select_dtypes
函数用于只选择特定数据类型的列。假设您想对字符串做一些工作——您可以使用上面提到的函数来创建非数字列的子集,并从那里执行操作。
我们的数据集不包含字符串列,如下图所示:
图 2 —每列的数据类型(作者图片)
我们将使用select_dtypes
函数只保留整数列。根据之前的图像,应该只保留TransactionDate
和NumStores
列:
df.select_dtypes('int64').head()
结果如下:
图 3-整数列(作者图片)
让我们进行下一个功能。
内存使用量()
memory_usage
函数顾名思义就是报告内存使用情况。默认情况下,报告是以列和字节为单位进行的,但是我们稍后将看到如何更改它。
对整个数据集调用该函数:
df.memory_usage()
该调用为我们的数据集产生了以下系列:
图 4 —以每列字节为单位的内存使用情况(图片由作者提供)
如果您想得到总数,您可以对结果集调用sum()
函数:
df.memory_usage().sum()
这将产生23312
字节。由于字节不像兆字节那样容易理解,我们接下来进行转换:
df.memory_usage().sum() / 1e+6
上面的代码在执行时输出0.023312
,代表住房数据集占用多少兆字节的内存。
您可以进一步使用日志来监控生产应用程序中的内存使用情况,但这超出了本文的范围。
让我们复习一下最后一个功能。
查询()
query
函数用于过滤数据集并获取感兴趣的记录。过滤格式是它的特别之处。如果您按多个条件进行过滤,则不需要管理几十个括号,因为该函数使您能够将过滤条件作为字符串传递。
让我们先看一个简单的例子,我们对 20 到 30 年的房子感兴趣:
df.query('20 < HouseAge <= 30').head()
结果如下:
图片 5—20 至 30 年楼龄的房屋(图片由作者提供)
但是如果我们想测试多种情况呢?只需在中间插入and
或or
关键词:
df.query('20 < HouseAge <= 30 and NumStores == 6').head()
这是产生的子集:
图片 6-20 至 30 年的房屋,附近有 6 家商店(图片由作者提供)
你只需要知道这些。让我们在下一部分总结一下。
离别赠言
Pandas
是 Python 中顶尖的数据科学库之一,这是有原因的——没有什么是你不能简单直观地完成的。复杂的过滤会让事情变得混乱,但是新学到的query
函数会让事情变得更简单。
你最喜欢的鲜为人知的Pandas
功能有哪些?请在下面的评论区告诉我。
感谢阅读。
加入我的私人邮件列表,获取更多有用的见解。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
原载于 2020 年 11 月 16 日 https://www.betterdatascience.com**T21。
处理倾斜数据的三大方法
真实世界的数据可能会很混乱。甚至一些学习数据集包含的属性在用于预测建模之前需要进行严格的修改。
这很好。
让我们以线性回归模型为例。你可能已经知道了这一点,但是模型对你提供的数据做了大量的假设,例如:
- 线性:假设预测值和目标变量之间的关系是线性的
- 无噪声:例如,数据中没有异常值
- 无共线性:如果您有高度相关的预测值,那么您的模型很可能会过拟合
- 正态分布:如果预测值和目标变量呈正态分布,则预测更可靠
- 缩放:这是一种基于距离的算法,所以预测器应该被缩放——就像标准缩放器一样
对于一个简单的模型来说,这已经很多了。今天我想重点谈谈第四点,那就是预测值和目标变量应该遵循高斯分布。
这并不总是可能做到的,因此你不能将任何分布转换成完美的正态分布,但这并不意味着你不应该尝试。
首先,让我们加载一个简单的数据集并施展魔法。
数据集
我将使用熟悉的波士顿房价数据集来探索一些处理扭曲数据的技巧。
没有必要下载它,因为你可以直接从 Scikit-learn 导入它。下面是所有导入和数据集加载的代码:
在执行时,将显示前几行,您应该得到和我一样的输出:
我不想探究所有的变量,因为我之前已经做过一些测试,并得出了变量CRIM
具有最高偏斜的结论。下面是验证我的声明的代码:
酷毙了。现在你可以使用 Seaborn 库制作一个柱状图,旁边是 KDE 图,看看我们在处理什么:
这当然不符合正态分布。是的,如果你想知道我是如何从糟糕的默认可视化中摆脱出来的,这里有一篇文章你应该看看:
默认的 Matplotlib 样式已经过时了——但是我们可以做些什么
towardsdatascience.com](/the-last-matplotlib-tweaking-guide-youll-ever-need-dbd4374a1c1e)
好了,现在我们已经讨论过了,让我们来探索一些处理偏斜数据的方法。
1.对数变换
对数变换很可能是您应该做的第一件事,以消除预测器的偏斜。
这可以通过 Numpy 轻松完成,只需调用所需列上的log()
函数。然后,您可以轻松地检查偏斜:
就这样,我们的偏斜系数从 5.2 降到了 0.4。但在下结论之前,我们还应该快速想象一下:
嗯,它肯定不是正态分布的,但比我们以前拥有的要好得多!
如您所料,对数转换不是您可以使用的唯一方法。让我们探索更多的选择。
2.平方根变换
平方根有时很有效,但有时并不是最好的选择。在这种情况下,我仍然希望转换后的分布看起来有点指数,但是由于取平方根,变量的范围会更小。
您可以通过调用sqrt()
函数,使用 Numpy 应用平方根变换。代码如下:
偏斜系数从 5.2 变为 2,这仍然是一个显著的差异。然而,日志转换最终得到了更好的结果。
然而,让我们想象一下现在的一切:
分布基本相同,但是范围比预期的要小。
在宣布 log 转换为赢家之前,让我们再探索一个。
3.博克斯-考克斯变换
这是我今天要探讨的最后一个转化方法。由于我不想深究背后的数学,这里有一篇短文给对那部分感兴趣的人。
你只需要知道这只是另一种处理扭曲数据的方式。要使用它,你的数据必须是正的——所以有时会令人失望。
您可以从 Scipy 库导入它,但是检查倾斜需要将结果 Numpy 数组转换成 Pandas 系列:
哇!偏斜仅从 5.2 下降到 0.09。不过,让我们看看转换后的变量是什么样子的:
这种分布与对数变换产生的分布非常相似,但我想说的是双峰分布稍微少了一点。
在你走之前
如果处理不当,扭曲的数据会破坏预测模型的能力。
这应该是不言而喻的,但是你应该记住你对哪个属性执行了什么转换,因为在做预测的时候你必须反转一次,所以要记住这一点。
尽管如此,这三种方法应该很适合你。
你在用什么转化方法?请告诉我。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
最小化新冠肺炎对数据科学影响的三大方法(第二部分)
减轻或解释数据中新冠肺炎效应的方法。
迪米特里拍摄的照片:Unsplash
简介
在本系列的第二部分中,我们继续讨论解决由于疫情导致的数据集中潜在杂质的方法。具体来说,我们将深入研究潜在的数据替换技术,然后回顾一些特性工程方法。
如果你想了解更多关于新冠肺炎对 ML 管道可能造成的影响,请点击 这里 。本系列的第一部分涵盖了以数据为中心的方法,可以在这里 找到 。这将有助于在跳跃前进之前通过这些。
用原始预测替换数据
在本系列的第一部分中,我们讨论了用历史数据替换受新冠肺炎数据影响的数据。这可能是一个很好的选择,在这种情况下,您预测的数据有望恢复到新冠肺炎之前的水平,由于可用数据的数量,删除新冠肺炎影响的数据而不替换是不可能的,并且您认为历史数据是没有新冠肺炎会发生的情况的公平代表。
瑞秋的照片:Mashable
替换数据时要考虑的另一个选项包括用该时间段(新冠肺炎撞击前)的原始预测替换受新冠肺炎影响的数据。这可能是一个很好的选择,在这种情况下,我们会看到由于多个复杂的功能而导致的重大变化,如果用历史数据替换数据,这些变化将不会反映出来。这当然需要高度的信心,我们之前的预测将准确地反映我们在数据中看到的情况,如果没有疫情的话。
将这种替换技术应用到一个例子中,假设您预测了每周的区域卫生纸销售量,但是只有几年的数据。如果你想预测新冠肺炎危机(希望如此)过去后的未来销售,并且你发现你的模型预测被新冠肺炎显著改变,你将需要一些方法来处理受影响的数据。如果危机影响了 3-4 个月的销售,而您只有 3 年的数据,这已经影响了您 10%的数据,因此您可能不想丢弃它。如果你确信数据会反映如果没有新冠肺炎会发生什么,你可以用历史值代替数据。或者,如果您的预测在过去非常准确,您可以用以前的预测数据替换受影响的数据。当然,这是有风险的,但是只要用清晰的交流来详述这些风险,这可能是一个可行的解决方案。
过采样
根据您的建模技术,另一个潜在的选择是利用过采样。如果您试图在疫情期间将数据的影响降至最低,保留受新冠肺炎影响的数据可能是合理的,但不要替换或修改它,而是尝试通过从新冠肺炎不是影响因素的时间段进行过采样来降低其影响。这与分类技术中使用的方法类似,在分类技术中,类别不平衡,因此从代表性不足的类别中进行过采样。这也可能在相反的情况下起作用。如果您认为更新的数据比大多数历史数据更能代表未来的模式,则可以从受新冠肺炎影响的时间段进行过采样。
过采样
比方说,我们正试图预测餐馆的能源使用,并相信活动将很快恢复到 COVID 之前的水平。为预测模型创建训练数据集时,可以选择从不受新冠肺炎影响的时间段进行过采样,但将新冠肺炎数据保留为数据集的一部分。这可能会降低新冠肺炎数据对模型的影响,而不会完全移除或替换数据。这可能有所帮助的一种方式是,在新冠肺炎期间有其他影响发生(室外座位是低能效的),您不想消除这些影响,但仍然希望将这些数据的影响降至最低。
另一方面,如果您正在预测像家庭清洁用品这样的东西,并且您认为未来的数量将与我们最近几个月所看到的更相似,您可能希望从更近的数据中进行过采样。这可能是可取的情况下,你可能是建模非常嘈杂的模式,因此,模型不能很快学会信任新的模式,从而适当地影响预测。例如,如果您看到家用清洁产品的销售大幅增长,而在正常情况下,您的模型会将其视为异常并忽略不计,那么您可以考虑将这种过采样技术作为一种可能的解决方案,以帮助“说服”模型接受新趋势。
特色工程
处理数据的一个更复杂的方法是通过特征工程。本质上,我们可以创建用于解释新冠肺炎对我们数据的影响的要素。回到能源使用示例,对新冠肺炎建模的一种方法是添加一个特征来指示给定时间段是否受到新冠肺炎的影响。这可以是一个简单的标志(0/1 表示新冠肺炎时间),也可以是某种反映给定时间新冠肺炎对数据影响程度的指数,可能基于案例数量或经济关闭的程度。一个潜在的问题可能是,没有足够的新冠肺炎影响数据来完全理解这种影响,特别是对于那些已经在消除异常值方面做得很好的模型。
来源:Elexon &国家电网/ N. Godfrey
在某些应用中,我们可以通过将新冠肺炎效应与另一个对我们的预测有类似影响的特征相结合来模拟它的影响。对于我们的能源使用示例,在新冠肺炎关闭以类似方式影响行为的用例中,我们可以将疫情视为假日/夏季。这可能有助于解决模型数据有限的问题,隔离新冠肺炎效应。为了解释这一点,我们来看看英国国家电网的数据。
上图显示了 2020 年 3 月整周的电力需求。快速浏览一下就可以知道,在采取封锁措施后,电力需求下降了约 10-15%。但是上面图表中最重要的分析是随着咖啡机、暖气等的使用,早晨的“高峰”变平了。在一天中传播。如果你足够仔细地观察,你会发现工作日开始与周末非常相似(将工作日期间的蓝线与周末期间的其他线进行比较)。这表明我们可以如何将当前数据本质上建模为“周末”,同时仍然管理一个不错的预测。同样,假设需要传达给所有的利益相关者。
对于多变量模型,另一种有前途的方法是创建能够帮助模型了解此时正在发生一些不寻常的事情的特征,类似于我们对自然灾害可能做的事情。例如,以下功能可能在各种模型中证明是有益的,包括预测解决方案:
- 新冠肺炎在给定的时间/地点出现
- 地点是在家里的命令下
- 在给定时间/地点关门的零售商百分比
- 送货/路边取货的零售商百分比
- 特定地区的感染率
- 给定区域的测试率
- 特定地区的就业统计
为了使这些特性对预测有用,我们还需要对它们的未来值进行假设。我们可以使用不同的输入值来设想可能的情况,包括恢复正常。通过添加可以帮助解释此时正在发生的事情的功能,我们可能能够避免需要删除或大量修改数据的解决方案。换句话说,通过添加能够隔离新冠肺炎影响的特征,机器学习模型可能能够学习到可用于预测未来的相关信息。
关于作者
Usman Gohar 是一名数据科学家,明尼阿波利斯数据科学的共同组织者,也是一名技术演讲人。他非常热衷于最新的数据科学研究和机器学习。你可以在 LinkedIn 、 Twitter 、Medium&follow onGithub上和他联系。
Renee Ernst 是 General Mills 的高级首席数据科学家,担任一个数据科学家团队的技术经理,该团队构建用于情景规划和优化促销的模型。工作之外,她还积极参与数据科学社区,包括共同组织即将举行的minne AnalyticsWomen in Analytics and Data Science conference 等活动。你可以在 LinkedIn &上找到芮妮,在 Github 上关注。
熊猫 1.0 的三大新功能
一些新的节省时间和精力的功能
熊猫 1.0 版本发布已经有几周了,它带来了一些令人兴奋的新功能,尽管其中一些仍处于实验阶段。
这篇文章背后的主要思想是简要地探索它们,并向您展示如何升级到 Pandas 1.0,因为您可能仍在运行 0.25 版本。所以事不宜迟,让我们看看如何做到这一点。
从 0.25 升级到 1.0
如果我打开 Jupyter 笔记本并查看当前版本的熊猫图书馆,我会得到这个:
我的版本是 0.25.1,所以要升级我需要执行下面的命令(也可以通过 Jupyter 完成,不需要打开终端或命令提示符):
然而,如果您得到一些权限错误,以管理员身份运行命令行,或者如果您在 Linux 上,在命令前面加上sudo
。现在让我们看看一切是否如预期的那样:
请记住,你可能看不到“1.0.1”,这取决于你何时阅读这篇文章,它可能是一个更新的版本。完成后,让我们简单讨论一下我将用来做演示的数据集,以及从哪里获得它。
使用的数据集
我决定使用 MT Cars 数据集,这是任何用户都熟悉的数据集,非常适合一些基本的数据操作。它可以从这个链接下载,或者你可以直接通过 Pandas 复制链接并阅读:
好了,现在当这一切都结束了,我可以开始写文章了!
1.降价转换
现在,作为 Pandas DataFrame 操作的结果,您可以轻松地生成减价表。不过,您还需要一个额外的库,名为tabluate
:
为了演示,我决定只保留 6 缸汽车,只保留manufacturer
和mpg
列:
现在很容易将这个结果导出到 markdown 表。只需在陈述的末尾添加.to_markdown()
,并确保用print()
陈述将所有内容括起来:
现在,您可以复制该文本并将其粘贴到 markdown 单元格中(选择一个单元格,然后选择ESC
— M
— Enter
):
瞧啊。该单元格现在包含来自您的数据的减价表:
NA 标量
Pandas 最终得到了一个标量来表示缺失值。其背后的思想是用一个标量来表示所有数据类型中一致的缺失值。到目前为止,我们有:
np.nan
—用于彩车None
—用于对象pd.NaT
—表示日期和时间
现在我们可以用pd.NA
代替上面提到的那些来表示缺失值。值得一提的是,它仍然是一个实验特性,并且可以在没有预先警告的情况下改变其行为,所以我还不会将它包含在产品代码中。
然而,这并不意味着我们可以玩弄它。要快速查看它的动作,只需在任意 Jupyter 单元格中执行pd.NA
:
为了查看它在一个基本示例中是如何工作的,我将创建一系列的几个元素,并将其中一个声明为 missing,首先使用None
关键字:
你可以看到None
是如何毫无问题地“翻译”到NA
的。您也可以通过pd.NA
直接指定缺失值:
现在,从这里开始,您可以使用您的标准方法来查看一个系列是否包含缺失值:
现在差不多就是这样了。再说一次,这个特性是实验性的,所以我不建议在产品代码中使用它。
字符串数据类型
到目前为止,我们只有object
数据类型来处理任何非数值的东西,这可能会有问题,原因有几个:
- 您可以将字符串和非字符串存储到一个数据类型数组中
- 没有明确的方法只提取字符串列,因为数据类型为
object
的.select_dtypes()
会导致第一个讨论的问题
就像pd.NA
一样,这仍然被认为是实验性的,这意味着它很容易在没有警告的情况下发生变化。
让我们回头看看我们的 MT Cars 数据集,看看我们在其中存储了哪些数据类型:
我们可以看到,manufacturer
很明显是一个字符串,被声明为object
。对您来说,这听起来没什么大不了的,但是想象一下这样一个场景,您想要对数据集进行子集化,只保留 string 数据类型的列。在那里,您可以很容易地得到一个数字列,其中只有一个非数字的值。这是我们想要避免的问题。
幸运的是,我们可以使用.convert_dtypes()
方法将潜在的对象转换成字符串:
现在,我可以更安全地基于列数据类型创建子集了:
在你走之前
最后,我只希望你能从这篇文章中得到一些有用的东西。没有一个新特性是开创性的,但这并不意味着它们不能帮助你编写更好、更统一的代码。
我很想知道熊猫背后的开发团队将会添加哪些功能,所以如果你想在它们发布后尽快了解它们,请继续关注。
感谢阅读。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
你不知道(可能)的前 3 个 Numpy 函数
不是每个操作指南都包括的
作为最受欢迎的科学计算 Python 库之一,Numpy 当然不缺乏有用和有趣的函数,值得深入探索。本文将探讨一些最有趣但鲜为人知的内容,希望能鼓励您自己进一步探索。
尼克·希利尔在 Unsplash 上拍摄的照片
作为一名数据科学家,我每天都使用 Numpy 库,主要用于在各种操作中处理数组——乘法、连接、整形、比较等。
以下是本文将涉及的功能:
isclose()
intersect1d()
stack()
进口方面,您只需要 Numpy:
所以事不宜迟,我们开始吧!
isclose()
有多少次你查看数据帧中的条目,看到 0 的值,然后决定过滤掉 0,却发现你的代码没有做它应该做的事情?
你的代码(某种程度上)没有问题,问题在于数字如何被四舍五入以在你的屏幕上占据更少的空间。以此为例:
变量x
和y
虽然非常接近,但并不相同,测试相等将导致False
:
但在大多数情况下,低至这个数字可以认为是 0。问题依然存在,如何在代码中实现这一点?
幸运的是,Numpy 有一个isclose()
函数可以帮助我们。它将在一个容差内测试两个数是否相等,缺省情况下是1e-8
。让我们来看看实际情况:
如您所见,给定的数字在阈值内是相同的,因此函数返回True
。如果出于某种原因,您想要调整阈值,以下是操作方法:
太好了,我们继续。
交叉 1d()
该函数的主要思想是将两个数组作为输入,并返回包含在两个数组中的元素。把它想成一个集合交集,但是你知道,不用把数组转换成集合,计算交集。
为了演示,让我们声明两个数组:
现在,为了查看两者中存在哪些元素,我们需要做这样的事情:
太好了!另一种方法,前面提到的那种,写起来会有点长,而且会包含更多的括号:
两个都可以,但我更喜欢第一个。
堆栈()
现在,这是我在为预测建模准备数据集时经常使用的方法——更准确地说,是在分类变量嵌入的过程中。
假设您已经嵌入了一些变量,并希望将它们放入一个矩阵形式中,其中每个变量都是一个单独的列—唯一符合逻辑的做法是沿着列轴堆叠变量。
但是我有点想太多了。
出于演示目的,我们将处理之前的相同阵列:
太好了。现在让我们使用stack()
函数沿着行轴堆叠数组:
请记住,axis=0
在这里是可选的,因为它是执行堆叠的默认轴,但是我已经将它指定得更明确了。
实践中更常见的例子是沿着列轴堆叠(至少在我的工作中是这样的):
在你走之前
我希望你能在作为数据分析师/科学家的日常工作中利用这三个功能——它们是很好的时间节省工具。
和往常一样,如果你有一些日常使用的附加功能,不要犹豫,在评论区分享吧。
感谢阅读。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
我是如何在梦幻超级联赛中名列前 2%的
我如何利用数据科学和运筹学取得进步,以及我本可以如何改进
来源:https://unsplash.com/photos/ObhCU6Vhoe8
经过长时间的休息,体育运动正在慢慢回归。一周前,英国政府宣布英超联赛可以在 6 月 1 日闭门回归。这让我想到了我幻想中的英超球队。我决定加入这个游戏,因为这是一个结合我的两个爱好,体育和数据科学的好方法。赛季开始时,我的目标是进入前 5%。这就是我现在站的地方。
给你,前 2%。准确的说是前 1.6%。赛季还没有结束,但是到目前为止我对结果很满意。我是这样做的,运用数据科学和运筹学。
第一部分:挑选我的初始团队
在赛季开始之前,你如何决定挑选哪些球员?一个球员的好价钱是多少?你应该得到尽可能多的超级巨星,还是得到更多的平衡阵容?考虑到所有这些可能性,在遵守 1 亿美元预算的同时,很难选出最好的 15 名球员。
经过大约 12 秒的思考,我很快意识到,这整个梦幻英超的事情就是教科书上的“背包问题”。背包问题是一个组合优化问题,你有一组物品,它们有一定的价值和体积,你想把它们放进背包里。考虑到背包容量有限,你要决定哪些物品放在包里才能实现价值最大化。这里有一个很好的插图,适合视觉学习者。
来源:https://en.wikipedia.org/wiki/Knapsack_problem
将这个问题转化为 FPL 问题,我只是想选择 15 名球员的组合(3 名守门员,5 名后卫,5 名中场球员和 3 名前锋),这将使总积分最大化,同时尊重 1 亿美元的预算。但是我如何定义下个赛季的最大积分呢?好吧,因为我不知道这些信息,我必须最大化上个赛季获得的分数,同时查看今年所有球员的成本。
现在,在一个正常的比赛周,只有我们的首发阵容会真正得分。因此,我决定自己选择尽可能便宜的替代品,并且在上一个赛季的成本类别中具有最佳的单位成本比率。选了一个守门员,两个后卫和一个中场,总共 1700 万美元,这样我的首发阵容就剩下 8300 万美元了。
然后我就可以真正地解决创造最佳首发阵容的问题了。下面是为表示这个问题而创建的模型(为了便于理解而进行了简化),其中 Xi 是玩家 i :
简而言之,我想最大化 FPL 点数的数量,同时遵守四组约束条件,即我们的球员总成本必须低于或等于 8300 万美元(约束条件 1),我们需要每个位置有正确数量的球员(约束条件 2),我们不能有超过 3 名球员来自一个团队(约束条件 3),我们只能选择一名球员一次,不能有负值(约束条件 4)。
为了解决这个问题,我使用了单纯形算法,这是线性规划中最流行的算法。这是它在 2D 的做法。
来源:https://math.stackexchange.com/
基本上,它根据约束(线)定义可行区域(蓝色),然后尝试区域边界的每个点。下面是使用 Excel 求解器通过单纯形算法获得的起始 11。是的,Excel 可以做基本的运筹学(如果有人对这方面的教程感兴趣,请告诉我)!
来源:我的 FPL 队第一场比赛的快照
从一开始就拥有一个强大的团队是至关重要的。瓦迪,马夏尔,罗伯森,范迪克每周都还在我的首发阵容里。尽管如此,这只是工作的一部分。以下是我在赛季中为确保成功所做的。
第 2 部分:季节调整和奖金的使用
预测的第一条规则很简单:预测范围越短,预测就越好。记住这一点,每个星期,我都尽可能地等待,以确定我的阵容,并决定我是否应该转会。这样,在做决定之前,我就有了所有可能的信息(尤其是关于伤病的)。
我在赛季中做的最重要的事情就是等到我有两次自由转会机会时再进行转会。如果你想转让一名球员,替换该球员的选择是有限的:必须是同一位置的球员,价值更低或相等。当你有两次转会时,你有更多可能的替代选择。更多的球员可供选择,你就有更多的机会得到你真正想要的球员。很简单的逻辑。
此外,我使用(或将使用)我的奖金使用一个简单的策略:最小化夹具难度排名(FDR)。也就是说,如果玩家不是在和一个 FDR 低的弱队比赛,你就不应该使用奖励。这也是简单的逻辑。耐心也是关键。我等到比赛第 26 周才使用我的第一笔奖金。
第 3 部分:我应该做些什么
我很快意识到,我把上个赛季看得太重,认为它是下一个赛季的最佳预测。这意味着一些在 18-19 赛季表现突出的球员(乔什·金、汤森、卡勒姆·威尔逊)总是会被算法选中,而其他几年表现不佳的球员则被遗忘(例如德·布鲁恩)。我应该考虑到至少两个赛季的数据。我可以对季节进行加权,最近的季节更重要,或者我可以简单地取一个平均值。这将消除异常,我将避免选择“一击不中的奇迹”。
最后,在疯狂的圣诞节期间,我意识到,如果至少有一个像样的替代球员,我会过得更好。轮换和伤病意味着我有几个比赛周需要替补球员上场。显然,你得到了你所付出的。在我的情况下,我从来没有得到很多。我认为有一个额外的“真正的”首发会有所帮助,也会给我更多的灵活性来根据本周的比赛调整我的阵型/阵容。
赢得 FPL 需要很大的运气,没有一个确定的方法可以表现得很好,因为像伤病、轮换和状态这些事情完全不在你的控制之内。有很多方法可以增加你的机会。就像在数据科学中一样,总是存在不确定性,没有模型或算法可以 100%准确地预测。谢天谢地,你不需要完美,你只需要打败别人!
如果你做到了这一步,那么非常感谢你的阅读!
熊猫三大功能:数据科学版
最受欢迎的数据分析库提供了什么。
毫无疑问,Pandas 是最受欢迎的数据科学库之一。它已经存在了相当长的一段时间,包括了很多节省时间和神经的功能。今天我们将探索其中的三种。
马克·巴萨拉布在 Unsplash 上的照片
如果你更喜欢视频,或者只是想巩固你的知识,请随意观看我们关于这个主题的视频。源代码包含:
准备步骤很少,因为我们只需要导入 Pandas 库和数据集:
import pandas as pd
df = pd.read_csv(‘[https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv'](https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv'))
仅此而已。事不宜迟,让我们从第一个函数开始吧!
1.应用()
apply() 函数允许您将预定义的或匿名的函数应用于特定的列。当没有一大堆你想执行的逻辑时,匿名或 lambda 函数是很棒的,因为 lambda 会很快变得很乱。
我们想从名称属性中提取标题。标题可以在第一个逗号之后,第一个点之前找到。我们只需要知道这些。
如果您选择预定义的函数,以下是解决问题的方法:
def extract_title(string):
string = string.split(‘,’)[-1]
string = string.strip()
string = string.split(‘.’)[0]
return stringtitles = df[‘Name’].apply(extract_title)
还不错,每个人都能体会到这段代码有多整洁。这肯定是一种更长的方法,但是代码不需要注释就能被其他人理解。
接下来是匿名函数方法,这是一行程序:
titles = df[‘Name’].apply(lambda x: x.split(‘,’)[-1].strip().split(‘.’)[0])
当然,这种方法更短,但是想象一下如果我们需要执行更多的分割。兰姆达斯就不是个好选择了。
下面是前几个标题的样子:
你现在可以使用这个计算栏来查看一个标题是否对生存机会有任何影响。
2.值计数()
value_counts() 的目的是统计指定属性中值的不同出现次数。这是前面提到的 apply() 函数的一个很好的下一步,这正是我们将使用它的目的。
我们可以调用片头的功能系列:
titles.value_counts()
现在您可以创建一个二进制属性,如果头衔不常见(比如 Dr、Rev、Mlle 等),则值为 1,否则为 0(Mr、Miss、Mrs ),并执行一些进一步的分析。
我喜欢看百分比,而不是原始数据。这很容易做到:
titles.value_counts(normalize=True) * 100
差不多就是这样,简单且不言自明的函数。
3.get_dummies()
get_dummies() 函数用于将分类列转换为虚拟变量— 0 或 1。这很有用,因为你不能将字符串类别输入到机器学习模型中,这些值必须是数字。
我们将在登船列执行此操作,该列有 3 个值,指示乘客在哪个港口登船。
让我们看看默认情况下会发生什么:
emb = pd.get_dummies(df[‘Embarked’])
我不得不承认,这不是最具描述性的列名。幸运的是,有一个简单的解决方法:
emb = pd.get_dummies(df[‘Embarked’], prefix=’Embarked’)
现在情况有所好转。仍然不理想,因为我们有共线性问题。我们不需要 3 列来知道乘客在哪个港口上船。看一下第一行——C 和 Q 的值都是 0,这表明乘客登上了港口 S(南安普敦)。
这个问题有一个快速解决方案:
emb = pd.get_dummies(df[‘Embarked’], prefix=’Embarked’, drop_first=True)
将 drop_first 值指定为 True 解决了共线性问题。现在,您可以将该数据框架连接到原始数据框架,并继续进行分析。
在你离开之前
这并不是熊猫图书馆的全面指南,因为网上已经有很多这样的指南了。相反,我想分享我在最初的数据清理过程之后使用的一些功能(填充缺失值和处理损坏的记录)。
我希望你已经设法从这篇文章中得到了一些有用的东西。如果你有这三个功能的其他例子,请在评论区分享。
感谢阅读。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
初学者的 3 大熊猫功能
想学习 Python 中的数据分析? 那么就没有回避熊猫了,强大的 Python 库正好可以做到这一点。
Arif Wahid 在 Unsplash 上拍摄的照片
根据官方文件:
Pandas 是一个开源的、BSD 许可的库,为 Python 编程语言提供了高性能、易于使用的数据结构和数据分析工具。[1]
你应该在几乎所有的情况下使用它——唯一的例外是当你的数据集有几个 GB 大的时候——那时,也只有那时,你才需要一个更复杂的库,比如 Dask 或 PySpark 。
对于这篇文章,我选择使用著名的泰坦尼克号数据集,主要是因为它受欢迎,非常干净,并且容易理解。您只需要导入 Pandas 库:
import pandas as pd
并从提供的 URL 加载数据集:
现在你已经准备好跟随了!
头部()和尾部()
这两个函数几乎是我所做的任何分析的第一步。你已经加载了数据集,唯一合乎逻辑的事情就是看看看起来怎么样。
您可以使用head()
函数查看前 5 行,使用tail()
函数查看后 5 行。
数字 5 并不是一成不变的,可以很容易地改变,但一会儿会有更多的变化。这是默认情况下的输出,没有改变参数:
正如我所承诺的,下面是如何更改希望返回的行数:
挺容易的吧? 是的,以防你想知道 Bamboolib 是什么:
学习熊猫和数据分析从未如此容易
towardsdatascience.com](/introducing-bamboolib-a-gui-for-pandas-4f6c091089e3)
值计数()
当想要获得任何分类属性的“摘要”时,该函数非常有用。例如,您希望了解每个可能的值在属性中的表现程度。
幸运的是,我们可以在Embarked
属性上执行这个操作,它向我们显示了有多少乘客登上了 where ( C =瑟堡;Q =皇后镇;S =南安普顿):
但是,如果您不关心计数,而是想查看百分比中的值,该怎么办呢?没问题,只需修改normalize
参数:
然而,这并没有真正输出百分比。不用担心,你唯一要做的就是把所有东西都乘以 100:
我对value_counts()
函数的主要问题是,默认情况下,它不包括缺失值。这真的没什么大不了的,因为您只需再指定一个参数的值,称为dropna
:
这就是我所知道的关于这个函数的全部内容。我每天都用它,真的没有再用过它。
让我们跳到最后一个。
isnull()
这是我今天要讲的最后一个初级函数。该函数将接受一个系列甚至一个数据帧对象,如果值丢失,则输出真,否则输出假。让我们更深入地探讨一下:
输出不容易处理。仅仅通过查看,你无法知道这一列中有多少缺失值。幸运的是,Python 将 False 解释为 0,将 True 解释为 1,这意味着我们可以轻松地调用sum()
函数:
这就是我们想要的结果!它指出在属性Age
中有 177 个丢失的值。
就像我之前说过的,你可以在整个数据帧上调用isnull()
函数。如果对结果求和,您将分别获得所有列名和缺失值数量的列表:
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
想要更多吗?
前一段时间,我发表了一些关于熊猫各种功能的文章,所以一旦这些功能成为你的第二天性,你就可以去看看:
停止重新发明轮子。说真的。
towardsdatascience.com](/3-pandas-functions-you-should-be-using-more-often-696b41e8d7ca) [## 你不知道的熊猫的三大功能(大概)
为我节省了大量时间和挫折的功能
towardsdatascience.com](/top-3-pandas-functions-you-dont-know-about-probably-5ae9e1c964c8)
参考
熊猫的三大功能我希望我能早点知道
节省时间和精力的功能——一定要了解它们。
数据科学是一个如此广阔的领域,不可能有人精通每一种语言和每一个库——在这个行业呆了这么久,我知道的就这么多。不断的学习让我在游戏中坚持下来,回头看看这篇文章中的函数将会节省大量的时间(和精力)。
照片由 Kilyan Sockalingum 在 Unsplash 上拍摄
其中一些纯粹是一个功能,但另一方面,一些是指你使用熊猫的方式,以及为什么一种方法比另一种更好。
所以让我们从第一个开始——它的效率可能会让你吃惊。
itertuples()
*等等,什么?*是的,这不是一个函数,它指的是使用 Pandas 的更有效的方式,因此是通过数据集迭代的更快的方式。
现在,在您在评论部分为难之前,我知道有更有效的方法来对列值求和,但是我这样做只是为了说明一点。
我们将声明一个只有一列的简单数据集,包含从 1 到 100 万的数字。方法如下:
df = pd.DataFrame(data={
'Number': range(1, 1000000)
})
下面是前几行的样子:
现在让我们用错误的方式做事。我们将声明一个变量total
并将其设置为0
。然后,通过使用iterrows()
,我们将对数据集进行迭代,并将total
增加当前行的值。此外,我们将测量时间。代码如下:
%%timetotal = 0for _, row in df.iterrows():
total += row['Number']
total**>>> Wall time: 18.7 s**
对于这个琐碎的操作,几乎需要 19 秒——但是有更好的方法。让我们现在做同样的事情,但是用iteruples
代替iterrows
:
%%timetotal = 0for row in df.itertuples(index=False):
total += row.Number
total**>>> Wall time: 82.1 ms**
我不会做计算,但速度的提高是显着的。下次执行循环时记住这一点。
nlargest()和 nsmallest()
就在昨天,我还在计算两个纬度/经度对之间的千米距离。这是问题的第一部分,第二部分是选择距离最小的前 N 个记录。
回车— nsmallest()
。
顾名思义,nlargest()
将返回 N 个最大值,而nsmallest()
则正好相反。
让我们看看它的实际效果。对于实践部分,我准备了一个小数据集:
df = pd.DataFrame(data={
'Name': ['Bob', 'Mark', 'Josh', 'Anna', 'Peter', 'Dexter'],
'Points': [37, 91, 66, 42, 99, 81]
})
这是它的样子:
现在,让我们假设这个数据集不包含 6 行,而是包含 6000 行,您希望找出哪些学生表现最好,因此他们有最大的点数。一种方法是这样的:
df['Points'].nlargest(3)
不是最佳解决方案,因为它会导致以下结果:
这并不好,因为你并不清楚实际的名字。以下是改进的方法:
df.nlargest(3, columns='Points')
现在结果更加令人满意:
您可以使用几乎相同的逻辑找到 3 名表现最差的学生——使用nsmallest()
函数:
df.nsmallest(3, columns='Points')
以下是输出结果:
现在让我们进行最后一个函数。
切割()
为了演示这个函数的功能,我们将使用上一节中的数据集。概括一下,这就是:
df = pd.DataFrame(data={
'Name': ['Bob', 'Mark', 'Josh', 'Anna', 'Peter', 'Dexter'],
'Points': [37, 91, 66, 42, 99, 81]
})
cut()
函数背后的基本思想是将宁滨值分成个离散区间。下面是最简单的例子——我们将从Points
属性创建两个 bin:
pd.cut(df['Points'], bins=2)
暂时没什么用处。但是如何声明第一个 bin 从 0 到 50,第二个 bin 从 50 到 100 呢?听起来像个计划。代码如下:
pd.cut(df['Points'], bins=[0, 50, 100])
但是,假设你想显示Fail
而不是(0, 50]
,显示Pass
而不是(50, 100]
。下面是如何做到这一点:
pd.cut(df['Points'], bins=[0, 50, 100], labels=['Fail', 'Pass'])
这下好了。
在你走之前
如果你刚刚开始,这个功能将帮助你节省时间和精力。如果你不是,阅读这篇文章将帮助你巩固这些函数存在的知识——因为很容易忘记它们并从头开始编写逻辑。
但是这样做没有意义。
我希望你喜欢它。感谢阅读。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
每个数据科学家都会犯的 3 大编程错误
编程;编排
如何使用熊猫、Sklearn 和函数
本文指出了前景数据科学家最常犯的错误,并讨论了如何避免这些错误。事不宜迟,让我们直入主题吧。
熊猫的低效利用
Pandas 是数据科学家经常用来处理结构化数据的库。最常见的错误是使用“for 循环”遍历数据帧中的行。Pandas 具有内置函数,例如apply
或applymap
,使您能够对数据帧的所有行的选择或所有列应用函数,或者在满足条件时应用函数。然而,最理想的情况是,您可以使用效率最高的 Numpy 数组。
效率低下:
my_list=[]
for i in range(0, len(df)):
l = myfunction(df.iloc[i]['A'], df.iloc[i]['B'])
my_list.append(l)
df['newColumn'] = my_listTime:640ms
高效:
df['newColumn'] = myfunction( df['A'].values, df['B'].values)Time: 400 µs
或者给定如下数据帧:
df = pd.DataFrame([[4, 9]] * 3, columns=['A', 'B'])
**>>>** df
A B
0 4 9
1 4 9
2 4 9
计算每个元素的平方根
df.apply(np.sqrt)
**>>>** df
A B
0 2.0 3.0
1 2.0 3.0
2 2.0 3.0
来源:https://pandas . pydata . org/pandas-docs/stable/reference/API/pandas。DataFrame.apply.html
2.Sklearn 的低效使用
Sklearn (scikit-learn)是数据科学家用来训练机器学习模型的 Python 库。通常在训练一个模型之前需要转换数据,但是如何建立一个转换数据然后训练的管道呢?您可能希望自动化这一点,尤其是当您希望在交叉验证中每个文件夹都应用转换时。遗憾的是,库中最常用的函数是train_test_split
。许多数据科学家只是转换数据,使用train_test_split
,在一组上训练,在另一组上测试。
这听起来没那么糟糕,但是当你没有一个大的数据集时可能会特别糟糕。交叉验证对于评估模型如何对看不见的数据进行归纳非常重要。因此,一些数据科学家可能热衷于在每次验证迭代之前实现一个函数来进行转换。
Sklearn 有一个 Pipeline 对象,可以用来在交叉验证过程中转换数据和训练机器学习模型。
在下面的例子中,PCA 在逻辑回归之前应用于交叉验证的每个折叠,同时,进行网格搜索以找到模型的参数以及 PCA 的参数。
import numpy as np import matplotlib.pyplot as plt
import pandas as pd
from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV # Define a pipeline to search for the best combination of PCA truncation
# and classifier regularization.
pca = PCA() # set the tolerance to a large value to make the example faster
logistic = LogisticRegression(max_iter=10000, tol=0.1) **pipe = Pipeline(steps=[('pca', pca), ('logistic', logistic)])**
X_digits, y_digits = datasets.load_digits(return_X_y=True)
# Parameters of pipelines can be set using ‘__’ separated parameter
names:
param_grid = {
'pca__n_components': [5, 15, 30, 45, 64],
'logistic__C': np.logspace(-4, 4, 4),
} search = GridSearchCV(pipe, param_grid, n_jobs=-1) search.fit(X_digits, y_digits) print("Best parameter (CV score=%0.3f):" % search.best_score_) print(search.best_params_)
来源:https://sci kit-learn . org/stable/tutorial/statistical _ inference/putting _ together . html
3.不使用函数
一些数据科学家不太关心他们的代码表示和格式,但是他们应该关心。与只在单个文件或笔记本中编写脚本相比,编写函数有几个好处。这不仅更容易调试,而且代码可以重用,更容易理解。这篇帖子更详细地展示了函数在数据科学中的应用,尽管我不同意作者的观点,即你不能在 Jupyter 笔记本中复制这种方法。此外,作为一名数据科学家,你应该致力于保持代码干燥。那就是不要重复自己!消除重复使代码可以被你和其他可能接触到你的代码的人重用。此外,它还有助于维护和识别错误。
例如,您可能有这样几行数据帧操作:
df.drop(columns=['A','B'],inplace=True) df['datetime']=pd.to_datetime(df['dt'])
df.dropna(inplace=True)
但是效率不高,因为每次要预处理数据帧时,都必须复制粘贴所有代码行,并根据需要编辑列名。
相反,如果有一个处理所有操作的函数,那就更好了。
processor = Preprocess(columns_to_drop, datetime_column, dropna_columns)
你可以在这里找到预处理的实现。
如果您是数据科学新手或正在准备数据科学面试,您可能也会对 3 个数据科学家最常问的 Python 面试问题感兴趣
我希望早点知道的 3 大 Python 函数
你不知道你不知道什么。
尽管 Python 是最简单的编程语言之一,但它仍然有各种各样的内置函数,这些函数不为广大读者所知——主要是因为大多数书籍或在线课程都没有涉及到它们。
然而,这并不意味着它们是不相关的。
本文的目的是向您介绍一些鲜为人知的功能,并展示如何以最简单的方式实现它们。目标读者至少了解 Python 和一般编程的基础,并致力于进一步提高他/她的技能。
这篇文章的结构如下:
- 基本设置
- 功能#1:
isinstance()
- 功能#2:
hasattr()
- 功能#3:
exec()
- 结论
所以,事不宜迟,我们开始吧!
基本设置
现在,我们不需要导入任何东西,因为本文完全是基于 Python 的,但是我们仍然需要声明一些要使用的东西。
对于下面的大多数例子,我们将使用这个简单的类:
class Circle():
def __init__(self):
self.radius = None
现在里面什么都没有发生——这很好。我们仍然可以用它来演示这些函数是关于什么的。
好的,你在跟踪我吗?好,我们开始吧。
功能#1: isinstance()
官方文档[1]很好地解释了这个函数的含义:
如果 object 参数是 classinfo 参数或其(直接、间接或虚拟)子类的实例,则返回 True。
如果这对你来说太专业了,这里有一个更清晰的解释。假设您已经声明了一个函数,但不确定它将返回什么——例如,如果一切顺利,您需要一个浮点数,如果出错,您需要一个包含错误消息的字符串。isinstance()
前来救援。
对于实用部分,我们将使用上面声明的类,并创建它的一个实例:
circle = Circle()
现在我们可以使用isinstance()
来检查circle
对象是否属于Circle
类型:
if isinstance(circle, Circle):
print('yes')**>>> yes**
这可能是有用的信息。请记住,您还可以检查某些内容是否是某种内置类型,如字符串、列表、元组等。
函数#2: hasattr()
这个也是很有用的。用一句话来说明它的用途,我认为如果对象包含指定的属性,那么hasattr()
简单地返回 True,否则返回 False。
让我们来看看实际情况。我们已经声明了一个Circle
类,并给了它一些属性— radius
。我们现在可以使用hasattr()
来检查属性是否存在于实例中。
代码如下:
circle = Circle()if hasattr(circle, 'radius'):
print('yes')**>>> yes**
差不多就是这些了。这个函数的用例很大程度上取决于你所做的编程类型。作为一名数据科学家,我有时会在我的类中动态地创建属性,因此以某种方式检查属性是否存在是一件好事。
好吧,我们继续。
功能#3: exec()
如果您有 SQL 背景,那么您可能对动态查询构建的概念很熟悉。我们在 Python 中也有类似的东西——可能对大多数开发人员来说不太有用,但是知道有这种功能还是很好的。
与前两个函数不同,这里我们不需要我们的Circle
类。我们将把两行 Python 代码放入一个多行字符串中,并对它们调用exec
。
代码如下:
statement = '''a = 10; print(a + 5)'''
exec(statement)**>>> 15**
那么,这里刚刚发生了什么?
我们的语句作为 Python 代码逐行执行,尽管它实际上是一个字符串。
同样,您可能会发现这个函数不如前两个函数有用,这取决于您所做的工作类型。
结论
这就是你要的——一些我作为初学者不知道的功能,但是现在发现它们很有用。如果我早点知道它们,它们可能会节省我一些时间,或者至少让我的代码看起来更优雅,但事实就是这样。
感谢阅读,保重。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
参考资料:
[1]https://docs.python.org/3/library/functions.html#isinstance
你不知道的三大 Python 函数(可能)
更干净的代码和更少的循环?算我一个。
作为 21 世纪最流行的语言之一,Python 当然有很多有趣的功能值得深入探索和研究。今天将讨论其中的三个,每个都是从理论上和通过实际的例子。
我想介绍这些函数的主要原因是它们可以帮助你避免编写循环。在某些情况下,运行循环的成本可能很高,除此之外,这些函数还有助于提高速度。
以下是本文将涉及的功能:
map()
filter()
reduce()
即使你以前听说过这些功能,用更多的理论和例子来巩固你的知识也没有坏处。
所以事不宜迟,我们开始吧!
地图()
map()
函数接受另一个函数作为参数,旁边是某种数组。这个想法是将一个函数(作为参数传入的那个)应用于数组中的每一项。
这很方便,有两个原因:
- 你不必写一个循环
- 它比循环快
让我们看看它的实际效果。我将声明一个名为num_func()
的函数,它接受一个数字作为参数。该数字被平方并除以 2,然后返回。注意,操作是任意选择的,您可以在函数中做任何您想做的事情:
现在让我们声明一个要应用num_func()
的数字数组。请注意,map()
本身将返回一个地图对象,因此您需要将其转换为一个列表:
似乎该过程已成功完成。这里没有什么突破性的东西,但是尽可能避免循环是一件好事。
过滤器()
这里有另一个不错的函数可以节省您的时间——无论是在编写还是执行方面。顾名思义,这个想法是在数组中只保存满足特定条件的项目。
就像使用map()
一样,我们可以预先声明函数,然后将它和可迭代列表一起传递给filter()
。
让我们来看看实际情况。我已经声明了一个名为more_than_15()
的函数,顾名思义,如果作为参数给出的项目大于 15:
接下来,我们声明一个数字数组,并将它们作为第二个参数传递给filter()
函数:
正如所料,只有三个值满足给定的条件。同样,这里没有什么突破性的东西,但看起来比循环好得多。
减少()
现在的reduce()
和前面两个有点不一样。首先,我们必须从functools
模块导入它。这背后的主要思想是,它将给定的函数应用于项目数组,并将返回单个值作为结果。
最后一部分至关重要— reduce()
不会返回一个项目数组,它总是返回一个值。让我们来看一张图,让这个概念具体化。
以下是在图表不是 100%清楚的情况下写出的逻辑:
- 5 与 10 相加,得到 15
- 15 与 12 相加,得到 27
- 27 与 18 相加,得到 45
- 45 与 25 相加,得到 70
70 是返回的值。从代码实现开始,让我们从functools
模块导入 reduce 函数,并声明一个返回两个数之和的函数:
现在,我们可以用代码重新查看图表,并验证一切都正常工作:
现在还不要跳到注释部分——我很清楚还有其他方法来对列表项求和。这只是展示该函数如何工作的最简单的例子。
在你走之前
我希望你能在日常生活中利用这三种功能。速度的提高可能不会很大——这取决于您要处理的数据量——但是循环越少,代码看起来就越好。
如果你有一些其他的例子,不要犹豫,在评论区分享吧。
感谢阅读。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
前 3 名 Python 可视化库
我们都需要创造视觉效果来讲述我们的故事,但是我们如何创造呢?我从代码开始!
当创建不同的图时,三个 Python 可视化库是我的首选,它们是 Matplotlib 、 Bokeh 和 Plotly 。每个图书馆都有其不同和相似之处。Matplotlib 是一个静态绘图工具,而 Bokeh 和 Plotly 允许交互式的仪表板功能。因此,让我们简单介绍一下这三个库。
Matplotlib
Matplotlib 是一个 Python 库,它为用户提供了创建静态或动态可视化的能力。我通常倾向于使用 matplotlib 图来绘制任何可以保持静态的东西,比如报告或 PPT 文档中使用的视觉效果。我使用这个库中的标准图:条形图、时间序列分析的线图和热图。这个库的另一个很好的特性是它的 TeX 表达式解析器,它允许在绘图中使用数学表达式。添加这些表达式有助于格式化需要额外细节的绘图。
散景
Bokeh 是我最常使用的绘图库,因为它具有交互性。我特别喜欢的功能是它通过引入自定义 JavaScript 来扩展功能的能力,这“可以支持高级或专门的情况”,您可能会在绘图时遇到。散景允许在网页或笔记本中创建绘图、仪表盘和应用程序。我会注意到,有时我发现在笔记本中很难使用散景功能,比如按钮,但在网页中却很好用。当向最终用户提供仪表板时,过滤数据以定制绘图输出的能力是有用的。与其他绘图库相比,我最喜欢选择散景的一个用例是将其用于分类数据。我发现带抖动的分类散点图是各种仪表板的绝佳视图。我经常使用这种类型的情节,并发现它非常有益。
Plotly
我经常使用的最后一个绘图库是 Plotly,主要是为了它们的绘图功能。Plotly 提供了许多不同的方法来绘制和利用地图数据,如果您查看任何与位置相关的数据,这是非常好的。这些图对理解我基于位置的数据和向利益相关者展示变化非常有帮助。提供一个可视化的表示允许用户快速分解什么是重要的。这将使他们能够开始问更多的目标问题,例如为什么 X 比 Y 更多,或者为什么 Z 在最近几天改变了它的轨迹?如果你有任何位置数据,我建议查看 Plotly 的工具。
摘要
对于我的项目,这是我的三个常用库,用于可视化和仪表板。
- Matplotlib —通常用于静态绘图,您可能想要将其放入演示文稿、纸张或 PPT 中。
- 散景 —用于定制仪表板和交互式绘图的大型库。
- plottly—他们有各种位置数据的绘图工具,比如轨迹、热图等等。
你最喜欢或最常用的绘图工具是什么,为什么推荐它?
学习机器学习的三大资源
让我们面对事实——机器学习已经成为一个热门话题有一段时间了,这是有充分理由的——它可以帮助我们预测未来的行为,让我们的电子邮件免受垃圾邮件的困扰,并根据过去的喜好向我们推荐电影。
可能性是无穷无尽的,薪水是一流的,而且大多数时候,由于你得到的乐趣太多,感觉不像是工作。但是,如果没有先前的经验,你怎么能在合理的时间内学会机器学习呢?请继续阅读,寻找答案。
不管你的背景如何,第一步都是一样的。机器学习不仅限于数学博士。我没有数学博士学位,也不认为自己特别聪明——但我做的一件事是比我认识的任何人都努力。
如果你不愿意投入工作,那么高等学位就一文不值。
也就是说,首先,你应该对你的现状做一个可靠的客观检查。问自己以下问题:
- 我的编程技术有多好?
- 我上次做数学和统计是什么时候?
- 我愿意投入多少时间?
当您对上述问题有了答案,并且如果您认为有一两个领域需要重新审视,请参考我以前的一篇关于数据科学先决条件的文章:
查看学习线性代数、微积分、统计、概率和编程的最佳位置。
towardsdatascience.com](/the-ultimate-data-science-prerequisite-learning-list-348ce89805f9)
请注意,为了进行一些应用机器学习,你不需要成为这些领域的专家。比一般的数学家更擅长编程,比一般的程序员更擅长数学。这是黄金法则。
好了,还在这里? 好。现在,您已经准备好投入到令人惊讶、有时令人沮丧的机器学习世界中了。
1.Python 用于数据科学和机器学习训练营
这是一门在线课程,你需要花大约 22 个小时观看,可能需要 5 个小时才能完全理解。它从 Python 复习到库介绍,然后深入到机器学习算法。
我已经完成了这门课程,并认为这是了解机器学习的一个很好的方式,但也仅此而已。算法在中没有涉及太多的深度。虽然在完成课程后,你肯定能够实现它们并解决一些现实世界的问题,但你很可能不知道何时使用哪种算法以及如何调整它们(正确地)。
原因是,这门课的数学内容并不多。我觉得根本没有数学,只有各种库的 Python 实现。课程作者建议你应该在复习课程的同时复习《统计学习导论》这本书,以获得坚实的理论背景。我同意。
尽管如此,这个球场仍然是一个让你动手的好地方。
价格:古典 Udemy,售价 194.99 美元,但大多数时候你可以找到打折后只卖 $9.99 的。绝对值得投资。
您准备好开始成为数据科学家的道路了吗!这门综合课程将成为你学习的指南…
www.udemy.com](https://www.udemy.com/course/python-for-data-science-and-machine-learning-bootcamp/)
2.吴恩达在 Coursera 上的机器学习
我感觉这门课就像是入行的标准。直到今天,超过 120,0 00 名用户对该课程进行了评分,平均分数为 4.9 分(满分为 5 分)。这说明了一些问题。
这些视频的分辨率很低,但内容质量弥补了这一点。我要说这比我提供的第一个资源要深入得多,尽管吴先生说如果你不理解也不要担心,但还是要努力找出你的弱点并加以改进。
据我回忆,这些实验室使用的是一种奇怪的语言,叫做 Octave ,是 Matlab 的免费替代品。这几乎是唯一的缺点,因为今天你几乎只能用 Python 或 r 进行机器学习。
价格:观看视频讲座是免费的,但是如果你想要一个结业证书,你必须支付 100 美元。
该证书将是添加到你的 LinkedIn 个人资料中的一个奇特的东西,但在其他方面不是必要的。
机器学习是让计算机在没有明确编程的情况下行动的科学。在过去的十年里…
www.coursera.org](https://www.coursera.org/learn/machine-learning)
3.哈佛大学的 CS109A
与前两个选项不同,这个选项不是视频格式的。这是一个 GitHub 知识库,包含理论部分的 PDF 讲座和实验室的 Jupyter 笔记本。
老实说我不知道这个东西是怎么免费提供的。
它是由世界顶尖大学之一制作的全套课程,完全免费。它包含 20 多个讲座,13 个实验室,总体来说是一个开始您的旅程的好地方。老实对你说,自从我最近接触到它,我还没有完成整个作品,但是从我所报道的来看,它是一部杰作。
价格:就像我说的,是免费的,只要克隆回购就可以了。
此时您不能执行该操作。您已使用另一个标签页或窗口登录。您已在另一个选项卡中注销,或者…
github.com](https://github.com/Harvard-IACS/2019-CS109A)
在你走之前
这就是你想要的——开始你的机器学习之旅的 3 个惊人资源。这并不容易,尤其是如果你缺乏一些背景知识,需要先在这方面下功夫,但这是值得的。
如果我今天从零开始,我会从的最后一个选项——哈佛大学的一门课程——开始,它对我来说是一个全面的赢家。
这并不意味着其他两个选项是不好的,他们是惊人的。我的总体建议是:
- 如果你想对理论部分有一个高层次的概述,并花更多的时间去做一些实际的东西,那么选择第一个
- 如果你想了解全貌,不喜欢视频课程,请选择第三个
- 如果你想要一些背景知识,但也想了解模因,选择第二个
感谢阅读。保重。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
硒的三大功能让你的生活更轻松
每个人都应该知道的基本功能
在今天这样一个快节奏的世界里,有许多事情我们必须自动化以便更有生产力或效率,尽管我们有时并不真的喜欢它。
想象一下,你有一项需要花 2 个小时才能完成的任务,但是你可以制作一个工具在 30 秒内自动完成。
这就是网页抓取的目的。这是一个术语,用来从网页上获取数据,然后制作出来,这样你就不用动一根手指了!
获取数据,然后按照你想要的方式进行处理。
这就是为什么今天我想向大家展示 Selenium 的一些顶级功能,Selenium 是一个用于 Web 抓取的库。
我以前写过关于 Selenium 和 Web Scraping 的文章,所以在你开始之前,我建议你阅读这篇文章“关于 Web Scraping 的一切”,因为它的设置过程。如果你已经比较精通网络抓取,可以试试我的高级脚本,比如“如何用 Python 省钱”和“如何用 Python 制作分析工具”。
让我们直接投入进去吧!
获取()
get 命令启动一个新的浏览器,并在 C hrome Webdriver 中打开给定的 URL。它只是将字符串作为您指定的 URL,并打开它进行测试。
如果您使用的是 Selenium IDE,它类似于 open command。
示例:
driver.get(“https://google.com");
“驱动程序”是您的 Chrome Webdriver,您将在上面执行所有操作,在执行上面的命令后,它看起来像这样:
测试目的 Chrome 窗口
find_element()
当您想要访问页面上的元素时,这个函数非常重要。假设我们想要访问“Google search”按钮来执行搜索。
有许多方法可以访问元素,但是我更喜欢的方法是找到元素的 XPath。XPath 是元素在网页上的最终位置。
通过点击 F12,您将检查该页面,并获得关于您所在页面的背景信息。
通过单击选择工具,您将能够选择元素。
找到按钮后,单击右边蓝色标记的部分,复制元素的“完整 Xpath”。
self.driver.find_element_by_xpath('/html/body/div/div[4]/form/div[2]/div[1]/div[3]/center/input[1]')
这是查找特定元素的完整命令。与常规 XPath 相比,我更喜欢完整的 XPath,因为如果新会话中的元素发生变化,常规的 XPath 可能会发生变化,而下次执行脚本时,它就不起作用了。
其他 find_element 函数概述。(还有 find _ elementss)
find_element 函数的所有选项
send_keys()并单击()
我为你添加了一个额外的功能,所以我们可以通过这个例子,使它完全工作。
Send_keys 函数用于将文本输入到您通过 find_element 函数选择的字段中。
假设我们想在 google 中输入“plate”并执行搜索。我们已经有了我们的“谷歌搜索”按钮,现在我们只需要输入文本,并在点击功能的帮助下点击按钮。
google_tray = self.driver.find_element_by_xpath('/html/body/div/div[4]/form/div[2]/div[1]/div[1]/div/div[2]/input')google_tray.send_keys("plate")google_search = self.driver.find_element_by_xpath('/html/body/div/div[4]/form/div[2]/div[1]/div[3]/center/input[1]')google_search.click()
为了更加清晰,我将元素保存在各自的变量中,然后对它们执行函数。
最后你会得到这个:
临终遗言
如前所述,这不是我第一次写关于 Selenium 和 Web 抓取的文章。
如果你想了解更多关于这个话题的知识,请查看“25 个 Selenium 函数,它们将使你成为网络抓取专家”。
我还想介绍更多的功能,还会有更多的功能。为了跟上,关注我更多!
感谢阅读!
查看我的其他文章并关注我的媒体
当我发布一篇新文章时,请在 Twitter 上关注我
Python 和数据科学的 3 大 VS 代码扩展
谁不喜欢智能 IDE 呢?
IDE 太棒了。如果你不知道 IDE 是什么,它代表 集成开发环境 ,这意味着它不同于普通的文本编辑器,它支持代码编辑、林挺、语法突出显示和一系列其他很酷的东西,从长远来看,这些都将帮助你并节省你的时间。
总的来说,我对 IDE 的主要问题是——它们太重了。你的普通 IDE,比如 PyCharm ,会占用大量的磁盘空间,还会占用大量的 RAM,并且会花费更多的启动时间。甚至不要让我开始谈论 Visual Studio 。
这也是我今天要把重点转移到 Visual Studio 的更轻巧的兄弟 Visual Studio 代码 的原因。这是一个简单而轻量级的 IDE,多年前我就喜欢上了它,并且从未回头。
默认情况下,VS 代码与其他轻量级 IDE(如 Sublime 或 Atom )没有太大区别,除了更好的设计(只是个人偏好),但通过各种插件,它可以匹配更“严肃”的 IDE,在某些情况下甚至会让你花钱。
今天,我想把重点放在 3 个插件上,它们将会为你节省很多时间,同时考虑到 Python 和数据科学。在开始之前,让我们检查一下需求。
要求
开始之前,请确保安装以下设备:
- Python (我用的是 3.7.6)
- Visual Studio 代码
- VS 代码的 Python 扩展
最后一个你将不得不通过 VS 代码本身来安装,但是由于安装非常简单(只需一次点击),我不会在这里涉及它。现在我们可以进入正题了。
1.笔记本支持
我是一名数据科学家,喜欢笔记本。说真的,它们是我典型工作流程中如此重要的一部分。我很少想直接跳到代码编辑器并输入解决方案——主要是因为笔记本非常适合探索性分析,这是数据科学的一大部分。
因此,当笔记本支持在几个月前首次被引入 VS 代码时,我很高兴能尝试一下。起初,它们似乎比传统的 Jupyter 笔记本慢一点,但速度问题现在似乎得到了解决。
你不需要安装任何插件来使用笔记本,只要你有前面需求部分提到的 Python 扩展。
你需要做的就是创建一个扩展名为.ipynb
的文件——我把我的文件命名为sample.ipynb
下面是所有事情的工作原理——我准备了一个简单的 GIF,而不是一堆截图(耶科学):
1.笔记本支持
这就是它的全部功能-您现在可以像在任何常规笔记本电脑环境中一样工作。不客气,玩得开心。
2.autoDocstring
从它的名字,我敢肯定你能猜到它背后的目的——它将帮助你管理文档字符串。要使用它,你需要先安装它——所以转到 VS 代码的扩展部分,键入 autoDocstring 并点击 Install 。
为了看看它对我们有什么样的魔力,我们需要创建一个 Python 文件——我把我的文件命名为main.py
我在其中声明了一个函数,它将两个数字相加并返回它们——这两个数字是由用户用函数参数的魔力指定的。
要使用autoDocstring
包,首先需要在函数声明下面键入三个双引号"""
,然后按回车键。这里有一个简短的演示:
2.autoDocstring
现在您可以逐段完成 docstring,按下选项卡键跳到下一段。
这个扩展对你们中的许多人来说肯定不是一个令人惊叹的因素,但是它将使你的 docstrings 保持干净和一致。
3.AREPL
难道你不讨厌繁琐的控制台打印,只是找出你的变量的当前值吗?
别担心,AREPL 会帮你的。这是一个插件,它会在你每次敲击键盘上的一个字母时改变它的输出(有时会很烦人),但也会告诉你你的变量保存的值,并显示print
语句的输出,而不需要你去运行程序。
起初听起来可能不多,但是相信我,如果你正在做任何探索性的工作,这是一个白天和夜晚的差别(我想你是这样的,因为你正在阅读关于数据科学的*)。*
要使用它,你需要像安装autoDocstring
扩展一样安装它。到目前为止,我相信您已经知道如何安装扩展,所以我不会讨论这个问题。
安装完成后,创建一个虚拟 Python 文件——我已经调用了我的文件main.py
,你会立即在右上角看到一个红色图标(不是关闭窗口的那个)。当你按下它时,一个窗口就会出现在屏幕的右边。
现在一切顺利吗? 好。让我们看看扩展的实际应用:
3.AREPL
您可以明白我说的扩展有点烦人是什么意思——当实际上我还没有完成语句时就显示错误。但是如果你权衡利弊,我会说利远大于弊。
在你走之前
VS 代码和 Python 都有很多可用的扩展,Python 是当今最流行的语言之一。
这篇文章并没有列出所有好的插件,但是我展示了我认为最有用的插件。如果你想看更多像这样的文章,一定要让我知道,我一定会给你发。
感谢阅读。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
* [## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)*
VSCode 中数据科学家的 4 大代码查看器
让 YAML、JSON、CSV 和 Jupyter Notebook 为你工作,而不是与你作对
动机
数据科学领域需要处理不同格式的数据和文件,如 YAML、JSON、CSV 和 Jupyter Notebook。这些格式服务于不同的目的。有很多,因为每个都有自己的优点和缺点。
您可能会在一些琐碎的任务上花费数小时,比如理解 json 文件的内容,或者确保为列表编写正确的 yaml 代码。幸运的是,有一个针对 VSCode 的方法。
如果你不知道 VSCode ,它是微软为 Windows、Linux 和 macOS 制作的免费源代码编辑器。我喜欢 VS 代码的两大优点是键盘快捷键和有用的扩展。
使用 VSCode 扩展是救命稻草。在我的上一篇文章中,我介绍了我最喜欢的两个扩展:
在这篇文章中,我将介绍 4 个用于查看不同格式文件的其他扩展。这些工具极大地促进了我作为数据科学家的工作流程。我们开始吧!
CSV 至表
CSV 文件很常见,但很难阅读。读取它们的常用方法是打开一个电子表格或使用pandas.read_csv().
,但这两种方法都要求您要么打开笔记本,要么关闭 VSCode 编辑器,找到 csv 文件所在的目录并打开电子表格。
有比那更快的方法。CSV to Table 是一个扩展,可以将您的 CSV/TSV/PSV 文件转换为 ASCII 格式的表格,如下所示。
现在,您不仅可以查看格式良好的 csv 文件,还可以在表格中编辑 csv 文件!多酷啊。
要使用扩展,请将 CSV 安装到表中。键入Ctrl + Shift + P
然后选择CSV: Edit as csv.
Json 编辑器
Json 是保存数据的另一种常见格式。与 csv 相比,读取数据可能更容易,也可能不容易。当 Json 有很多嵌套对象时,它变得非常难以阅读。
如果您发现自己花了很长时间查看 json 文件,试图理解其内容,Json Editor 将是您的救命稻草。
在 Json Editor 中,您可以在一个树状结构中查看 Json 文件,如右边屏幕所示。更好的是,您可以在树视图中编辑 json 文件!
要使用该扩展,请安装 JSON 编辑器。键入Ctrl+Shift+P
和JSON editor: Start JSON editor session.
在设置中更改主题,如果您想设置“亮”或“暗”主题,请键入vscode-json-editor.theme
。
YAML
Yaml 是一种人类可读的数据序列化语言,通常用于配置文件。Yaml 比 json 更容易阅读和编辑,但是它并不总是直观的,特别是对初学者来说,正确地编写 yaml 或判断 yaml 是表示列表、字典还是字符串。
但是幸运的是,有一个叫做 YAML 的扩展。YAML 可以做以下事情:
- 检测整个文件是否是有效的 yaml。
- 文档大纲显示(Ctrl + Shift + O)
- 自动完成(Ctrl +空格键)
- 允许格式化当前文件
有了 YAML,你可以了解文件的结构,对象的类型,并快速访问该对象!
Jupyter 观察器
Jupyter 笔记本在数据科学家中极为常见。尽管 Jupyter Notebook 对分析数据很有用,但你不能只是打开一个. ipynb 文件就期望看到它。您需要通过在终端上键入jupyter notebook
来打开 jupyter 笔记本会话。
如果你想用笔记本工作一段时间,这没问题。但是,如果您只想快速分析或可视化 VSCode 中的数据,而不打开新的会话,该怎么办呢?幸运的是,有一个叫做 Python 的扩展。
如果我打算暂时使用 Jupyter 笔记本,我更喜欢经典笔记本,但如果我只想快速分析数据,我会使用这款笔记本。
要使用该扩展,只需安装微软的 Python 扩展。现在,您可以查看和编辑笔记本,而无需启动新的会话!
结论
恭喜你!您已经学习了格式化 VSCode 的 4 个扩展。能够格式化我的文件让我的生活变得简单多了!我希望你在尝试了这些扩展之后也有同样的感觉。
星这个回购如果你想检查我写的所有文章的代码。
我喜欢写一些基本的数据科学概念,并尝试不同的算法和数据科学工具。你可以在 LinkedIn 和 Twitter 上与我联系。
如果你想查看我写的所有文章的代码,请点击这里。在 Medium 上关注我,了解我的最新数据科学文章,例如:
您可以收集数据或创建自己的数据
towardsdatascience.com](/how-to-create-fake-data-with-faker-a835e5b7a9d9) [## 如何使用 HyperDash 远程监控和记录您的机器学习实验
培训需要很长时间才能完成,但你需要去洗手间休息一下…
towardsdatascience.com](/how-to-monitor-and-log-your-machine-learning-experiment-remotely-with-hyperdash-aa7106b15509) [## Datapane 简介:构建交互式报表的 Python 库
创建精美报告并与您的团队分享分析结果的简单框架
towardsdatascience.com](/introduction-to-datapane-a-python-library-to-build-interactive-reports-4593fd3cb9c8) [## 如何在一行代码中跨不同环境共享 Python 对象
为建立与他人分享你的发现的环境而感到沮丧?以下是如何让它变得更简单
towardsdatascience.com](/how-to-share-your-python-objects-across-different-environments-in-one-line-of-code-f30a25e5f50e)
四大数据仓库反模式
当数据仓库超出其核心目的时,这些曾经受人尊敬的系统会将我们的数据和项目置于风险之中。下面是四种最常见的数据仓库反模式。
照片由 Ascend.io 上的 Ascend 博客拍摄
“最好的投资是自己交易的工具。”
—本杰明·富兰克林
大量的数据、系统及其互连性持续增长,变得越来越复杂。不足为奇的是,大多数数据项目即使没有彻底失败,也会遇到严重的延迟,这通常可以追溯到我们使用的工具。针对数据生命周期的各个阶段设计了大量有效的工具,但是如果这些工具使用不当,项目往往从一开始就注定失败。
“如果你只有一把锤子,所有的东西看起来都像钉子。”
—马斯洛/吐温/佛
以数据仓库为例。数据团队通常依赖数据仓库来获得速度和便利性。这是一个熟悉的工作环境,更重要的是,它就在那里。但是,在一系列一次性的生产使用和更大、更复杂的数据转换给系统增加了负载之后,曾经轻松的工作环境可能会变得完全相反。当数据仓库超出其核心目的时,这些曾经受人尊敬的系统会将我们的数据和项目置于风险之中。
下面是四种最常见的数据仓库反模式。
用作数据湖的数据仓库
在当今的数据世界中,数据仓库和数据湖都是广泛使用的技术——有时会相互替代使用。但是不要搞错:这些技术有很大的不同。组织在交替使用这些系统时应该小心。
数据仓库的成本、性能和复杂性随着本应驻留在别处的数据的不必要增加而显著增加,例如旨在高效存储大量数据的数据湖。这些湖支持对数据进行清理、建模和提炼的灵活处理,以使数据有意义。另一方面,数据仓库存储旨在支持分析、数据应用和机器学习项目的精炼数据。
这两个系统提供相似的功能,事实上,如果使用得当,它们可以相互补充。数据湖提供了为下游用例灵活操作、探索和准备数据的能力。在这一点上,数据仓库将提取提炼后的数据,并快速提供给用户。
用作数据管道的数据仓库
数据仓库中的 ETL 非常适合结构化数据。然而,当大量快速移动的半结构化和非结构化数据加入混合数据时,这一过程开始迅速崩溃。高种类、高容量和高速度数据的爆炸已经超出了 ETL 的能力,使得数据管道成为任何现代数据架构的基本部分。数据工程团队已经发现,构建它可能极其复杂和耗时。数据管道需要大量的编码,以及不成比例的维护和优化时间。这使得许多开发人员转向数据仓库进行“最后一英里”的数据转换,而不是管道。
用这些转换使您的仓库超载很容易,但是这样做会很快导致大量数据“痛苦”。将数据和处理任务推送到仓库需要大量的计算能力,这很快就会变得昂贵。此外,这些作业会与资源争夺标准仓库查询,从而影响其他下游用户和应用程序的性能。虽然有一些工具可以通过增量缓存部分查询及其数据来减轻这种痛苦,但这些方法也带来了新一轮的数据完整性和沿袭挑战,这对当今大多数企业来说都是一个问题。
相反,许多数据团队现在已经开始卸载他们的数据仓库,并将处理转移到基于 Apache Spark 的管道中。这种转变带来了更大的规模和效率,让数据团队和 CFO 都很高兴。
用作数据科学处理引擎的数据仓库
大规模数据处理技术的当前可用性因素经常迫使数据科学家严重依赖资源和成本密集型数据仓库来实现核心数据科学功能。虽然这些是事实上的商业智能和报告系统,但重要的是数据科学家不要只局限于仓库可以提供的东西。
数据仓库保存已经结构化的数据,旨在快速回答关于已知数据的已知问题。然而,考虑到所需的成本和前期建模,仓库可能不是运行数据科学团队所需的实验和复杂分析类型的理想系统,这些团队寻求在各种数据中找到未知模式。数据科学家通常需要比在仓库中发现的大量建模的数据集更具流动性和原始上下文的系统,以便快速迭代、实验和发现这些未知以作为模型进行生产。此外,更多的数据有利于数据科学家提高准确性,这通常意味着 Apache Spark 等工具更适合更大的数据量。
数据科学最终仍然是一门科学;它是由研究、实验、测试和重复驱动的。为了实现这一点,数据科学家需要比数据仓库所能提供的更多的上下文、可伸缩性和可负担性,以便能够以业务所需的速度构建足够准确的模型。
数据仓库被用作数据开发的主要工具
传统的数据开发生命周期通常只允许在两个地方转换数据:当数据从其原始位置转移时,或者当从其最终静止位置查询数据时。然而,现代数据开发生命周期要灵活得多。正如现代软件应用程序是通过定义良好的 API 调用用多层微服务和编织令牌构建的一样,现代数据架构也越来越多地向更小、增量和迭代的阶段发展,可以很好地理解、维护和优化。
在现代数据开发生命周期中,并非所有数据都驻留在仓库中,用户被迫等待,直到数据集被配置为交付到那里。无法访问原始和中间阶段的数据会严重限制数据团队,导致迭代周期变慢。此外,访问额外数据集或功能的请求通常会导致数周的延迟,从而将项目和卫生置于风险之中。
对于高效且可预测的数据运营策略,必须使跨所有数据阶段的主动数据开发成为可能。虽然在过去,跨这些阶段维护和管理安全性、作业执行和存储是一项挑战,但新工具的出现使这一过程变得更加简单和安全,确保数据在其生命周期中的任何位置都可以访问和协作。
结论
在过去的几年中,数据仓库功能有了重大的创新。然而,这只能带我们到此为止。归根结底,无论我们将数据仓库推进和扩展到什么程度,它们都是为优化的下游使用而专门构建的。就规模、成本和灵活性而言,很难击败数据湖和数据管道,最近的创新使它们比以往任何时候都更快、更容易使用。
当今的数据世界是由强大的技术产品驱动的,但是要确保您在数据开发生命周期的每个阶段为正确的用户使用正确的工具,以获得最佳结果。
面向工程和研究的 4 大 Python 模块
面向当今工程师和研究人员的 Python 模块
在 Unsplash 上拍摄的 ThisisEngineering RAEng
Python 对于初学者来说是完美的,因为它的语法易于掌握和理解。凭借这一优势,它已经是工程和研究领域的领先编程语言。作为工程师,我们的任务是**“应用科学和数学原理开发技术问题的经济解决方案”**。
Python 是众多可以帮助我们完成这项任务的工具之一。我在工作中使用 Python 从技术规格表中提取信息,处理实验和测试结果,并解决数值计算。这里有一些我最喜欢的 Python 模块,每个工程师和研究人员都可以利用它们来提高日常产出。
1.数学模块
数学模块是 Python 标准库的一部分,包含工程计算中常用的数学工具和常数。需要知道角度的反正弦?一行代码就可以完成这项工作。
[math.asin(x](https://www.w3schools.com/python/ref_math_asin.asp))
记不住欧拉数,或者圆周率的第四位小数?没问题,数学模块会帮我们搞定的。
math.e **# returns 2.718281828459045**
当然,被命名为数学模块,它也能计算函数,如三角函数和对数函数。我最喜欢的另一个操作符是“_”操作符,Python 在这里返回上一次操作的值。
23.74*0.56 **# returns 13.2944**
_+0.582 **# returns 13.8764**
_/math.e **# returns 5.104842277471403**
当我们需要快速计算时,这非常方便。让我们来看一个使用数学模块中的方法从一些振动传感器读数(读数的幅度)计算均方根数据的例子。
Jorge Ramirez 在 Unsplash 上拍摄的照片
以 10 个传感器能量读数为例,我们可以通过下式求出均方根值:
**import** math
N = 6with open("data.txt") as file:
for i in range(6):
line = next(file).strip()
print(line)
list **=** [0.09539392, 1.722933545, 3.220776304, 0.291376046, 1.741062894]
n **=** len(list)
squares **=** 0
for i in range(0,n):
squares **+=** (list[i]******2)
mean **=** (squares **/** (n))
RMS **=** math.sqrt(mean)
print(RMS)# **returns** **1.8147837337772996**
2.Numpy 模块
Numpy(Numeric Python)是为科学计算而设计的 Python 模块。它有许多有用的特性,它的核心数据类型是数组。Numpy 数组是 n 维数组对象,用于表示向量和矩阵。
照片由 Antonio Garcia 在 Unsplash 拍摄
下面是一些基于来自 Kaggle 的温度传感器数据集使用 Numpy 的例子。
我们可以检查数据集的内容,即存在的列、读数的数量以及第一个/最后 10 个读数。
import numpy as np
from numpy import genfromtxt
data = genfromtxt(data.csv", delimiter=',', names = True)
print("Columns in dataset: " , data.dtype.names)Temp = data[:, 0]
print(Temp[1: 10]) # **returns** **first 10 elements**
print(Temp[-10:]) # **returns** **last 10 elements**
print(Temp.size)# **returns** **number of elements**
根据我们的应用程序,我们还可以使用 where() 方法快速过滤出温度列中读数大于 30 度的值。
index = np.where(Temp >= 30)
print(Temp[index])
简单的数据分析,如百分位值**、平均值、中值、标准偏差**以及数据集中最频繁出现的数据,可以使用几行代码进行计算。
在这里,我们探索水温列:
WaterTemp = data[:, 2]
tenth, ninetieth = np.nanpercentile(WaterTemp[1:], q =[10, 90])
mean, median, std = np.nanmean(WaterTemp), np.nanmedian(WaterTemp), np.nanstd(WaterTemp)values, counts = np.unique(WaterTemp, return_counts=True)
print(tenth, ninetieth)
print(mean, median, std)
print(values[np.argmax(counts)])
3.Matplotlib 模块
为了用更少的代码行生成出版物质量的数字和图形,可以使用 Matplotlib 模块,其中包含 Pyplot 模块。Pyplot 对于 2D 图特别有用,例如绘制直方图、数据集图表或直观检查模拟结果。
一个简单的 2D 图的例子:(它看起来比 Excel 图表好吧?)
传感器灵敏度的斜率。作者图片
从根本上说,我们可以自由定制我们的绘图,即:设置轴标签,调整线条和标记厚度,甚至将绘制的图形保存到高分辨率图像或 pdf 中。
Pyplot 是我最喜欢的工具之一,尤其是 subplot 方法,我可以创建多个图并将它们保存到 PDF 或 JPEG 文档中。
作为工程师,我们经常被要求做出数据驱动的决策,例如,根据 CpK 值确定被拒绝的制造零件的数量,而 Matplotlib 是一个有用的库,我们可以轻松地可视化数据趋势以进行决策。
4.SciPy 模块
SciPy(科学 PYthon)模块提供了大量的数值和科学处理算法,有助于工程师进行计算和求解方程。让我们从下面的另一个信号处理示例来看看 SciPy 的实际应用。
10 Hz 正弦波信号与 30Hz 正弦波信号叠加。我们对信号应用傅立叶变换,系数相对于频率绘制。
import scipy as sp
...
df = 1/signal_length
t = sp.arange(0, signal_length, dt)
n_t = len(t)y = sp.sin (2*pi*10*t)+ sp.sin (2*pi*30*t)
#Note that the arange and sin functions are available in numpy toof = sp.fft (y)
frequencies = df * sp.arange(0 ,(n_t -1)/2)
n_freq = len (frequencies)plt.subplot (2 ,1 ,1)
plt.plot (t ,y)
...plt.subplot (2 ,1 ,2)
plt.plot(freqs, abs(f[0: n_freq]))
...plt.show()
信号的傅立叶变换。作者图片
只需几行代码,就可以获得并可视化信号的傅立叶变换。SciPy 也提供了 NumPy 的所有功能,后者通过一整套算法扩展了前者的功能,如**积分、最小化、傅立叶变换、回归、形态学、**和其他应用数学技术。
如果你有兴趣了解更多关于信号处理的知识,我在这里写了另一篇关于这个主题的文章:
IBM 在 Coursera 上的“高级机器学习和信号处理”概述
towardsdatascience.com](/how-do-machine-learning-and-signal-processing-blend-4f48afbb6dce)
总结和后续步骤
你可能会问,既然有像 MATLAB、Microsoft Excel 和其他工程软件这样的工具,为什么还要使用 Python 呢?嗯,它们中的大多数都是闭源软件,使用起来可能很昂贵——尤其是当需要额外的定制工具箱和许可证时。
然而,Python 是免费的、开源的,包含许多模块和库,与付费软件一样好,甚至更好。
我们在上面的帖子中看到的只是冰山一角,但我希望它足以让任何开始使用 Python 的工程师和科学家相信 Python 在处理、处理和可视化数据集方面的强大功能。21 世纪瞬息万变,了解 Python 有朝一日对于传统的工程学科来说是必要的。
以下是的附加资源列表,用于了解上述模块的更多信息:
- 关于数学模块你需要知道的一切
- 数字参考
- Matplotlib & SciPy 引用