TowardsDataScience 博客中文翻译 2020(二百六十九)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

用 Scala 和 Spark 实现数据科学和机器学习(第 2/03 集)

原文:https://towardsdatascience.com/data-science-and-machine-learning-with-scala-and-spark-episode-02-03-be74f0590f20?source=collection_archive---------22-----------------------

SCALA SPARK 机器学习

Scala API 的 Spark

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Spark 的发明者选择 Scala 来编写底层模块。在使用 Scala 和 Spark 的数据科学和机器学习(第 01/03 集)中,我们在使用 Google Colab 环境时讲述了 Scala 编程语言的基础知识。在本文中,我们将了解 Spark 生态系统及其面向 Scala 用户的高级 API。和以前一样,我们仍然使用 Spark 3.0.0 和 Google Colab 来练习一些代码片段。

什么是阿帕奇火花?

阿帕奇星火和三角洲引擎盖下的湖泊

Apache Spark 是一个统一的计算引擎和一组用于在计算机集群上进行并行数据处理的库。截至本文撰写之时,Spark 是针对这一任务开发的最活跃的开源引擎;使其成为任何对大数据感兴趣的开发人员或数据科学家的实际工具。Spark 支持多种广泛使用的编程语言(Python、Java、Scala 和 R),包括从 SQL 到流和机器学习等各种任务的库,可以在从笔记本电脑到数千个服务器集群的任何地方运行。这使它成为一个易于启动和扩展到大数据处理或超大规模的系统。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我强烈推荐阅读 Apache Spark 和 Delta Lake Under the Hood 快速参考手册。这是一个 45 页的文档,包含 Scala 和 pyspark APIs 中的示例,阅读时间不会超过 30 分钟。

为什么要用 Spark 进行机器学习?

作为一名数据科学家,我们可以提出这样一个问题“Spark 对于机器学习任务的重要性是什么?”随着电子设备、社交媒体平台和高级 IT 系统使用的增加,数据正以前所未有的水平产生。此外,由于廉价的数据存储,客户很乐意收集大数据来提取价值。机器学习模型已经得到证明,并为企业更好地理解和制定未来扩张战略而工作。就获取大数据而言,Spark 是机器学习的事实上的选择,可以通过收集大量数据来建立模型。

DataFrame API 是机器学习最重要的高层 API。Spark 的 MLlib 放弃了对 RDD 的支持,转而支持 DataFrame API。

Spark 中的 Scala API

Scala 被选为编写 Spark 引擎的核心语言。但是,Apache Spark 提供了 Java、Scala、Python 和 r 的高级 API,在本文中,我们将使用 spark 3.0.0。

下面是在 Google colab 中获取 Scala 和 Spark 模块的命令

// Run below commandsimport $ivy.`org.apache.spark::spark-sql:3.0.0`
import org.apache.spark.sql._import $ivy.`sh.almond::ammonite-spark:0.3.0`

Spark 有两个重要的抽象,Spark 上下文和 Spark 会话。使用下面的代码,我们创建一个 spark 会话和上下文。

import org.apache.spark.SparkContextimport org.apache.spark.SparkConf

通常,当运行 spark 时会有很多警告,使用下面的命令,你可以关闭它们。

// TIP: Turn off the millions lines of logsimport org.apache.log4j.{Level, Logger}Logger.getLogger(“org”).setLevel(Level.OFF)// define spark session
val spark = {SparkSession.builder().master("local[*]").getOrCreate()}// Define Spark Context
def sc = spark.sparkContext

用 Scala 点燃 RDD

弹性分布式数据集(RDD)是与 Scala 密切相关的 Spark 数据结构的最常见抽象。它非常类似于 Scala 的原生并行特性。让我们用 Scala 写一些关于 RRD 的片段。

// Spark RDDimport scala.util.Random// Define variable in Scala
val bigRng = scala.util.Random.shuffle(1 to 100000)// convert Scala variable to spark RDD
val bigPRng = sc.parallelize(bigRng)

你可以在bigPRng上应用很多操作,它会在 Spark 上运行。

// calculate the mean of the population
bigPRng.mean// Find the min of the population
bigPRng.min// Find the stanndard deviation of the population
bigPRng.popStdev

在 RDD 的每个元素上应用函数非常类似于 Scala 并行map函数。

// Map function on RDD, similar to Paralell in Scalaval bigPRng2 = bigPRng.map(_ * 2)// Scala function function to apply on RDDdef div3(x:Int) : Boolean = {val y:Int=(x%3); return(y==0)}
val bigBool = bigPRng2.map(div3(_))

Scala 中的 Spark DataFrame API

在前面的章节中,我们已经包括了关于 RDD 以及如何使用 RDD 进行并行计算的例子。spark 中另一个流行的 API 是 Dataframe。从数据科学家的背景来看,DataFrame API 可能更有意义。然而,有一个主要的区别是如何火花数据帧和熊猫数据帧在引擎盖下操作。

Spark 数据帧可以存在于多个物理机器上,因此它们的计算是以分布式方式执行的,这与 pandas 数据帧相反。

Spark MLlib 将在 DataFrame API 中实现。

让我们学习一些 Spark DataFrame API 的基本技巧,它们对机器学习任务非常有用。

通读 Google colab 的第 0 部分,了解以下片段的数据准备。

// Read the .txt file
val df_emps = spark.read.option("header", "true").csv(data_dir + "employee.txt")// print the schema
df_emps.printSchema()// show top 10 records similar to df.head(10) in pandas
df_emps.show(10, false)

阅读第二张表格

// Read the .txt file
val df_cr = spark.read.option("header", "true").csv(data_dir + "country_region.txt")// print the schema
df_cr.printSchema()// show top 10 records similar to df.head(10) in pandas
df_cr.show(10, false)

阅读第三张表格

// Read the .txt file
val df_dd = spark.read.option("header", "true").csv(data_dir + "dept_div.txt")// print the schema
df_dd.printSchema()// show top 10 records similar to df.head(10) in pandas
df_dd.show(10, false)

合并是 Spark 相比熊猫最常见最高效的操作之一。

// Merge all three tables
val df_joined = df_emps.join(df_cr, "region_id").join(df_dd, "department")

谷歌 Colab 笔记本

我准备了一个功能性的 Google colab 笔记本。请随意使用笔记本进行练习。

有关更多示例,请参考 Spark 官方文档

现实项目结论

在这一集中,我们学习了 Scala 的 Spark 基础知识,并通过练习涵盖了以下关键概念。

  • 在 Google Colab 中运行 Scala
  • 火花的基础
  • Spark 的 RDD 与 Scala
  • Sparks 的 Scala 数据框架 API

下一集,我们将学习使用 Google Colab 运行时的 Spark 和 Scala 的机器学习模型。

参考资料/阅读/链接

在谷歌联合实验室用 Scala 进行机器学习

Scala Docs-【https://docs.scala-lang.org/tour/tour-of-scala.html

https://www . Lynda . com/Scala-tutorials/Scala-Essential-Training-Data-Science/559182-2 . html

[## 入门指南

Spark 2.0 中的 SparkSession 提供了对 Hive 特性的内置支持,包括使用…

spark.apache.org](http://spark.apache.org/docs/latest/sql-getting-started.html)

https://databricks.com/p/ebook/apache-spark-under-the-hood

数据科学和“数学人”的神话

原文:https://towardsdatascience.com/data-science-and-the-myth-of-the-math-person-9bb1844625d1?source=collection_archive---------37-----------------------

数据科学继承了数学中的错误观念,即只有特别有天赋的人才能做到,但与数学一样,任何人都可以学习它。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自 Andrea Piacquadio

“数据科学是可行的,”EPIC 2018 年檀香山会议的一名与会者会像口头禅一样惊呼。该会议是为商业人种学家和 UX 的研究人员举办的,他们有兴趣了解数据科学和机器学习并将其集成到他们的研究中。她特别试图解决她注意到的一个趋势——我也看到了:定性研究人员和其他所谓的“非数学人士”经常认为数据科学对他们来说太技术性了。这似乎最终植根于关于数学和数学相关领域的文化神话,如计算机科学、工程和现在的数据科学,与她的说法类似,我在这篇文章中的目标是讨论这些态度,并表明数据科学,像数学一样,是相关的和可行的,如果你这样对待它。

“数学人”

在美国,许多人都有一个隐含的“数学人”的形象:一个据说天生在数学方面有天赋的人。许多不认为自己符合这种形象的人只是谴责数学根本不适合他们。然而,认为有些人天生就能做数学而不能做数学的想法是错误的,它阻止了人们努力变得擅长这门学科,即使他们可能喜欢和/或擅长这门学科。

生活中的大多数技能,包括数学技能,就像肌肉:你并不是天生就拥有或缺乏这种技能,而是你的技能随着你练习和完善这种活动而发展。任何人都可以发展一项技能,如果他们足够练习的话。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自安托万·道特里

人类学、社会学、心理学和教育领域的学者已经记录了数学是如何被含蓄地和明确地描绘成一些人能做而一些人不能做的事情,尤其是在小学的数学课上。从童年早期开始,我们就含蓄地、有时明确地了解到,有些人天生擅长数学,但对其他人来说,数学根本不是他们的强项。一些人内化了他们在数学方面的天赋,因此花时间练习足够的时间来发展和完善他们的数学技能;而另一些人认为他们不会数学,因此他们的数学能力停滞不前。但这根本不是真的。

任何人都可以学习和做数学,如果他或她练习数学,培养数学思维。如果你不培养你的数学肌肉,那么它会变得不发达,然后,是的,数学变得更难做。因此,作为一个残酷的讽刺,一个人内心深处认为他或她不会数学可能会变成一个自我实现的预言:他或她放弃发展数学技能,这导致其进一步发展不足。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自迈克·劳伦斯

类似地,我们制造了另一个错误的神话,即精通数学(或数学相关领域,如计算机科学、工程和数据科学)的人通常不具备很强的社交和人际沟通技能。这种刻板印象的根源在于我们如何看待数学和逻辑思维,而不是数学家、计算机科学家或工程师的实际特征。对数学家、计算机科学家和工程师的社交技能进行研究的社会科学家发现,他们在社交和人际交流技能方面与世界上其他人没有明显区别。

定量和定性专业

有些人天生擅长数学,而这些人并不具备强大的社交和人际沟通技能,这种观点导致了定量和定性社会研究在学术和专业背景下的分化。这些态度助长了一种错误的想法,即定量研究和定性研究是不同类型的人的不同技能组合:所谓的定量研究只能由“数学人”完成,而定性研究只能由“人”完成。它们突然变成了独立的专业,尽管社会研究本质上涉及两者。这种分裂不必要地扼杀了对人和社会的真实和全面的理解。

在专业和商业研究背景下,定性和定量研究人员应该相互合作,并最终通过这个过程,慢慢学习彼此的技能。如果做得好,这将激励研究人员培养数学/定量和人际/定性研究技能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自瑞安·雅各布森

它将奖励发展这两种技能并在研究中加以利用的专业研究人员,而不是鼓励研究人员专攻其中一种。它还可以鼓励大学要求对两者进行深入培训,以培养学生成为未来的工人,而不是要求学生在促进一个方向而不是另一个方向的学科中进行选择。

然而,合作只是第一步,它的成功取决于它是否最终导致这些本应独立的技能组合的整合。通常,当定性和定量研究团队一起工作时,他们大多是独立工作的——定性研究人员负责项目的定性方面,定量研究人员负责项目的定量方面——从而加强了他们之间的假定区别。相反,这种合作应该包括定性研究人员通过实践这种方法发展定量研究技能,定量研究人员同样发展定性技能。

结论

任何人都可以发展数学和数据科学技能,如果他们练习的话。人种学和其他定性研究所需的人际交往技巧也是如此。将它们描述为独立的专业——即使它们聚集在一起在一个研究项目中完成各自的专业部分——函数扼杀了它们作为个人的单一工具集的集成,并强化了我们一直教导自己的错误神话,即数据科学是数学、编程或工程人员的,而人种学是“人”的这种分离扼杀了整体的和真实的社会研究,而社会研究不可避免地涉及定性和定量的方法。

您可以在这里找到原始出版物:。其余的文章请随意查看:【http://ethno-data.com/

也感谢《数据科学》杂志发表这篇文章。关于他们工作的更多细节,见

数据科学在绩效营销中的应用

原文:https://towardsdatascience.com/data-science-applications-in-performance-marketing-6043d5aff34e?source=collection_archive---------41-----------------------

行业笔记

那么,你是数据科学家?但我以为你在市场部工作!

每一个。单身。时间。当我告诉别人我是一家旅游巨头市场部的数据科学家时,得到的反应是这样的。最近,我在网上看到很多文章,提到“利用人工智能和人工智能推动基于绩效的最佳投资和销售”。但还不足以揭开数据科学在这一领域的确切应用。AI 和 ML 是非常宽泛的术语,用来解释数据科学如何帮助企业优化营销支出,并在行业中获得竞争优势。

那么,我们来谈谈吧。用一个真实的生活用例——从数据科学的角度理解绩效营销中的业务问题,然后看看“AI 和 ML”的工具如何帮助解决它。希望这将有助于揭开数据科学家在数字绩效营销领域的神秘面纱。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

活动创作者Unsplash 上拍摄的照片

词汇表的快速复习

  • 点击—点击至平台:网站/应用程序/网络应用程序
  • 转化——新用户在平台上做出令人满意的行为,如点击、购买、滚动——任何能为企业带来价值的行为
  • 点击进入——当用户点击某物进入你的网站/应用程序时
  • 点击-用户最后一次点击,将他们带到另一个网站/应用程序
  • 搜索引擎:任何你用来搜索网络的东西。但在这里,我们谈论的主要是谷歌,必应,雅虎,Yandex 等。

商业问题

搜索引擎营销(SEM)是不同企业用来为其产品带来更多流量的绩效营销渠道之一。SEM 广告是你在谷歌、必应、雅虎等搜索引擎上点击回车后,在有机搜索结果之前看到的广告。

大多数 SEM 广告在拍卖系统上工作,你必须对与你的业务相关的每个搜索项出价,如果你在拍卖中赢得了一个位置(通常每个搜索有 2-3 个 SEM 广告,或者更多,取决于你所在的地区和你使用的搜索引擎),那么你将支付与你的出价相等或更低的费用,这取决于搜索引擎遵循哪个拍卖系统

现在,对于一个大企业来说,你可能会处理数百万个你想要竞价的搜索词,但你也想通过竞价来优化这些搜索词(关键词)的利润和流量(访问你的网站/应用程序/网络应用程序)。一种方法是手动设置和更新每个关键词的竞价。另一种方法是查看“人工智能和人工智能”解决方案,根据每个关键词给你的业务带来的价值来帮助你优化投资,加入一些战略性商业决策,以关注流量和投资利润。那么,让我们开始吧!

“人工智能和人工智能”解决方案

让我们从数据科学的角度来看这个业务问题(我能感觉到数据科学家们兴奋得容光焕发)😆

只要在问题中加入人工智能,这个世界就又是阳光和彩虹了!🌈

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

马库斯·温克勒在 Unsplash 上的照片

你有每个关键词的所有成本和点击数据,你有一个清晰的绩效营销商业策略,你所要做的就是使用一个现成的闪亮算法来预测每个关键词给企业带来的价值,并相应地设定你的出价。数百万个关键词。

很简单,对吧?差不多了。😉

让我强调一下,由于多种原因,这是一个相当具有挑战性的问题:

  • 你必须挖掘的数据的庞大规模,推动你走向“大数据”,并需要为你建立整个基础设施,甚至开始模拟关键词值
  • 数据本身的稀疏性给你的模型增加了更多的噪音而不是信号,你必须在如何分割、切割和聚集数据以获得一些合理的数据集方面有真正的创造力
  • 这里的稀疏性有两个方面:由于搜索词的长尾性质(一些搜索词比其他一些不知名的搜索词更受欢迎)和转化率本身——并不是这些 SEM 广告的每次点击都会转化为购买
  • 由于数据的稀疏和易变性质,评估指标很难选择:我们是预测对最近没有点击的关键词出价 0 还是值?如果是这样,在这个膨胀的数据集中,什么样的误差度量是有意义的?
  • 有了可行的数据集、合理的评估指标和某些建模决策,您就可以继续尝试适合用例的各种建模技术,并在缩小到几个之前进行离线比较,以便在测试和控制设置中进行现场测试😄

一旦你满意地()得到了一个模型来预测你的业务的每个关键词的价值,你仍然必须考虑:

  • 拍卖中竞争者出价变化的模型效应?还记得二价拍卖系统吗?
  • 模拟季节性?在不同的地区。不同的夏季或冬季旅行关键词。在日冕时期和平常时期。你明白了。
  • 如何知道自己是否达到了最佳投资水平?
  • 你如何知道你没有错过为平台带来更多用户的机会?

诸如此类。

但是通过利用“人工智能和人工智能”的力量😏—这些问题可以通过制定基于数据的决策和更接近业务目标来逐一解决。

解决方案对业务的影响

不仅仅是阳光和彩虹,这对业务也有明显的影响——通过利用大数据基础设施、数据科学能力、统计测试和分析监控,我们帮助持续优化每年数亿欧元的营销投资,并为用户和业务带来更多价值。

没有什么比令人震惊的数据挑战更能让令人讨厌的数据科学家从床上爬起来,这一挑战对商业和全世界数百万用户产生了如此巨大的影响!

结论

这篇文章中的用例只是数据科学或“人工智能和人工智能”解决方案如何应用于优化营销工作的一个例子。它还有很多令人兴奋的应用:客户终身价值(CLV)建模,特别是针对 SaaS 企业,不同营销渠道的归因模型,销售/流量预测等,这些都伴随着一系列令人兴奋的挑战!😉

所以下次当你听到数据科学和市场营销在一起时,你至少知道一些相关的点!😎

我写关于科技产品、数据科学、市场营销、产品管理和领导力的文章。

  • 如果你想跟随我的学习之旅,你可以在媒体linkedin 上关注我。
  • 如果你想知道我在 medium 上的文章,请使用 medium 的订阅功能!
  • 如果你愿意支持我的写作,你可以请我喝杯咖啡。 ☕️

作为代码的数据科学

原文:https://towardsdatascience.com/data-science-as-code-build-an-ai-project-like-an-it-project-7377fb55df13?source=collection_archive---------55-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Scrum 板,照片由i̇rfan·西姆萨尔Unsplash 上拍摄

像构建 IT 项目一样构建人工智能项目

很多文章都是关于人工智能或数据科学的主题,以及 IT 产业化的问题。也有很多工具来处理这个问题,从几乎没有代码的方法(datataikuRapid MinerKnimesales force Einstein AnalyticsSAP Analytics 等等。)或多或少的成功,以及一些接近代码的工具(凯德罗DVC达格斯特MLflow 等。).

如果所有这些工具都有它们的优势,我真的不太喜欢它们,因为我认为一个人工智能项目首先是一个 IT 项目,意味着代码

作为代码的数据科学

免责声明:在这篇文章中,我不包括云中可用的人工智能托管服务,如 GCP 人工智能平台的工具,如果你对所选的提供商有足够的技能,这些工具可以很容易地投入生产(但有一定的限制)。

如果一个企业把一个 AI 项目当成一个 IT 项目,就会跨越一个心理障碍,应该去神秘化这类项目。事实上,组织可能会将人工智能项目视为一个 IT 项目:当构建一个 web 应用程序时,就建立了一个团队,例如后端开发人员、前端开发人员、产品负责人等。,其中需要提到的技术配置文件来处理这种应用程序的技术部分。对于一个人工智能项目,例如,用数据工程师取代后端开发人员,用数据科学家取代前端开发人员,保留你的产品所有者,你就在这里:除了团队的技能和商业目标,项目的过程遵循相同的模式。例如,如果你使用 Scrum 作为你的敏捷框架进行日常开发和交付,你应该能够在你的 AI 项目中使用它。当然,在人工智能项目中有一些特殊性,可能比*【经典】* IT 项目更不常见。但是即使是*【经典】* IT 项目也有其特殊性:一个基于 PHP 和 JS 技术的在线零售网络应用并不像用 C++编写的物联网嵌入式应用那样涉及相同的团队概况。人工智能项目也是如此。

简单的数据科学架构

在这篇文章中,我将展示一个小型架构和一些代码,给出一个最终的人工智能解决方案投入生产,比方说对于*“中间数据”(不是大数据,意思是少于几 TB)和对于批处理*。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图一。简单的数据科学架构

具有内部架构(图 1。),我们拥有人工智能解决方案所需的一切:

  • 气流分布式架构:专用服务器(使用 Celery executor 的主服务和工作服务)+队列任务服务服务器(Redis)
  • PostgreSQL 数据库存储气流元数据、超集元数据和一些数据项目
  • 用于处理数据集文件(csv、拼花等)的 MinIO 本地对象存储。)和模型持久性
  • 提供一些数据可视化的超集服务器

要运行下面的工作流代码示例,所有这些服务都在同一服务器上的沙盒环境就足够了,这里提供的代码不需要 MinIO 和 Celery,它们分别由本地文件系统和本地执行器代替(如果应用了一些数据治理,例如备份系统或 IT DRP,这对于小型 AI 项目和中级 SLA 来说完全没问题)。

数据科学用例

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Florian OlivoUnsplash 上拍摄的照片

用来说明我的文章的用例是基于法国 EGC 2017 年学术挑战:它由一个预测任务组成,根据法国格勒诺布尔市(左图)的绿地相关数据来确定一棵树是否有缺陷。

数据包含种植年份、树种、地理位置、树木直径或发育阶段等特征。

这里不讨论数据科学部分,因为获得好的性能很简单(仅供参考,挑战使用的分数是准确性和 F 分数)。将使用两个数据集:一个用于训练,一个用于评估性能。

代码部分

为了方便人工智能项目中的代码开发,我将我的东西打包成一个 Python 库, DSBox ,你可以免费使用。

[## vlevorato/dsbox

V. Levorato 制作的包装。该软件包提供:Apache Airflow 的特定操作员,以便管理数据…

github.com](https://github.com/vlevorato/dsbox)

我在这里只集中讨论一揽子计划中的运营部分。这一部分分为两个主要部分:

  • 气流数据运算符
  • 数据单元

基本上,气流操作员是没有国籍的。一旦任务完成,日志分开,没有状态被保留,你不能直接在任务之间传递信息,即使在某些情况下可以使用一些本地机制( XCom 变量入口/出口)。数据操作符简单地覆盖气流基本操作符,包含一个或两个数据单元管理输入和/或输出数据流(图 2。).

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图二。数据运算符结构

在谈论 IT 生产之前,作为一名数据科学家,当我第一次处理一个问题时,我主要是在 Jupyter 笔记本上操作熊猫数据帧。如果我尽全力编写一个分解的、结构化的和解耦的代码,如果我想让它投入生产,我显然不想重写我的所有工作。这就是数据操作符的用途:编写一个函数,将数据帧作为输入参数,并返回一个数据帧。它可以处理其他类型的数据帧(Dask、Vaex),但是为了简单起见,我更喜欢在本文中关注 Pandas 数据帧。

如前所述,数据操作符使用的函数接受一个输入数据帧,进行一些处理(这里是一个非常简单的fillna操作),并将结果作为数据帧返回。为了完成整个工作,我需要首先定义组成输入和输出数据流的数据单元。假设我需要读取一个带有字符“;”的 CSV 文件作为分隔符,并希望将结果写入一个拼花文件:

我现在可以编写一个标准的气流 DAG 程序,它有一个由我的数据操作符定义的任务。

完整的人工智能解决方案

让我们回到我们的树病预测用例。最终导出到 Postgres 数据库的完整工作流代码可以在这里找到。我们的 DAG 如预期的那样被气流调度程序很好地解释(图 3。).

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图三。Airflow UI 中的树病用例工作流

我不会输入最终 DAG 的每个 ML 任务的细节(图 4。),因为你可以在我的 GitHub repo 上探索完整的代码,因为它遵循经典的数据科学模式*(加入、清理、特征工程、训练、预测、测量性能、展示结果)。最重要的是,主要思想是通过数据单元显式声明所有数据集读写操作。是的,我以前做过很多爪哇☕️。所有操作符都不读取和写入数据,其中一些只是读取,例如适合模型的“Model _ learning”任务,并且不写入任何数据,只写入将由“Model _ prediction”*任务使用的模型本身的序列化。为了避免将数据路径耦合到工作流程序,应该使用元数据管理文件或工具来避免硬编码路径。
注:SubDagOperator此处仅用于教学目的,不建议在生产中使用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4。树木病害用例 DAG

数据展示

为了最终确定用例,需要向业务公开数据,而所提出的体系结构恰恰提出了 Apache 超集来实现这一点。我创建了一个非常简单的仪表板(图 5。)的地图,其中测试数据集的每棵树都带有预测的疾病标签(0 或 1 ),地图框布局自动生成一些聚类,这取决于放大的方式。(差的)旭日图给出了预测病树的比例。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图五。通过 Apache 超集实现数据可视化

如果从 IT 的角度来看,让一个人工智能解决方案促进*“走向生产”*并不那么困难。

最后的想法

正如你所看到的,如果从 IT 的角度来处理这个项目,那么拥有一个人工智能解决方案来促进*【走向生产】并不困难,即使在这篇文章中,几个元素被故意搁置(测试、CI/CD、元数据管理等)。).最后,它更多地是关于了解您的组织是否已经能够平稳地交付 it 应用程序。在所有衡量交付效率的指标中,时间(或频率)是其中之一:使用“数据科学即代码”*模式,我能够每周交付一个新版本的产品,而且我在现实生活中也是这样做的。因此,首先,考虑频繁交付(如果需要的话),每月交付一次是一个好的开始。如果你已经这样做了,或者更快,那么恭喜你:你已经知道如何将一个人工智能项目投入生产。

更高级的 AI 架构概念将在以后的文章中讨论,因为这个解决方案不容易扩展,并且有一些限制。

数据科学是绿色的带子

原文:https://towardsdatascience.com/data-science-as-the-green-tape-9687edf5aab9?source=collection_archive---------70-----------------------

数据科学对抗繁文缛节,新冠肺炎的故事。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由马塞尔·霍尔拍摄,来自自由影像

你已经回家两个星期了,你开始意识到你的公司将会关闭一段时间。事实上,他们刚刚给你发了休假通知。

你花了太多的时间帮助孩子适应网上学校,你几乎没有时间意识到你的存款几乎花光了,你的信用卡余额稳步上升。

几周后,情况看起来更糟了。你勇敢地去了一趟商店,开始寻找食物捐赠的选择。

随着压力的增加,当你听到国会刚刚通过一项帮助法案时,你会松一口气。

你花了几天时间试图弄清楚在线申请系统。他们也需要文件,但你不能上传。他们允许你传真,但是谁有传真机?

一封电子邮件通知你,你必须和某人通话,但是电话线路已经忙了好几天了。

最后,您会收到一个电子邮件链接。当你点击它,一个网页告诉你,你的索赔已被拒绝。没有理由。

尽管如此,没有人会接你的电话。

你觉得崩溃了。你不知道你将如何支付你的账单或购买食物。

这是政府服务的一贯方式吗?

对许多人来说,这是过去几个月他们现实的一个版本。**不幸的是,在很多情况下,这种体验是故意的。**幸运的是,我们不必再这样下去了。

别担心,我是政府的,我是来帮忙的!

当前的形势已经提出了许多需要政府计划,尤其是安全网计划的例子。

当我们在新冠肺炎疫情经历接近破纪录的失业率时,立法者颁布了旨在为公民和企业提供救济的计划。在许多情况下,应用程序和需求是复杂的、不清楚的,并且难以导航。

有时这是因为陈旧的基础设施,缺乏人力资源,以及不知情的申请人。在其他情况下,这是因为民选官员特别设置了所谓的行政负担,使得公民参与这些项目的成本更高,难度更大。(当我写这篇文章时,《纽约时报》刚刚发表了一篇关于失业保险的优秀文章。)

失业保险、食品补贴、医疗保险援助和小企业贷款的预期接受者面临着令人困惑的要求、过时的申请流程以及缓慢的处理和裁定工作流程。

你可能会翻着白眼说,“好吧,那只是政府”。但重要的是要关注这样一个事实,其中许多问题本来是可以避免的,而且其中一些问题实际上已经存在,使这些程序难以访问。正如他们所说,繁文缛节“是一种功能,而不是一个缺陷。”

什么是管理负担?

越来越多的文献围绕着项目管理中的行政自由裁量权。

对于政治领导层如何控制大量公共部门,人们有了新的探索,这些探索早已超越了就立法文本进行辩论的阶段,也超越了将程序写入法规和政策手册的阶段。(如果你想要一本关于行政负担的精彩介绍,我推荐莫伊尼汉和赫德医生的书)

简而言之,行政负担是指为获得政府项目或福利而需要付出更多努力的过程、程序或制度。

例如,法律可能要求只有收入达到一定数量的人才有资格享受这种福利。行政负担可能是你必须提供纳税申报单来证明你符合要求。

如果官员想增加行政负担,他们可以要求纳税申报表、工资单、银行账户信息、前雇主的签名和公证信函,以及你的签名证明,证明你说的是实话。

一个常见的理由是,如果没有严格的证据和申请验证标准,太多的人会滥用该系统,浪费纳税人的钱。

在这里列出任何一个政客与“福利女王”或滥用体制的个人的轶事。

另一个理由是,应用程序需求必须确保只有那些最需要好处的人才能真正完成这个过程。这种观点认为,不是“真正需要”的人在遇到困难时会放弃。这节省了纳税人的钱,但也有助于安抚那些不希望自己的税款落入他人之手的人。

我们需要认识到,项目的实施方式通常是基于价值观和政治的。不幸的是,很多时候这是在没有公民参与或透明度的情况下完成的。我们现在看到一个又一个例子,说明这是如何在公民最需要的时候辜负了他们。

数据科学与政治的平衡

无论我们多么渴望“数据驱动的决策”、“基于证据的决策”和“管理科学”,我们都必须考虑到这样一个现实,即在我们的国家——以及许多其他国家——关于采取哪些政策和计划的最终决定是由政治选举产生的领导层做出的基于价值的决定。

再说一次,这与我们的民主并没有内在的冲突,许多人会争辩说,有必要允许民选领导人继续领导行政部门,以确保人民的意志在整个行政阶段得到贯彻。

然而,如果公民不能充分理解这些影响,他们参与这一进程并向当选官员提供见解和反馈的能力就会受到限制。这与普通公民脱离大多数政府内部工作没有什么不同,但由于没有正式的机制或行政负担的强制透明度,这种情况有所增加。

数据科学可以提供更好的方法

数据科学吸引我的一个特点是,许多手动任务既可以自动化,也可以改进。我所说的改进是指变得更有效率、更有效、更准确,并且能够产生更大的影响。

这些都是公共部门关注的完美领域。与私营部门不同的是,在管理项目的方式上,人们一直在寻求效率。

然而,与私营部门不同,也有一些限制和考虑。这些要求包括隐私法、行政法要求、监督和透明度要求。正如我们已经讨论过的,另一个重要的制约因素是公共部门也是一个政治部门。

正如希尔德布兰特所描述的,数据科学在政府部门有两种用途:代码驱动的监管和数据驱动的监管。**在法规驱动的监管中,机构使用数据科学技术,根据法规自动做出决定和裁决,这些法规是通过对福利要求的法律理解而形成的。**例如,一个机构与法律和政策部门合作,设计一个计算机程序,使申请、裁决和福利发放过程自动化。

该程序代码由法律法规以及程序的管理负担决定。就像法律法规被公开辩论一样,这些决定可以也应该以透明的方式呈现给所有利益相关方,并且最好允许反馈。

**在数据驱动的法规上,代码来源于先前的裁决或对法律法规的解释(这里想想无监督的机器学习程序)。**这不仅有可能掩盖决策的先验偏差,也有可能掩盖次级监管行政负担的输入和影响。认识到这两种不同的用途是很重要的,因为它们需要不同的考虑和不同的受众。

数据科学可以成为我们需要的“绿带”

代码驱动的监管是决策的自动化,这些决策是基于规则的,并且可以被编程。这些算法和程序的构建需要更多的设计和前期规划,因为它们必须符合法律和法规,但一旦构建完成,这些系统将接管人类裁判的任务,并更有效地做出更有效的决策。

我喜欢把这看作是政府的“自动化枯燥的东西”,这有可能给我们的政府项目以及政策辩论带来显著的附加值。最终,这将大大提高我们帮助同胞的能力。

有例子表明,政府的目标是尽可能多地消除负担。这就是所谓的绿带。使用数据科学技术的代码驱动的监管可以为程序创建许多绿色的带子。

我们在人口普查中看到了这一点,人口普查正在积极尝试将大部分过程自动化,并使人们尽可能容易地做出回应。这是因为当更大比例的个人参与人口普查时,政府(总体上)受益。

在新冠肺炎,我们也看到了一些很好的例子。例如,财政部试图通过使用以前和当前报税中的行政数据来实现现金援助流程的自动化。他们免除了大部分符合条件的公民填写任何类型的申请,允许政府使用现有的流程和信息实际管理福利。

显然,它并不完美。例如,它仅限于已报税的个人,未收到退款的个人必须填写补充信息,并且是对网站和信息交流的迭代响应和更新。但总的来说,这是大数据满足政府管理计划的可能性的相关示例。

消除行政负担的愿望和目标可以通过在政府中扩大使用数据科学以及政府内部的数据共享来实现。

在我们当前的例子中,如果国税局从社会保障计划中获得他们需要的所有信息,以及州的出生和死亡记录,那么事情会自动化得多,这样他们就不会试图向已故的人支付金钱,并且他们知道家庭是否有新的受抚养人。

其他例子包括失业索赔越来越依赖雇主报告的信息。如果我们可以依靠通过公司工资单和税务记录提供的管理数据,人们可能不需要主动申请。

绿色胶带示例

你收到了雇主的休假通知。当你担心你的下一步时,你收到了一封来自你所在州的失业机构的电子邮件,你的雇主也通知了你。

通知告诉您,您已经自动加入失业保险,等待确认信息的准确性。您点击提供的链接,并在几分钟内确认和更新信息。

过了一会儿,您会收到类似的食品援助和医疗保险援助福利通知,这些通知基于他们从失业中获得的信息以及您的税务信息和家属信息。

幕后的过程是喜欢政府机构的信息,自动裁定资格,并主动请求验证和自动支付。

自动化意味着快速准确地发放福利。由于与政府数据来源的联系,它变得更容易自动化反欺诈的系统。自动化流程解放了客户服务代表,让他们可以为少数有问题的人服务。

政治家(因此也是公民)仍然控制着什么项目存在,有多少福利,资格标准是什么。但是这些决定是公开的。

我们需要记住,数据科学是一种工具。这个工具也可以用于政治目的。它要么带来更多的繁文缛节和行政负担,要么成为一个强大的绿带创造者。

认识到这一点对于公共部门的数据科学家来说非常重要,对于公民来说也很重要,因为我们与民选官员接触并倡导政策和计划。

意识到并大声说出我们希望如何实施这些计划,与一开始就支持或反对该计划一样重要。

在你走之前

在当前的新冠肺炎危机中,有很多方法可以帮上忙,我希望你能这样做。如果你有兴趣志愿帮助公共部门更好地管理项目,我推荐像美国代码这样的组织。

初创公司的数据科学 vs FAANG 公司

原文:https://towardsdatascience.com/data-science-at-a-startup-vs-faang-company-19af9e1d6757?source=collection_archive---------41-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自 Unsplash

介绍

在一个日益科技化的世界,数据科学家和分析师的角色已经出现,他们的职责从优化 Yelp 评级到过滤亚马逊推荐和设计脸书功能。但是数据科学家到底是做什么的呢?这个角色的参数很少被严格定义,但是面向数据的工作已经成为所有技术公司成功的必要条件。

完整的职位描述很大程度上取决于公司的类型。当你从一家初创公司跳槽到一家中型公司或 FAANG(脸书、亚马逊、苹果、网飞、谷歌)时,你可能会发现自己面临一系列不熟悉的新任务。

有兴趣了解更多关于 FAANG 公司的信息吗?看这些公司指南关于 【脸书】亚马逊苹果网飞谷歌

但是什么类型的公司最适合你呢?答案在于认识到这些类型的公司之间的主要差异——工作类型、期望的经验、优先考虑的技能——所有这些都有助于更全面地了解这个角色到底需要什么。

创业公司

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创业公司办公场所从 Unsplash

创业公司是指那些在快节奏的商业世界中迅速开发创新产品或服务的公司。美国小企业管理局(u . s . Small Business Administration)将初创企业正式描述为“通常以技术为导向且具有高增长潜力的企业”;指员工、收入或市场的高增长潜力。这类公司的独特之处主要体现在两个方面:工作的多样性和低员工数量。

工作的多样性

初创公司的数据科学职位涉及方方面面。它需要一个在数据工程、机器学习、分析、数据可视化以及传统上可能不被称为“数据科学”的工作方面拥有知识的百事通

你可能会被要求参加营销会议,或者与工程师密切合作来部署模型和建立工程管道。在创业公司工作的最大好处是获得和发展多种技能,这在大公司很少见。作为一名初创公司的数据科学家,你要做好承担必须“解决”的问题的准备。这导致了大量的自学、自定进度、所有权和独立性。

低人数

因为初创公司的员工较少,随着公司的发展,获得晋升会容易得多。然而,人数少是一把双刃剑。员工较少的小公司通常资金较少,这意味着与大公司相比,平均工资较低。因此,一个常见的职业路径是从一家大公司开始,获得经验并获得更高的薪水,然后过渡到一家初创公司,获得更多样化的经验和职业发展。

尽管在初创公司的职业阶梯可能更容易攀爬,但你不会有那么多工作与生活的平衡。创业的速度越来越快,导致环境不断变化,充满活力。虽然成为一名董事可能在几年内实现,但建立一个成功的企业所需的技能需要更多的时间和毅力来磨练。

FAANG 公司

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来自教育性的 FAANG 公司标志

FAANG 是首字母缩略词,代表表现最好的五家科技公司:脸书、亚马逊、苹果、网飞和谷歌。这些科技巨头在四个主要领域与初创公司不同:效率、流程、责任和职业轨迹

注意:在本节中,我们仅指 FAANG 公司的数据科学家,但是所描述的角色也代表其他拥有大量员工的大型科技公司的数据科学职位。

效率

全球科技超级大国拥有数万名员工,他们都执行各自独特的任务。工作产出被精确地衡量,团队成员被分等级。从这个意义上说,工作生活充满了秩序——任务定义明确,员工向一个老板报告,员工的成功是可以衡量的。与创业职位的流动性相比,这个职位更容易管理和理解。

过程

在一家经验丰富、管理良好的公司,从学术界或以前的工作岗位到这个职位的过渡将是无缝的。训练营是一种常见的资源,为未来的员工提供跨多个部门的必要技能。

责任

平均工作体验将围绕分析和创建仪表板。无论是分析有凝聚力的公司业绩,还是某项功能的成功,数据分析工作都非常简单。

职业轨迹

如前所述,在 FAANG 公司,职业发展通常更难。但是,做个体承包人(IC)可能更容易赚钱;这个角色通常需要深入研究优化和生产产品。职业阶梯与初创公司大不相同,爬到董事位置可能需要几十年的努力。

例如,亚马逊的典型职业阶梯可能是从商业分析师到商业智能工程师到数据科学家再到研究科学家,每个后续角色都有更高的薪酬。每个角色也有四个“阶段”:一级、二级、三级(高级)、四级(主要)。正如在这些公司的层级结构中所看到的,有一条清晰的晋升之路——但与初创公司的类似晋升相比,还有更多的阶段要“完成”。

中型公司

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来自 Unsplash 的办公室

虽然确切的定义因行业和国家而异,但根据经济合作与发展组织的说法,一家中型企业通常拥有 50 至 250 名员工。这种类型的公司可以被视为介于初创公司和 FAANG 公司之间的中间地带。

随着初创公司的快速增长阶段趋于平稳,公司开始感受到市场和竞争对手的压力,中型公司会经历所谓的成长的烦恼在员工方面,在创业自由和 FAANG 结构之间实现了一种平衡。从这个意义上来说,虽然数据科学家的角色旨在适应不同的需求,但同时也有一组明确的职责需要履行。****

最后,当负面因素在一个平等的基础上平衡时,利益也会被分割。中型公司的数据科学家的平均工资将高于初创公司,但低于 FAANG 公司。晋升机会也介于初创公司和 FAANG 之间。虽然不能保证成为公司的主要贡献者;有了耐心和毅力,就有可能壮大一个团队,给公司带来巨大的价值。

摘要

你可能会问,“什么规模的公司最适合我?”

一个人理想的公司规模很大程度上取决于这个人的个人目标和优先事项——是薪酬、晋升还是多样化的体验?或者可能是所有的混合?尽管如此,鉴于数据科学革命在全球范围内持续发展,仍然有一个问题:“我如何找到数据科学工作?”

答案是:查看面试查询!

感谢阅读

原载于 2020 年 7 月 31 日https://www.interviewquery.com*。*

德勤的数据科学

原文:https://towardsdatascience.com/data-science-at-deloitte-133457084a5?source=collection_archive---------26-----------------------

苹果 | 谷歌 | SPOTIFY | 其他

伊恩·斯科特在 TDS 播客

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

背景照片由内森·奎洛兹拍摄

编者按:迈向数据科学播客的“攀登数据科学阶梯”系列由 Jeremie Harris 主持。Jeremie 帮助运营一家名为sharpes minds的数据科学导师初创公司。可以听下面的播客:

不同公司的数据科学看起来可能大相径庭,通常很难就数据科学家到底是什么这个问题达成一致意见。

这就是为什么与在不同组织(从初创公司到企业)应用其技能的数据科学家交流如此重要。了解数据科学家需要执行的各种角色和职责是提炼数据科学本质的唯一方法。

这就是为什么我想和伊恩·斯科特聊天,他是德勤人工智能部门德勤综合咨询的首席科学官。Ian 早在 20 世纪 80 年代末就在研究数据科学,当时他在哈佛大学攻读博士学位时,将统计建模应用于实验高能物理的数据。从那以后,他在许多公司担任战略职务,最近包括德勤,在那里他领导了重要的机器学习和数据科学项目。

我们的谈话集中在明确数据科学到底是什么,以及数据科学家团队如何高效地合作。以下是我最喜欢的一些外卖食品:

  • 虽然大多数数据科学家倾向于使用类似的工具(Python、SQL、pandas、sklearn、jupyter notebooks、可视化工具等),但从高级职责的角度来定义数据科学比工具更有帮助。Ian 将数据科学家视为从数据中提供见解的人,以及可以将这些见解传达给非技术受众的人,而不是“可以建立神经网络的人”或“可以训练堆叠 XGBoost 模型的人”。越来越多的情况下,如果你想被录用,软技能是决定性的优势。
  • 具有高度技术背景的新数据科学家通常认为数据科学问题是技术问题。不幸的是,这远远不是真的:算法不能单独解决数据科学问题——如果它们解决了,那么数据科学就已经是一个完全自动化的职业了。需要商业和产品知识来弄清楚如何设计和选择你的功能,所以如果你是一个在分析或机器学习领域开始职业生涯的技术人员,你能做的最大杠杆作用可能是投入大量时间来了解你的公司如何赚钱,以及它如何为客户提供价值。
  • 咨询工作涉及到从一个客户到另一个客户的速度比一个内部数据科学家通常要快。这意味着加速是至关重要的,因为你需要足够快地开发不同问题的背景以达到有效。许多咨询公司已经发展出缓解这个问题的策略,通过确保具有深厚领域知识的合作伙伴通常能够帮助需要这种专业知识的用例。

你可以在 LinkedIn 上找到伊恩,在 Twitter 上找到德勤,或者在 Twitter 上找到我这里

美国宇航局的数据科学

原文:https://towardsdatascience.com/data-science-at-nasa-dc59bb93292a?source=collection_archive---------42-----------------------

苹果 | 谷歌 | SPOTIFY | 其他

大卫·梅萨在 TDS 播客

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

编者按:迈向数据科学播客的“攀登数据科学阶梯”系列由 Jeremie Harris 主持。Jeremie 帮助运营一家名为sharpes minds的数据科学导师初创公司。可以听下面的播客:

机器学习不是火箭科学,除非你在 NASA 做。如果你碰巧在美国国家航空航天局做数据科学,你和我今天播客的嘉宾大卫·梅萨有共同之处。

大卫在 NASA 的职业生涯中,一直专注于优化 NASA 众多数据库中的信息流,并确保这些数据得到机器学习和分析的利用。他目前的重点是人员分析,包括跟踪美国宇航局员工的技能和能力,以发现那些有能力以新的或意想不到的方式满足该组织已经或可能发展的需求的人。

David 在数据库和建模方面都有丰富的经验。以下是我们谈话中我最喜欢的一些带回家的东西:

  • 如果你想发展一套与众不同的技能,图形数据库是一个很好的关注点。它们出现在生产领域只有大约十年的时间,最近它们得到了更多的关注,因为它们在建模社交媒体和其他网络数据类型方面表现出色。
  • 除非你从事的是以产品为中心的工作(例如为用户建立推荐系统),否则数据科学家的产出通常不是模型或图表,而是教育。具体来说,你将培训那些希望做出数据驱动决策的领导者和管理者——这意味着你必须特别小心,以确保你的图表和模型不会被曲解。在某种程度上,你是一名翻译——这意味着你需要会说两种语言:分析和机器学习的技术语言,以及商业价值的语言。
  • 像 NASA 这样已经存在很长时间的组织,在数据科学方面面临着独特的挑战:他们往往有许多与现代工具和基础设施不兼容的遗留系统和旧数据库。在这种情况下,数据科学家必须考虑的一个关键问题是他们的数据库策略的稳健性:你最不想做的事情就是将你的数据存储在一个十年内都不相关的花哨数据库中。
  • 美国宇航局有数千名员工和数万名承包商。在这种规模下,他们面临的最大挑战之一是确保他们的员工能够解决与其技能和能力相匹配的问题。这就是机器学习和人员分析变得如此重要的地方。

你可以在推特上关注大卫,你也可以在推特上关注我

路透社的数据科学,以及冠状病毒之后的远程工作

原文:https://towardsdatascience.com/data-science-at-reuters-and-the-remote-work-after-the-coronavirus-a827fb8a62a1?source=collection_archive---------79-----------------------

苹果 | 谷歌 | SPOTIFY | 其他

Nick Pogrebnyakov 在 TDS 播客

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

背景图片由肖恩·波洛克拍摄

编者按:迈向数据科学播客的“攀登数据科学阶梯”系列由 Jeremie Harris 主持。Jeremie 帮助运营一家名为sharpes minds的数据科学导师初创公司。可以听下面的播客

尼克·波格雷布尼亚科夫(Nick Pogrebnyakov)是汤森路透(Thomson Reuters)的高级数据科学家,哥本哈根商学院(Copenhagen Business School)的副教授,也是有经验的机器学习开发人员可以找到公司合同工作的市场 Leverness 的创始人。他是一个大忙人,但他同意在今天的 TDS 播客中与我坐下来,谈论他在路透社的日常工作,以及机器学习和数据科学的工作前景。

以下是我从聊天中获得的一些最大收获:

  • 用于评估模型的指标必须具有商业意义,因此在设计它们时,您需要咨询主题专家(或者自己成为一名专家)。顺便说一句,这就是为什么我总是建议人们建立涉及他们很好理解的数据的个人项目(例如,如果你喜欢骑自行车,找一个关于自行车道的数据集)。展示你知道如何将商业问题转化为技术问题是绝对必要的。
  • 根据 Nick 的说法,行业研究角色和传统数据科学角色之间的最大区别是失败风险容忍度和获得结果的可接受时间范围,这两者对研究角色来说都更高。研究角色仍然是快节奏的,但有一种理解是,当你试图挑战极限并实现最先进的结果时,更多的实验和更花哨的策略是可以接受的。
  • 对于大型组织来说,拥有大量尚未开发但极具潜力的数据可供分析是相当常见的。他们面临的最大挑战是,由于他们的规模,进行数据分析的团队通常与管理和增长这些有价值的数据集的团队隔离开来,因此在这种情况下值得发展的一项技能是跨团队沟通的能力,这使您能够注意到关键数据资源何时未被利用。
  • 新型冠状病毒已经改变了企业的招聘方式,现在比以往任何时候都更倾向于远程工作。尚不清楚这一举措是否会是永久性的,但早期迹象表明,长期来看,这一势头可能会朝着这个方向转变。
  • 远程工作肯定有缺点,通常最好是在团队至少见过几次面之后。这就是为什么(当然是在疫情之前)我倾向于建议入门级数据科学家和分析师亲自参加工作,即使至少在他们工作的头几个月有远程工作选项。科技越来越多地使远程连接成为可能,但仍然没有任何东西可以替代面对面的连接。

你可以在 LinkedIn 这里找到尼克,或者在 Twitter 这里找到我。

在亚马逊 EMR 集群上使用 PySpark 实现大规模数据科学

原文:https://towardsdatascience.com/data-science-at-scale-with-pyspark-on-amazon-emr-cluster-622a0f4534ed?source=collection_archive---------39-----------------------

理解大数据

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

王华伦Unsplash 上的照片

你有没有遇到过这样的情况,你的计算机无法处理你试图处理的数据?我知道我有。嗯,所以你可能正在处理一个大数据,它很可能太大太复杂,无法由 CPU 上的一台机器来处理。那么,我们所说的大数据是指什么?多少数据才算大数据?嗯,我们可以无休止地争论这个问题——所以我们不要在这里争论了。相反,我们只能说,你有足够大的数据,而你的计算机正在努力处理它。希望你的机器不会冒出任何火焰或烟雾。玩笑归玩笑,这是一个非常常见的问题,解决它的最常见方法是在分布式计算平台上处理如此大的数据集。Apache Spark 是一个开源的并行计算框架,旨在支持在计算机集群上处理这样的大型数据集。

有一些不同的分布式计算平台提供商可供选择,一些流行的选择包括 Cloudera、Hortonworks、Databricks、Amazon AWS 和 Microsoft Azure。在本文中,我将向您展示如何在 AWS cloud 上为您的需求建立一个分布式计算平台,特别是 Amazon EMR。我们将使用 PySpark,它是 Apache Spark 的 Python API。

在 Amazon EMR 上设置 PySpark 之前,请确保您具备以下条件:

  1. 在 AWS 上创建帐户
  2. 创建 EC2 密钥对
  3. 创建 EC2 安全组

步骤 1:在 AWS 服务中找到 Amazon EMR

现在您有了一个帐户,浏览 AWS 服务并找到 EMR。下面是一个例子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

步骤 2:创建集群

一旦进入 EMR,找到显示“创建集群”的按钮并点击它。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

步骤 3:转到高级选项

点击“创建集群”后,您将看到一个类似的页面,然后点击“转到高级选项”

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

步骤 4:软件和步骤

对于 EMR 版本,我选择 emr-5.31.0,因为这是在本文发布时的最新版本(不是测试版)。然后,我选择 Hadoop 和 Spark,因为这是我需要预安装在集群上来完成标记工作的另外两个软件。一旦选择了这些选项,就没有必要再去搞乱其他选项了,所以请继续操作,然后单击下一步。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第五步:硬件选择

在本节中,您将为集群的主节点和工作节点选择硬件类型。首先,在页面的上部,为实例组配置选择“统一实例组”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后向下滚动,找到如下所示的页面部分,并选择硬件类型。理想情况下,您的工作节点需要合理数量的 CPU 和内存。我选择 m5.xlarge 作为主节点和核心/工作节点,因为它们足以满足我对数据集大小的预处理需求。根据数据集和您想要实现的目标,您可以选择所需的正确的 CPU 和内存量。请注意,我请求了两个核心/工作节点实例。您可以根据手头任务的需要使用这个数量的实例。您还会看到任务节点显示在核心/工作节点下,您在本练习中不需要它们,因此可以忽略。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

完成上述选择后,将其余选项保留为默认值,然后按下一步。

步骤 6:常规集群设置

在此部分中,选择集群的名称。你想取什么名字都可以。这取决于你是否选择日志记录,我通常会关闭它,因为它会存储 S3 的每一个 EMR 日志,这些日志往往会占用 S3 的空间。但是最佳实践建议让它开着。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

将此页面上的其余选项保留为默认设置,然后单击 Next。

步骤 7:配置安全性

这一节很重要!在此部分中,您将配置两件事情:

  1. EC2 密钥对
  2. 安全组

选择 EC2 密钥对和您之前创建的安全组,最后单击“Create cluster”

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,在创建新的 EMR 集群时,您将看到如下页面

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建后,您的群集的状态将从“正在启动”变为“正在等待”,这意味着您的群集现在可以使用了。

步骤 8:在 EMR 上创建一个笔记本实例

现在您需要一个 Jupyter 笔记本来使用 PySpark 与您新创建的集群的主节点一起工作。为此,请单击左侧横幅上的“笔记本”,然后单击“创建笔记本”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在下一页中,为您的笔记本命名,然后单击集群下的“选择”,然后在那里找到并选择您新创建的集群。最后,在 S3 上选择一个与笔记本相关联的位置来读写数据。请记住将“AWS 服务角色”保留为默认值。然后点击“创建笔记本”,瞧。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,您有了一个 Jupyter 笔记本,它连接到新创建的 EMR 集群的主节点,该集群预装了 Hadoop 和 Spark。您已经准备好在 Amazon EMR 集群上使用 PySpark 处理您的大数据。

**警告:**当你完成后,记得停止你的笔记本并终止你的集群!!!否则,您将在您的下一个 AWS 法案中产生巨大的成本!!!

享受使用 Amazon EMR 集群上强大的 Apache Spark 处理大数据的乐趣吧!

如果你觉得这篇文章有用,我很乐意在下面以鼓掌或评论的形式得到你的反馈。让我们在 LinkedIn 上联系

谢谢大家!

Shopify 的数据科学

原文:https://towardsdatascience.com/data-science-at-shopify-7c9d5db479dd?source=collection_archive---------38-----------------------

苹果 | 谷歌 | SPOTIFY | 其他 | 剪辑

卡梅伦·戴维森-皮隆在 TDS 播客

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

编者按:迈向数据科学播客的“攀登数据科学阶梯”系列由 Jeremie Harris 主持。Jeremie 帮助运营一家名为sharpes minds的数据科学导师初创公司。可以听下面的播客:

如果你想知道数据科学的发展方向,了解它的发展方向会有所帮助。很少有人有这样的历史眼光,更少有人将它与对尖端工具的理解结合起来,这暗示了该领域未来可能采取的方向。

幸运的是,其中一位是 Shopify 的前数据科学总监卡梅伦·戴维森-皮隆。自 2012 年以来,卡梅伦一直沉迷于数据科学和估计理论,当时该领域仍处于独立发展阶段。他不仅在技术问题上,而且在招聘和团队建设方面都有很好的高水平观点,他非常友好地加入了我们今天的“走向数据科学”播客。

以下是我们谈话中我最大的收获:

  • 微积分没有许多数据科学家认为的那么重要。计算机现在可以为我们计算导数和梯度,所以这个挑战已经被抽象掉了。当有疑问时,把你的时间投入到理解统计学和概率论上,而不是微积分。
  • 对于数据科学家来说,通过宁滨或粗粒化数据来丢弃数据中的大量信息是相当常见的做法。这方面的一个经典例子是净推介值(NPS ),它的计算方法是让用户从 1 到 10 给你的产品打分,把所有 8 到 10 的分数都算为正,把所有< 5 的分数都算为负,然后把这些分数平均出来。虽然有时有理由这样做,但这可能会浪费有价值的信息(例如,在 NPS 的情况下,用户提供的 7 分和 8 分之间的差异真的有那么大吗?).
  • 对于分析团队来说,在公司内部建立信任非常重要。他们的工作是帮助其他员工访问他们需要的数据或见解,这要求那些其他员工能够舒服地诚实和明确地描述他们的问题和需求。建立信任是第一步。
  • 随着工具的发展,数据科学家可以花更少的时间在团队工作上,人们越来越希望这些数据科学家能够沿着“商业价值”轴做出贡献。这是产品和商业直觉在数据科学中越来越受关注的一个重要原因。
  • 面试伴随着大量的噪音,对候选人和面试官都是如此。例如,卡梅伦从自己的经历中指出,在午餐前面试的候选人可能会因面试官的低血糖而遭受折磨,并得到更严厉的评价。同样,候选人可能不得不在现场漫长的一天结束时面试一位首席技术官,此时正是疲劳最严重的时候。因为这个过程很嘈杂,所以重要的是不要因为一次糟糕的面试而自责:这完全有可能是你受到了一次纯粹随机的打击!

你可以在推特上关注卡梅隆,你也可以在推特上关注我

夹子

2020 年必读的数据科学书籍

原文:https://towardsdatascience.com/data-science-books-you-must-read-in-2020-1f30daace1cb?source=collection_archive---------4-----------------------

看看吧,你为什么要读它们?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Rafael Cosquiere 摄于 Pexels

“我们正在进入一个数据可能比软件更重要的新世界。”——
——蒂姆·奥雷利

数据科学产业的应用正在快速增长,并提供了一个非常有前途的未来。为了能够进入这一领域,一个人必须具备各种概念技术,并对工作可用的各种工具有足够的经验。

有数以百计的资源,包括网上课程、网站、视频和书籍,可以帮助你掌握这门学科,因为乍一看这可能会让人望而生畏。在整篇文章中,我们将提到一些学习数据科学和相关技术的最佳书籍,它们将使学习变得轻而易举。

数据科学是让数据变得有用的学科

数据科学书籍

在本节中,我们将重点介绍各种数据科学书籍,涵盖所有技能水平,以巩固您的领域知识。这些书将被证明对帮助你学习这项新技能至关重要,它们会让你深入了解各种算法概念、方法,以及支持的编程语言及其相关包以充分利用它们。

免责声明: 本帖无附属链接。这篇文章仅供参考。

1.Python 机器学习简介:数据科学家指南

**作者:**安德烈亚斯·c·穆勒和萨拉·圭多

出版商 —奥赖利

**难度等级:**初学者

在这里获取图书——亚马逊

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

《用 Python 进行机器学习入门》一书的封面

机器学习是一种新的编程范式,一种向计算机传达你的愿望的新方式。它令人兴奋,因为它允许你自动化不可言喻的事物。

这本书以适合初学者的风格涵盖了各种各样的机器学习主题,向他们展示了如何轻松地开始构建自己的 机器学习解决方案 。它还详细介绍了学习和应用机器学习来解决常见问题的最佳实践,而无需学习高级数学课程。

这本介绍性的书涵盖了基础概念,以及算法和一些用于模型评估的高级方法和 scikit-learn,这是一个经过验证和测试的 Python 工具,它补充了这本书,提供了更多关于机器学习实现的实践经验。

2. R 代表数据科学

**作者:**哈德利·威克姆,加勒特·格罗勒蒙德

出版商 —奥赖利

**难度等级:**初学者

在这里获取图书——亚马逊

在线看书——https://r4ds.had.co.nz/

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“数据科学的 R”一书的封面

R 是理解大量孤立数据的重要工具,本书旨在指导读者如何在数据科学中充分利用 R。本书涵盖的主题遵循数据科学的核心步骤,包括使用 R 编程语言对数据进行导入、整理、转换、可视化和建模。

这本书要求 R 的先验知识水平,它的包如 tidyverse 伴随着一定程度的足够的数字素养。虽然它没有涵盖数据科学领域的全部,但作者提供了大量额外的资源,可以广泛涵盖所包含的主题。

[## 数据科学应该选择 R 的 6 个理由?

最近更新由克莱尔 d。人工智能创新的加速增长已经导致几个…

blog.digitalogy.co](https://blog.digitalogy.co/r-for-data-science/)

3.裸统计

**作者:**查尔斯·惠兰

出版商 — W. W .诺顿&公司;再版

**难度等级:**初学者

在这里获取图书——亚马逊

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

《赤裸裸的统计》一书的封面

这本书以数据科学为主题,通过将它们与真实世界的场景联系起来,解释了这个主题的核心概念。这本书旨在以喜剧风格传递来自统计世界的令人难以置信的内容,同时激励读者更深入地探究这个主题。

作者涉及的一些概念包括推理、回归分析、中心极限定理、反向因果关系、正发表偏倚。虽然它需要一定程度的统计经验,但它成功地以一种非常独特的方式传递了预期的知识。

“有统计数据很容易撒谎,没有统计数据就很难说真话。”
查尔斯·惠兰

也看看这个—

[## 2020 年必读的机器学习书籍

看看吧,你为什么要读它们?

towardsdatascience.com](/machine-learning-books-you-must-read-in-2020-d6e0620b34d7)

4.数据科学家实用统计

**作者:**安德鲁·布鲁斯、彼得·布鲁斯和彼得·格德克

出版商 —奥赖利

**难度等级:**中级

在这里获取图书——亚马逊

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

《数据科学家实用统计学》的封面

这本书最好是针对以前有编程语言和统计学经验的数据科学专业人士,以一种方便的方式介绍了这个主题的基本概念,以方便学习。它还强调了来自数据科学和统计世界的各种概念及其目的的有用性。

面向数据科学家的实用统计学通过将核心概念与过去和最近几年与数据科学行业相关的实例联系起来,解释了该主题的核心概念。尽管它涵盖了大部分的概念,如果不是全部的话,这本书还是推荐额外的阅读。

[## 2020 年的数据科学趋势

新十年的关键数据科学趋势

towardsdatascience.com](/data-science-trends-for-2020-9b2ee27af499)

5.用于数据分析的 Python

**作者:**韦斯·麦金尼

出版商 —奥赖利

**难度等级:**中级

在这里获得图书——亚马逊

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

《用于数据分析的 Python》一书的封面

正如这本书的标题所暗示的,它主要关注 Python 数据分析的实际实现,主要分析以各种形式存储的结构化数据。它详细介绍了 Python 的作用、用于数据分析相关任务的大量库,以及它为数据科学带来的好处。

本书涵盖的基本 Python 库包括 NumPy、pandas、matplotlib、IPython 和 SciPy 。作者从 IPython 开始,并包括了其余的库。

它还涵盖了 Python 编程的基础知识,作为对几乎没有 Python 编程经验的读者的快速复习。

“无为而为;不费力地工作。把小的看成大的,把少的看成多的。在困难还容易的时候去面对它;通过一系列小行动完成大任务。—老子"
韦斯·麦金尼

6.深度学习

作者:伊恩·古德菲勒、约舒阿·本吉奥和亚伦·库维尔

出版商 —麻省理工学院出版社

**难度等级:**初学者

在这里获取图书——亚马逊

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

《深度学习》一书的封面

主要面向学习机器学习、深度学习和人工智能的大学生以及那些希望快速学习机器学习的程序员。这本书涵盖了机器学习的所有介绍性章节,包括数学章节深度网络,涵盖了深度学习和深度生成模型。作者提到了许多见解,以理解什么是机器学习,以及如何实现它来解决现代问题。

“由该领域的三位专家撰写,深度学习是关于该主题的唯一一本综合书籍”

⁠——特斯拉和 SpaceX 的联合创始人兼首席执行官埃隆·马斯克

[## 面向所有人的顶级谷歌人工智能工具

使用谷歌人工智能中心将想法变为现实

towardsdatascience.com](/top-google-ai-tools-for-everyone-60346ab7e08)

7.使用 Scikit-Learn 和 TensorFlow 进行机器实践学习

**作者:**作者:奥雷连·盖伦

发行方 —奥莱利传媒

**难度等级:**初学者

在这里获取图书——亚马逊

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

《使用 Scikit-Learn 和 TensorFlow 进行机器学习》一书的封面

如果你对机器学习一无所知,这本书将是你的正确选择,因为它承担了为你提供正确的工具、概念、知识和理解机器学习的心态的任务。作者介绍了该主题中包含的各种技术,并借助许多生产就绪工具和环境进行了解释,如 Python 的 TensorFlow、Scikit-Learn 和 Keras

这本书的目的是通过广泛的例子提供更多的实践经验,同时减少对理论内容的关注,并鼓励读者更深入地研究实际实施

“在机器学习中,这被称为过度拟合:这意味着模型在训练数据上表现良好,但不能很好地概括。”
――奥雷连·盖伦

看看这本书的第二版—

8.统计学习导论

**作者:**加雷斯·詹姆斯,丹妮拉·威滕,特雷弗·哈斯蒂,罗伯特·蒂布拉尼

出版商 —施普林格

**难度等级:**初学者

在这里获取图书——亚马逊

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

《统计学习导论》的封面

这本书作为统计学习的指南,本质上转化为一套建模和理解数据的工具。这本书涵盖了这门学科中的各种技术,更强调几个概念的实际应用,而不是它的数学实现。

它通过包含 R 编程语言,以一种更加简单和实用的方式成功地交付了几个复杂的主题,从而促进了学习过程。要充分利用这本书,确实需要理解统计术语和概念。

9. Python 数据科学手册

作者:杰克·范德普拉斯

发行方 —奥莱利传媒

**难度等级:**中级

在这里获取图书——亚马逊

https://github.com/jakevdp/PythonDataScienceHandbookGit Hub—

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

《Python 数据科学手册》的封面

这本方便的书背后的目标是呈现数据科学中的各种概念,而不是作为一个全新的领域,而仅仅是作为一项新的技能。根据作者的说法,数据科学可以被最好地解释为某个领域的黑客技能实质性专业知识与该领域的数学和统计知识之间的交集。

本书假设读者具有创建和管理 Python 程序流的基本 Python 经验,因此,主要侧重于讲授 Python 的实现及其在数据科学中值得注意的库栈。

10.从零开始的数据科学

**作者:**乔尔·格鲁什

出版商 —奥莱利传媒

**难度等级:**初学者

在这里获取图书——亚马逊

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

《从头开始的数据科学》一书的封面

如果你很想知道各种算法库、框架和其他工具包在数据科学中是如何工作的,那么这是一本适合你的书。这本书不是先教你数据科学的核心方面,而是走相反的路线,从使数据科学成为可能的工具的基础开始,逐渐触及数据科学的各种概念。这本书的先决条件包括事先了解数学和编程技能。

“只需运行:pip 安装 ipython,然后在互联网上搜索解决方案,无论是什么原因引起的神秘错误信息。”
乔尔·格鲁什

[## 数据科学家的最佳数据科学工具

数据科学工具,使任务可以实现

towardsdatascience.com](/best-data-science-tools-for-data-scientists-75be64144a88)

11.想想统计数据

**作者:**艾伦·b·唐尼

发行方 —奥莱利传媒

**难度等级:**初学者

在这里获取图书——亚马逊

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“思考统计”这本书的封面

Think Stats 为探索性数据分析提供了实用工具的介绍,并遵循作者的数据处理风格。这本书遵循计算方法,而不是传统的数学方法,主要原因是鼓励读者使用 Python 代码以获得更好的可读性和清晰度。

这本书背后的想法是提出一种基于项目的方法,读者可以选择一个统计问题,一个数据集,并将他们学到的每一种技术应用于该数据集。

作者还提到了许多免费的外部参考资料,例如维基百科。

12.使用 Python 进行深度学习

**作者:**弗朗索瓦·乔莱

出版商 —曼宁出版公司

**难度:**专家

在这里获取图书——亚马逊

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

《用 Python 进行深度学习》一书的封面

Python 深度学习讲述了通过使用 Python 和它的库 Keras 让机器学习和深度学习对广大受众可用。这本书涵盖了人工智能、机器学习和深度学习的基本背景,然后聚焦于 Keras 对深度学习的实现。

然后作者继续讨论深度学习的实际应用及其相关概念,并给出了大量代码示例。对于大多数有技术能力的读者来说,比如数据科学家、深度学习专家和研究生,这将是一个合适的选择,因为它需要精通 Python。

“不是所有的问题都能解决;仅仅因为你收集了输入 X 和目标 Y 的例子,并不意味着 X 包含了足够的信息来预测 Y。例如,如果你试图根据最近的价格历史来预测股票市场上的股票走势,你不太可能成功,因为价格历史不包含太多的预测信息。”

―弗朗索瓦·乔莱,

更多可供阅读的数据科学书籍—

  • 模式识别和机器学习
  • 实用数据科学与 R
  • Python 机器学习示例
  • 想想 Python
  • 统计学习的要素
  • 想想贝叶斯——贝叶斯统计变得简单了
  • 设计数据密集型应用程序

结论

数据科学是一个庞大的行业,包含大量强大而高效的工具,用于执行各种数据任务。一个有抱负的数据科学家应该知道如何使用这些工具来处理数据,以实现性能驱动的结果。通过吸引您对一些最好的数据科学书籍的关注,我们希望鼓励任何正在寻找数据科学和机器学习切入点的人。毫无疑问,这些书是最好的书籍之一,它们不仅能增强你的数学知识,还能增强你对贯穿全文的几种编程语言和库的了解。

注: 为了消除各种各样的问题,我想提醒你一个事实,这篇文章仅代表我想分享的个人观点,你有权不同意它。

更多有趣的阅读—

我希望这篇文章对你有用!以下是一些有趣的读物,希望你也喜欢

[## 2020 年你必须使用的最好的 Python IDEs 和代码编辑器

具有显著特性的顶级 Python IDEs 和代码编辑器

towardsdatascience.com](/best-python-ides-and-code-editors-you-must-use-in-2020-2303a53db24) [## Python vs. Node。JS:哪个最适合你的项目?

使用一组预定义的因素对 Python 和 Node.js 进行详细比较

towardsdatascience.com](/python-vs-node-js-which-one-is-best-for-your-project-e98f2c63f020) [## 10 家使用 Python 的世界级公司

Python 正被 IT 界的一些巨头积极使用

towardsdatascience.com](/10-world-class-companies-using-python-26cde24919a8) [## 2020 年最佳数据科学博客

最值得信赖和享有盛誉的来源,让您了解数据科学领域的最新动态。

towardsdatascience.com](/best-data-science-blogs-to-follow-in-2020-d03044169eb4) [## 用于自然语言处理的 Python 库

用于自然语言处理的流行 python 库概述

towardsdatascience.com](/python-libraries-for-natural-language-processing-be0e5a35dd64)

关于作者

克莱尔 D 。在digital ogy是一个内容制作者和营销人员。这是一个技术采购和定制匹配市场,根据全球各地的特定需求,将人们与预先筛选的&顶尖开发人员和设计师联系起来。连接DigitalogyonLinkedinTwitterinsta gram**

数据科学训练营—他们能做什么,不能做什么

原文:https://towardsdatascience.com/data-science-bootcamps-what-they-can-and-cant-do-9780699a488d?source=collection_archive---------37-----------------------

经常有人问我,数据科学训练营(或者非全日制硕士项目,我把它归为同一类)是否值得。在我权衡的时候,先把我的证书拿出来:我已经为几个硕士项目和一个在线训练营教过课,并且在我向数据科学转型时也参加过一次训练营。

在过去的日子里,我已经写了一些关于训练营的想法。问题是,这是一个很难给出一个统一答案的问题。每个人的技能不同,目标也不同。然而,我认为有一件事是相当不变的:训练营往往对那些没有高度技术背景的人承诺过多。如果你还没有达到目标,训练营不会让你成为数据科学家。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由韦斯·希克斯Unsplash 上拍摄

不同的起点

让我给处于数据科学学习不同阶段的人提供一些关于训练营的想法:

从头开始:我就直说了吧。如果你几乎没有编程、数据或统计方面的经验,6 个月的兼职课程不会让你成为数据科学家。你可能会学到一些很酷的技能,如果你投入工作,你可能会得到一个入门级的数据分析师职位。数据科学职位通常被认为是相当高级的,或者至少是高技能的。一个短期的项目根本不足以让你在基本技能上达到预期的能力水平。

学术背景:我认为那些来自量化学术背景的人是训练营的最佳候选人(坦白说,这是我的背景)。大多数定量学者都有过得去的编码技能,了解统计学,并有处理和讲述数据故事的经验。训练营让我们体验了工具的广度,一些使用数据科学中一些流行工具的实践,以及一些编码实践。一般来说,我认为有这种背景的人最有可能在训练营后获得数据科学职位。作为额外的奖励,像 Data Incubator 和 Insight 这样的项目对来自学术背景的有前途的候选人是免费的。也就是说,许多人在不需要训练营的情况下就完成了转变,所以尽管我认为它们可能是有用的,但首先在没有训练营的情况下,了解一下你在就业市场上的前景可能是值得的。

软件工程背景:老实说,我没看到多少软件工程师参加训练营。我认为这是有道理的——在大多数情况下,如果你已经在技术领域工作,你会知道这个空间和转变没有来自学术界的那么大。你可能拥有从所有伟大的免费在线资源中学习的技能。对拥有严肃编码技能的数据科学家有着巨大的需求,通常走这条路线的人最终会获得“机器学习工程师”的头衔。也就是说,对于一个希望获得一些数据科学背景并希望更多结构化课程的软件工程师来说,我认为训练营可能是一个很好的方式,因为他们会提供他们可能缺乏的统计和机器学习背景,但这肯定不是必要的。

数据分析师:训练营当然可以“提升”你的数据技能。根据你现在的技能,这可能是一个很好的方式,可以让你努力进入更高级的数据分析师职位,或者尝试跃升为数据科学家。但这在很大程度上取决于你目前的角色需要什么——如果你根本没有使用过 Python,而且大多数情况下只是使用 Tableau,训练营会向你介绍一些东西,但不太可能足以让你跃升为数据科学家。如果没有机会使用机器学习,它也可能对你目前的角色没有用处。如果你在目前的职位中发现了可以使用数据科学技能的地方,而唯一阻碍你的是缺乏自己的技能,那么兼职训练营可能会非常有用。

新兵训练营和其他兼职项目非常有助于向你介绍各种各样的数据科学工具。它们本身不足以让你成为专家,它们也不具有变革性。如果你只是对数据科学好奇,有大量的在线学习资源。如果你想做一些更有针对性的事情,并且没有严重的财务限制,训练营是一个合理的选择。只是不要期望训练营能在几个月内让你从 0 到 6 位数的数据科学家。

数据科学—使用 Microsoft Power BI 为 SQL 关系数据构建网络图

原文:https://towardsdatascience.com/data-science-building-a-network-graph-in-power-bi-using-sql-server-a1b4c9b7610a?source=collection_archive---------23-----------------------

讨论如何为存储在 SQL Server 中的销售数据构建网络图,以可视化销售模式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

网络理论是一种最先进的理论,用于表示实体之间的复杂关系。一些有趣的应用是疫情扩散分析(如 COVID19)、社会网络分析(如脸书网络)、世界贸易分析等…网络图建立在网络理论的基础上,可以为讲故事提供动态的、有时令人兴奋的图表。

本文将讨论如何为存储在 SQL Server 中的 SQL 关系数据构建网络图。想要从事一些数据科学项目的人(例如软件工程师、数据工程师、数据库管理员)可能会对它感兴趣。

以上是自行车相关产品销售数据的最终网络图。注意,为了简单起见,我没有使用所有的数据,为了演示的目的,我没有使用更清晰的视图。

从这个图表中,很容易回答公司高管的常见问题:

  • 卖什么产品?
    图中所有的绿色节点,包括旅行车、公路车、山地车、自行车架。
  • 产品销售到哪里?
    图中的所有灰色节点,包括加利福尼亚州、新英格兰州、新墨西哥州、科罗拉多州、内华达州和犹他州。
  • 卖多少产品或者产品卖多少钱?
    大部分到加州和新英格兰,部分到新墨西哥州和科罗拉多州,少量到犹他州和内华达州。
  • 产品和客户的地理位置之间有什么关联吗?
    是的!例如,销售到新英格兰的公路自行车比自行车架多得多,公路自行车的链接更粗就说明了这一点。
  • 对于一个全新的产品,它应该在哪里营销和销售?
    例如,一辆旅行自行车可以行销到加利福尼亚、新英格兰、新墨西哥和科罗拉多!

现在,我们如何在微软 Power BI 中构建这样的东西呢?

先决条件

  • Microsoft 帐户。可以免费注册。
  • 超级商务智能台式机。你可以从这个微软链接免费下载。
  • SQL Server。你可以从这个微软链接免费下载。
  • Microsoft 示例数据库“AdventureWorksLT2016”

示例 Adventure Works 数据库中有什么?

  • 销售系统的虚假 CMS 数据
  • 产品和产品类别
  • 客户及其地址
  • 销售订单

**步骤 1 —打开 Power BI Desktop 并创建一个新工作簿。**在可视化面板中,点击三个点并选择“获取更多视觉效果”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

**步骤 2 —搜索“网络”,安装网络导航图,这是微软提供的自定义可视化工具。**安装后,网络导航器应显示在可视化列表中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

**步骤 3 —现在让我们通过将工作簿连接到 SQL Server 上的 AdventureWorks 数据库来获取示例数据。**注意,当要求我们选择表格时,我们只需要数据库中的几个表格。如果将来需要,您可以添加更多表格。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

单击左侧边栏上的模型图图标,确认数据模型。请注意,Power BI 将识别外键和表之间的关系。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

**第 4 步—(可选)为用户界面添加一个新列。**在左侧栏中,导航到数据图标,然后选择客户表,并单击新列。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

在编辑栏中,输入以下文本,为所有记录设置列名和常数值。

PowerBiNodeColor = "#01B1AA "

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

步骤 5——点击网络导航图标,创建网络图。在我们填写所需属性之前,它将为空。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

**第 6 步—添加我们想要探索的数据字段。**在本次演示中,我们将使用:

  • 列产品类别。作为源节点的名称
  • 列地址。StateProvince 作为目标节点
  • SalesOrderDetail 列 OrderQty 作为边权重,它确定边/链接的厚度。
  • SalesOrderDetail 列 OrderQty 作为目标节点权重,它决定了状态节点的大小。
  • 列 PowerBiNodeColor 作为源节点颜色,这是我们在上一步中创建的绿色。

第六步——在“画笔”部分给网络图一些爱和格式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

以下是我为此演示更新的设置列表:

  • 在“布局”面板中将“最大节点大小”设置为 30,以便节点/气泡不会变得太大
  • 打开布局面板中的标签。
  • 将标题值设置为“Adventure Works”。

**恭喜恭喜!**现在,您有了一个全新的网络图来展示如何以一种非常吸引人的格式可视化 SQL 关系数据!

本文中使用的 Power BI 工作簿发布在这个 GitHub 链接上。请随意使用它作为您下一个数据科学项目的开始!

感谢您的阅读!

数据科学术语:数据插补

原文:https://towardsdatascience.com/data-science-buzzwords-data-imputation-da093abf9c4d?source=collection_archive---------28-----------------------

数据科学有很多词汇需要学习。这是一个不到 5 分钟的数据插补快速总结。

它是什么,我们为什么需要它?

数据插补是指处理数据集中缺失的数据。我们需要它,因为有些算法不接受空值,还因为如果我们填充数据,我们可以建立更准确的预测模型。我们将在本文中探讨如何很好地填充这些数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

苏阿德·卡玛丁在 Unsplash 上拍摄的照片

需要注意什么

首先,我们需要看一下我们的数据——缺失数据有趋势吗?

缺失数据主要有 3 类:

完全随机缺失(MCAR) —这是唯一可以验证的缺失数据类型。当数据是 MCAR 时,这意味着缺失的数据点绝对没有模式。这可以通过将数据随机分为已完成的行和缺少数据的行来检查。如果两个子数据集的特征不同,则意味着您的数据是 MCAR。

*随机缺失(MAR)——*当数据被标记时,意味着数据缺失是由于可以观察到的系统性原因,但与缺失数据本身无关。例如,在包含两列(年龄和性别)的数据集中,通过计算每一列的缺失值,您可能会注意到男性年龄中缺失的数据比女性多。

非随机缺失(MNAR) —当数据是 MNAR 时,这是因为在另一个因素和缺失数据之间存在关系。例如,如果你有一个调查,问他们的第一个宠物的名字,它可能会被那些从未养过宠物的人留为空白。有一个系统性的原因是数据缺失。

那么我们能对丢失的数据做些什么呢?

我将概述几种处理缺失数据的常用方法。还有很多,但这只是对你能做的一些事情的一个洞察。

删除丢失的数据 —根据丢失的数据量,我们可以忽略丢失数据的行。如果当您有 10,000 行时,这只是数据的一小部分,也许是百分之几,这可能是最简单的选择,不会对您的结果产生太大影响。

替换为数据的平均值 —这个有很多变化,取决于你在数据中找到什么。首先,我们有三种类型的平均值:均值、中值和众数。对于非数字数据,您当然不能使用均值或中值,因此您唯一的选择是用模式填充缺失的数据。然而,对于数字数据,所有三个平均值都是可能的。使用这些方法时需要注意的是,您是在人为地减少数据的方差,这可能会影响根据数据训练的模型在新数据上的表现。您选择的平均值取决于您的数据集,例如,如果缺少数据的列在其分布中有很大的偏差,您可以选择中位数。

这种方法可以用于整个数据集,也可以将其分解。例如,如果您试图用平均值填充年龄列,您可以取所有相关数据的平均值并填充空值,或者您可以查看另一列,假设您有一个性别列,并且您意识到男性的平均年龄为 25 岁,而女性的平均年龄为 35 岁,因此选择用两种性别各自计算的平均值来填充缺失的年龄值。但是请注意,您对数据集进行的分解越多,计算的开销就越大,花费的时间也可能越长。

回归 —您可以使用回归技术,根据数据中的其他变量来预测空值。回归有许多不同的类型,这取决于数据的类型以及它们之间的关系。理论上,你可以使用任何合适的回归算法来估算你的数据。这是另一种计算开销很大的方法,具体取决于数据量和回归算法的复杂程度。

还要考虑别的事情

M 多重插补 —为了补偿输入数据的潜在偏差,可以在计算值中引入一些自然变化。基于数据的分布计算变化;该算法可以估计所创建的值应该有多少变化。这是一种计算开销很大的方法,但值得考虑,尤其是如果您的数据来自一个可能会有自然变化的来源。

要点: 确保只对训练数据进行计算,这样就不会有数据泄露。如果你用你的测试/验证数据进行计算,你可能会发现你的算法非常准确,但当你得到全新的数据时,你会得到非常低的准确性。

带回家的信息

填充缺失数据的方法有很多种,根据数据集和缺失的数据量,您选择的方法会有所不同。你的插补算法越复杂,花费的时间就越长。在你估算的复杂性和它给你的回报之间进行权衡是很重要的。

数据科学术语:特征工程

原文:https://towardsdatascience.com/data-science-buzzwords-feature-engineering-eb31b02fce0?source=collection_archive---------34-----------------------

数据科学有很多词汇需要学习,这里有一个不到 5 分钟的特性工程的快速总结。

特征工程是这样一个术语,从表面上看,它的意思和它所说的完全一样:你想从你已有的数据中重构或创造一些东西。

好吧,好吧…但是在现实生活中,当你坐在数据集前,不知道该做什么时,这实际上意味着什么呢?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由来自 Pixabay 的 sergei akulich 拍摄

特征工程是由什么组成的?

该术语包含各种方法,每种方法都有与其相关联的各种子方法。我将只介绍一些主要的方法,让你对特征工程包含的东西有一个概念,并对广泛使用的方法有一些指示。

编码——我认为这是特征工程最简单和最常用的方面之一。事实上,早在我意识到特征工程作为一个整体存在之前,我就在做这件事了!编码用于将分类数据转换成数字数据。这是必要的,因为计算算法处理的是数字,而不是文字。一些更简单的方法是标签编码器一个热编码器

要素生成-要素生成或要素构建是指从数据中已经获得的要素手动创建新要素。这可能只是简单地将两列连接在一起,或者需要更多的代码来计算在某个时间段内有多少条目出现在有问题的条目之前。再说一次,你可能会做这样的事情,只是因为它让你的生活变得更轻松。特征生成有几个好处:

  1. 它可以给你一列数据,说明两个是做什么的。与编码结合使用,您可以更详细地查看数据的细节,例如,如果您有一个汽车制造商列和一个汽车颜色列,您可以将它们组合起来,得到一个制造商颜色列。这可能会减少你最终模型的特征数量(耶效率!)而不会丢失数据。
  2. 通过查看您的数据,您可以立即获得信息,并使用这些信息来简化数据,这样您就可以更清楚地使用例如自事件发生以来的时间计算或先前条目的数量。
  3. 您可以简化您的数据,例如,如果您的数据中有超过 100 个不同的国家,其中许多只出现一次或两次,您可能希望创建一个新的要素来给出相关的洲。这样,您就有了更少类别的更多实例,这对您的分析可能更有意义。

特征提取 —这是直接从原始数据自动创建特征的地方。通常用于图像、音频或文本数据(尽管当有大量数字数据时,它也可以用于数字数据!)您使用特征提取来降低用于分析的数据的复杂性,从而降低数据的维度,这允许您的模型更快地运行。常用的方法是主成分分析无监督聚类算法。上面列表中的第 2 点和第 3 点也与此相关。

特性选择——这是特性工程的一个非常重要的部分:一旦你有了一大堆新特性,你需要找出哪些对你真正有用。现在,您可以通过一些尝试和错误来做到这一点,但使用内置函数来做到这一点可能更有效。一个简单的例子是单变量特征选择,例如 SelectKBest ,它选择与因变量关系最密切的给定数量的特征(您可以决定有多少)。您可以使用许多选项来确保对数据使用正确的算法。

带回家的信息

有很多方法可以将数据转换成计算机满意的格式,简化数据,甚至创建新的变量进行分析。没有“正确的方法”,许多方法可以是一种艺术形式,取决于经验。不同的解决方案对不同的数据集更有效。

有用的资源

我在整篇文章中都链接了 Python 文档,因此您可以更详细地查看感兴趣的部分,也许是为了在您的代码中实现这些方法。

ka ggle——特色工程短训班。这门课程不适合编程或机器学习的初学者。它简要地涵盖了特征工程的 3 个方面。就我个人而言,我不认为这是最好的细节和深入学习的课程,但如果你想涉足这个领域,这是一个很好的起点。

优化深度学习神经网络

原文:https://towardsdatascience.com/data-science-by-hazy-4c2f2352f3a0?source=collection_archive---------43-----------------------

Hazy 的数据科学

深度学习神经网络有一系列令人眼花缭乱的元参数。了解如何将 GANs 应用于神经网络优化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源: WOCinTech ,知识共享

道格拉斯·亚当斯在《银河系漫游指南》中曾断言:“空间很大。你不会相信它有多么巨大,令人难以置信的大。我的意思是,你可能认为去药店的路很长,但那对太空来说只是微不足道。”

神经网络也很大。T2 微软图灵自然语言生成或 T-NLG 网络有大约 190 亿个参数。以大多数人的标准来看,这已经很大了。

然而,我们关心的不仅仅是参数的数量,还有元参数。研究生成对抗网络(GAN)的数据科学家通常必须运行数百万次实验,以优化他们的神经网络。在这篇文章中,我们解释了在 Hazy,我们如何将自动元参数优化注入到我们的 GANs 中,然后让您在较少挫折的情况下训练更好的模型。

调整元参数:成为机器学习工程师的尝试

深度学习神经网络有一系列令人眼花缭乱的元参数。

元参数是提供给网络的参数,用于指导网络的训练过程,控制网络如何修改参数。

元参数包括学习速率、动量、隐藏层的数量、每层神经元的数量以及要使用的优化器的类型。

机器学习工程师工作的一个标准部分是调整网络,也就是选择产生最佳性能的元参数。这可能是一个耗时的过程,因为网络越大,收敛的时间就越长,并且通常需要调整和调整的元参数就越多。

调整网络很像一个科学家,他有一台复杂的设备,有许多旋钮要旋转,要进行大量的实验,看哪一个能给你最好的结果。

幸运的是,有一些软件包可以让这项任务变得更容易。

应用于 GANs 的 Optuna 优化

在合成数据生成公司 Hazy ,我们是 Optuna Python 包的忠实粉丝。

Optuna 是一个自动元参数优化软件框架,专门为机器学习而设计。该代码是高度模块化和强制性的。它支持并行,分布式优化,动态修剪试验。它与机器学习框架无关,并且高度可定制。

我们举个例子。假设我们有一个 GAN,我们希望优化它的生成器和鉴别器的学习速率。我们该怎么做呢?

成为神经网络的考验

Optuna 有两个基本概念:研究和试验。

该研究是优化的总体任务,基于返回优化结果的函数。这个函数通常被称为目标函数。试验是目标函数的一次执行。

让我们来看一个例子,这个例子取自 Optuna 网站,并应用于 Hazy 的 GAN 模型,让您了解什么是可能的。

首先,我们定义一个目标函数来研究。

目标函数封装了整个训练过程,并返回元参数的这个特定实例的值。

def objective(trial):
    iris = sklearn.datasets.load_iris()

    n_estimators = trial.suggest_int('n_estimators', 2, 20)
    max_depth = int(trial.suggest_loguniform('max_depth', 1, 32))

    clf = sklearn.ensemble.RandomForestClassifier(
        n_estimators=n_estimators, max_depth=max_depth)

    return sklearn.model_selection.cross_val_score(
        clf, iris.data, iris.target, n_jobs=-1, cv=3).mean()

该函数加载了虹膜数据集 —一个众所周知的用于评估机器学习分类器的数据集。然后,它从试验对象获得建议的估计数和最大深度。然后它实例化一个随机森林分类器并返回分数。

让我们更详细地讨论一下。

数据集由三种不同种类的虹膜组成,机器学习任务是在给定四个测量值的情况下,将给定的数据点正确地分配给正确的虹膜种类:

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

Iris 数据集被认为是一个相当困难的分类问题,因为就这些测量而言,物种之间有相当多的重叠。很难在物种之间划出一个清晰的界限。

我们希望优化的元参数是n _ estimatesmax_depth

试验对象n_estimators 建议一个 2≤𝑛≤20 范围内的整数:

n_estimators = trial.suggest_int('n_estimators', 2, 20)

Optuna 有许多不同的机制来提供元参数的值,以便在每次试验中进行测试;使用对数均匀分布分配最大深度的值:

max_depth = int(**trial**.suggest_loguniform('max_depth', 1, 32))

suggest _ log uniform函数接受一个范围,在本例中为 1≤ 𝑥 ≤32,并返回该范围内的浮点值。这被转换为整数。

然后创建随机森林分类器,具有建议的最大深度n 估计器。对它进行评估,并返回一个分数:

clf = sklearn.ensemble.RandomForestClassifier(
        n_estimators=n_estimators, max_depth=max_depth)

return sklearn.model_selection.cross_val_score(
        clf, iris.data, iris.target, n_jobs=-1, cv=3).mean()

创建了目标函数后,我们需要创建一个 Optuna 研究,并创建一些试验。然后,我们输出元参数的最佳值:

import optuna
import sklearn
import sklearn.datasets
import sklearn.ensemble

study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=100)

trial = study.best_trial

print('Accuracy: {}'.format(trial.value))
print("Best hyperparameters: {}".format(trial.params))

这将输出每次试验的分数,以及所使用的元参数。最终,在研究完成后,它输出最佳元参数:

[I 2020-04-23 17:54:52,817] Finished trial#98 with value: 0.9738562091503268 with parameters: {'n_estimators': 17, 'max_depth': 3.303148836378194}. Best is trial#43 with value: 0.9738562091503268.
[I 2020-04-23 17:54:52,899] Finished trial#99 with value: 0.960375816993464 with parameters: {'n_estimators': 17, 'max_depth': 3.136433926827928}. Best is trial#43 with value: 0.9738562091503268.

Accuracy: 0.9738562091503268
Best hyperparameters: {'n_estimators': 12, 'max_depth': 4.419437654165229}

优化 GANs

我们如何利用这一点来优化由生成性对抗网络所代表的高度复杂的系统呢?

让我们为那些想要优化的元参数定义几个函数。

GAN 由两个神经网络组成,即发生器鉴别器。生成器的任务是试图通过创建假数据来欺骗鉴别器;给定真实和虚假数据的输入,鉴别器必须能够区分两者。

假设我们想要优化两个网络的学习速率:

def opt_learning_rate(lr_key, trial):
    """
    lr_key: label to use for this learning rate
    trial: optuna trial object
    (one of those hyperparameters which may vary by orders of magnitude!)
    Returns: a string containing which learning rate is being optimised, & a suggested learning rate
    """
    return trial.suggest_loguniform(
        lr_key,  1e-5, 1000
    )

我们使用了建议 _ 日志统一功能,并赋予其广泛的范围。

下面我们使用成人数据集来设置优化两种学习率的代码。

让我们从建立一个 Python 字典开始,该字典将包含用于构建网络的默认元参数。

default_network_dict = {
    "epochs": 250,
    "batch_size": 64,
    "discriminator_learning_rate": 1e-5,
    "generator_learning_rate": 5e-4,
    "latent_dim": 100,
    "input_output_dim": 20,
    "num_bins": 100,
    "layers": 3,
    "hidden_dims": [64, 128, 256],
    "num_critics": 4,
    "dropout": 0.1,
    "neuron_type": "LeakyReLU",
    "optimiser": "RMSProp",
    "output_folder": False,
}

注意,我们已经为 GAN 的学习速率提供了默认值;这允许用户选择他们想要优化的元参数。所有这些都有可能得到优化;然而,字典也可以按原样使用,以创建神经网络。

用户也可以从命令行指定元参数,所以让我们通过从 argparse 创建一个命令行解析器名称空间来适应这种情况。

import argparse

params = argparse.Namespace(
    experiment_name = 'my-experiment',
    location = 'metaparameter-optimisation',
    dataset_name = 'adult',
    #output_folder = 'output',
    num_bins = 100,
    epochs = 500,
    batch_size = 64,
    discriminator_rate = 1e-05,
    generator_rate = 0.0005,
    sigma = 0.1,
    latent_dim = 200,
    num_critics = 4,
    cuda = 0,
    optimise = ['generator_learning_rate', 'discriminator_learning_rate'],
    hidden_dims = [64, 128, 256],
    structure = False,
)

我们需要一种将来自名称空间的命令行元参数与默认网络字典相结合的方法:

def override_params(default_params, optimisable, structure=False):
    if structure:
        default_params['layers'] = 'METAPARAM'
        default_params['hidden_dims'] = 'METAPARAM'
    tmp = dict.fromkeys(optimisable, 'METAPARAM')
    return { **default_params, **tmp }

最后,我们定义我们的目标函数。

目标函数必须覆盖许多基础,因为它必须包含创建、训练和测试 GAN 的所有代码。该函数创建一个 GAN。然后它设置日志,这样我们就可以看到运行试验的结果。然后用给定的元参数调用一个函数来运行试验。

def objective(trial, params, network_dict):
    # need to change all the requested metaparams

    logging.basicConfig(level=logging.INFO)
    logger = logging.getLogger('__metaparams__')

    processor, df, processed_df, categories_n = initialise_processor(params['num_bins'],                                                                  params['dataset_name'],
logger)
   network_dict['input_output_dim'] = categories_n
    fixed_params = fix_metaparams(trial, network_dict)
    generator = build_generator_network(fixed_params)
    discriminator = build_discriminator_network(fixed_params)

    # build the network's optimisers
    gen_optimiser = build_network_optimiser(network_dict['optimiser'],
                                            network_dict['generator_learning_rate'],
                                            generator)
    disc_optimiser = build_network_optimiser(network_dict['optimiser'],
                                            network_dict['discriminator_learning_rate'],
                                            discriminator)

    return run_experiment(
        generator=generator,
        discriminator=discriminator,
        generator_solver=gen_optimiser,
        discriminator_solver=disc_optimiser,
        processor=processor,
        df=df,
        processed_df=processed_df,
        latent_dim=fixed_params["latent_dim"],
        output_folder=fixed_params["output_folder"],
        num_bins=fixed_params["num_bins"],
        epochs=fixed_params["epochs"],
        batch_size=fixed_params["batch_size"],
        sigma=params["sigma"],
        num_critics=fixed_params["num_critics"],
        cuda=params["cuda"],
    )

目标函数和它调用的 run_experiment 函数看起来都有点复杂,但本质上它们只是分配和解析参数。这两段代码中有相当多的内容。然而,他们实际上只是设置了生成器和鉴别器网络、数据集和赋值器。

import logging
from hazy_auto_tuning import initialise_processor, run_experiment

from hazy_network_metaparameters import check_requested_metaparameters, optimisable, fix_metaparams
# from metaparameter_tuning import build_discriminator_network, build_generator_network, build_network_optimiser

from metaparameter_tuning import build_discriminator_network, build_generator_network, build_network_optimiser

在从 Hazy 代码库中再导入几次之后,你可以建立一个 Optuna 研究对象,并要求它为我们优化我们的元参数。

study = optuna.create_study(direction="maximize")
study.optimize(lambda trial: objective(trial, params_dict,       network_dict), n_trials=20)

请注意,对于一项有用的研究来说,这(可能)是太少的试验。对于元参数,如鉴别器和生成器的学习率,我们需要更多的试验。类似地,对于 GANs 性能的精确评估,历元的数量可能不够大。这些仅作为例子给出。

作为机器学习工程师,能够自动化元参数优化令人兴奋,因此我们可以花更多时间探索优化它们对所提供的合成数据集的影响。我们已经将 Optuna 代码应用到模型中,这将节省我们所有人的时间。

2020 年的数据科学职业

原文:https://towardsdatascience.com/data-science-careers-in-2020-1166ae0f41ca?source=collection_archive---------62-----------------------

宣布 Apteo 关于 2020 年数据科学职业状况的报告

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图像来源

在过去的几年中,我们已经看到数据科学作为一项职业在所有行业和地理位置上的戏剧性崛起。在大约 12 年的时间里,企业已经意识到他们需要精通高级分析的员工,这些员工可以帮助利用和货币化他们可以访问的所有数据。随着这种增长的出现,媒体机构已经开始大肆报道数据科学和人工智能将如何改变世界,从而进一步增加了对该领域的兴趣。然而,尽管对这种新的职业道路已经做了很多,但只有少数来源试图量化这种增长和数据科学家的短缺。

这就是为什么今天我们很高兴发布我们关于 2020 年数据科学职业趋势的报告。这份报告以公共工作空间的形式提供,托管在我们自己的数据科学平台上,提供了当今数据科学职业世界状况的高级概述。该报告试图定量衡量高级分析劳动力市场的当前规模、该市场的增长和薪酬,以及当今和过去数据科学家的短缺情况。

虽然该报告包含了对我们的数据来源和方法的简要说明,但我们希望更详细地说明我们是如何完成这项任务的,因为它需要艺术和科学的结合,我们认为每个人都应该了解我们方法中的任何缺点,这样他们就可以在自己使用这些数据时考虑这些缺点。

就业市场数据

事实证明,发现和汇总当前和过去就业市场状况的数据是这一过程中最具挑战性和最耗时的部分。如前所述,尽管数据科学在媒体和商业中很受欢迎,但几乎没有主要来源公布当今或过去行业中高级分析人员数量的数据。为了收集测量劳动力市场规模所需的数据,我们研究了各种历史报告和分析,以了解过去对劳动力市场的估计。这使我们能够将当今的资源联系起来,为今天的劳动力市场状况提供额外的背景。

这些历史数据虽然不多,但让我们能够确定前几年劳动力市场的规模范围。确定这个范围后,我们试图量化今天的市场规模。虽然我们确实找到了来自劳动统计局的数据科学家总人数的估计,但考虑到我们从以前的文章中收集的背景,这个数字似乎相当低。最终,我们选择使用当今最好的职业数据来源之一 LinkedIn 来收集原始数据。

不幸的是,LinkedIn 并没有提供具有特定职称的员工总数的精确统计,也没有提供其平台上具有给定职称的可用职位的精确统计。然而,它确实允许用户查看在任何给定用户的扩展网络中大约有多少成员符合特定的搜索标准,它还允许单个成员查看特定地理区域内符合给定搜索条件的相关工作的数量。

鉴于这些限制,我们使用我的 LinkedIn 账户运行各种搜索词,以估计我的扩展网络中数据科学家、机器学习工程师和人工智能研究人员的数量。虽然我会第一个谴责这种方法的许多不足之处,但它确实为高级分析行业量化劳动力市场数据提供了一个起点。使用这一策略,我们在 LinkedIn 上进行了各种搜索,提供了各地区高级分析员工总数的近似值,我们将这些搜索的结果与我们从历史指标研究中发现的统计数据相结合。这使我们能够将指数增长曲线拟合到我们收集的时间序列数据中,然后我们使用这些数据对数据集中任何缺失年份的数据进行插值。这条曲线也加强了我们的信念,即 BLS 的估计可能过低。

一旦我们收集了员工数量,我们就使用相同的策略收集不同地理位置的开放数据科学职位列表。有了这两组数据,我们就能够对当今和过去数据科学家的短缺状况进行基本分析。

薪资数据

收集就业市场数据后,我们汇总了历史和当前的薪资数据,并按地理位置进行了细分。我们使用了各种来自求职公告板、咨询报告、调查和文章的公开统计数据来汇总关于平均工资和中位工资的多种统计数据。利用这些数据,我们构建了一个关于高级分析人员平均工资的分析,包括全国和几个大城市中心。

教育数据

最后,我们汇总了专门研究数据科学工具和技能的教育项目的数据。在这种情况下,发现历史数据太难了,所以我们把分析局限于今天的教育项目。在我们的分析中,我们只包括我们认为具有数据科学优先方法的项目,重点关注与数据科学职业相关的核心统计、算法、计算和分析技能。

分析

一旦我们聚集了所有的数据,我们就将其组织成一个公共的 Google Sheet ,然后使用我们的 Google Sheets 数据连接器将该工作表连接到工作区。我们知道我们的分析不够精确,但是,我们相信它仍然对那些试图了解当今数据科学职业状况的人有价值。

留在圈子里

如果你有兴趣了解我们在 Apteo 的最新进展,你可以订阅我们的时事通讯,或者在我们的平台上为你自己创建一个免费账户,在那里你可以可视化、分析和预测你自己的数据。最后,如果你有兴趣帮助我们建立一个数据科学平台,让任何人都可以分析他们的数据,特别是如果你是一名全栈工程师或成长型营销人员,请联系

最后,别忘了在这里查看报告!

数据科学证书、训练营或硕士学位:哪个最适合你的职业生涯?

原文:https://towardsdatascience.com/data-science-certificate-bootcamp-masters-degree-which-is-best-for-your-career-4195da275408?source=collection_archive---------13-----------------------

充分利用你的时间成为一名数据科学家

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

韦斯·希克斯在 Unsplash 上的照片

简介

无论您已经学习了多年还是正在考虑转型,如果您希望在数据科学领域取得成功,您都需要拥有合适的工具集。该领域要求申请者跟上最新信息和数据科学实践的步伐,既严格又充满竞争。

在本指南中,我将介绍三种不同的认证方法,它们可以帮助你在数据科学领域获得职业生涯:数据科学证书、数据科学训练营和数据科学硕士学位。具体来说,我将讨论每种方法的优缺点,以便让您更好地了解哪种方法适合您。

让我们跳进来吧!

1。 数据科学证书

数据科学证书是教授基础数据科学技能的专业证书。这些证书由许多大学和机构提供,理论上可以帮助各种数据相关的 IT 领域的工作招聘(但稍后会有更多介绍)。

优点

获得数据科学证书有很多好处:

投资组合构建器

没有合适的作品集,你就别想在数据科学领域找到工作。数据科学证书可以帮助您实现这一目标。虽然证书将只提供基础知识,但它仍将帮助你为以后的高质量投资组合打下基础。

相对便宜

与数千美元的数据科学训练营和硕士学位相比,数据科学证书的价格甚至不到 500 美元。这对于那些希望以低成本建立自己的技能和投资组合的人来说非常好。

不耗时

有些证书可以在几周内完成(按照你自己的时间表)。由于严格程度较低,个人可以快速完成这些证书,而无需放弃之前的承诺(包括工作、学习和抚养孩子)。

缺点

在做出决定之前,一定要考虑数据科学证书的缺点:

基层信息

数据科学证书虽然对那些刚刚进入该领域的人有用,但对那些寻求更高级 IT 工作的人来说不是正确的选择,因为这些证书中提供的信息通常只是基础的。

不直接帮助就业

正因为如此,数据科学证书并不能直接帮助就业,我的意思是没有雇主会仅凭一张证书就雇佣你。相反,你需要丰富的工作经验和/或更专业的经验(包括辅助领域的硕士或博士培训)。

2。 数据科学训练营

数据科学训练营为在数据科学的 IT 世界中前进提供了一种更严格且潜在有益的方式。这些训练营旨在提供更深入和先进的知识,提供更多有用的信息,通常在简历上看起来更好——尽管它们可能不会让完全的初学者受益,并且在项目质量上可能差异很大。

优点

参加数据科学训练营有几个好处:

学术挑战

顾名思义,数据科学训练营以其学术严谨和强度而闻名。通常,这些项目会持续三个月左右的时间,并试图在有限的时间内提供尽可能多的知识。虽然知识的广度达不到数据科学硕士学位,但这些训练营比大多数证书课程更深入。

简历准备

也许数据科学训练营的一个更大的好处是他们专注于工作准备。请记住,这些项目得益于将尽可能多的毕业生送进劳动力市场。出于这个原因,你可以期待导师与你密切合作,制作一份对雇主有吸引力的简历。这包括给你机会从事有利于你职业发展的项目。

联网

数据科学训练营还可以让你接触到你所在领域的主要参与者,因此是让你出名的好方法。根据你的训练营的声誉(记住,并非所有人生来平等),你将有机会见到数据科学领域的雇主并与之互动,并能够准备一份吸引他们眼球的简历。

缺点

然而,数据科学训练营并非没有缺点:

耗时

在数据科学训练营学习期间,不要指望继续正常的生活。这些耗时的项目实际上要求你全神贯注,使得你很难在注册时工作(在某些情况下,甚至是兼职)或专注于其他学习。

另一个不利因素是这些训练营的成本,从 5000 美元到 20000 美元不等。这是一大笔钱,尤其是如果你甚至不确定自己是否想进入这个领域。雪上加霜的是,这些训练营通常最适合那些已经在辅助数学和科学领域拥有博士水平知识的人,因此即使没有这些知识,他们也能找到工作。

3。 数据科学硕士

个人也可以考虑报读数据科学硕士课程。毫无疑问,这些项目是三个选项中最专业的,也是最昂贵的,需要最长的时间来获得。尽管如此,在要求苛刻的数据科学领域,没有什么比研究生学位更令人垂涎的了。

优点

数据科学硕士学位有很多好处,包括:

增加就业机会

你知道这个领域的雇主首先会注意到你的简历吗?没错——不管你有没有该学科的高级学位。这是不争的事实:拥有一个数据科学的研究生学位将会大大增加你的就业机会。

网络机遇

硕士学位课程也提供了极好的社交机会,因为你可以与该领域的专业人士互动,同时建立一个有助于现实世界的投资组合。虽然你可能不会得到和训练营一样的工作准备,但在进入这个领域之前,你仍然可以期望有相当数量的改变游戏规则的人际网络。

实习

当然,研究生学位项目为你提供了难以置信的实习机会,这将极大地有利于你的职业发展。实习是获得该领域实际经验和建立雇主关心的投资组合的主要途径之一。因此,如果有时间和资源,个人应该强烈考虑参加研究生课程。

缺点

尽管如此,在做出这个决定之前,你还是应该考虑一些不利因素:

你不需要我告诉你完成一个硕士项目需要很高的费用。根据你所在的地区和学校的不同,你可能会谈到数万元的费用。这一点,加上该领域的高需求,意味着你将花费大量的金钱,而没有任何立即被雇用的保证。

可能需要数年时间

此外,数据科学硕士学位可能需要长达三年半的时间才能获得,这意味着你不会很快进入劳动力市场。然而,这并不意味着如果你缺乏经验,你应该咬紧牙关,选择更便宜的方案。

底线

找到合适的数据科学项目需要时间和考虑。一般来说,数据科学硕士学位提供了获得真正成功的最佳机会,尽管根据你之前的资历,它们可能不是必需的。如果你已经获得了分析、数学、科学或计算机科学等相关领域的高级学位,你可能会从数据科学训练营中受益最多。如果你只是在试水并考虑职业转型,数据科学证书是你的最佳选择。

数据科学的 Python 最佳实践

原文:https://towardsdatascience.com/data-science-coding-mistakes-and-best-practices-part-1-f7511cf573f7?source=collection_archive---------15-----------------------

入门

通过以下几个技巧,避免常见错误并提高您的数据科学编码技能

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

nesabymakersUnsplash 上拍摄的照片

我们中的许多人在没有强大的软件工程背景的情况下开始了他们的数据科学职业生涯。虽然一开始这可能不是问题,但是随着代码变得越来越复杂,您会发现您的笔记本会变得越来越慢,并且您会努力维护它。这篇文章的目标是帮助你写出干净、易读、高性能的代码。这篇文章并不是关于如何成为一名更好的程序员的详尽指南,但是我希望你能从中找到一些有用的东西来提高你的编码技能。

1.在 DataFrame 行上循环(简单回答:不要!)

我认为这是第一次做分析编程的人最常犯的错误之一。StackOverflow 的回答很好地解释了这一点。

pandas 中的迭代是一种反模式,只有当你用尽了所有其他选择时,才应该这么做。你不应该使用名字中带有“iter”的函数超过几千行,否则你将不得不习惯等待。

为了加快你的数据处理,你需要使用内置的 pandas 或 numpy 函数,因为它更快更容易。例如,看看这个 For 循环,

for index, row in df.iterrows():
   if row['room_size'] <= 36
       row['category'] = 'small'
   else:
       row['category'] = 'large'

这可以使用 numpy 轻松完成,

df['category'] = np.where(df['room_size'] <= 36, 'small', 'large')

使用 numpy/pandas 函数的最大好处可能是它们比 for 循环快很多。看看下面的图表,比较熊猫函数和迭代的运行时间。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

各种数据处理方法的速度比较。

如果您使用 pandas 或 numpy 函数,您的代码将被矢量化,这意味着这些库不是一次处理一个值,而是一次对所有行执行一次操作,这使得您的数据处理速度非常快。以下是您可以使用 pandas 进行数据帧操作的一些其他示例:

基于其他列的操作创建新列:

df['c4'] = (df['c1'] — df['c2']) * df['c3']/100

向上或向下移动列:

df['c1'] = df['c1'].shift(periods=1) # Shifting up one column
df['c1'] = df['c1'].shift(periods=-1) # Shifting down one column

切片一个:

df = df[start_index:end_index].copy()

填充不适用值:

df.fillna('bfill',inplace=True)

最棒的是,您可以使用 pandasnumpy 内置函数进行大多数数据操作。我只能想到一些用例,这些用例只能通过迭代来完成,比如训练你的 ML 模型或者使用正则表达式。因此,如果您想知道如何使用这些库之一进行数据操作,请查阅 numpy 或 pandas 文档(或 StackOverflow)。

2.SettingWithCopyWarning(),了解视图与副本

如果你曾经使用过熊猫,你可能以前遇到过这个警告。

SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

这个警告可能是由很多原因造成的,但是我认为最常见的原因是对视图和副本的不清楚的理解。顾名思义,视图是原始数据的视图,因此修改视图可能会修改原始对象。举个例子,

# df2 will return a **view**
df2 = df[['A']]
df2['A'] /= 2

上面的操作返回一个视图,并将产生SettingWithCopyWarning。如果您更改列df2的值,它也会更改列dfA的值,这就是警告试图告诉我们的。要修复它,你必须使用.copy()df2创建一个全新的对象

# df2 will return a **copy**
df2 = df[['A']].copy()
df2['A'] /= 2

上面的代码将返回一个副本,这是一个全新的对象。在上面的代码中,改变df2不会改变df。事实上,你应该在每次创建一个新的非空数据框架时使用 **.copy()** 来避免声名狼藉的SettingWithCopyWarning

3.编写干净的代码。

众所周知,数据科学家写的代码很糟糕。这并不奇怪,因为数据科学家编写的许多代码都是用于 EDA、快速原型制作和一次性分析的。你的代码可能有一天会被其他人修改或阅读,这个事实你可能不会想到。引用一个比我更好的程序员的话,“代码被阅读的次数比它被编写的次数多得多,所以要相应地计划”。以下是我给你的一些关于如何写出更好代码的建议。

避免非描述性的变量名

不要在你的代码中写简短的非描述性的变量名,比如ijXY。而是写一个描述性的变量名,比如row_indexcolumn_indextrain_datatest_data。是的,这会让你多花两秒钟输入变量,但是相信我,当将来有人试图修改/调试你的代码时,这会节省很多工时。

# Avoid (❌) - Non-descriptive variable names
n, x, y = data.shape# Prefer (✅) - Clear, descriptive variable names
no_of_images, image_width, image_height = data.shape

命名和格式约定

拥有一致的命名准则将有利于您和您的团队。它将使任何阅读你的代码的人更快地理解它,并使你的代码更好看。由于大多数数据科学代码都是用 python 编写的,所以我将分享一些 PEP8 命名约定:

  • 变量/函数名称为小写,用下划线分隔
  • 常量名称都是大写字母
  • 名称通常应使用茶色

至于格式,因为 python 不允许混合使用制表符和空格来缩进,所以最好坚持一种格式。有许多不同的 python 风格 指南可供您遵循,但我发现其中有几个是必不可少的:

  • 使用 4 个空格代替制表符(如果你使用 VS 代码,你可以自动将制表符转换成空格)
  • 用两行空行将顶级函数和类定义括起来。
  • 通过在圆括号、方括号和大括号内使用 Python 的隐含行继续符来换行
# Long function
foo = long_function_name(var_one, var_two,
                         var_three, var_four)

保持你的代码干燥(不要重复)

考虑将您在整个代码中使用的相同值重构到代码的单独部分中的单个变量中,或者更好的是,重构到单独的 JSON 文件中。这将在将来为您节省大量时间,因为如果您想在整个代码中更改相同的值,您可以通过更改一个变量来实现。这种做法还将避免一种常见的编码反模式,称为幻数,其中具有未解释含义的唯一值被直接硬编码在源代码中。

# Avoid (❌) - Unexplained 'magic' number
model = models.Sequential()
model.add(layers.LSTM(60, activation='relu', input_shape=(10, 3)))# Prefer (✅) - Clear value names and meaning
neurons = 60
no_of_timesteps = 10
no_of_feature = len(df.columns)
activation = 'relu'

model = models.Sequential()
model.add(layers.LSTM(neurons, 
activation= activation, input_shape=(no_of_timesteps, dimensions)))

这也适用于您的过程,与其在笔记本中编写冗长的数据处理过程,不如将相似的过程分组并重构为单个函数。然后,您可以使用 pandas .pipe()函数在单个链式执行中调用所有重构的函数。

# Avoid (❌) - Long, sequential procedures
df = pd.read_csv(‘data/train.csv’)
df[‘price_per_sqft’] = df[‘price’] / df[‘sqft’]
df[‘c1’].fillna(0, inplace=True)
df[‘c2’].fillna(method=‘bfill’, inplace=True)
df[‘c3’].fillna(df.groupby([‘c1,c2’])[‘c3’].transform(‘mean’))# Prefer (✅) - Separation of functions and chained executions
PATH = ‘data/train.csv’def load_data(path):
 return pd.read_csv(path)def calculate_price_per_sqft(df):
 df[‘price_per_sqft’] = df[‘price’] / df[‘sqft’]def imputate_missing_values(df):
 df[‘c1’].fillna(0, inplace=True)
 df[‘c2’].fillna(method=‘bfill’, inplace=True)
 df[‘c3’].fillna(df.groupby([‘c1,c2’])[‘c3’].transform(‘mean’))
 return dfdf = load_data(PATH)
result = (
  df.pipe(calculate_price_per_sqft)
    .pipe(imputate_missing_values)
)

4.在. parquet 文件中保存和加载数据

常见的做法是使用.to_csv()功能将数据保存到 CSV,就像你在许多 kaggle 笔记本中看到的那样。但是 CSV 实际上 不是存储大数据的好格式 ,因为它是无模式的,所以你必须在加载数据时解析日期和数字,并且是未压缩的,这意味着大数据集将占用大量内存,并且保存和加载将非常慢。Pandas 库实际上支持许多更适合保存大型数据集的格式。看看下面的图表,比较数据帧保存/加载时间。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自伊利亚扎依采夫,2019。经允许重新发布

我们可以看到羽毛和拼花比 CSV 快几个数量级,两者都由pandas支持。这是由于这些文件类型的列压缩,它们将数据存储在磁盘中,类似于 DataFrame 对象在内存中的存储方式。接下来,我们来看看这些文件类型的文件大小对比。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自伊利亚扎依采夫,2019。经允许重新发布

这一次拼花地板脱颖而出。基于这种比较,我推荐以 parquet 格式保存数据,因为这样速度更快,占用的内存更少,并且受pandas支持。您可以使用.to_parquet()将数据保存在parquet文件中。

# Avoid (❌) - Saving and loading data to CSV
df = pd.read_csv('raw_dataset.csv')
df.to_csv('results.csv')# Prefer (✅) - Saving and loading data to parquet
df = pd.read_parquet('raw_dataset.parquet')
df.to_parquet('results.parquet')

5.构建您的项目

一开始,在一个 jupyter 笔记本上进行分析、可视化、特征工程和构建 ML 模型似乎是个不错的主意。当然,打开笔记本开始处理数据集是非常容易的,但是如果你在开始时没有仔细地组织代码,事情会很快变得非常混乱。结构化您的项目将降低代码的复杂性,并使其更易于维护。对于 starter,你可以将自己创建的有用的函数放在一个名为data_processor.py的独立模块中,然后导入到你的 jupyter 笔记本中。

// data_processor.pyimport pandas as pddef imputate_missing_values(df):
 df['c1'].fillna(0, inplace=True)
 df['c2'].fillna(method='bfill', inplace=True)
 df['c3'].fillna(df.groupby(['c1','c2'])['c3'].transform('mean'))
 return dfdef calculate_moving_averages(df):
 df['moving_average'].fillna(0, inplace=True)
 return df

在你的 jupyter 笔记本中,你可以导入你已经创建的模块,并使用.pipe()函数来使用它(我是.pipe函数的粉丝)。

// your_notebook.ipynbimport data_processor.py as dpresult = (
  df.pipe(calculate_price_per_sqft)
    .pipe(imputate_missing_values)
)

接下来,您可以将它们进一步分成名为visualization.pydata_processing.pybuild_model.py等模块。

事实上,只要项目中的每个模块都符合单一责任原则,你就可以随心所欲地构建你的项目。引用维基百科,

单一责任原则(SRP)是一种计算机编程原则,它规定每个模块或类都应该对软件提供的功能的单一部分负责,并且这种责任应该完全由类来封装。它的所有服务都应严格符合这一职责。

或者,如果你想要一个现成的模板,请查看为你做上述所有事情的cookiecutterdata science。

结论

这篇文章包含了我在作为一名数据科学家的旅程中所犯的错误和学到的有用技术。我并不声称这些方法是完美的,但我希望这篇文章对开始职业生涯的数据科学家初学者有所帮助。

我是一名初学数据的科学家,热衷于从数据中创造价值。可以在 Twitter@ faisalrasbihan联系我。我欢迎建设性的反馈和批评。

参考文献:
【1】https://medium.com/r?URL = https % 3A % 2F % 2 ftowardsdatascience . com % 2 ftop-10-coding-errors-made-by-data-scientists-bb 5 BC 82 faaee
【2】https://towards data science . com/data-scientists-your-variable-names-are-words-heres-how-to-fix-them-89053d 2855 be
【3】https://towards

[4]https://www . practical data science . org/html/views _ and _ copies _ in _ pandas . html

向五岁儿童解释数据科学概念

原文:https://towardsdatascience.com/data-science-concepts-explained-to-a-five-year-old-ad440c7b3cbd?source=collection_archive---------4-----------------------

在采访中简单描述技术概念

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我见过许多数据科学面试问题,要求您“向我描述[插入数据科学概念],就好像我是一个五岁的孩子。我妹妹正在学习成为一名小学教师,在和她讨论过这个问题后,我们觉得这个问题有点夸张,也许是为了强调或者是为了引人注意。所以我决定保留这个吸引人的标题,但是这篇文章将稍微侧重于向一个没有技术背景的成年人解释这些概念。然而,为了与主题保持一致,我还创建了图形来描述每个答案,如果我有机会使用白板,我会在我的解释中附上图形。

这些主题遵循以下顺序:

  1. 统计和数据准备
  2. 机器学习模型概念
  3. 评估模型

假设检验和 T 检验

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

总体均值的假设检验

对于假设检验,你首先从一个关于大群体的问题开始。比如美国人的平均身高是多少?你猜它是 5 英尺。8 英寸。(只是根据个人经验)。你知道你不可能真实地测量每个美国人的身高,所以你随机选择了一个更小的群体来测量(随机样本)。

看看所有美国人的平均身高是否真的是 5 英尺。8 英寸。,你会进行假设检验!在本例中,您将需要使用单样本 t 检验,它有一个特定的等式,我不会深入研究。这里需要注意的重要一点是,你需要知道你测量的人数,他们的平均身高,以及他们身高的标准差(也就是他们的身高离平均值有多远)。

当你从 t 检验中得到一个值(t 值)时,你需要使用一个图表或程序来评估你是否可以得出你非常确定——95%确定——这是美国人的平均身高。如果你的 t 值大于 1.96 或小于-1.96,你会说你拒绝你的假设,即所有美国人的平均身高是 5 英尺。8 英寸。如果它在这个范围之间,你就“未能拒绝”(这是统计学术语)你的假设,并得出结论说这是美国人的实际平均身高。

主成分分析

有时你有一个数据集,其中有太多的列(变量),很难处理。将所有这些变量放入一个模型中会导致它运行缓慢,并且很难一次将你的因变量(你试图预测的变量)和所有其他变量之间的关系可视化。这就是 PCA 的用武之地!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

PCA 将变量转换为分量,每个分量都是原始变量的混合,但共享方差较小。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

PCA 双标图示例

注意,我肯定会把 5 年前的水平解释留给这一个。通过一些复杂的数学(线性代数),PCA 将你的变量转化为“组件”左边的图称为双标图,它显示了组件 1 和组件 2 由我们最初的四个变量组成。然而,每个变量在一个组件中比在另一个组件中表现得更多。例如,绿色(变量 2)向量具有较高的分量 1 值,但其分量 2 值保持在 0.2 以下。因此,与成分 2 相比,变量 2 是成分 1 的更重要部分。

这里的目标是拥有比变量数量更少的组件(这样你的模型可以运行得更快)。此外,您希望您的组件尽可能多地保留关于原始变量的信息。为了对此进行分析并选择将多少组件放入模型中,您可以查看一个名为解释方差比率的指标。该指标告诉您每个组件“解释”的数据集中总方差的百分比希望本节中的第一幅插图能让这个想法更清晰一些。在一个理想的场景中,你可以通过将每个组件的解释方差比相加来选择要包含在你的模型中的组件数量,直到你达到大约 80%或 0.8 的累积总数。

最后,还有一点需要澄清:当您使用 PCA 组件时,您会失去一些解释模型结果的能力。一旦确定了模型中哪些组件是有意义的,你能做的最好的事情就是查看双标图,如上图所示,以显示每个变量如何为每个组件提供信息。

SQL(结构化查询语言)连接

假设您有一个数据库,它实际上就像一个 Excel 表或表格的集合。SQL 连接最容易通过示例来理解,因此示例表如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2 个 SQL 连接示例表

对于这个例子,我们假设有一些学生的信息在学生表中,但是他们不在注册表中,因为他们当前没有注册上课。此外,我们在学生表中没有注册课程的学生的信息。以下是每种类型的联接会告诉您的内容:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可视化 3 种类型的 SQL 连接

  • 内部连接:学生表和注册表中每个学生的注册+学生信息
  • 右加入:报名人数+学生信息只针对报名参加某个班级的学生
  • 左连接:学生信息+招生信息只针对学生表中的学生

因此,您希望在查询中使用的 SQL 连接类型(也就是您发送到数据库以获取数据的代码)取决于您希望了解的信息。如果您想知道注册上课的学生的电话号码,请使用内部联接。如果您想要每个学生的姓名和年份,以及他们所在的班级(如果他们碰巧注册了任何课程),那么您可以使用左连接。

我们现在正冒险进入模特界。

偏差/方差权衡

这很难向非技术观众解释,所以请耐心听我说。

偏差/方差权衡是一个经典的数据科学概念,它表明当您创建模型时,偏差和方差之间存在固有的权衡。我将从这两个术语的描述开始,然后简要解释为什么在这两个术语之间有一个权衡。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

高偏倚和高方差的极端情况图解(图表来自https://www . kdnugges . com/2018/04/data-science-interview-guide . html/2)

偏差:具有高偏差的模型不能很好地“拟合”数据。也就是说,它的准确性在你用来制作模型的数据(训练数据)和你用来测试模型的数据上是低的【关于测试的更多信息,参见交叉验证部分】。高偏差表明您的数据中有遗漏,或者您使用了错误的模型!示例:您的数据看起来像二阶多项式(x ),但您尝试使用线性模型(x)进行预测,如图中的上图所示。

方差:方差高的模型对数据集自变量的微小变化非常敏感。这个问题与过度拟合有关,即您的模型与您用训练的数据拟合得太好,因为它将数据集中的噪声(或随机性)识别为重要,而实际上并不重要。因此,当你引入它以前没有见过的新数据时,它在预测中的表现很差。示例:将具有二阶多项式(x)关系的数据与 20 阶多项式 x ⁰进行拟合(见上图)。

这两个问题之间存在权衡,因为当您调整模型以更好地适应您的数据时,您会减少偏差,但您必然会增加方差。这种紧张关系存在于根据你收集的数据对模型进行过拟合和欠拟合之间。

决策树和随机森林

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个简单的决策树示例

左边的图片是你能做出的最简单的决策树之一。您从顶部开始,询问关于您的观察(数据集中的一行)的问题,并沿着树向下,直到您得到一个结果,这将是您的预测 y 值。

决策树很容易让你的数据超负荷。最糟糕的情况是,你的树的每个结果恰好代表数据集中的一个观察值。

为了解决这个问题,使用了随机森林模型。从本质上讲,一个程序会生成一堆决策树,每一棵看起来都有一点不同,这是由于模型进行决策分割的随机性。然后,对所有这些树的结果进行平均,以获得最终预测。这种方法可以让你制作更小的树,减少模型的方差,同时保持模型的准确性,这也是它非常受欢迎的原因。

最后,关于验证你的模型。

交叉验证

在评估任何类型的机器学习模型时,交叉验证都是最佳实践。下图显示了如果要执行三次交叉验证(三重交叉验证),将如何分割数据集。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

拆分数据集以进行交叉验证

对于上面的每个数据分割,您将在列车段上构建您的模型,并在测试集上测试您的模型(生成预测)。然后,您可以对每个分割的准确性分数进行平均,以获得模型实际上有多好的图片。数据科学家这样做是因为他们可以使用更少的数据总量,并可以在模型以前没有见过的更大范围的数据上测试他们的模型。

当雇主问这些问题时,他们似乎想评估两件事:

  1. 你对这个概念了解到足以分解它吗?
  2. 你能以直观、简单、简洁的方式解释棘手的技术概念吗?

我希望这篇文章有助于你了解概念的分解,无论你是试图自己理解它们还是更好地向他人解释它们。如果你碰巧有一个 5 岁左右的孩子,如果你能向他们解释其中的一个并让我知道它是如何进行的,那将是令人惊讶的。(我猜他们可能只是有点困惑。)此外,如果您对这些主题还有任何不清楚的地方,请告诉我!

感谢阅读!点击这里查看我在这个迷你系列中的第二篇文章:

[## 向一个五岁的孩子解释机器学习模型

尽可能简单地解释 ML 模型是如何工作的

medium.com](https://medium.com/@megandibble/machine-learning-models-explained-to-a-five-year-old-f2f540d9dcea)

【www.canva.com】上制作的 所有图形

数据科学咨询:从想法到部署

原文:https://towardsdatascience.com/data-science-consulting-from-idea-to-deployment-ea8efed8c388?source=collection_archive---------32-----------------------

为企业主解释数据科学软件开发项目流程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果你知道如何挖掘,你的数据可能是金子。大多数企业主都知道应用数据科学来获得竞争优势的价值和用途。数据挖掘产生未被发现的洞察力,这些洞察力导致成功商业战略的行动计划。为了充分利用应用数据科学,拥有有用的数据以及业务人员了解典型的数据科学开发流程非常重要。

数据科学推动创新

让我们探讨两个案例研究,一家零售/餐饮连锁店和一家医疗保险公司如何使用应用数据科学和机器学习来进行数据挖掘,并发现对业务战略创新有用的见解。

零售/餐饮连锁店案例研究

一家连锁零售店和餐馆收集了多年的库存和销售数据。该数据库用作数据科学顾问用来训练机器学习模型的信息资源。该顾问帮助企业主确定并实现战略目标。

现有的数据库是用于生成需求预测模型的资源,以便对未来的销售进行预测。一个自适应选择性模型通过分析过去两年半的零售销售数据来预测未来一周的需求。数据挖掘使用结合外部数据源的自回归模型。这使得在任何时候对任何特定产品的需求进行预测成为可能。通过使用这一解决方案,该公司能够优化库存和仓储,根据需要随时提供可用的供应品,并且更加经济高效。

医疗保险公司的案例研究

在这种情况下,目标是确保对高度个人化医疗保健数据的授权访问,以遵守健康保险便携性和责任法案(HIPAA)的规定。该公司被建议使用多模式生物认证,要求用户通过面部和语音识别才能获得授权访问。

数据科学顾问建议为系统添加增强的安全功能,包括用于驾照验证的光学字符识别 (OCR),防止面部识别欺骗的深度学习系统,以及基于 NLP 的安全挑战。这些改进促成了企业验证即服务(EVaaS)系统的创建。

数据科学咨询项目流程

企业主想知道如何使用技术来实现业务目标。他们对技术工作的细节不太感兴趣。他们更感兴趣的是在其业务流程中实施应用数据科学的成本和结果。

以下是数据科学软件开发项目的步骤。

步骤 1:收集数据

数据科学顾问了解客户和客户的顾客的需求。咨询师会发现客户的问题。推荐的解决方案能产生最大的价值,并满足客户的顾客的需求。顾问必须了解数据科学如何应用于业务模型,以及哪些数据将支持实施策略。

如果有多年来收集的现有数据可供使用,这对训练机器学习模型很有帮助。顾问评估数据以从战略角度理解其结构和有用性。

如果没有可用的数据库,那么数据科学顾问将探索客户的目标和主要用例。这些是数据收集技术设计的基础。获取数据的选项包括直接收集数据和调查是否存在任何第三方数据库,这可能是有用的。或许,存在合适的预训练模型。如果他们这样做,这将大大减少模型训练所需的费用和精力。有可能生成合成数据来代替真实数据。

使用预训练模型,精确度会根据特定于新项目的数据输入进行调整。随着模型的“学习”,结果会提高。在开始时,不可能预测机器学习模型的准确性和质量。这需要一个反复的过程,在开发过程中使用实验和校准结果。

给数据科学顾问大约一周的时间来评估业务输入和目标。作为项目合同前建议阶段的一部分,这种评估通常是没有成本的。

第二步:设定目标

业务目标是衡量改进的标准。技术目标是衡量系统性能的基准。成功指标是两者的结合。

使用需求预测时,依赖于客户行为的商业目标,如“增加 20%的销售额”没有保证。可以保证的是技术目标,比如“销量增加 20%需要多少库存。”

例如,客户可能需要一个预测模型,该模型基于对过去五个月的数据的分析,以 70%的准确度预测未来一周的产品需求。这一预测将是创建额外的测量、任务和假设的基础。

正如我们在零售/餐饮连锁店项目中看到的,目标是优化库存、仓储和采购。数据挖掘从过去的销售统计数据允许顾问预测未来的商品购买。对单个数据集的分析解决了库存、仓储、采购以及预测销售收入的问题。

每个任务都是从一个假设发展而来的,例如“通过使用销售预测来改善库存管理”来为每个项目设置适当的库存水平。这个假设提供了一个可以遵循的指南。通过评估在探索回答假设的数据集合时完成的结果,决策变得必要。

如果假设是正确的,那么机器学习模型经历微调以提高结果的准确性。Substantia 致力于此。

如果假设是不正确的,并且表明将假设应用于特定数据集没有价值,那么方法、假设或数据集必须改变。

需要什么样的精度水平?

所需的精确度是不可预测的,因为它取决于数据集。由于花费的预算对业务目标来说是成本有效的,因此准确性是有限的。过度花费以达到高于必要的精度水平是一个糟糕的策略。没有必要要求不能为企业创造增值结果的系统准确性。

阶段 3:构建循环

通过将经典的敏捷原则与跨行业数据挖掘流程(CRISP-DM)模型相结合,可以管理数据科学项目。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

标准周期专注于一个假设,以生成任务和结果的精确度。这个周期是一组四次冲刺,每次持续一周。在理解业务和数据的前两个冲刺阶段,第一个假设形成了基线,以此为基础,用未来的假设来改进结果。

通过适当的假设,使原始数据具有可操作性是可能的。为此,必须采取以下步骤:

  • 数据回顾:了解、访问、探索数据集的格式和数量。
  • 报告:通过识别初步的洞见,创建一份数据评审报告。
  • 数据认证:验证数据集的完整性和质量。
  • 行动项目:为建模建立一个可操作的数据集。

在上面给出的需求预测示例中,数据经过了检查、清理和组织。这些数据决定了最常出售商品的基准。并非所有数据都具有相同的值。为了获得有用的结果,用于模型的数据必须与提出的确切假设相关。数据科学顾问组织了一个有代表性的数据样本进行分析。对所有数据的分析并不是一蹴而就的。

多模态生物识别安全系统示例中,一个目标是通过实时比较驾照照片和自拍照片来更好地识别用户。面部识别的预训练模型有助于建立基线。

使用驾照数据集带来了一个挑战。许可证的图像质量远低于高分辨率自拍文件和用于模型预训练的面部图像。因为目标是比较这两种类型的图像,所以数据集必须符合假设的要求。

多少数据才够?

拥有太多的数据永远不会发生,因为从大型数据库中选择一个子集样本是可能的。但是,如果没有足够的正确类型的数据,训练过程将失败,模型将无法学习。如果需要更多的数据,我们会收集数据或转向不同的假设。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果一个假设由于缺乏足够的数据来检验而失败,那么,我们用一个新的假设重新开始这个循环。这种类型的失败是固有的和不可避免的风险。

在零售/餐饮连锁店项目中,了解不同类型产品的销售情况至关重要。需要的数据是每个时期的购买量,以及在销售前这些物品在仓库中的库存时间。模型分析的项目越多,获得的准确性就越低。然而,为不同的项目重新训练模型是可能的。这改善了结果。

在选择用于训练模型的数据之前,决定如何测试模型的准确性是一个明智的策略。可以将大多数初始数据集随机分成两组。一个是培训用的,一个是测试用的。

例如,要以 97%或更高的准确率预测一个月的销售额,假设模型需要五个月的历史销售数据。一旦这个假设有了足够的证据,模型就成功了,预测系统就可以部署了。

阶段 4:部署模型

模型部署分为两个阶段。第一阶段是使用真实数据在测试环境中部署模型。该模型进行短期预测,并检查准确性。例如,如果历史数据是前五个月的交易,那么合适的预测周期可以是一周或一个月。使用一年的预测期是不合适的,因为这将引入不准确性,并且需要太长的时间来验证。

模型通过分析测试后,部署提升到实时生产环境。

在零售/餐饮连锁店的案例中,需求预测模型在测试环境中的测试服务器上运行了足够长的时间,证明其平均准确率为 97%。然后,它与公司范围的系统集成,供每个地点使用该地点的相关数据。

结论

数据科学软件开发项目的四个阶段需要随时重复业务流程和新的统计方法,使特定的机器学习模型过时。幸运的是,数据科学随着许多基于云的服务和预训练模型的出现而继续发展,这很有用。这使得软件开发人员更容易创建新模型并测试它们。与现有企业软件的集成变得越来越容易,软件项目交付速度更快,从而缩短了新部署的上市时间。

数据科学速成班

原文:https://towardsdatascience.com/data-science-crash-course-6d8e03390f6b?source=collection_archive---------19-----------------------

让我们在 2020 年学习数据科学

2020 年到了,是时候学习数据科学了!这一数据科学速成课程是开始数据科学之旅的快捷方式。我们的目标是在你现在拥有的任何一台计算机上立即开始编程。仅仅通过阅读这篇文章,你将学会开始编码和分析数据的所有必要术语。我们走吧!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据科学速成班。2020 年学数据科学吧!

开始前请注意:

如果您想查看本课程的完整课堂讲稿以及视频讲座,请访问数据科学 Rush 网站。

1.介绍

我们将 Python 用于数据科学

Python 是初学者和专家的完美语言,因为它的流行和清晰的结构。它很容易掌握,而且由于社区的存在,您将能够在您的第一次实验以及最近的机器学习研究中使用它。

数据科学速成课程概述

首先我来说说设置你的环境。在我们的例子中,这意味着在你的计算机上安装 Anaconda,这将允许你快速运行 Jupyter 笔记本,在那里你将直接从你的浏览器运行简短的 Python 程序。所以从现在到你的第一个节目,你可能需要 15 分钟。

那么要做数据科学,你需要一点数学知识。我将复习线性代数和统计学中的基本术语,这是你在学习过程中需要用到的。这些包括:

  • 向量及其运算
  • 矩阵及其运算
  • 均值、方差、相关性
  • 随机变量,相关性,条件概率,
  • 朴素贝叶斯定理

然后我们可以直接处理数据:

  • 正在导入文件。txt,。json,。xml,。超文本标记语言
  • 在 NumPy 数组、pandas 数据帧和其他结构(列表、字典)中存储数据

获取和处理数据

我还将讨论如何以及在哪里可以获得有趣的数据。因为数据科学是关于数据的,所以你应该找到一个令你兴奋的数据集。一些例子包括:

  • 书籍和文件,例如来自古腾堡项目
  • 抓取网站(下载体育或财经新闻)
  • Kaggle 数据库
  • Twitter API

数据科学中的标准技术

拥有数据是数据科学的第一步,一旦我们有了数据,我们就可以开始工作了。标准技术包括:

分类:我们有两个或更多的类别(标签),我们想根据这些标签对对象进行分类。我们在这里讨论监督学习和标准技术,包括 KNN,朴素贝叶斯,决策树,XGBoost,神经网络。

聚类:我们没有任何标签,但我们仍然想对我们的数据进行分类。我们通过不同的相似性度量对数据进行聚类,从而创建标签。我们在这里讨论无监督学习和标准技术,包括 k-means 和 DBSCAN。

神经网络本身就是一个独立的话题。它们背后的基本思想是将一个问题简化成可以被“神经元”单独处理的更小的部分。我将介绍像 Keras 和 Tensorflow 这样的基本框架,然后还将讨论 MNIST 和其他一些很好的问题。

如果你想可视化数据或者更好地理解数据,降维是必须的。有时,您只想在 2D 绘制 4D 数据,然后必须对其进行转换,以捕捉信息的本质。标准技术包括主成分分析和 SVM。

对于数据科学的商业应用来说,可视化数据非常重要。最后,你想把你的发现传达给其他人,最好的方式是用一个漂亮的图表展示给他们,每件事都很清楚。我们将讨论 plotly 和 Dash。

在这个速成课程之后,您将准备好解决基本的数据科学问题,并自学更多内容。

2.蟒蛇和朱庇特笔记本

Anaconda 是一个针对数据科学和机器学习应用的免费开源发行版,包括 Python 和 R 编程语言。它旨在简化包的管理和部署。

好吧,这听起来可能很复杂,但事实是,这一切都是为了给你一个可以编码的框架。你需要一个编译器来运行 Python 代码,想想“运行”你的程序的文本编辑器,Anaconda 给了你更多。它为您提供了您可能想要使用的所有软件包和 Jupyter 笔记本。

不过还是从安装开始吧。让我们去 www.anaconda.com下载最新版本:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Anaconda 网站

既然你有了它,是时候深入解释它是如何工作的了。

如果你现在打开 Anaconda,你会看到这个屏幕:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

巨蟒领航员

Jupyter 笔记本

现在让我们来看看 Jupyter 笔记本。其余的我们可以暂时忘掉。让我们打开 Jupyter 笔记本,你会看到下面的屏幕:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Jupyter 笔记本

点击右上角的 New 并选择 Python3。你会明白的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Jupyter 笔记本

还有…你可以走了!这是一个命令行,在这里您可以开始用 Python 编写代码,然后通过单击 Run 来执行。

Jupyter 笔记本是一种非常方便的编写代码和记录不同实验的方式。它不太适合较大的项目,但对于用数据运行快速实验或训练神经网络来说,它是完美的。

您通常通过“导入…”来导入包/库。包是现成的代码片段,让您不必自己编写所有内容,从而节省时间。所有东西都有包装:

  • 导入数据(json)
  • 处理数据(熊猫、NumPy)
  • 文本分析
  • 神经网络(Keras、PyTorch、Tensorflow)
  • 可视化(破折号)

因此,通常情况下,在您自己做任何事情之前,您应该检查是否已经有相关的软件包可用。当然,有时候你会想自己动手,只是为了学习。

最后,JupyterLab 也是一个很棒的工具,它基本上只是一种同时管理多个 Jupyter 笔记本的方法,因此如果你想组织你的代码,它非常有用。

现在,您已经拥有了用 Python 编写第一个数据科学实验所需的一切。

3.线性代数与统计

现在我们要复习数据科学所需的数学。

数据科学线性代数

线性代数是关于向量和矩阵的操作。这既是符号,也是操纵对象的有用方式。Vector 的核心就是写在一列(或一行)中的一组数字:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

矢量

您可以对向量执行类似加法的运算,方法是将各个项相加,它们需要具有相同的长度。你可以用一个标量乘以一个向量,这个标量是一个实数,通过把每个条目乘以这个实数。

现在,向量通常被认为是在某个更大的空间中,例如像平面上的[1,2],在那里它们表示坐标。突然间一切变得非常直观。此外,很明显,你可以测量向量之间的距离(平面上两点之间的距离)或尝试计算两个向量之间的角度。

当你把数据写成向量,然后对它们进行运算以测量它们时,这在数据科学中非常有用。线性代数方法是必要的。

向量概括为矩阵,n 乘 m 的阵列,其具有以行和列书写的 n 乘 m 个条目:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

[数]矩阵

同样,您可以添加相同形状的矩阵,将它们乘以一个标量,并执行其他操作。例如,您可以将某些兼容形状的矩阵相乘。这对于数据科学中的许多应用来说是至关重要的,所以在进一步学习之前,你一定要练习乘法矩阵。

这就是你从线性代数开始所需要的。从某种意义上来说,张量是矩阵向更高维度的推广,值得一读。

统计数字

统计学是关于数据的收集、组织、显示、分析、解释和呈现。这需要将概率与理论结合起来,因为你需要通过从某些分布中取样来对未知数据建模。

重要的概念是方差和偏差。关注维基百科:

  • 偏差误差是来自学习算法中错误假设的误差。高偏差会导致算法错过特征和目标输出之间的相关关系(欠拟合)。
  • 方差是对训练集中的小波动的敏感性的误差。高方差会导致算法模拟训练数据中的随机噪声,而不是预期的输出(过拟合)。

换句话说,偏差与样本数据相对于整个数据集太小有关,而方差则与过于关注数据中的每个微小变化有关。这两个概念之间有一个权衡,通常情况下,我们用多大的偏差换取多大的方差。

为了开始操作机器学习模型,您需要学习概率论的基础知识,例如

  • 随机变量
  • 条件概率
  • 朴素贝叶斯定理

这些概念对于理解数据科学和机器学习背后的基础数学至关重要。学习它们的最好方法是做几个练习,计算特定情况下的实际概率和矩阵。网上有大量的书籍和资料,所以我不会在这里复制。

4.处理数据

最后用 Python 做点有数据的事情吧。我将回顾处理数据的基本技术。你如何储存信息?我们已经知道我们想要用向量和矩阵来表示我们的数据。

导入数据

我们可以从导入文件开始。你的电脑上可能已经有了

  • 短信
  • Excel 电子表格
  • jsons
  • XML
  • 战斗支援车

你可以把它输入到 Jupyter 笔记本电脑中。

大部分是通过“open (…)”完成的,例如:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在 Python 中打开 CSV

看看 Python 编程或者真正的 Python 来了解更多。

其他形式的文件也是如此。

我们已经知道,我们希望以数组(矩阵、向量)的形式表示数据,所以让我们看看如何用 Python 来实现。

存储数据

现在的问题是如何储存它们。有几种标准的方法可以做到这一点。

Numpy 数组是一种表示数组的简单方法,NumPy 是进行数据科学的最佳库之一。请看这里的官方文件。如果你想定义一个向量[1,2,3],这里有一段 Jupyter 笔记本的摘录:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NumPy 数组是一个伟大的数据科学工具

又快又简单,对吧?

Pandas 是一个开源的、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具。

DataFrame 是一种电子表格格式,是 Pandas 的一部分,也允许处理数据。这个例子展示了如何使用它来创建一个简单的电子表格:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据科学的熊猫数据框架

它真的很高效,用起来也很棒,特别是如果你以前广泛使用过 Excel,这一切都会非常熟悉。

除了这两个非常高效的包之外,Python 本身也提供了过多的数据结构。看看这里有多少个。举几个在处理数据时很方便的例子:

  • 列表
  • 字典
  • 元组

最好的学习方法就是摆弄它,所以现在就打开你的 Jupyter 笔记本吧!

5.获取数据

数据对于做数据科学至关重要。为了开始使用它,我们通常必须先清洗它。我们来讨论一下怎么做。

如果你的电脑上没有任何有趣的数据,那么最好的方法就是从网上搜集信息。用 Python 处理像’请求’和’漂亮的声音’这样的包(清理数据)非常容易。

大多数网站很容易使用请求,这只是一个清理问题。

用于数据科学的抓取 web

你可以从网上下载有用的数据。我们生活在数字世界,几乎任何东西都可以在网上找到。大多数数据可以通过抓取从不同的网站获取。这种获取数据的方式非常令人满意,但需要时间,因为您必须一路清理 HTML 代码。

尤其是财务数据非常容易获得。你可以用像 Pandas DataFrames 和 NumPy 数组这样的工具来分析它,我们在上一篇文章中已经讨论过了。

假设你想从纳斯达克获取信息。使用 GET,您可以立即获得 HTML 代码:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请求 Python 用于数据科学

然而,正如你所看到的,这是远远不可读的。下一步将是使用 BeautifulSoup 使其变得漂亮:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据科学的美丽小组

这是更具可读性,但你仍然需要投入工作,从中提取一些信息。这是一个很好的开始方式。

查看 BeautifulSoup 文档了解更多详情。

搜集很棒,因为你可以通过研究更多关于你的爱好的信息来学习数据科学。比如说,如果你喜欢视频游戏,并且想要分析不同的统计数据,那么抓取是最好的选择。您将了解更多您感兴趣的特定网站。

互联网上可用的数据集

获取数据的另一种方法是访问已经准备好的数据集。这方面的例子数不胜数,我在这里只讨论一些主要的数据集。

古腾堡计划是下载书籍的一个很好的来源。您可以访问版权过期的旧书。想想莎士比亚。

Twitter API 是另一个奇妙的来源。注册一个开发者账户,然后你就可以开始玩自动化了。例如,你可以提取关于一个标签的数据,以及人们对最近事件的反应。这对于社会科学或市场营销的研究尤其重要。

Kaggle 是数据科学竞赛的绝佳资源,也是现成的数据集的绝佳资源,你可以从他们的网站上直接免费下载。大公司经常在那里宣布他们的竞争,所以你会看到在更广泛的数据科学社区中有什么有趣的东西。

为数据科学建立数据集

除此之外,还有一堆数据集用于对机器学习模型进行基准测试。我不会在此详述,但我想向您介绍几个值得了解的例子:

  • MNIST——手写数字的数据集
  • CIFAR-10–10 类 60,000 张图像
  • ImageNet —根据 WordNet 层次结构组织的图像数据库
  • IMDB 评论 —来自 IMDB 的电影评论数据集
  • 维基百科——巨大的文本资源

这就是这节课的全部内容。现在是时候打开你的 Jupyter 笔记本,玩你最喜欢的数据集了。

实践永远是学习数据科学的最佳途径。

6.分类和监督学习

我们已经学习了存储数据和从哪里获取数据。现在让我们来看看数据分类的标准技术,这是数据科学的基本应用。

什么是监督学习

假设您有贴有标签的数据。想想有描述的动物图像,不管是猫还是狗(分类问题)。另一个例子是关于电子商务中客户的数据,包括年龄组、职业、过去购物(回归问题)。监督学习处理这种类型的问题,其中你将标签附加到数据上,以便你可以使用这些标签作为指导来“监督”你的算法的学习过程。

分类是根据包含标签已知的对象的训练数据集,识别新对象属于哪个标签(类别)的问题。例子是将给定的电子邮件分配到“垃圾邮件”或“非垃圾邮件”类别,以及基于观察到的患者特征给给定的患者分配诊断。

回归是基于其他特征或变量估计一个值(“连续标签”)的统计过程。

分类和回归算法

K 近邻(KNN) 是分类和回归的最标准例子。我们正在寻找与我们开始的给定例子最接近的物体,并基于此贴上标签。k 代表我们正在寻找的一些邻居。看看 KNN 的这个实现,当 K=2 时,使用 sklearn ,这里我们要理解平面上的 6 个点:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

KNN 与 sklearn

朴素贝叶斯是一种标准的方法。您简化了一种情况,并假设数据中的动作/对象是独立的(在概率意义上),因此您可以使用贝叶斯定理计算概率。形式上,“朴素贝叶斯”方法是一组基于应用贝叶斯定理的监督学习算法,其“朴素”假设是给定类变量值的每对特征之间的条件独立性。您可以再次使用 sk learn来实现它,例如,在本例中,使用标准虹膜数据集,并使用正态分布(GaussianNB)来模拟条件概率:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

带 sklearn 的朴素贝叶斯

当您试图预测标签的精确值时,会使用回归。所以这是一个分类问题的连续变体。这对于试图根据生活在一个人附近的人来确定他的收入来说是完美的。

线性回归是最简单的,即假设您的数据可以用线性函数来建模。有太多的回归模型是基于不同的函数,最流行的是 sigmoid 和 ReLu(修正的线性函数)。

同样,使用 sklearn 很容易实现线性回归。看看这篇教程,了解如何在 Python 中使用线性回归。

另一种分类技术是决策树,在这种分类技术中,您可以尝试使用问答格式的数据,如:

  • 这个人住在公寓还是房子里?
  • 这个人三十多了吗?
  • 这个人有孩子吗?

树可以自动生成。例如,您可以使用 sklearn 构建一个简单的决策树,将平面分成两个区域:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 sklearn 的决策树

构建树很棒,因为这样你就可以通过投票将几棵树连接成一个更大的模型。考虑每个决策树的决策,并且对所有决策进行加权(在最简单的情况下是算术平均)。这种方法被称为集成学习。

更高级的算法

XGBoost 是另一种标准技术,值得一读。官方文档写着:“XGBoost 是一个优化的分布式梯度增强库,旨在高效、灵活和可移植。它在梯度推进框架下实现机器学习算法。XGBoost 提供了一种并行的树提升(也称为 GBDT,GBM ),可以快速准确地解决许多数据科学问题。相同的代码运行在主要的分布式环境(Hadoop、SGE、MPI)上,可以解决超过数十亿个例子的问题。”您可以将 XGBoost 视为更高级的决策树。

当涉及到监督学习时,神经网络通常是最终的工具。你建立了一个能够根据过去的例子学习标签的架构。我很快会谈到它们,但首先我会解释当你没有先验标签时该做什么,这就是如何进行无监督学习或聚类。

7.聚类和无监督学习

我们学习了监督学习,以及当您有一个带有标注的数据集时该做什么。现在让我们看看没有提供标签的数据集,谈谈无监督学习。

什么是无监督学习

假设我们有原始数据,如与营销相关的社会统计数据。例如,您试图了解谁在您的电子商务网站上购买了 MacBook,并且您希望找到相似的人。或者你正在通过一个在线平台卖票,你试着把你的客户分成不同的类别,这样你就可以向每一组传达一致的信息。

为了聚类数据或把你的数据分成不同的类别(这不是事先给定的!),你必须使用一种聚类算法。sklearn 将再次提供帮助。让我们用一个来自 sklearn 的代码示例来回顾两个基本方法。

数据科学中的聚类方法

k-means 是聚类中的基本技术。这里的“K”代表您想要的集群数量。这是任意的,你选择这个参数,但是有一些方法(见肘方法的例子),在这里你可以自动推断出最佳的聚类数。你可以使用 sklearn 将著名的虹膜数据集分组。例如,这将是 3 个集群的结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

k 均值聚类

如果你想让成为一个简单的 k-means 用例,那么你可以简单地将平面上的点分成 2 组。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

sklearn k-means

k-means 和其他技术的关键是有一个度量,即一个明确定义的距离,通过它我们可以测量数据集中对象的相似程度。在大多数来自电子表格的实际数据中,度量很容易定义,我们只需要空间中向量之间的通常距离,因为数据是纯数字的。当然,你可以让它变得更复杂,特别是如果你的数据有噪音或者你试图提取真正隐含的数据,但是你不需要考虑例如如何将一个单词嵌入向量空间。

另一种数据聚类算法是基于密度的带噪声应用空间聚类,简称 DBSCAN。跟随 sk learn:“DBS can 算法将集群视为由低密度区域分隔的高密度区域。由于这种相当一般的观点,由 DBSCAN 发现的聚类可以是任何形状,这与假设聚类是凸形的 k-means 相反。DBSCAN 的核心部分是岩心样本的概念,岩心样本是位于高密度区域的样本。因此,聚类是一组彼此靠近的核心样本(通过某种距离度量来测量)和一组靠近核心样本的非核心样本(但它们本身不是核心样本)。”这也是标准技术之一,乍听起来可能很复杂,但原理很简单:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

DBSCAN 正在运行

如果你想知道如何在一个例子上实现 DBSCAN,看看这里的信用卡数据集和一个简短的教程。

数据科学是实用的

最好的学习方法是实践,所以我强烈建议你现在打开你的 Jupyter 笔记本,继续 Kaggle 搜索一个你可以在实验中使用的数据库。上面的例子中有很好的数据集:

  • 信用卡数据
  • 虹膜数据集
  • 平面上的点

你还可以在网上找到大量其他现成的数据集,包括干净的和原始的。

聚类经常出现在自然界中,如果你要为一个更大的组织工作,比如银行或保险公司,你肯定会用到它。你试图将未标记的数据归入可以解释的类别,这是很自然的。然后,如果你设法通过聚类来建立类别,当你试图把新的对象放入已经存在的来自聚类的组中时,你将回到新数据的分类问题。

归根结底,数据科学就是分类、聚类并从中提取信息。只是需要时间去掌握。

8.神经网络

我们将讨论神经网络以及如何使用它们对数据进行分类。这将是对神经网络的一个温和的介绍,因为我假设你从未使用过它们。

什么是神经网络

神经网络从感知器开始,以人脑中的单个神经元为模型。你可以把它想象成一个接一个的函数。有了输入数据,然后应用一个激活函数,可以是线性函数、ReLu 或 sigmoid 函数或任何其他函数,然后将数据传递到下一个节点,并在给定节点再次应用激活函数。这一切都是分层进行的(这是更一般的前馈网络描述):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

前馈神经网络

所以让我们从一个感知器的例子开始。我们看看它们是如何用 sklearn 实现的,然后我们切换到 Keras 框架。 Keras 是一个高级神经网络 API,用 Python 编写,能够运行在 TensorFlow 之上。 TensorFlow 是机器学习的端到端开源平台。它有一个全面、灵活的工具、库和社区资源生态系统,让研究人员推动 ML 的最新发展,开发人员轻松构建和部署 ML 驱动的应用程序。

这里有一个关于 sklearn 的简单例子,我们尝试使用感知器来拟合数字:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Sklearn 感知器神经网络

如你所见,代码简短而简单,但细节在数学中。在这一点上,你应该回到一些线性代数,以了解发生了什么。

以下段落更具技术性,但我尝试将所有术语放在一起(通过链接,您可以了解每个概念的更多信息):

形式上,多层感知器是一类前馈神经网络。前馈神经网络是其中节点之间的连接不形成循环的神经网络。反向传播是一种用于训练监督学习的前馈神经网络的算法。反向传播针对单个输入/输出示例计算损失函数相对于网络权重的梯度。在这种情况下,理解梯度下降也很重要,这是一种用于寻找函数局部最小值的算法。

让我在这里指出,深度学习是机器学习,但我们使用至少 3 层神经网络的神经网络。

Keras 中的神经网络

现在让我们回到例子。正如我提到的,Keras 和 Tensorflow 是目前最流行的机器学习框架,Keras 特别容易上手。当你建造连续的模型时,这有点像乐高。让我们来看看这个例子,再次看到多层感知器这次是用 Keras 建造的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Keras 神经网络

我不会在此详述,但这里发生了什么:

  1. 我们进口 Keras。
  2. 我们生成一些随机数来训练一些数据,然后进行测试(X,y train/test)。
  3. 我们建立了一个序列模型,但增加了 3 层。其中两个具有 ReLu 作为激活函数,最后一个具有 sigmoid。我们也使用 dropout,但我不会在这里讨论它,尽管它值得阅读更多。
  4. 然后,我们对模型进行编译,使其适合我们的训练数据。
  5. 我们根据测试数据对模型进行评估。

总而言之,这就是神经网络和机器学习的工作原理:

  1. 通过导入包、框架和数据(用于训练和测试)来设置阶段。
  2. 建立一个模型。
  3. 使模型符合训练数据。
  4. 根据测试数据评估模型。
  5. 调整模型的参数,调整数据,重复。

由于数据科学是实用的,并且都是关于测试和尝试的,现在轮到你了。打开你的 Jupyter 笔记本,玩数据。我还推荐阅读如何将 Keras 用于 MNIST 数据集— 这里有一个很好的教程。

9.降维

让我们来讨论一下如何减少数据中的一些维度,以便可以可视化和更好地理解。

主成分分析

假设您想要绘制数据,但您的数据有太多的维度,无法立即完成。降维来了。这些方法允许您只查看与您最相关的某些维度的信息。

标准技术是 PCA,即主成分分析,它着眼于特征向量(奇异值)并投影到那些捕获大部分数据的向量。例如,你可以把 4D 变换成 2D,通过投影到 2D 空间,由两个最大的奇异值构成。

让我们看一个简单 PCA 的 sklearn 代码与 NumPy 数组一起使用:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

带 sklearn 的 PCA

这里我们只使用 2 个分量的 PCA,我们得到我们空间的奇异值。要真正理解发生了什么,您应该阅读一些资料:

数据科学中的降维

降维很重要,因为你想要去除不必要的数据,电子表格中不相关的列,以便以最有效的方式应用数据科学算法。较少的参数更容易控制和操作。

还有许多其他方法用于降维。更高级的包括例如流形学习。流形学习是一种非线性降维方法。这项任务的算法是基于这样的想法,即许多数据集的维数只是人为的高。t-SNE 是流形学习中最著名的技术之一你可以在 sklearn 文档中读到更多关于它的内容

总而言之,如何降低维度完全取决于您正在处理的数据。有时候,从一开始就很明显,为了获得更好的结果,应该忽略几列或几行。有时很难看出什么是真正重要的,然后你不得不尝试一些降维算法来解开数据和对象之间的依赖关系。

但这就是为什么数据科学是实用的——不摆弄数据就没有理解。

10.(英)可视化(= visualization)

最后,我将讨论如何展示一个数据科学项目,使其对他人具有吸引力和启发性。换句话说,让我们来谈谈观想。

如何在 Python 中可视化

我首先写道,一个记录良好的 Jupyter 笔记本非常适合可视化,特别是如果你想向有技术背景的人展示你的工作。当你为工作面试做测试题时,这通常是雇主期望你发出的。

否则,如果你与非技术人员交谈,你将需要更多的视觉方式来展示你所取得的成就,比如:

  • 使用 plotly 或 matplotlib 绘制数据
  • 创建热图
  • 在表格中显示统计数据

下面是一个使用 matplotlib 的简单绘图示例:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Matplotlib 图

它的代码是:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Python 中的 matplotlib

总的来说,你可以用 plotly 创造出令人惊奇的。下面你可以找到一个来自 plotly 的可视化示例,全部用 Python 完成:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对 plotly 的良好掌握会让你做真正伟大的事情。

plotly 更进一步的是 plotly 的 Dash ,它允许你用 Python 构建网络应用。因此,向任何人展示真的很棒,无论是技术人员还是非技术人员。你可以在这里看看【Dash 有什么可能。例如,这个交互式仪表板是在 Dash 中完成的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Python 中的仪表板

你可以在这里访问它。

如你所见,Python 为你可视化和展示你的作品提供了惊人的选择。现在轮到你在 Jupyter 笔记本上玩了。

分享你的开源项目

分享你的项目的最好方式肯定是 Github。上传您的代码和一份精心编写的文档,并与您的同事分享以获得反馈。当然,如果你在为一家公司工作,你不能真的这样做,但是如果你正在为你自己的开源项目工作,那么 Github 是一个分享你的工作的完美方式。数据科学有一个很棒的社区,所以你肯定会听到反馈并从其他人那里学到更多。

这就是数据科学速成班的全部内容。

我希望您喜欢它,并学到了有用的东西,现在您已经准备好解决一些数据科学问题了。

请在评论中告诉我你的反馈,以及你将来还想学习什么。

祝您的数据科学之旅好运!

P.S .如果你想看 本课程的视频版本,可以看看我的 YouTube 频道 :

YouTube 上的数据科学速成班

附言:如果你想了解更多关于数据科学的知识,这里有一些我写的可能有用的文章:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据科学工作

最后,如果你想了解成为一名数据科学家意味着什么,那么看看我的书数据科学工作:如何成为一名数据科学家,它将指导你完成这个过程。

谢谢大家的支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值