提高组织中数据科学团队效率的 5 种有效方法
了解摩擦的根本原因并学习如何克服它们可以帮助数据科学团队成为他们的最佳团队
概述:
作为一名数据科学家,您是否曾经因为利益相关者看不到您带来的价值而感到沮丧?你可能会问自己,“在解释我所做的工作或者我的模型在做什么的时候,我应该走多远?”如果这听起来像你,那么请密切关注这篇文章和下一篇,因为它们都是关于改善数据科学家和其他利益相关者之间的合作。
这是一篇由两部分组成的帖子: 第一部分 涵盖了导致数据科学家和利益相关者之间摩擦的底层假设和差距***;第 2 部分*** 提供了更好的协作和提高生产力的具体步骤。
第一部分:
照片由 Sandeep Singh 在 Unsplash 上拍摄
可理解性:
机器学习(ML)模型天生复杂,难以解释。数据科学家知道,数据输入和输出生成之间的事件不容易映射到一个可解释的过程。在采用 ML 技术之前,世界要简单得多;更容易解释输出是如何产生的。当时,决策科学是在基于规则的系统上运行的;事实上,它仍然如此,尽管现在的规则更加复杂。
治理:
更重要的是,在 ML 模型出现之前,规则在整个过程中都是由利益相关者控制的。(请注意,我对“利益相关者”一词的使用范围很广……可能是总经理、企业主、营销主管、产品经理等。虽然不再是这种情况,但利益相关者在洗钱过程中仍然有很多发言权。例如,在许多环境中,涉众仍然掌握着输入数据的关键。有时他们甚至拥有导致数据输出的大部分过程。
投资:
此外,缺乏理解会导致误解,损害双方之间的信任。这种信任的缺乏会严重阻碍数据科学家在整个端到端的模型构建过程(即,收集、构建、部署和迭代模型)中提供正确支持级别的能力。
为了从 ML 模型中获得更好的结果,通常需要管理层对资源/时间/资本分配的支持。没有这样的投资,ML 模型的结果要么是不合格的,要么更糟,是浪费时间。记住,预测准确率为 50%的模型是没有用的。
以上是从利益相关者的角度(POV)来看的一些主要差距,它们导致了不一致的期望和缺乏信任。虽然这些差距会影响到所有相关方,但从数据科学家的角度来看,这里有一些影响。
缺乏支持和指导:
我曾听数据科学家表示,当公司开始组建数据科学团队或雇佣新的数据科学家时,人们非常兴奋;然而,他们最初感受到的支持和热情在几个月或几个季度后就动摇了。当然,并不是说所有的公司都是一样的,但是当公司开始将数据科学原理/技术融入其产品/流程的旅程时,这种痛苦是最常经历的。同样,如果利益相关者觉得由于沟通问题他们没有得到他们想要的,数据科学家最终会感到失望和/或被忽视。
错位的期望:
公司经常为一个项目雇佣错误类型的数据科学家或错误级别的资历。这通常发生在公司开始使用数据科学,并且不清楚自己想要从这个团队/角色/个人那里得到什么的时候。这种不一致最终会进一步恶化关系,同时浪费所有人的时间和精力。
上面列出的一组间隙确实是可以修复的。这需要时间、努力、学习和建立一些框架,以便两个实体(数据科学家和利益相关者)能够促进更好的合作并一起实现更多。查看第 2 部分中提出的一些解决方案。
第二部分:
这一部分是关于提高数据科学团队的效率,以及改善数据科学家和利益相关者之间的协作以获得更好的结果。
调整目标:
不管具体的项目是什么,在开始工作之前就预期的结果和目标达成一致是一种最佳实践。但是随着机器学习(ML)模型的出现,双方都应该讨论给定项目成功的关键衡量标准。使用目标关键结果(OKRs)这样的框架是实现目标和期望一致的一个很好的方法。
了解问题/业务背景:
一些公司有机地这样做,而另一些公司不这样做。如果数据科学团队是公司的新人,他们应该对问题空间有一个基本的了解。利益相关者必须解释他们想要达到的目标,以及为什么它现在如此重要。产出消费模式的具体情况是这一讨论的主要部分。以下是两种常见的产出消耗情景:
a.由外部方使用(例如,投资者做出信贷决策,客户根据您的欺诈预测改进他们的产品以提供给最终用户,网站/电子商务上的推荐,最终用户与结果进行交互)。
b.由内部客户使用(例如,您的销售团队可以使用销售线索评分模型来确定下一个致电对象,决定向每位销售人员支付多少奖金,改进客户支持的致电路线,或者通过正确的渠道向正确的用户提供正确的内容以提高用户参与度)。
在上述所有情况下,理解什么是可能的,输出是什么样的,以及接收方涉众/团队将如何消费输出是至关重要的。涉众需要花时间,根据需要就问题背景对数据团队进行培训。这一步将避免进一步的灾难——了解背景有助于数据团队在问题背后提出正确的问题,并快速获得答案,而无需原地打转。
分享样本结果和使用:
一旦目标/度量标准被确定并达成一致,最好是让涉众在进入项目之前适应样本结果。现在不是讨论模型本质细节的时候,因为现在还为时过早——在这一点上,您可能已经简单地理解了问题的背景,但还没有找到最适合您的场景的 ML 模型。此外,花太多时间去解决细节可能意味着浪费时间和机会。
如果输出是一个概率,一个介于 0 和 1 之间的值,考虑提供一系列这样的值,并观察它如何转化为业务决策。当你分享输出将是 0 到 1 之间的范围时,这是否让你的利益相关者感到不舒服,或者他们理解吗?如果他们从座位上跳起来,他们会问你更多的问题还是只是不同意?如果是后者,回到上一步;如果是前者,通过提供业内可比的选项,帮助他们理解如何使用输出。如果这对你来说太难了,那么这是一个向更有经验的专业人士寻求帮助的好时机。
模型理解:
有几种方法可以让利益相关者了解你的模型,而不用直接解释它复杂的过程。你不需要把它变得模糊,但是公平地说,甚至你也不确定一个模型选择了哪条特定的路径来得到它的结果。如果你使用的是模型集合,那么情况就更复杂了。
那么,这里有什么可以帮忙的呢?当然,有几种模型和几种形式的输出,如线性回归对逻辑回归对二元分类器对 RNN 对 CNN 等。更重要的是,要有一些通俗易懂的方式来解释模型,通过建立信任的过程来建立信任和促进相互协作。以下是一些例子:
- 分享一个你公司外(或内)广为人知的用例 : 你的用例,以及模型,与别人的有什么不同(例如,一个亚马逊的产品推荐系统)。这可以让利益相关者采取不同的观点,因为他们不会根据你更熟悉的商业背景来判断你。
- 解释输入和数据源 : 让人们了解构建输出的过程。这也有利于其他两个原因——(a)要求进一步投资以完善输入,如收集更多数据、新数据、更高质量的数据源等。(b)设定对超出模型构建范围的工作的期望;有时人们忘记了数据收集,而不是模型本身,是最重要的部分(取决于上下文)。
- 排除误译几率: 一个概率值并不等同于一个排名分数。帮助利益相关者理解不仅仅是输出,还有输出中出错和变化的机会。
- 在历史数据集上运行模拟: 为了建立信任,在将模型投入生产之前,您可以通过共享历史数据旧流程的输入/输出与新流程(也称为 ML 模型)的输入/新输出来获得信任。假设结果是可比较的,那么它可以带来信心。
- 定期举办路演: 通过内部路演和演示来分享你和你的团队正在取得的进步是一个很好的做法。这为您的流程建立了可见性和透明度,并进一步增加了与其他部门协作的机会。
持续协作和改进:
与任何模型构建工作一样,它不是简单的一次性工作,而是迭代的。如果模型从一开始就没有按预期执行,让涉众知道可以帮助你得到急需的反馈循环。为了让您的模型完成它的工作或者验证您是否选择了正确的模型,您需要从您的生产系统中获取知识。这可能进一步需要您的最终用户、内部客户和利益相关者的帮助。公司可能存在严重的预算限制,因此了解模型可以提供多少改进是数据科学团队和利益相关者共同做出的决定。
希望以上是数据科学团队与其他利益相关者合作并开始影响关键业务指标的一些有用的原则和步骤。合作愉快!
5 常见的机器学习安全风险以及如何克服它们
阿里安·达尔维什在 Upsplash 上拍摄的照片
我仍然记得软件开发行业刚刚起步的日子。许多人担心软件漏洞和利用,他们当时是对的,因为黑客利用这些利用并开始实现他们的恶意设计。每次数据泄露和网络安全攻击都被主流媒体广泛报道,包括印刷和电子媒体。
重点更多的是清除个别的错误,而不是识别问题的根本原因。几年后,我们意识到唯一的解决方案是构建安全的软件。几十年后,软件安全已经成为网络安全计划不可或缺的一部分。
随着今天的软件和应用程序使用机器学习和人工智能,保护您正在使用的机器学习和人工智能系统非常重要。不要误会我的意思,机器学习在图像分类、翻译、玩和赢国际象棋等复杂游戏以及其他视频游戏等任务方面比人类做得好得多。
尽管有其优势,一些企业仍然不愿意使用基于机器学习的系统,因为它们存在安全风险。如果你以一种随意的方式采用机器学习,你更有可能增加你的安全风险。这就是为什么对于考虑采用机器学习的企业来说,了解其附带的安全风险非常重要。
在本文中,您将了解五种常见的机器学习安全风险,以及如何降低这些风险。
机器学习安全挑战
保护机器学习系统的最大障碍之一是,机器学习系统中的数据在安全方面扮演着外部角色。这使得保护你的机器学习系统更加困难。在大多数情况下,机器学习系统接受训练的数据集占 60%的风险,而学习算法和源代码占 40%的风险。
这就是为什么对于企业来说,将所有的精力转移到架构风险分析上是很重要的。根据一份报告,架构风险分析是企业需要采取的保护其机器学习系统的重要第一步。该报告进一步强调了与机器学习系统相关的 70 多种风险。保护已经成为机器学习模型不可或缺的一部分的数据是另一个巨大的挑战。
1。愚弄系统
对机器学习系统最常见的攻击之一是通过给出恶意输入来欺骗它们做出错误的预测。简而言之,它们是机器的视错觉,机器向它们展示了一幅现实世界中并不存在的画面,并迫使它们基于此做出决定。覆盖面和关注度都很大,这使得它比其他机器学习安全风险的威胁要大得多。这种类型的攻击通常以机器学习模型为目标。
2。数据中毒
机器学习系统依赖数据进行学习。这就是为什么确保数据的可靠性、完整性和安全性对企业来说非常重要,否则,您可能会得到错误的预测。黑客知道这一点,并试图锁定机器学习系统使用的数据。他们操纵、破坏和毒害数据,以至于让整个机器学习系统陷入瘫痪。
商家应该特别注意,把风险降到最低。机器学习专家应该通过最小化网络罪犯可以控制的训练数据量和控制程度来防止损害。更糟糕的是,你必须保护所有的数据源,因为攻击者可以操纵你可能用于训练机器学习系统的任何数据源。如果你做不到这一点,你的机器学习训练失控的风险就会急剧增加。
3。在线系统的操作
大多数机器学习系统连接到互联网,尤其是在操作使用期间,因为它继续学习。这给了攻击者可乘之机。网络犯罪分子可以通过给错误的系统输入,将机器学习系统误导到错误的方向,甚至更糟的是,慢慢地重新训练它们按照命令行事,做错误的事情。
操纵一个在线机器学习系统不仅容易,而且非常微妙,受害者甚至不会意识到他们的机器学习系统正在别人手里玩。机器学习工程师可以通过选择正确的算法、维护数据所有权记录以及简化和保护系统操作来解决这个问题。
4。转移学习攻击
大多数机器学习系统利用已经训练好的机器学习模型。这种通用的机器学习模型经过调整,通过提供专门的培训来实现特定的目的。这时迁移学习攻击可能是致命的。如果你选择的模型是流行的,攻击者可以发起攻击,甚至可以欺骗你的任务特定的机器学习模型。
始终关注可疑和意外的机器学习行为,以识别这些类型的攻击。由于机器学习算法是在转移过程中有意使用的,这增加了风险,尤其是如果学习转移发生在预期用途之外。最好选择集团发布模型,因为它们清楚地定义了系统的功能以及如何控制风险。
5。数据隐私和保密
如前所述,机器学习算法使用数据进行训练和学习。确保这些数据的隐私和机密性至关重要,尤其是当这些数据被构建到机器学习模型中时。黑客可以发起可以在雷达下飞行的数据提取攻击,这可能会使您的整个机器学习系统面临风险。
即使这些攻击失败,网络罪犯也可以发起更小的子符号函数提取攻击,这不仅需要更少的努力和资源来执行,而且还可以帮助他们执行其他类型的攻击,例如带有恶意输入的对抗性攻击。这意味着你不仅要保护你的机器学习系统免受数据提取攻击,还要防止函数提取攻击。
你如何克服机器学习的安全问题?欢迎在下面的评论区与我们分享。
5 个常见的 Python 错误以及如何避免它们
从初学者到专家,每个人在 python 和机器学习中都容易出现这些错误
JESHOOTS.COM在 Unsplash 上拍照
简介:
Python 是一种出色的编程语言。它使用简单,并提供有效的结果。集成开发环境(ide)有很多选项,如 Pycharm、visual studio code、Jupyter notebooks 等。即使是简单的 Python IDLE 对于初学者来说也是一个非凡的可解释环境。无论您选择哪种开发,都可能会遇到一些错误。这些错误和问题的发生主要是由于判断失误,缺乏对特定主题的深入了解,或者只是一个可能发生在任何人身上的愚蠢错误。
今天,让我们讨论五个最常见的错误,从初学者到专家,任何人都可能由于缺乏注意力、知识或预防措施而犯这五个错误。我们还将讨论打印的错误类型。然后理解其中的原因以及如何避免特定的错误。所以事不宜迟,让我们从五个最常见的 python 错误以及如何防止它们开始。
5 个常见错误及其相应的修复方法:
1.缩进—
缩进是指代码行或代码块开头的空格数。这种缩进空格可能出现在条件语句(如 if-else 语句)之后或函数之后。通常的缩进量是使用空格键按钮缩进四个空格,或者按一次 Tab 键。缩进在 python 中非常重要。在其他编程语言(如 C、C++或 Java)中,缩进可以替代花括号“{}”。
你会得到下面的缩进错误—
- 当您忘记在函数或代码块的起始行进行缩进时,就会出现此错误。
**IndentationError:** expected an indented block
- 当代码块或程序中没有出现缩进时,会出现此错误。当您在所需的代码块中给出两个空格,而该特定行的描述不适合整个代码时,通常会发生这种错误。
**IndentationError:** unindent does not match any outer indentation level
- 代码中的一行没有与所有其他缩进对齐。
**IndentationError:** unexpected indent
当您试图盲目地将代码从网站复制并粘贴到您的工作环境中时,也会出现这些错误。这个问题的主要解决方案是确保间距的一致性,并通过查看出现的每个错误的描述来解决这些问题。
2.保存与模块名相同的文件名—
当您保存的文件名类似于模块名,并且您正在利用该特定模块调用您各自程序中的函数时,通常会出现此错误。这个错误会导致导入错误,因为您的 python 文件替换了实际存在的库模块。因此,当您试图在运行模块时调用函数时,它根本不起作用。在下面给出的代码块中可以看到这种错误的一个例子。在这里,我将文件保存为 gtts.py,这是我得到的—
ImportError: cannot import name 'gTTS' from 'gtts'
这个错误有一个简单的修复方法。只是不要将文件名保存为模块名,将会用到它。如果您想保留特定的模块名,只需在文件名末尾添加一个简单的下划线或数字,就可以修复您的错误。😃
要以更简洁的方式理解 gTTS 模块,请查阅我以前的一篇文章。
[## 如何使用 Python 开始使用 Google 文本到语音转换
从零开始的文本到语音转换简介
towardsdatascience.com](/how-to-get-started-with-google-text-to-speech-using-python-485e43d1d544)
3.把括号弄乱—
基本上有三种类型的支架,每种都有特定的用途。方括号“[]”用于列表和索引,花括号“{}”用于字典或集合,圆括号“()”用于元组操作。初学者有可能经常会对要使用的正确括号感到困惑,从而导致一些可能发生的错误。
- 用变量声明列表的一种方法是 a = []。声明列表的另一种方法如下:a = list()。然而,当你把这里的括号搞乱成= list[],你最终会得到下面的语法错误。
**SyntaxError:** invalid syntax
- 在处理列表或元组的索引时,我们总是使用方括号“[]”。在使用像 x = [1,2,3]这样的列表或像 x = (1,2,3)这样的元组,并像 x(1)那样写入索引时,将导致以下错误。
**TypeError**: 'list' object is not callable
或者
**TypeError**: 'tuple' object is not callable
解决这个问题的简单方法是确保您总是使用方括号来获取特定索引的值。
这个问题可以用 x[1]来解决,你会得到值 2。
4.打印数字形状时尝试使用括号—
阐述并稍微深入下一个与前一个非常相似的错误。当你试图利用 numpy 模块进行机器学习时,下一个问题更像是初学者或新手的错误。需要注意的是,numpy 中的 shape 是一个属性,而不是一个函数。它返回一个由 numpy 数组的形状组成的元组。元组中的形状值可以通过寻址所需上下文的相应索引来访问。理解此错误的示例如下。
这会导致以下错误。
**TypeError**: 'tuple' object is not callable
解决这个问题的简单方法是使用不带括号的 a.shape。此修复将提供实现完美解决方案所需的精确结果。
5.局部和全局变量—
局部变量是在特定代码块或代码语句中定义的变量。这个局部变量只能在那个特定的代码块中访问,而不能在其他地方访问。形式参数标识符也表现为局部变量。这些也是在函数中被定义为虚拟变量的变量。
全局变量是在主程序中定义的,而不是在函数或特定代码中定义的。这个变量在整个程序中都是可访问的。试图访问主程序中的局部变量时出现名称错误。
**NameError**: name 'x1' is not defined
最好的办法是在代码块中使用局部变量,如果你想在整个程序中使用这个变量,那么就使用全局变量格式。
结论:
这是我在开始学习 python 和机器学习时最常犯的五个错误。我毫不羞愧地承认,即使在今天,我偶尔也会弄糟这些愚蠢的事情。然而,我希望我们都了解了这些错误发生的原因,以及如何准确地预防它们。希望我们将来都能避免这些错误。至少,不要被卡住,跳到堆栈溢出来寻找解决问题的方法。如果我遗漏了从初学者到专家的任何其他常见错误,请告诉我,我将确保在下一篇文章中涵盖这些错误。
我强烈建议所有观众看看下面两篇文章,开始你掌握机器学习的旅程。它们将不断更新,本系列将从头开始涵盖与 python 进行机器学习相关的每个主题和算法。
了解精通机器学习的基本要求
towardsdatascience.com](/starting-your-journey-to-master-machine-learning-with-python-d0bd47ebada9) [## 机器学习所需的 Python 基础知识及其库模块
学习 python 数据结构的基础知识,对机器所需的每个库有直观的理解…
towardsdatascience.com](/basics-of-python-and-its-library-modules-required-for-machine-learning-51c9d26026b8)
感谢大家阅读这篇文章。祝大家度过美好的一天!
每个数据科学家都应该知道的 5 项常见技能
意见
仔细看看我作为数据科学家所使用的流行技能。
目录
- 介绍
- 结构化查询语言
- Python 还是 R
- Jupyter 笔记本
- 形象化
- 沟通
- 摘要
- 参考
介绍
数据科学和机器学习经常需要大量的技能。然而,作为一名数据科学家,我在几家公司工作了几年,我想强调数据科学家应该知道的五项常见技能。作为一名数据科学家,你可能会在职业生涯中用到这些技能。我将概述 SQL、Python/R、Jupyter Notebook、可视化和通信。
当然,在工作过程中,您会遇到更多必需的技能和有益的技能,但我希望这些能作为一个良好的开端,或增强您目前作为数据科学家的旅程。
结构化查询语言
作为一名正在学习的数据科学家,甚至是一名专业的数据科学家,您可能会惊讶地看到这第一项技能。它通常与数据分析师相关联,而数据科学家则专注于编程语言和机器学习算法。然而,为了开始使用 Python、R 或您的机器学习算法,您需要收集数据。作为一名数据科学家(以及我认识的其他数据科学家),这些年来我能想到或亲身经历的最流行的技能是 SQL。大多数公司都有一个数据库,里面有你可以查询的表格。查询结果可能是您用于数据科学模型的数据集。虽然通常情况下,成为一名成功的数据科学家并不需要成为 SQL 专家,但是您应该熟悉一些关键的 SQL 概念和命令。
我遇到的最流行的 SQL 概念是:
SelectInner JoinsLeft JoinsWhereGroup ByOrder ByAliasCase WhenSubqueries Common Table Expression
例子
下面是一个简化的查询示例,我将运行该查询来获取我的数据科学数据集。
*select t1.column_1, t1.column_2, t2.column_3**from table_1 t1**inner join table_2 t2 on t2.shared_id = t1.shared_id**where date > ‘2020–08–01”**group by t1.column_1**order by t1.column_1*
Python 还是 R
我在学校学过 R,并在一些项目中使用它,但我主要使用 Python,所以我将讨论 R 之上的语言。数据科学家可能使用的另一个工具是 SAS。然而,Python 是有益的,因为大量的库或包已经包含了常见的数据科学和机器学习算法。您可以使用准备好的库,这些库涵盖了广泛的模型,如随机森林、逻辑回归、决策树等。除了访问大量重要信息并使您的数据科学更加高效之外,您还可以在 Python 中使用面向对象的格式(类、方法或函数、模块等)。)。这种格式有助于使您的模型更有效地运行,同时还创建了一个可伸缩的部署框架。此外,当处于 OOP 格式时,它帮助您的模型变得更容易部署,因为您可以自己完成或者与软件工程师、数据工程师或机器工程师就您的部署进行交流。
Python 中一些有用的库包括,但不限于:
NumPySciPyPandasKerasTensorFlowSciKit-LearnPyTorch
我可能在探索性数据分析期间使用 NumPy 和 Pandas 最多,在数据科学的模型建立期间使用 SciKit-Learn,在更多的机器学习和深度学习练习中使用 Keras 和 TensorFlow。我自己没有用过 PyTorch,但听说它很受欢迎。
Jupyter 笔记本
照片由JESHOOTS.COM在Unsplash【2】上拍摄。
使用 Python 时,还可以使用流行的 Jupyter Notebook 工具来组织和研究数据集,并执行主要的代码集。在导入数据集、应用探索性数据分析、特征工程和模型构建时,我通常首先使用 Jupyter 笔记本。我认为它是一个地方,在将我的代码最终确定为最终将被集成和部署的 OOP 格式之前,有我的草稿。在单元格中添加注释以及创建标题和项目符号很好,这样您就可以轻松地与其他数据科学家合作,或者如果您希望在将来回到您的模型并找到记录良好的单元格,也很好。
下面是Jupyter 笔记本【3】:
Jupyter 笔记本是一个基于网络的交互式计算平台。该笔记本结合了现场代码,方程式…
jupyter.org](https://jupyter.org/)
形象化
能够可视化数据科学过程的几个部分非常重要。您可能希望可视化业务问题、数据集以及可视化模型本身。也许数据科学中最流行的可视化时间是在模型建立之后。当你向利益相关者解释你的结果时,你将描述复杂的想法和输出,这些可以更好地用视觉来解释。它还可以帮助您自己和团队中的其他人更好地了解模型正在执行什么,以及当您添加可视化时它是如何工作的。
您可以用于数据科学流程的一些可视化工具包括但不限于:
TableauLookerPowerBIPython Libraries (Matplotlib, Plotly, Seaborn)
我个人倾向于使用 Tableau 和 Seaborn,但它们都是用于数据科学的非常有用的工具。
沟通
除了视觉化,你还可以期待交流。
沟通是一项技能,在数据科学教育或训练营中没有教授多少,但作为一名数据科学家,这是一项至关重要的技能。
在开始编码的数据科学过程之前,您必须与几个不同的利益相关者和主题专家交谈。您可能需要说服他们,对于特定的情况,数据科学首先是必要的。一旦您成功完成了流程的这一部分,您将会看到模型本身的优势、关键点和更新,以及最终模型的结果和影响。
在数据科学过程的这些部分,你可以期望使用沟通:
Business problem with stakeholdersProof of concept with subject-matter expertsUpdates on modelResults and impact of the model
摘要
照片由克里斯蒂娜@ wocintechchat.com在Unsplash【4】上拍摄。
如您所见,数据科学家应该知道几项关键技能。你可以花几个小时来描述技能,但最好是一天一天地开始学习,不要不知所措。您应该知道的五项常见数据科学技能是:
- SQL
- Python 或者 R
- Jupyter 笔记本
- 可视化
- 交流
如果您能想到您使用的任何通用技能,以便其他数据科学家可以在进入就业市场时进行预测,或者作为当前的数据科学家提升自己,请在下面发表评论。
感谢您的阅读!
参考
[1]由托马里克在 Unsplash 上拍摄的照片,(2018)
[2]JESHOOTS.COM 在 Unsplash 上拍摄的照片,(2017)
[3]朱庇特项目,朱庇特项目|首页,(2020)
[4]照片由克里斯蒂娜@ wocintechchat.com在Unsplash(2019)上拍摄
数据科学家的 5 个常见 SQL 面试问题
帮助您发展 SQL 技能,在任何面试中胜出
虽然这并不是这份工作中最吸引人的部分,但对 SQL 有深刻的理解是在任何以数据为中心的工作中取得成功的关键。事实是,除了 SELECT FROM WHERE GROUP BY ORDER BY 之外,SQL 还有很多其他方式。你知道的函数越多,你就越容易操作和查询任何你想要的东西。
本文有两点希望学习和交流:
- 学习和教授基本基础之外的 SQL 函数
- 经历一些 SQL 面试练习问题
这些问题不是别人,正是取自 Leetcode!如果你还没有,就去看看吧!
目录
问题 1:第二高的薪水
编写一个 SQL 查询,从 *Employee*
表中获取第二高的薪水。例如,给定下面的雇员表,查询应该返回 *200*
作为第二高的薪水。如果没有第二高的薪水,那么查询应该返回 *null*
。
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
解决方案 A:使用 IFNULL,OFFSET
- IFNULL( 表达式,alt ) : ifNULL()如果为 null 则返回指定值,否则返回预期值。如果没有第二高的薪水,我们将用它返回 null。
- OFFSET : offset 与 ORDER BY 子句一起使用,忽略您指定的前 n 行。这将是有用的,因为你想得到第二排(第二高的薪水)
SELECT
IFNULL(
(SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1
), null) as SecondHighestSalary
FROM Employee
LIMIT 1
解决方案 B:使用 MAX()
这个查询说选择不等于最高工资的最高工资,相当于说选择第二高的工资!
SELECT MAX(salary) AS SecondHighestSalary
FROM Employee
WHERE salary != (SELECT MAX(salary) FROM Employee)
问题 2:重复的邮件
编写一个 SQL 查询,在一个名为 *Person*
的表中查找所有重复的电子邮件。
+----+---------+
| Id | Email |
+----+---------+
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
+----+---------+
解决方案 A:子查询中的 COUNT()
首先,创建一个子查询来显示每封电子邮件的频率计数。然后在计数大于 1 时过滤子查询。
SELECT Email
FROM (
SELECT Email, count(Email) AS count
FROM Person
GROUP BY Email
) as email_count
WHERE count > 1
解决方案 B: HAVING 子句
- HAVING 是一个子句,本质上允许您将 WHERE 语句与 aggregates (GROUP BY)结合使用。
SELECT Email
FROM Person
GROUP BY Email
HAVING count(Email) > 1
问题#3:温度上升
给定一个 *Weather*
表,编写一个 SQL 查询来查找与前一个(昨天的)日期相比温度更高的所有日期的 id。
+---------+------------------+------------------+
| Id(INT) | RecordDate(DATE) | Temperature(INT) |
+---------+------------------+------------------+
| 1 | 2015-01-01 | 10 |
| 2 | 2015-01-02 | 25 |
| 3 | 2015-01-03 | 20 |
| 4 | 2015-01-04 | 30 |
+---------+------------------+------------------+
解决方案:DATEDIFF()
- DATEDIFF 计算两个日期之间的差异,并用于确保我们将今天的温度与昨天的温度进行比较。
简单地说,该查询是说,选择某一天的温度高于昨天温度的 id。
SELECT DISTINCT [a.Id](http://a.id/)
FROM Weather a, Weather b
WHERE a.Temperature > b.Temperature
AND DATEDIFF(a.Recorddate, b.Recorddate) = 1
问题 4:部门最高工资
*Employee*
表包含所有员工。每个雇员都有一个 Id,一份薪水,还有一个部门 Id 列。
*+----+-------+--------+--------------+
| Id | Name | Salary | DepartmentId |
+----+-------+--------+--------------+
| 1 | Joe | 70000 | 1 |
| 2 | Jim | 90000 | 1 |
| 3 | Henry | 80000 | 2 |
| 4 | Sam | 60000 | 2 |
| 5 | Max | 90000 | 1 |
+----+-------+--------+--------------+*
*Department*
表包含公司的所有部门。
**+----+----------+
| Id | Name |
+----+----------+
| 1 | IT |
| 2 | Sales |
+----+----------+**
编写一个 SQL 查询来查找每个部门中工资最高的雇员。对于上面的表,您的 SQL 查询应该返回下面的行(行的顺序无关紧要)。
**+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT | Max | 90000 |
| IT | Jim | 90000 |
| Sales | Henry | 80000 |
+------------+----------+--------+**
****解决方案:在条款中
- 子句中的允许您在 WHERE 语句中使用多个 OR 子句。例如,country = 'Canada '或 country = 'USA '与 WHERE country IN ('Canada ‘,’ USA ')相同。****
- 在这种情况下,我们希望筛选 Department 表,只显示每个部门的最高工资(即 DepartmentId)。然后我们可以连接两个表,其中 DepartmentId 和 Salary 位于筛选的 Department 表中。
**SELECT
Department.name AS 'Department',
Employee.name AS 'Employee',
Salary
FROM Employee
INNER JOIN Department ON Employee.DepartmentId = Department.Id
WHERE (DepartmentId , Salary)
IN
( SELECT
DepartmentId, MAX(Salary)
FROM
Employee
GROUP BY DepartmentId
)**
问题 5:交换座位
玛丽是一所中学的老师,她有一张表 *seat*
存储着学生的名字和他们相应的座位号。列 id 为连续增量。玛丽想给相邻的学生换座位。
你能写一个 SQL 查询来为 Mary 输出结果吗?
**+---------+---------+
| id | student |
+---------+---------+
| 1 | Abbot |
| 2 | Doris |
| 3 | Emerson |
| 4 | Green |
| 5 | Jeames |
+---------+---------+**
对于样本输入,输出为:
**+---------+---------+
| id | student |
+---------+---------+
| 1 | Doris |
| 2 | Abbot |
| 3 | Green |
| 4 | Emerson |
| 5 | Jeames |
+---------+---------+**
注: 如果学生人数为奇数,则无需换最后一个座位。
解决方案:CASE WHEN
- 想一个例子,当 THEN 语句类似于代码中的 IF 语句时。
- 第一个 WHEN 语句检查是否有奇数行,如果有,确保 id 号不变。
- 第二个 WHEN 语句为每个 id 加 1(例如 1,3,5 变成 2,4,6)
- 类似地,第三个 WHEN 语句将每个 id 减 1(2,4,6 变成 1,3,5)
**SELECT
CASE
WHEN((SELECT MAX(id) FROM seat)%2 = 1) AND id = (SELECT MAX(id) FROM seat) THEN id
WHEN id%2 = 1 THEN id + 1
ELSE id - 1
END AS id, student
FROM seat
ORDER BY id**
就是这样!如果有任何不清楚的地方,请在下面评论,我将尽我所能澄清任何事情——谢谢!
感谢阅读!
如果你喜欢我的工作,想支持我…
- 支持我的最好方式就是在媒体T2 上关注我。
- 在推特** 这里成为第一批关注我的人之一。我会在这里发布很多更新和有趣的东西!**
- 此外,成为第一批订阅我的新 YouTube 频道 这里!
- 在 LinkedIn 这里关注我。
- 在我的邮箱列表** 这里报名。**
- 查看我的网站,terenceshin.com。
更多相关文章
为你的面试复习统计知识的资源!
towardsdatascience.com](/40-statistics-interview-problems-and-answers-for-data-scientists-6971a02b7eee) [## 亚马逊的数据科学家面试实践问题
一些亚马逊面试问题的演练!
towardsdatascience.com](/amazon-data-scientist-interview-practice-problems-15b9b86e86c6) [## 微软数据科学面试问答!
微软面试中一些数据科学问题的演练
towardsdatascience.com](/microsoft-data-science-interview-questions-and-answers-69ccac16bd9b) [## 更多微软数据科学面试问题和答案
微软面试中一些数据科学问题的另一个演练
towardsdatascience.com](/more-microsoft-data-science-interview-questions-and-answers-f9ee8337072c) [## 谷歌的数据科学面试脑筋急转弯
作为谷歌数据科学面试的一部分,他们喜欢问一些他们称为“解决问题”的问题…
towardsdatascience.com](/googles-data-science-interview-brain-teasers-7f3c1dc4ea7f)**
5 计算机视觉和深度学习基础
需要更好地理解最新的 CV & DL 项目是如何工作的
马里乌斯·马萨拉尔在 Unsplash 上的照片
当我整理我以前的深度技术项目列表,然后谈论每个项目时,我意识到,编写一个简单易懂的指南,涵盖计算机视觉和深度学习的基础知识,以便非技术读者可以更好地了解最新的深度技术项目,这可能是一个好主意。第一部分是关于图像处理的基础知识(传统的计算机视觉技术,今天仍然适用),然后第二部分是深度学习的相关内容:)
为什么计算机视觉很重要?
我个人把它理解为我们所知的虚拟世界和物理世界之间的桥梁。正是我们植入机器的眼睛让它们“获得意识”并以前所未有的智能方式导航我们的世界。它实际上用于:
- 机器人,
- 自动驾驶汽车,
- 智能商店(像亚马逊 Go ),
- 优化营销内容,
- 面部识别应用,
- 医疗成像/手术、军事、娱乐等行业
现在有大量其他计算机视觉项目正在进行,毫无疑问,计算机视觉应用将激增,然后无缝集成到我们的日常生活中——改变我们的生活方式。所以废话不多说,
我们开始吧!ᕙ(▿-ᕙ)
数字图像基础
作者创建的图像
参考上图,假设我们有一个尺寸为 400 x 400 的数字图像,这意味着我们的图像是 400 像素行(x 方向)和 400 像素列(y 方向)。所以数字图像是用二维矩阵来表示的。每个单独的像素将包含信息(如强度、数据类型、alpha 值等),计算机将理解如何基于这些信息解释或处理图像。
传统计算机视觉
自 20 世纪 70 年代以来,计算机视觉算法就已经存在,图像操作大体上可以分为两个主要类别— 空间域和频域。了解哪些图像处理方法是可用的可能是有帮助的,因此可以在将图像馈送到深度学习算法之前进行图像预处理,以便产生更好的结果。
空间域方法 —我们按原样处理数字图像(原始数字图像已经在空间域中)。参考上图,因为每个像素都包含一组特定的信息,所以我们可以基于特定的技术来操作和更改这些信息,以获得特定的结果。方法包括:
- 点处理变换(对图像的每个单独像素应用变换函数),
- 区域/掩模处理变换(对图像中的像素邻域应用变换函数),
- 几何变换(如旋转、缩放和扭曲),
- 帧处理转换(输出像素值是基于涉及两个或更多图像的操作生成的)
频域方法 —与空间域方法不同,我们首先将图像转换为频率分布(使用傅立叶变换、拉普拉斯变换或 z 变换等方法),然后处理图像。在这之后,我们执行逆变换,然后在空间域中得到新的图像。
作者的图表,左边的图片取自作者在 CZ4003 课程中的作业
如果我们看上面的图表,我们可以看到左边的原始数字图像非常嘈杂(对角线穿过图像)。如果我们对该图像应用傅立叶变换,我们可以看到右侧的图像(应用了 fftshift,因此零频率分量位于阵列中心)在图像中间有亮点(“峰值”)。这些峰值对应于左边的噪声模式(那些穿过图像的对角线/边缘)。
作者的图表,右边的图片取自作者在 CZ4003 课程中的作业
如果我们将这些亮点的强度设置为 0,然后进行傅里叶逆变换,我们可以看到一些对角线(噪声)逐渐消失。
如本例所示,我们可以利用图像处理技术(空间域方法或频率域方法)首先对图像进行预处理,然后再将其输入到深度学习模型中。此外,一些最流行的传统计算机视觉技术包括:
- 突出边缘、线条和显著区域的图像过滤和变换技术,
- 尺度不变特征变换( SIFT ),
- 加快了健壮的功能( SURF ),
- 来自加速分段测试(快速)的特征,
- 二元鲁棒独立基本特征(简称),
- 定向快速旋转简报(圆球)
我已经包含了链接,所以你可以点击它,阅读更多关于每个算法。接下来,我们将看看一些常见的计算机视觉任务,如果传统的计算机视觉技术不足以解决问题,深度学习可以帮助我们(并且正在该领域广泛探索)。
具有深度学习的计算机视觉
简而言之,深度学习是受人脑神经网络的启发和松散建模的——神经元相互连接,接收一些输入,然后根据权重和偏差值发出输出。深度学习帮助我们完成的常见计算机视觉任务包括——图像分类、定位/显著性检测、对象识别、检测和跟踪、人脸识别、场景理解、图像生成和图像分析。一些最流行的深度学习技术(监督、非监督、半监督)包括:
- 卷积神经网络(CNN,或 ConvNet),
- 生成对抗网络(GAN),
- 深度信念网络(DBNs)和深度波尔兹曼机器(DBMs),
- 堆叠式自动编码器,
- 深度强化学习(DRL),
还有很多。我将尝试快速概述卷积神经网络(CNN)的工作原理(以使本文相对简短易读)。如果你想了解更多关于其他深度学习技术的信息,请尝试谷歌搜索——甘真的很酷,这是人们试图用来产生艺术的东西:)无论如何,这里是(CNN):
作者图片——还有其他更好的图表和解释,比如(链接)
简而言之,这就像通过一系列“东西”(更具体地说是卷积层、RELU 层、汇集或下采样层,然后是全连接层例如)来传递一系列数字图像,这些层将提取和学习关于图像的最重要信息,然后建立神经网络模型。然后,一旦这个模型被训练,我们可以通过这个模型传递测试图像,如果这个模型产生良好的结果,它应该能够预测它是什么。如果你不想训练你自己的模型,网上也有各种预训练的模型。
稍微不相干的旁注——我仍然记得在学校图书馆用 Google Collab 训练一个神经网络模型,然后因为他们不得不关门而把我赶出去的时候,我就站在图书馆门口等待我的模型完成训练,因为我需要无线网络(ㆆ_ㆆ).所以,重点是,如果你没有硬件(比如 GPU)来训练你的模型,你可以考虑谷歌协作笔记本。你只需要无线网络。
关于数据集的快速说明—通常,我们使用数据集来训练、验证和测试我们的模型。使用的流行数据集:
- COCODataset(查看他们的演示
- CIFAR-10 或 CIFAR-100(链接此处)
- MNIST(手写数字,链接此处)
- 时尚 MNIST(链接此处)
- ImageNet(链接此处)
- IMDB-Wiki 数据集(链接此处)
- 打开图像(链接此处)
- 更详尽的名单,请点击这里
本文到此为止!正如在各种文章中提到的,我认为将传统的计算机视觉方法与深度学习技术相结合将更好地帮助我们解决我们的计算机视觉问题。此外,我知道你们中的一些可爱的读者是深度技术研究人员和从业者,他们比我更有经验和经验——如果有任何需要纠正的地方或您对此有任何想法,请随时告诉我。
快乐的计算机视觉!
每个数据科学家都应该知道的 5 个概念
意见
多重共线性、编码、抽样、误差和故事讲述。
照片由un splash【1】上的rom son preech wit拍摄。
目录
- 介绍
- 多重共线性
- 一键编码
- 抽样
- 误差度量
- 讲故事
- 摘要
- 参考
介绍
我已经写了一些数据科学家在职业生涯中可能会用到的常用技能,所以现在我想强调一些数据科学的关键概念,这些概念对了解和以后使用会有所帮助。我可能正在讨论一些你已经知道的,和一些你不知道的;我的目标是提供一些专业的解释,为什么这些概念是有益的,不管你现在知道什么。多重共线性、一键编码、欠采样和过采样、误差指标,最后,讲故事,是我在考虑专业数据科学家的日常时首先想到的关键概念。最后一点可能是技能和概念的结合,但我仍然想强调它对作为数据科学家的日常工作生活的重要性。我将在下面阐述所有这些概念。
多重共线性
Unsplash 上创意交流的照片[2]。
虽然这个词有些长,不好说,但是当你把它分解开来,多重共线性就简单了。多意味着多,共线性意味着线性相关。多重共线性可以描述为两个或多个解释变量解释相似信息或在回归模型中高度相关的情况。这个概念引起关注有几个原因。
对于某些建模技术,它会导致过度拟合,最终导致模型性能下降。
数据变得冗余,并且模型中不需要每个特征或属性。因此,有一些方法可以找出应该移除哪些构成多重共线性的要素。
- 方差膨胀因子(VIF)
- 相关矩阵
这两种技术在数据科学家中普遍使用,尤其是相关矩阵和图——通常以某种热图的形式可视化,而 VIF 则鲜为人知。
VIF 值越高,要素对回归模型越不可用。
对 VIF 来说,一个伟大而简单的资源是:
统计定义>方差膨胀因子您可能想先阅读这篇文章:什么是多重共线性…
www.statisticshowto.com](https://www.statisticshowto.com/variance-inflation-factor/)
一键编码
模型中这种形式的特征转换被称为一键编码。您希望通过对分类特征进行编码来用数字表示它们。尽管分类特征本身具有文本值,但一键编码会转置该信息,以便每个值都成为特征,并且行中的观察值被表示为 0 或 1。例如,如果我们有分类变量性别,一键编码后的数字表示看起来像这样(之前是性别,之后是男/女):
一键编码前后。作者截图[4]。
当您不仅要处理数字特征,还需要创建带有文本/分类特征的数字表示时,这种转换非常有用。
抽样
当你没有足够的数据时,过采样可能被建议作为一种补偿形式。假设您正在处理一个分类问题,并且您有一个少数民族类,如下例所示:
class_1 = 100 rowsclass_2 = 1000 rowsclass_3 = 1100 rows
如您所见, class_1 的数据量很少,这意味着您的数据集是不平衡的,将被称为少数类。有几种过采样技术。其中一种叫做SMOTE【5】,代表 合成少数过采样技术 。SMOTE 工作的方式之一是利用 K-neighbor 方法寻找最近邻来创建合成样本。对于欠采样,有类似的技术使用相反的方法*。*
当您的类或回归数据中存在异常值,并且您希望确保您的采样是您的模型将来运行的数据的最佳表示时,这些技术非常有用。
误差度量
在数据科学中,分类和回归模型都使用了大量的误差指标。根据 sk learn【6】,这里有一些你可以专门用于回归模型的:
[**metrics.explained_variance_score**](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.explained_variance_score.html#sklearn.metrics.explained_variance_score)
[**metrics.max_error**](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.max_error.html#sklearn.metrics.max_error)
[**metrics.mean_absolute_error**](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_absolute_error.html#sklearn.metrics.mean_absolute_error)
[**metrics.mean_squared_error**](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.html#sklearn.metrics.mean_squared_error)
[**metrics.mean_squared_log_error**](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_log_error.html#sklearn.metrics.mean_squared_log_error)
[**metrics.median_absolute_error**](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.median_absolute_error.html#sklearn.metrics.median_absolute_error)
[**metrics.r2_score**](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.r2_score.html#sklearn.metrics.r2_score)
[**metrics.mean_poisson_deviance**](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_poisson_deviance.html#sklearn.metrics.mean_poisson_deviance)
[**metrics.mean_gamma_deviance**](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_gamma_deviance.html#sklearn.metrics.mean_gamma_deviance)
从上面回归的两个最流行的误差度量是 MSE 和 RMSE:
MSE: 概念是→平均绝对误差回归损失(sklearn)
RMSE: 概念是→均方误差回归损失(sklearn)
对于分类,您可以使用准确性和 AUC(曲线下面积)来评估模型的性能。
讲故事
我想添加一个独特的数据科学概念,那就是讲故事。我怎么强调这个概念的重要性都不为过。它可以被视为一种概念或技能,但这里的标签并不重要,重要的是你在商业环境中如何清晰地表达你的问题解决技巧。许多数据科学家将只关注模型的准确性,但却无法理解整个业务流程。该流程包括:
- 是什么生意?
- 什么问题?
- 我们为什么需要数据科学?
- 这里数据科学的目标是什么?
- 我们什么时候能得到可用的结果?
- 我们如何应用我们的结果?
- 我们的结果有什么影响?
- 我们如何分享我们的结果和整体流程?
如你所见,这些点都不是模型本身/准确性的提高。这里的重点是你将如何使用数据来解决你公司的问题。熟悉利益相关者和你最终将与之共事的非技术同事是有益的。您还将与产品经理一起工作,他们将与您一起评估问题,并与数据工程师一起在运行基本模型之前收集数据。在建模过程结束时,您将与关键人员分享您的结果,这些人通常希望看到模型的影响,最有可能是某种视觉表现形式( Tableau、Google 幻灯片等)。),所以能够展示和交流也是有益的。
摘要
数据科学家和机器学习工程师应该知道很多关键概念。本文中讨论的五种方法是:
MulticollinearityOne-hot encodingSamplingErrorStorytelling
请在下面随意评论一些您日常关注的数据科学概念,或者您认为其他人应该了解的概念。感谢你阅读我的文章,希望你喜欢!
下面是一些参考资料和链接,可以提供关于本文中讨论的主题的更多信息。
我还想强调我写的与本文相关的另外两个故事[8]和[9]:
仔细看看我作为数据科学家所使用的流行技能。
towardsdatascience.com](/5-common-skills-data-scientists-should-know-3247b2b12318) [## 每个数据科学家都应该知道的 5 个专业项目
客户细分、文本分类、情感、时间序列和推荐系统。
towardsdatascience.com](/5-professional-projects-every-data-scientist-should-know-e89bf4e7e8e1)
这两篇文章强调了作为一名专业数据科学家,您需要了解或熟悉并期望最终聘用的关键技能和项目。
参考
[1]照片由罗姆森·普里查维特在Unsplash(2020)拍摄
[3]统计如何,方差膨胀系数,(2020)
[4] M.Przybyla,一键编码截图,(2020 年)
[5] G .勒迈特,f .诺盖拉,d .奥利维拉,c .阿里达斯修订版 12b2e0d2, imblearn.over_sampling。击打,(2016–2017)
[6] scikit-learn 开发者, 3.3。度量和评分:量化预测质量(2007–2020)
[8] M.Przybyla,每个数据科学家都应该知道的 5 个通用技能,(2020)
[9] M.Przybyla,每个数据科学家都应该知道的 5 个专业项目,(2020)
5 个具体的真实项目来构建您的数据科学组合
独特性是关键,而不是花哨
克拉克·蒂布斯在 Unsplash 上拍摄的照片
你想进入数据科学领域吗?恭喜你!那(仍然)是正确的选择。
市场目前变得更加艰难。所以,你必须对漫长的 T4 招聘之旅和许多拒绝做好心理准备。我假设您已经阅读了数据科学组合至关重要,以及如何构建它。大多数时候,你会做数据处理和争论,而不是应用花哨的模型。
我不断被问到的一个问题是关于酷数据的具体数据源和构建这样一个投资组合的项目机会。
我为你的数据科学投资组合提供了以下五个想法,以及一些关于开发独特性的提示。
数据科学项目的五个具体想法
1。当地非营利组织的客户分析
非营利组织的一个基本任务是在正确的时间、正确的地点找到正确的人,通过正确的方式为慈善活动捐款。当这一点得到优化时,非营利组织可以筹集更多的资金,开展更多的活动。
是什么让这个项目变得有趣?
首先,大多数非营利组织拥有大量数据,不一定是数字化形式的,而且往往质量不高。主要任务是建立一个数据库,数据处理,并获得可用形式的数据。你要学会组织整个混乱的数据,这仍然是数据科学工作的 80%。
第二,你为当地社区做了一些好事,你表现出了你的社会责任感。你和不是数据专家的人交流。两者都显示了数据科学职位所需的软技能。
除了我的专业工作之外,我还自愿为一个帮助贫困儿童的组织和一个为老年人提供家庭护理的组织做这些项目。拥有这些经历可以建立对你个人的信任,并且为许多其他令人兴奋的项目打开大门。
最后,非营利组织的工作与私人银行或财富管理相同。他们还必须在正确的时间获得正确的客户,通过正确的活动为他们带来金钱。我可以告诉你。这些数据的质量也不比非营利组织的好。你可以直接利用你在其他行业的经验。
如何开始?
我通过我的网络找到了非营利组织。你的家人、亲戚和朋友中总会有人加入非营利组织。然后,我同意了第一次了解会议,并向他们解释了我的技能以及这些分析的价值。我给他们举了谷歌和脸书的例子。我还搜索了其他非盈利组织的公开信息,以提供线索。在我给他们几天时间考虑之后,在每种情况下,他们都回来同意做这个项目。然后,我开始了整个数据处理工作。
当数据准备好使用时,您可以完成传统的描述性、预测性和规范性分析周期。
2。** CERN
CERN 主要以其领先的粒子物理基础研究和全球最大的粒子实验室而闻名。
通常不为人知的是,CERN 将其开发并用于研究的大部分数据、代码、算法和工具公之于众。他们拥有复杂的算法测试工具箱,并提供 1 维、2 维、3 维和 4 维图像。他们拥有更多。
欧洲粒子物理研究所并不称之为“创新”。不,这些只是执行他们“真正的”创新任务的“工具”:粒子物理学的新前沿。
我只能强烈建议投入一些时间,浏览他们的网页,探索所有可用于数据分析的数据和工具。这是他们的核心业务之一,而且非常复杂。我今天仍然学到很多东西,得到很多新的想法。
网页是嵌套的。请不要失去你第一次浏览它的激情!
在 CERN 开放数据门户上,你可以找到 2pb 的粒子物理数据,用于开始你自己的分析。
是什么让这个项目变得有趣?
当你作为一名数据科学家开始一个项目时,你通常只知道在某个地方有一些数据。首先,您必须探索哪些数据是可用的,在哪里可以找到这些数据,这些数据是否有冗余,谁了解并可以访问这些数据,等等。
从 CERN 的数据开始,当你不熟悉所有的粒子物理实验时,任务是一样的。幸运的是,我的数据科学团队中总是有来自 CERN 的科学家,这使得理解起来容易多了。
第二,简历上有“CERN”总是一个优势,前提是已经做了一些严肃的工作。通过物理课、出版刊物、网络研讨会和讨论,你可以成为社区的一部分。CERN 在现场雇佣了大约 2500 名员工,在全球拥有大约 17500 名贡献科学家。许多创业公司的创始人都有 CERN 社区背景。
最后,您有稀疏的数据,这意味着数据中表示的重要信息很少。在成千上万的数据点中,你只需要寻找一些模式来发现和识别。找到这样的稀疏信号在许多领域都是必不可少的:预测性维护,找到准备投资你的基金的亿万富翁,或者精准医疗。
如何开始?
首先通过浏览他们的网页和维基百科来熟悉欧洲核子研究中心正在做什么。在开放数据门户上,你有一个文档链接,在那里可以找到很多背景信息,包括 GitHub 的链接和教程。还有一个专门的数据科学节点。看看欧洲核子研究中心的科学家已经做了什么,向他们学习,并开始用你自己的方法分析单独选择的数据集。
处理欧洲核子研究中心的数据不是一个快速的项目,但非常有启发性。除此之外,你还可以学到很多关于物理学前沿的话题。
3。 奥姆德纳
Omdena 称自己是一个协作的 AI 平台。它将 30-50 名项目人员聚集在一起,用数据和人工智能解决这个世界上真实存在的问题。
与 Kaggle 竞赛不同,这是一个真正的端到端项目,其中包含所有项目斗争。你在一个拥有不同技能的团队中工作,面临着所有的人际挑战。你可以产生真正的影响,因为所有项目都与联合国 17 个可持续发展目标之一相关联。
我的一个有着 20 多年数据科学专家经验的好朋友平均为 Omdena 项目贡献了 20%的时间。甚至他也说他总是在学习很多新东西。
Omdena 需要人工智能、数据科学和机器学习领域的广泛技能和专业知识水平。你必须经历一个申请过程,就像申请实习一样,最大的不同是,我们寻找的不是竞争性的个性,而是具有团队精神的人。他们不仅仅寻找专家。这是协作的精神。
是什么让这个项目变得有趣?
你是现实世界数据科学项目的一部分。没有糖衣任务、数据和结果。It“只是”必须用数据驱动的方法解决实际问题。您正在熟悉整个数据科学项目周期,您可以体验不同的阶段和角色。
其次,与有经验的人并肩工作并得到他们的指导是令人兴奋的。仅在一个项目中,你就能学到比你所有 10 次 MOOCs 和 Kaggle 比赛还多的东西。
最后但同样重要的是,你将获得项目证书。是的,它是除了你的 Coursera、Udacity 和大学学位之外的另一个证书,但它证明了你的实际经验。
如何开始?
查看已完成、正在进行和即将进行的项目。熟悉 Omdena 的方法,如果有兴趣参与,请遵循此处的指南。
4。 国际及政府组织
许多国际和政府发展组织现在都在数据驱动下工作。其中包括联合国、世卫组织、世界银行、国际金融公司、美洲开发银行和欧洲复兴开发银行。此外,大多数政府都有专责小组负责任务驱动的数据和人工智能项目,并建立一个生态系统。
除了提供带薪或不带薪的实习机会,大多数合同都是为期几个月到三年的定期合同。
此外,许多数据科学和人工智能初创公司正在与政府部门合作。
在过去的 12 个月里,我支持两个前团队成员找到了这样的项目。其中一个人是半个泰国人,他去了泰国,在一家大数据初创公司工作,该公司正在与泰国政府合作。
另一个人浏览了所有的工作简历,向这些国际组织提交了简历,并联系了一些人,最终在国外的一家开发银行获得了一份为期 4 个月的固定期限项目合同。
是什么让这个项目变得有趣?
这些工作和项目往往在国外。除了实际的数据科学经验之外,还可以获得许多关于外国文化的经验,以及如何在国际外交环境中表现的经验。这给了你在职业阶梯上前进的重要软技能。
你可以从一开始就承担责任。小团队,与决策者的互动,在领导面前的演示,是大多数项目的一部分。你经常会接触到该领域的顶尖专家并得到他们的指导,因为他们经常为国际组织和政府组织提供建议。
最后,这些项目是独特的,并且与研究相关,这为新的实验提供了空间。此类项目的示例包括对某个发展中国家的道路死亡事故进行分析,该国政府希望采取措施减少道路死亡事故,或者对空气污染进行地理空间原因分析,因为政府希望制定法律来限制空气污染。这些分析综合了许多社会经济因素。
如何开始?
第一项任务是研究空缺职位,正在进行的项目,以及重要的是,与这些组织合作的初创公司。
职位可以在 UNjobs 上找到——不仅来自联合国,还来自所有组织,如前所述,以及 Coursera 等。此外,在官方主页上搜索关键词“数据科学家”。
如果没有合适的实习或短期工作,无论如何都要提交简历。如果他们有项目,他们会将其与数据库中已有的简历进行比较,如果你的个人资料匹配,他们会与你联系。
第二,寻找与政府合作的创业公司。如果创业公司有与联合国可持续发展目标相关的项目,他们很可能与政府合作。
另一个迹象是在处理社会利益时,如水资源、更安全的社区,如预防交通事故或暴力、平等方面、抗击艾滋病毒或疟疾等疾病或减少污染。
尽早开始寻找这样的项目。这需要一点时间和坚持。
但是我可以强烈推荐。这样的任务为你的职业生涯打开了许多大门,与你所从事的行业无关。我最近可能会跳槽到一家全球知名智库担任项目负责人。得到这样的职位是一生难得的机会。他们为什么问我?因为我过去做过这样的项目。
5。 埃德加数据库
EDGAR 是电子数据收集、分析和检索的缩写,它是一个数据库,包含法律要求公司和其他人向美国证券交易委员会提交表格的所有提交内容。
你有丰富的与商业相关的数据和文本信息。此处提供了一个快速介绍。
是什么让这个项目变得有趣?
你首先学习如何访问、下载和提取网络数据库中的信息,这些信息主要由文本组成。这可以用 Python 来完成,而且已经有了 OpenEDGAR,一个用 Python 写的开源软件。但是我会推荐其他语言,比如 Perl。它是专门为文本处理而设计的,即从指定的文本文件中提取所需的信息并将其转换为不同的形式。比 Python 快多了。而如果你想在银行工作,还是有很多数据库是用 Perl 设置的。
这是一个很好的情绪分析数据库,可以用来预测公司和股票的价格表现。许多填充物都被编码了,因为公司想发光,而不给竞争对手足够的信息。所以,这个数据库对于自然语言处理来说是一个很好的学习资源。
最后,这些都是开自己博客的好话题,可以是关于投资,也可以是 NLP。认真做,你可以让公众知道你的数据科学工作,这大大增加了你获得梦想中的数据科学工作的机会。
如何开始?
选择一家你想分析的公司。拿一个存在至少十年的来说。从预测这些公司的股票是该卖还是该买的目标开始。
熟悉埃德加的不同形式。从 10-K(公司最近的年度报告)和 8-K(股东应该知道的事件的“当前报告”)开始。
做过去几年的普通情绪分析,看看积极、消极和净情绪趋势。将这些曲线与股价的发展进行比较。此外,这些声明还包含前瞻性信息。分析他们,这将会给你趋势。
提示:前瞻性陈述中的语言包含诸如“将”、“应该”、“可能”、“可能”、“打算”等词语。
通过查看同一行业的其他公司,并整合新闻和宏观经济数据等不同来源,用更复杂的 NLP 和情感算法来开发它。将其与股价和财务比率进行比较。对于一个博客来说,所有这些分析和丰富的内容是没有限制的。
连接圆点
我知道建立一个冷静的数据科学投资组合是一项艰巨的工作。有了这样一个集合,你可以在那个领域取得高于平均水平的进步,获得很多乐趣,并获得你的数据科学梦想工作。
我不仅向数据科学领域的新手推荐这种方法,也向资深数据科学家推荐这种方法。它在你的职业生涯中开辟了许多新的道路,不仅因为这些项目,还通过新获得的网络。
这些想法向你展示了广泛的可能性,并提供了跳出框框思考的想法。
对我和我的朋友来说,学习因素和乐趣是必不可少的。这是我们致力于此类项目时的主要关注点。
我们已经建立了一个令人兴奋的和独特的投资组合,只是一个废物。
构建内部数据科学平台之前的 5 个考虑事项
构建还是购买:来自多年构建机器学习平台的见解
我和我的商业伙伴作为数据科学顾问已经工作了多年,帮助企业将人工智能融入他们的商业模式。我们合作过的每个数据科学家都有自己的工具偏好,使用自己的语言,利用自己的开源工具。对于某些项目,我们也非常重视我们的流程。当我在所有工作中使用 Python 时,我的同事使用 r。当我对我的深度学习框架深信不疑时,我的同事更喜欢 Keras 的易用性。问题是,我们理解对工具灵活性和定制化的需求。当一个组织构建自己的内部平台时,他们可以根据团队的需求来构建。而且,很好玩!你可以找到创造性的方法来解决问题,这是数据科学家最喜欢的。唯一的困境是,大多数时候你不是被雇佣来构建和管理数据科学平台的。你可能被雇佣来构建和部署高影响力的机器学习模型。
尽管如此,您可能仍然喜欢从头开始构建自己的数据科学平台。在多年开发、迭代和测试数据科学平台之后,我想分享一些见解,供开始这一旅程之前考虑。
建筑融入了我们的血液
作为数据科学家,我们天生就是建设者和问题解决者。如果我们想解决一个问题,我们只需建立自己的解决方案。在大多数情况下,我们拥有这样做的技能、工具和知识。我们合作的许多客户都有内部数据科学系统,或者正在创建一个。随着他们对平台的需求变得越来越复杂,他们决定寻求替代解决方案。他们决定投入更多时间来建立模型和解决复杂问题,而不是建立一个全栈数据科学平台。
因此,当您考虑构建自己的内部数据科学解决方案时,需要考虑以下几点:
1.无限的工具灵活性
毫无疑问,有太多的开源工具供我们使用。但是管理所有不同的工具以便能够利用它们是一个挑战。
无论是 R、Python、SQL、Scikit-learn、Hadoop、spark、Tensorflow、Keras、Jupyter——这个列表还在继续——您都需要一个中心位置来将数据科学难题的所有部分集中在一起。
光是想到下载 Tensorflow 就带来巨大的痛苦。也许这看起来很熟悉:
安装张量流时出错
堆栈溢出常见问题
创建一个系统,可以轻松集成团队所需的所有工具。此外,工具也在不断地适应和发展。一定要通过构建能够集成新工具的开放基础设施来规划未来。
2.再现性
有许多手动系统,公司可以在其中支持可再现的数据科学。公司已经使用 Excel 文件、笔记本、Docker、Git 等。不幸的是,人类是不完美的,有时会在记录工作时错过一些关键元素。让所有数据科学活动集中在一个位置有助于解决跟踪问题。通过自动记录和存储每个过程,数据科学家能够回溯和重现项目,并审查研究的有效性。
3.小组管理
人们常说,数据科学家在孤岛中工作。团队面临的一个挑战是统一和同步他们的工作。任务管理、职责转换、报告和进度跟踪等简单的团队组织如果集中化,都可以加快数据科学进程。考虑交流的方法,并创建简单的用户界面来实现无缝转换将节省时间。不仅如此,它还会避免团队成员的挫败感。根据您的团队,项目可能涉及研究人员、数据工程师或机器学习工程师,甚至开发人员或 IT 人员。任务之间的平稳过渡会带来沟通障碍和技术低效。这意味着构建可以与团队共享的组件,以节省编码时间并支持可重用的机器学习。这样,团队成员,无论他们是否是数据科学家,都可以快速构建新模型。重要的是要考虑平台元素,这些元素可以无障碍地执行整个工作流程。并且,建议在这个任务中使用产品经理来咨询,以便正确地完成它。尽可能集成 mlop,以减少机器学习管道中的摩擦。
4.资源管理和可扩展性
无论您是在构建机器学习模型还是在生产中运行模型,计算能力都是不可避免的。一个有组织的计算资源管理系统将会改变游戏规则。添加到内部平台的一个重要组件是在团队成员之间共享计算资源的方法。不仅如此,管理计算预算和监督计算使用的方法可以节省大量资金。
其次,做好最好(或最坏)的准备。对于您的平台来说,能够连接到现有计算并立即自动扩展到云而无需配置是至关重要的。准备资源,让您的数据科学家能够一次运行数百个实验。更重要的是,对于任何成功的生产模型,都要做好模型流量意外激增的准备。它可以将你的生产模型从完全崩溃中拯救出来。无法扩展计算会扼杀促销的动力和业务的成功。
5.可用性和设计
对于数据科学平台,功能是第一位的。但是,必须考虑用户体验。无论是简单的功能,如搜索和标记实验,还是复杂的直观用户界面。内部平台可以根据团队的需要慢慢构建。唯一的问题是,它几乎永远不会是故意的。设计超越功能的工作流并真正最大化效率需要计划、时间和努力。有时候你会发现,商业产品比你先知道你可能需要什么。以苹果公司为例。在苹果之前,大多数手机只需要打电话、发短信和偶尔拍摄像素化照片的功能。今天,你能想象你的手机没有全球定位系统,互联网搜索,Siri 或你最喜欢的播客随时可用吗?走在路边,预测机器学习工作流。
建造智能机器
制造智能机器是我们——数据科学家——最擅长的事情。当决定是否建立一个内部数据科学平台时,考虑一下你受雇做什么。作为一名数据科学家,为了给公司带来价值,你需要拿出成果。数据科学平台的目标是帮助数据科学家专注于魔法——算法。下一步是考虑你的备选方案。自从我和我的商业伙伴开始以来,数据科学平台已经有了巨大的发展,并且具有广泛的功能。在分析商业机器学习平台或开源工具时,也可以使用这 5 个考虑因素。确保你考虑了所有的方面,你将会在机器学习的道路上取得突破。
用于部署端点和 FullStack 的 Django 和 Flask 的 5 个很酷的替代方案
不用 Flask 或 Django 部署 API 的有用框架。
(烧瓶标识 src =https://palletsprojects.com/p/flask/姜戈标识 src =https://www.djangoproject.com/
如果你曾经用 Python 部署过一个端点或者创建过一个网站,那么你很可能听说过 Flask 和 Django。Flask 和 Django 是 Python 中的行业标准,几乎可以用 Python 中的 HTTP 协议做任何事情。Flask 通常用于不需要太多功能的轻量级应用,而 Django 填补了 web 应用领域的空白。两者都是很好的工具,但是在一些特殊的环境下,使用类似的 web 框架而不保留 Flask 和 Django 的特性会更好。
瓶子
(src =https://bottlepy.org/)
Bottle 是 Python 中一个非常轻量级的 WSGI 微框架。它是在麻省理工学院的许可下出版的,修改和发布完全免费。使用 Bottle 的一个很大的优点是,它存储在一个单独的小 Python 模块中,没有依赖性。当您准备好部署 API 时,这使得事情变得极其简单和无缝。
我真正喜欢瓶子的一点是它非常容易使用和轻便,没有像 Flask 和 Django 那样的额外绒毛。有时候,极简主义是关键,Django 和 Flask 有时会因为一个小 API 的所有动态部分开始发挥作用而变得有点势不可挡。轻量级的另一个显著优势是 Bottle 的内置服务器。Bottle 自带网络服务器,这意味着不需要配置 Gunicorn3,但这并不是说你不能使用 Gunicorn3。Bottle 支持 Paste、fapws3、gae 或任何其他 WSGI 兼容的服务器。
在语法方面,Bottle 模糊了其自身和 Flask 之间的相似性,只有很少的语法差异。例如,Hello world:
**from** **bottle** **import** route, run, template
**@route**('/hello/<name>')
**def** index(name):
**return** template('<b>Hello {{name}}</b>!', name=name)
run(host='localhost', port=8080)
涡轮齿轮
(https://turbogears.org/)
我喜欢使用的另一个很酷的 web 框架是 GNU TurboGears。坦白地说,我喜欢 TurboGears,部分原因是它是在 GNU GPL 许可证版本 2 下发布的,但这并不是说 TurboGears 不是一个很好的框架。奇怪的是,TurboGears 实际上是建立在其他几个框架之上的,包括 Django 和 Rails。也就是说,TurboGears 离类似 Bottle 的东西只有一步之遥,当然它的位置更像 Django。
TurboGears 被设计成一个全栈框架,当然也应该这样使用。TurboGears 的一大优点是它的可扩展性,可以使用各种简单的 WSGI 插件来扩展这个框架。此外,它还支持水平数据分区或分片。从语法上来说,TurboGears 可能与任何 Python 程序员所习惯的完全不同。代码倾向于更加关注面向对象的范例,这是一种与大多数其他框架完全不同的方法。例如,这里是 hello world:
**from** **tg** **import** expose, TGController
**class** **RootController**(TGController):
**@expose**()
**def** index(self):
**return** 'Hello World'
**from** **tg** **import** MinimalApplicationConfigurator
config = MinimalApplicationConfigurator()
config.update_blueprint({
'root_controller': RootController()
})
**from** **wsgiref.simple_server** **import** make_server
print("Serving on port 8080...")
httpd = make_server('', 8080, application)
httpd.serve_forever()
web2py
(src =http://www.web2py.com/
Web2py 是这个列表中的一个框架,我想我们都很熟悉。Web2py 是另一个主要关注全栈方面的模块。然而,与 bottle 类似,Web2py 在 Python 标准库之外没有依赖关系。Web2py 给我留下深刻印象的是,它能够完成与 Django 和 TurboGears 等框架类似的目标,同时更加轻量级和易于使用。Web2py 是在 GNU GPL 版本 3 许可下发布的,这意味着您可以使用它做任何事情,而不必担心许可问题。
Web2py 的卖点很可能是它的全功能 IDE,它允许你在部署后从任何浏览器修改你的网站。考虑到这一点,使用这个软件的主要优势就是你可以用它快速地进行创作。与 Django 和类似的框架相比,Web2py 无疑要简单和快捷得多,但是以我的经验来看,与更现代的选择相比,它可能有点欠缺和过时。
(https://cherrypy.org/的 src =
CherryPy 是另一个我非常喜欢的框架,可能是我在这个列表中最喜欢的。
(在樱桃和瓶子之间)
CherryPy 以一种更类似于 TurboGears 的方式来处理 web 开发,但是以一种更类似于 Bottle 的方式来处理方法论。CherryPy 轻得令人难以置信,被认为是极简主义的 web 框架。尽管它很轻,但是 CherryPy 仍然设法塞进了许多非常有用的特性,包括认证、会话和缓存等等。CherryPy 还拥有一个有趣而独特的插件系统,可操作性极强…嗯…
一切!
CherryPy 是在 FreeBSD 许可下许可的, BSD 许可是一种低限制类型的许可用于开源软件,不要求再分发,这意味着与大多数其他框架类似,它是免费和开放使用的。与 TurboGears 相似,CherryPy 采用非常面向对象的方法进行 web 开发。这里是 hello world:
import cherrypy
class HelloWorld(object):
**@cherrypy.expose**
def index(self):
return "Hello World!"
cherrypy.quickstart(HelloWorld())
堂吉诃德(西班牙作家塞万提斯所著《堂吉诃德》中的主人公)
堂吉诃德是另一个与面向对象范式紧密结合的框架。该框架主要关注速度和灵活性,但是很难进入。堂吉诃德并没有强制执行表示逻辑和“后端”逻辑的分离。这可以看做是优点也可以看做是缺点。我要说的是,这个框架是高度可操作的,但与 Python 程序员可用的其他选项相比,肯定要难用得多。
这个框架会遇到的另一个问题是,
缺少文档。
鉴于这些缺点,我想说这个框架只推荐给需要从头开始构建的应用程序。尽管由于构建时间的原因,它可能不适合很多应用程序,但它肯定有自己的位置,并且能够以其他框架无法完成的方式完成工作。
结论
虽然 Flask 和 Django 肯定是很棒的工具,但我认为看看竞争对手也很棒,因为偶尔拥有灵活性肯定会派上用场。我在框架中寻找的东西不一定是其他人寻找的东西,也可能完全取决于我想要创建的东西。毫无疑问,这个列表中我最喜欢的是 CherryPy,因为我经常寻找一个非常轻量级的选项,因为我通常使用 Pythonic web 框架。我的大部分 web 部署都是简单的 API,不需要大量的维护或代码,但同时需要足够安全和稳定,以根据需要提供数据,CherryPy 非常适合这一点。我很想知道其他工程师在他们的框架中寻找什么,他们会选择哪一个。Web 框架可能不是地球上最复杂的东西,但是拥有一个好的框架肯定会让你的生活简单很多!
每个数据科学家都应该知道的 5 种数据挖掘技术
如何在混乱中找到模式?
来自 Pexels 的 ThisIsEngineering 摄影
数据科学是跨学科领域之一。作为一名数据科学家,你需要具备一些数学和统计学的基础知识,以及一些基本的编程技能。你还需要了解一些商业和科学传播知识,以便能够将你的工作传递给更广泛的受众。最重要的是,你需要对模式和趋势有敏锐的眼光。
为了通过数学和计算算法找到模式和异常,对大量原始数据进行结构化、分析和公式化的过程被称为 数据挖掘 。
作者图片(使用 Canva 制作)
每个想要在职业生涯中更进一步并获得强大技能的数据科学家都需要——至少——了解数据挖掘的基础知识。通过学习数据挖掘技术,人们可以利用这些知识来产生新的见解和发现新的趋势。
挖掘数据的过程可以分为三个主要部分:收集、收集和清理数据,对数据应用数据挖掘技术,以及验证该技术的结果。
分析、预测和分类
towardsdatascience.com](/statistics-in-data-science-8ee52459e282)
有许多技术可以用来执行数据挖掘,然而,在本文中,我将重点关注个人和大公司现在使用的五大数据挖掘技术。我们将介绍的技术包括:
- MapReduce。
- 聚类。
- 链接分析。
- 推荐系统。
- 频繁项目集分析。
MapReduce
作者图片(使用 Canva 制作)
MapReduce 是一个用于并行收集和处理大量数据集的编程模型和实现。换句话说,MapReduce 接受一些数据块,将其划分到不同的硬件上进行处理,然后从所有硬件上收集信息并得出结论。
MapReduce 在不同领域都有应用,例如奇异值分解(SVD)、文档聚类、统计机器翻译和各种机器学习应用。像谷歌这样的大公司已经起诉 MapReduce 通过替换更新索引的特别程序并对结果进行不同的分析来重新生成它的 WWW 索引。
MapReduce 程序由三个步骤组成:
- 一个贴图步骤: 执行过滤和排序。这一步的结果是一组*(键,值)*对,它们代表我们试图挖掘的数据的映射。
- 混洗步骤 :混洗状态作为 map 和 reduce 状态之间的中间状态。它唯一的工作是对(key,value)集合进行排序,以便 reduce 阶段获得所有相同的键。
- 一个 减少步骤: 执行一个汇总操作(比如统计同一个键的不同值)。
使用 MapReduce 的一个例子是试图统计大量文档中出现的单词。在这种情况下要做的是,将文档划分到不同的计算机上。所以,如果我们有 10,000 个文档和 10 台计算机,每台计算机将分析 1000 个文档。
我必须提到,通常在地图阶段,不同的计算机之间没有通信。每台计算机将独立完成这项工作。
我们可以使用 Python 构建单词计数示例的简单实现,以实现两个主要功能:mapper 和 reducer。
使聚集
作者图片(使用 Canva 制作)
聚类是对一组项目进行分组的任务,以便一个组中的项目以某种方式连接起来。每个组称为一个集群。聚类经常用于探索性数据挖掘和统计数据分析。您可以在许多应用程序中找到聚类,如模式识别、计算机视觉、数据合成和生物信息学。
执行聚类操作的目标是获得彼此接近的点的聚类。当几个点彼此相距很小的距离时,它们将落在同一簇中,而如果它们相距很远,它们将具有不同的簇。通常使用的距离度量是欧几里德、余弦、雅克卡、汉明和编辑。
可以使用两种策略中的一种来进行聚类:
- 层次聚类: 这里,每个数据点都以自己的聚类开始。然后,该算法开始加入彼此距离很近的聚类,直到 in 达到指定的限制。这个限制可以是一组集群数,也可以是一组不同集群的规则。
- 点分配: 每个数据点被分配到一个预定义的聚类中,该聚类是基于它最适合的。这些算法的一些变体允许聚类分裂或聚类加入。有一些流行的点分配算法,如 k-means 和 BFR (布拉德利,法耶兹,雷纳)。
可能最著名的聚类算法是 k-means 算法,它可以使用 Python 和 Sci-kit 轻松实现。
链分析
作者图片(使用 Canva 制作)
链接分析是一种基于数学分支*图论的数据挖掘技术。*图论将不同的对象(节点)以及它们之间的关系(边)表示为一个图。链接分析可用于定向和非定向数据挖掘。
在可以轻松观察不同数据点之间关系的情况下,链接分析非常有用。然而,随着观察的增加,自动化方法是首选,因为它们将产生更快的结果。在这种情况下,链接分析工具可能相对便宜,并且代表了进入数据挖掘的经济切入点。
链接分析通常分 4 步进行:
- 数据处理: 使用不同的算法收集和操纵数据,如排序、聚合、分类和验证。
- 转换: 将数据从一种格式或结构转换成另一种格式或结构,以便简化数据分析过程。
- 分析: 一旦数据被转换,现在可以使用不同的分析策略来提取有用的、想要的信息。
- 可视化:交流信息的最佳方式是使用可视化的方法。
链接分析有不同的算法,如 PageRank 和 Link Sapna 和 TrustBank。可以使用 PythonNetworkX库轻松实现和分析图形数据。
下面是一个使用 Python、Scikit 和 pagerank_fast 模块的 PageRank 算法的简单实现。
推荐系统
作者图片(使用 Canva 制作)
推荐系统是一类应用程序,涉及使用机器学习和数学模型来预测用户对不同选项集的反应。
你每天都会遇到推荐系统。你用亚马逊吗?网飞?Spotify?所有这些大公司都使用推荐系统来为用户提供下一步购买/观看或收听什么的选项。
ML、CV 和 NLP 中的线性代数
towardsdatascience.com](/5-applications-of-linear-algebra-in-data-science-81dfc5eb9d4)
推荐系统的核心概念是线性代数。更准确地说,是一个叫做效用矩阵的方面。推荐系统通常的工作方式是收集用户和产品——或者歌曲或节目——的数据,然后以矩阵形式对这些信息之间的关系进行编码。然后,这个矩阵被用来预测用户对类似产品的喜爱程度。
实现推荐系统有不同的方法,最常用的 4 种方法是:
- 协作系统: 这种方式结合了不同的用户和对象,是亚马逊使用的主要方式。例如,如果你买了一个包,亚马逊会推荐其他产品,那些和你买了同样商品的人也会考虑。
- 基于内容的系统: 这种方法主要关注你以前经历的内容。比如你经常在 Spotify 上听流行歌曲,它会推荐更多的流行歌曲给你欣赏。
- 风险感知系统: 这种方法使用内容和协作技术,但在此基础上又增加了一层。这个新的层将根据用户的位置或年龄来计算推荐特定内容的风险。这是为了避免推荐可能导致用户停止使用该服务的项目。
- 混合系统: 混合系统是指利用不同的推荐技术来提高推荐的准确性,确保更高的用户满意率的系统。
您可以使用 Suprise Scikit 库在 Python 中实现推荐系统。
频繁项目集分析
作者图片(使用 Canva 制作)
频繁项集分析是用于购物篮模型数据的分析方法。市场篮是一种数据模型,用于描述多对多关系的常见形式。这个数据模型用于连接两种类型的数据点,项目和购物篮。每个篮子都有一组项目,也就是项目集,通常认为项目集的大小小于项目的总数。
频繁项集分析可用于对不同种类的应用进行分类和分析,例如,假设我们有一些文本文档,我们想要从中挖掘特定的单词,我们可以使用:
- **相关概念:**让物品成为文字,让篮子成为文件。如果我们想要寻找在许多文档中出现的一些单词,则集合将由文档中最常见的单词主导,例如停用词或连接词。我们可以忽略这些单词来查看文档中最常用的单词。
- **剽窃:**在这种情况下,条目将是文档,而篮子将是文档中的句子。如果句子在文档中,则项目是篮子的一部分。如果我们想检测抄袭,那么我们就要努力寻找在两个不同文档的几个篮子中同时出现的成对项目。如果我们找到这样的一对,那么我们有 2 个文档共享几个共同的句子,这意味着抄袭是存在的。
我们可以使用 Pandas 和 MLXtend 库在 Python 中执行频繁项集分析。
这些技术是经常用于预测一些数据的未来实例的属性的技术的一个例子,或者简单地理解该数据的当前属性。
数据挖掘是可以转变你的能力并让你成为数据科学家的技术之一。如今,了解挖掘数据、发现模式和可视化这些模式的不同方法是一项非常需要的技能。
作为一名数据科学家,我们必须始终跟上未来的技术和趋势,数据挖掘是保持我们的技能相关和最新的一种方法。
我做的 5 个完全无用的数据图
使用 R 中的制图包创建无目的的绘图
你的分析应该会揭示一些新的东西。它应该揭示对趋势或异常模式的洞察。数据科学工作的雇主希望看到你的分析有用且有影响力。
不过是无聊罢了。相反,我们可以制作完全无用的图表,这就是我花了几个小时在做的事情。
R 中的制图包帮助你将数据转化成引人注目的地图。例如,R 带有北卡罗来纳州婴儿猝死综合症死亡的数据集。使用 shapefile(提供北卡罗来纳州县边界的几何数据),您可以创建婴儿猝死综合症死亡率最高、婴儿猝死综合症死亡率最低等县的地图。
像那样的地图很有用。我正要反其道而行之,给你们看一堆我用 R 制图学软件包做的没用的图。
1.加州各县按县名中的字母数排列
获得加利福尼亚(我的家乡)的 shapefile 非常容易。它在加州政府网站上,还有一些有用的数据集,从犯罪到 COVID。但是我们现在对这些数据集不感兴趣。令人欣慰的是,我们也可以使用这个 shapefile 来绘制无用的图,比如用县名的长度来着色的县图。我们只需要为名称长度创建一个新列:
# add new column based on county name length
library(stringi)
ca$NAME_LENGTH <- stri_length(ca$NAME) - stri_count_fixed(ca$NAME, " ")
#using stri_length and stri_count_fixed removes spaces from the count. For example, "Santa Barbara" is counted as 12 letters instead of 13.
在那里,我使用 ggplot 来可视化数据。添加了geom_sf
图形来填充县,添加了来自 ggthemes 包的theme_map
图形来使我们的地图看起来更好一些:
ggplot(data=ca) +
geom_sf(aes(fill=NAME_LENGTH), size=.5) +
scale_fill_gradient(low="#98BAFF", high="#354057") +
labs(title="california counties by number of \nletters in the county's name", fill="length") +
theme_map() +
theme(panel.background = element_rect(fill = '#F0F0F0', colour = 'white'))
现在我们有了我们的情节,我们可以看到圣伯纳迪诺县正在杀死它,而约洛县需要收拾它名字长度上的懈怠。
2.加州各县的圣地亚哥动物园数量
终于,我们有了答案。几十年来,我们加州人一直想知道哪个县有最多的圣地亚哥动物园,结果答案是圣地亚哥县,有一个圣地亚哥动物园。
对于这个图表,我创建了一个名为 SD_ZOOS 的新列,将每个县的值设为 0,然后手动将圣地亚哥县的值更改为 1:
#initialize all SD_ZOOS values to 0
ca$SD_ZOOS <- 0
#set SD_ZOOS value to 1 for san diego county
ca <- ca %>%
transform(SD_ZOOS = if_else(NAME==”San Diego”, 1,0)))
据我所知,这是第一次可视化圣地亚哥动物园位置的数据,希望如果你想去加州旅行,这将帮助你找到离你最近的圣地亚哥动物园。
3.加州各县橄榄园餐厅的数量
这个图花了最长的时间来制作,因为我找不到加利福尼亚所有橄榄园位置的原始数据集。我手动找到了每个县的数字,方法是点击“查找离你最近的橄榄园!”网站,并跟踪加州所有 72 个地点的城市。然后,我将每个县的橄榄园数量相加,并将结果导出为 csv 文件,以便更容易地手动添加到 r 中的数据框中。
然而,把这个图放在这里是一个艰难的决定,因为它几乎是有用的。如果有什么不同的话,我们现在知道洛杉矶县到处都是面包条(它有 17 个橄榄园)。通过插入命令sum(ca$OG==0)
,我们发现有 32 个加州县没有一个橄榄园。
4.加州各县的橄榄园数量加上县名中的字母数量
由于橄榄花园图有点太有影响力,我决定通过添加任意的数学来使它无用。幸运的是,R 允许您基于一些简单的算法创建新的列。因此,如果您有一个橄榄园位置列(ca O G ) 和一个名称长度列 ( c a OG)和一个名称长度列(ca OG)和一个名称长度列(caNAME_LENGTH ),您可以这样做:
ca$OG_LENGTH <- ca$OG + ca$NAME_LENGTH
洛杉矶县从它的 17 个橄榄园位置仍然是强有力的,但是“圣伯纳迪诺”的名字的影响不是睡觉。
5.除了阿拉米达县的颜色来自完全不同的调色板之外,每个县都被赋予一种随机的颜色
很简单,没有理由需要这个数据图。这个情节绝对没用。这正是我想要的。
我使用which
命令在数据表中找到了阿拉米达县的索引:
which(ca$NAME=="Alameda")
r 带有一些内置的调色板,允许你随意选择颜色。我使用了热调色板,重新分配了阿拉米达县的颜色,并相应地绘制了:
cols <- heat.colors(58, a=1)
# reassign alameda county's color
cols[42] <- "#0D26FF"#plot
ggplot(data=ca) +
geom_sf(fill=cols) +
labs(title="california counties where each county is assigned a random\ncolor except alameda county's color is from a completely \ndifferent palette") +
theme_map() +
theme(panel.background = element_rect(fill = '#F0F0F0', colour = 'white'))
这张图故意让阿拉米达县看起来格格不入。您没有理由需要这样做。这张图表毫无用处。
如果这篇文章照亮了你的一天,或者甚至帮助你学习了一点关于制图包的知识,我会很感激,尽管我真诚地希望你使用自己的数据科学技能使图表比这些更有用。也许你甚至能找到一个我为什么要把阿拉米达县变成蓝色的理由。我可以肯定地说,这会对我产生影响。谁知道呢,也许有一天有人需要知道所有的橄榄园在哪里。我们已经掩护他们了。
5 种数据追求,让你不再去想疫情
给副业一个让你感觉更好和练习技能的机会
由 Unsplash 上的 ConvertKit 拍摄
在家工作真好。我喜欢自己家里的舒适,喜欢我收藏的茶叶,喜欢穿着舒适的衣服工作。尽管如此,它有时还是会影响到我。每天都开始有同样的感觉,时间过得很快。在互联网上,每个人都在谈论、写作和思考同样的事情,这也于事无补。
这就是为什么我想把一些小的个人追求或数据冒险列在一起,这样你就可以忘记当前的事件。请将它们视为练习数据获取和数据理解技能的练习。
声明:我没有列出 Kaggle,主要是因为几乎每个人都知道它。还因为它现在充满了新冠肺炎数据集。我想谈谈处理与疫情相关的数据集的一些替代方法。
1.分析你的谷歌地图历史
如果你启用了它,惊喜吧,谷歌一直在收集你去过的地方的信息。如果你没有意识到这一点,但从好的方面来看,现在你有了过去几年你去过的所有地方的数据,意识到这一点是非常令人毛骨悚然的。这是你可以处理的大量数据。你可以在地图上显示这些数据,分析你经常去的场馆,或者只是观察你的日常活动。
如何:
要下载您的位置历史,请前往 https://www.google.com/maps/timeline
不幸的是,我从未给予许可,所以我没有收集任何数据。
在右下角,点击齿轮图标并选择下载您所有数据的副本。如果你对这些数据感到不舒服,也可以选择要求删除你的数据。
2.利用驱动数据为良好的事业处理数据
这个网站举办数据科学竞赛,发布数据集。在这个意义上,它类似于 Kaggle,但驱动数据为慈善机构和非营利组织做这件事。参加这些比赛,你不一定要成为一名优秀的数据科学家。只需下载数据,理解数据集,并开始利用您的想象力进行构建。
我认为在驱动数据上有很好的开放式问题的例子。在寻找解决方案或从原始数据中创造见解时,这是一个练习创造力的好机会。我会说,试试看。
如何:
参观 https://www.drivendata.org/,选择你感兴趣的案例
尤其是如果您正在寻找真实的用例,驱动数据是一个不错的选择。
3.在 Reddit 上找到你的梦想数据集
Redditors 请求并共享许多不同的数据集。就我个人而言,当我需要数据集时,我会首先在这里寻找。偶尔访问这个 subreddit,谁知道呢,也许你会对你的下一个个人项目有所启发。
如何:
去 https://www.reddit.com/r/datasets/的
您可以使用排序选项来获取最流行的数据集。
4.从社交媒体平台下载您的数据
谷歌不是唯一一个你可以下载从自己身上收集的数据的地方。所有其他社交媒体渠道一直在收集我们的数据,以定制他们的平台,并能够提供个性化的推荐。由于最近的数据隐私法和数据所有权讨论,现在,公司有义务给人们一个选项,以获得从他们身上收集的数据的副本。
使用这些数据集对你来说是一个体验杂乱数据的好机会。你可能无法用它们预测任何事情,但是和它们一起玩总是很有趣的。我的建议是试着把数据整理好,看看你能从中获得什么样的见解。也许你会发现自己以前没有意识到的事情。谁知道呢。
如何:
商务化人际关系网
- 从你的提要中点击你的小照片,然后选择设置&隐私。
- 选择隐私>LinkedIn 如何使用您的数据。
- 点击获取您数据的副本,选择您想要包含的内容,然后点击请求存档。
- 你可能需要提供你的密码,然后你就可以下载你的数据。
更多信息请访问他们的官方网站。
脸谱网
- 转到https://www.facebook.com/settings.
- 在左侧点击您的脸书信息。
- 从菜单中选择下载您的信息。
- 再次选择您想要包含的数据并点击创建文件。
更多信息请访问他们的官方网站。
推特
- 从您的 Twitter feed 中选择更多 > 设置和隐私。
- 在账户下,选择你的 Twitter 数据。
- 在下输入您的密码,下载您的 Twitter 数据。
- 点击请求存档。
- 当你的数据可以下载时,Twitter 会给你发一封邮件。
更多信息请访问他们的官方网站。
- 在 iPhone 上:转到您想要下载的聊天,点击联系人姓名,向下滚动,点击导出聊天
- 对于 Android 访问他们的官方网站。
5.建立一个漏斗从你自己/你的朋友那里收集数据
有很多数据集可供你下载和使用。但是,如何创建自己的数据集以供将来分析呢?是的,我们不是数据收集方面的专家,所以我们不应该期望从中获得惊人的结果,但这很有趣,它会让你体会到数据收集的挑战。有人做到了: 我追踪了一年来每天的快乐状况
你所要做的就是设置一个谷歌表单,每天通过电子邮件发送给你(或者你想包括的任何人),或者以你希望的任何频率发送,然后收集答案。你可以把你的朋友也包括进来,让它成为一个更大规模的项目。一个例子就是追踪你的情绪和相关因素。尤其是现在我们花了很多时间在家里,看看是什么让你感觉更好或更差,如果你能察觉出来,这将是非常有趣的。也许你能看出那天你是否外出和你的情绪之间的关系。有一点需要注意的是,你需要有一个谷歌账户才能按照这里给出的说明进行操作。你准备好了吗?一开始听起来很复杂,但实际上很简单。
如何:
创建表单
1.转到谷歌表单。
2.创建一个新的表格,并填写您的问题。
3.转到“回应”选项卡,然后单击 Google Sheets 图标。
4.为您的回应电子表格填写您想要的名称,然后单击创建。这确保了当您收到回复时,它会被保存到这个新创建的电子表格中。
现在来设置每日发送功能
1.将表格发送给自己。
2.打开您发送给自己的电子邮件。
3.点击三个点(Gmail ),然后点击显示原文查看这封邮件的原始版本。
4.向下滚动并复制标签之间的所有内容。
5.如果它被编码使用这个网站来解码 html 代码。
6.复制解码后的代码。
7.创建一个新的 Google 电子表格,名称无关紧要。
8.打开电子表格,进入工具 > 脚本编辑器。
9.创建一个新的 HTML 文件,名称无关紧要。
10.删除所有内容,并将解码后的 HTML 代码粘贴到那里。
11.1.将以下内容粘贴到。gs 文件。
11.2.如果你想发送给多人,请使用此代码。
13.请确保更改电子邮件地址,并键入您创建的 html 文件的名称。
14.单击运行以测试电子邮件发送是否正确。
15.要安排它每天运行,单击编辑 > 当前项目的触发器。
16 岁。点击添加触发器。
17.根据需要设置选项,然后单击保存。
18 岁。现在,您的脚本将按照您的要求运行,并将 Google 表单发送到您的收件箱,这样您就可以填写表单并收集数据。
这些是我在思考简单的个人项目时想到的一些想法。我做一些小的兼职项目来让我忘记世界上或我的生活中正在发生的事情。我试着养成一种习惯,专门做我不擅长的事情,增加额外的挑战,学习新的东西。
让我知道你是否使用这些选项来创建一个个人项目,或者你是否有什么要添加到这个列表中!
您是否打算转行从事数据科学职业,但不确定从哪里开始? 通过我的网站免费参加我的数据科学入门课程。
本课程旨在帮助您:
- 阐明您的数据职业目标,
- 明白努力的方向,
- 了解必要的技能,
- 在您的学习旅程中做出明智的决定
此外,我每周发表文章、采访数据专业人员和免费资源,以帮助专业人员有效地将他们的职业生涯转向数据科学。如果你对你需要学习的东西感到迷茫,对所有声称自己是最好的课程感到困惑,觉得没有一门课程对你的目的来说足够完整,我的网站就是为你准备的。
我犯过的 5 个数据科学面试错误
你能从我的错误中学到什么。
目录
- 介绍
- 讨论同一个过去的项目
- 没有问足够多的问题
- 假设面试官知道我过去的经历
- 不考虑业务影响
- 没有概述整个数据科学过程
- 摘要
- 参考
介绍
我面试了几家公司,一路上都有一些重复和关键的错误。因此,我从他们那里学到了东西,并通过数据科学职位的工作机会获得了成功。我将强调的一些错误尤其适用于数据科学家,而一些错误几乎适用于任何面试。我的目标是让你跳过在无数公司面试的反复试验,这样你就可以专注于为你的目标公司和目标数据科学职位改进和执行一次出色的面试。
讨论同一个过去的项目
有时候,作为一名面试数据科学家,你会遇到几个面试官会问类似的问题。我认为这意味着我应该对每个人给出相同的答案。我还认为新的问题可以追溯到相同的过去的项目。然而,重要的是要注意,这些面试官最终会在你的面试结束后进行讨论。这意味着他们会看到,你只是针对类似的问题和不同的问题谈论了相同的教育或专业数据科学项目,所以这限制了他们如何判断你。因为你谈论的是同一个项目,所以看起来你的经验更少。这一点我其实是被叫出来的。他们告诉我,我不断回到同一个例子,他们想知道其他情况,以及我如何处理这些问题。
我确实认为,对类似的问题说类似的答案不一定是一个大错误——在这种情况下,你应该确保为每个问你同样问题的新人添加一些细节。
对于另一点,回过头来看,我确实认为这个错误更大,你应该考虑一些重要的建议。我认为这一点更重要的原因是,我让面试官告诉我这是一个问题。
然而,我不确定是否所有的公司都有这种感觉,因为我倾向于对一个项目感到自豪,并对每个新问题谈论同一个项目。我还认为,让所有这些答案都基于同一个例子是很独特的,这样面试官就可以更好地了解我作为数据科学家的整个过程。
我的错误是对不同的问题讲得如此相似,以至于好像我一整年都只在一个项目上工作。你可以想象这不会给面试官留下深刻印象。
很难百分之百肯定地说这个错误是你应该避免的,但是我可以告诉你,它是作为一个错误向我提出来的,所以它是我在下一次面试中学习和改进的东西。
没有问足够多的问题
这一点可能不像上面的观点那样独特,但它是更广泛的,我相信大多数公司都会同意这一点是一个常见的错误。
提问不够说明了几件事:
- 你对公司不感兴趣
- 你注意力不够集中,没有提出问题
- 可能显示你过于自信
- 可能表明你很难共事
没有人愿意和一个过于自信的无所不知的人一起工作。同样,没有人愿意与对公司或其目标以及各自的数据科学项目不感兴趣的人合作。最重要的是,当你没有问足够多的问题时,听起来好像你不够关心去听。最终,你没有向面试官提问,这表明你不是一个合作的好人选。
同样重要的是,这个错误不仅仅与数据科学家有关,大多数职业领域也是如此。
假设面试官知道我过去的经历
这个错误是我经常犯的,不仅仅是在采访中,在讲故事时也是如此。你和面试官一起做的就是——讲故事。我犯的一个常见错误是假设面试官知道一些关于我项目背景的信息。
他们很可能什么都不知道——有些人甚至不会看你的简历。
这一评论可能会让你感到震惊,但可能只有一个或几个来自该公司的面试者深入研究了你的简历——这并不是说你不应该在面试前概述你的简历,因为他们很可能会从你简历中的一个细节中问你一个相当具体的问题。
但是,回到讲故事,您需要在回答问题时为您执行的数据科学项目提供基本信息。这种类型的解释将向面试官展示你可以与利益相关者和其他非数据科学人员合作。
要调出的一些要点有:
- 业务问题是什么?
- 或者你当初为什么想做这个项目?
- 谁参与了?(产品经理、软件工程师等。)
- 流程是怎样的?
- 你是怎么做到的?
- 这个项目在企业的大计划中处于什么位置?
- 结果如何?
- 人们是如何看待他们的?
- 你帮助了多少人/节省了多少钱/节省了多少时间?
一旦你用这种格式概述了你过去的项目,它将更好地描绘出你的答案。
不考虑业务影响
Riccardo Annandale 在Unsplash【3】上拍摄的照片。
按照上面讲故事的观点,你必须确保考虑你的模型的商业影响。我相信这个错误对于数据科学家来说特别普遍,因为他们只关注模型及其性能,而没有提到业务是如何受到影响的。
你希望以一种准确但更重要的方式突出你的结果,即有影响力的。你很可能取得了有影响力的结果,但你可能没有让面试官知道这一点。你可以这样表述你的答案:
- “我研究了决策树模型,该模型自动化了一个手动过程,节省了 50%的时间和 50%的金钱,为改进产品创造了时间和金钱。”
如果你经常提到你 99%的准确率,但没有提到它的影响,你可以预期面试官会认为你不知道如何在企业中工作,更注重教育。有时,如果整个过程在某种程度上更快、更有影响力,甚至更低的精度也更好。
假装你正在雇人——你想知道他们能帮助你的生意。
没有概述整个数据科学过程
就像本文中的第一个错误一样,我也因为这个错误而被特别点名——没有概述整个数据科学过程。这一点意味着我没有包括在主要数据科学项目之前和之后发生的围绕数据工程和机器学习组件的讨论。
面试想知道:
- 你是如何得到数据的
- 你如何预处理它
- 如何将模型转换成面向对象的编程格式
- 如何进行测试
- 如何部署
- 它是如何集成到您的产品中的
这些要点可能不是你自己执行的,但面试官知道每个数据科学家并不都是数据工程师、机器学习工程师或软件工程师。他们测试你的是,你是否知道从开始到结束的整个过程,以及谁在做什么。如果你正确回答了这个问题,那么公司将会看到你进入了一个更专业的数据科学角色,并可能了解数据科学过程的开始或结束部分。
摘要
乔纳森·博尔巴在Unsplash【4】上拍摄的照片。
我希望你从这篇文章中学到了一些真正新的建议。我已经涵盖了我在数据科学职位面试过程中遇到的五个主要错误。你可能会因为避免了我的错误而获得工作机会,也可能不会,但它们可能在某种程度上对你很重要。也许,在这些问题上加上你自己的想法会让成为数据科学面试中最适合你的。
总结一下,这是我犯过的五个数据科学面试错误:
Discussing the same past projectNot asking enough questionsAssuming interviewers know my past experiencesNot considering the business impactNot overviewing the whole Data Science process
请随时在下面发表评论,并讨论您在数据科学职位面试过程中犯的一些常见错误,以便我们可以互相学习。
感谢您的阅读!
参考
[1]2017 年 Unsplash 上Estee 扬森斯拍摄的照片
[2]照片由艾米丽·莫特在Unsplash(2017)上拍摄
[3]照片由 Riccardo Annandale 在Unsplash(2016)上拍摄
[4]照片由 Jonathan Borba 在Unsplash(2019)上拍摄
如果你想成为一名数据科学家,在 R 语言中要掌握 5 种数据结构
了解如何掌握基本数据类型和高级数据结构,如因子、列表和数据框。
要成为一名 R 数据科学家,您需要掌握这种广泛使用的开源语言的基础知识,包括因子、列表和数据框架。掌握这些数据结构后,您就可以开始自己的第一次数据分析了!
这五种数据结构是:
- 矢量
- 矩阵
- 因素
- 数据帧
- 列表
一直读到数据类型的备忘单的末尾。
基本数据类型
在我们开始讨论数据结构之前,了解一下组成这些数据结构中的一些元素的基本数据类型是很重要的。
主要类型有:
- 数字 —十进制值,如
4.5
,或整数值,如4
。 - 逻辑值 —布尔值(
TRUE
或FALSE
) - 字符 —文本(或字符串)值,如
"medium"
(注意这些是区分大小写的)
# Here are some variables being assigned these basic data types
my_numeric <- 9.5
my_logical <- TRUE
my_character <- "Linda"
如果您想更深入地了解 R 中的基础知识,请查看我写的这篇文章,这篇文章教您如何计算、分配变量以及使用基本数据类型。它也包括练习题!
向量
Vectors 是一维数组,可以存储任何基本的数据类型,包括数字、逻辑和字符。
创建向量
要创建一个向量,使用组合功能 [c()](https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/c)
,用圆括号之间的逗号分隔元素。
my_vector <- c(elem1, elem2, elem3)
numeric_vector <- c(1, 2, 3)
character_vector <- c("a", "b", "c")
命名一个向量
给向量命名就是给向量元素命名。可以使用名称功能names()
来完成。
# Without names, its not clear what data is being used
some_vector <- c("Linda", "Data Scientist")
names(some_vector) <- c("Name", "Profession") # Output
> some_vector
Name Profession
"Linda" "Data Scientist"
从向量中选择
如果我们想从一个向量中选择一个元素,我们只需在方括号中输入我们想要选择的元素的索引。
my_vector[i]
# my_vector is the vector we are selecting from
# i is the index of the element# To select the first element
# Note that the first element has index 1 not 0 (as in many other programming languages)
my_vector[1]
要从一个矢量中选择多个元素,使用方括号中的矢量指示应该选择哪些元素。
# For example, to select the first and fifth element, us c(1,5)
my_vector[c(1,5)]# For example, to select a range, we can abbreviate c(2,3,4) to 2:4
my_vector[2:4]
我们也可以使用元素的名称来代替它们的数字位置。
weekday_vector["Monday"]
如果你想更深入地了解向量,看看这篇我写的关于如何创建、命名、选择和比较向量的文章。结束时,你将学会如何使用向量分析游戏结果!
矩阵
矩阵是排列成固定数量的行和列的相同数据类型(数字、字符或逻辑)元素的集合。二维矩阵仅适用于行和列。
创建矩阵
函数[**matrix()**](https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/matrix)
创建一个矩阵。这个函数有三个重要的参数:
**vector**
—这是将被排列到矩阵行和列中的元素的集合。该参数是可选的;如果我们把这个参数留空,矩阵就不会被填充,但它可以在以后被填充。我们可以使用已经创建的向量。**byrow**
—表示矩阵是按行(byrow=TRUE
)还是按列(byrow=FALSE
)填充。默认设置为FALSE
。**nrows**
—表示所需的行数。
# A matrix containing the numbers 1 to 9, filled row-wise, with 3 rows.
matrix(1:9, byrow=TRUE, nrow=3)
# 1 2 3
# 4 5 6
# 7 8 9
命名矩阵
为了给行和列添加名称,我们可以使用函数colnames()
和rownames()
。
rownames(my_matrix) <- row_names_vector
colnames(my_matrix) <- col_names_vector
我们也可以使用dimnames
属性,在创建时直接命名矩阵。
my_matrix <- matrix(vector, byrow=some_logical, nrow=some_number
dimnames = list(row_names_vector, column_names_vector)
添加到矩阵
我们可以使用[cbind()](https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/cbind)
将矩阵和/或向量按列合并在一起,向矩阵中添加一列或多列。
big_matrix <- cbind(matrix1, matrix2, vector1, ...)
要添加一行,我们使用[**rbind()**](https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/cbind)
函数获取一系列向量或矩阵,并按行组合它们。
big_matrix <- rbind(matrix1, matrix2, vector1, ...)
计算总数
我们可以用rowSums()
计算每行的总和,用colSums()
计算每列的总和。
rowSums(my_matrix)
colSums(my_matrix)
选择矩阵元素
方括号[]
用于从矩阵中选择一个或多个元素。因为矩阵是二维的,所以需要逗号来分隔行和列。
my_matrix[row, column]# Select element on the first row and second column
my_matrix[1,2]# Returns a matrix with the data on rows 1 through 3, and columns 2 through 4
my_matrix[1:3, 2:4]# To select all elements of a column, no number is needed before the column
# Select all elements of the first column
my_matrix[,1]# To select all elements of a row, no number is needed after the row
# Select all elements of the first row
my_matrix[1,]
如果您想更深入地了解矩阵,请查看我写的这篇关于如何创建、命名、选择矩阵以及用矩阵进行基本计算的文章。它甚至包括练习题要做!
因素
一个因子用于存储分类变量。分类变量属于有限数量的类别(例如,“男性”、“女性”)。它们与连续变量相反,后者可以对应于无限数量的值。
创建因子
要创建一个因子,使用[**factor()**](https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/factor)
函数,它将一个向量编码为一个因子(也称为“类别”或“枚举类型”)。
# Creates a gender factor with the categories "Female" and "Male"
gender_vector <- c("Male", "Female", "Female", "Male", "Male")
gender_factor <- factor(gender_vector)
名义分类变量没有隐含顺序(例如“Elephant”
、“Monkey”
、“Horse”
)。有序分类变量具有自然排序/排名(例如“Low”
、“Medium”
、“High”
)。
r 以不同的方式构造和打印它们。默认情况下,factor()
函数将向量转换成一个无序因子。要创建有序因子,我们需要两个额外的参数:
**ordered**
—设置为TRUE
,表示因子已排序。**levels**
—以正确的顺序设置因子的值。
# Constructs a factor with nominal categorical variables
animal_vector <- c("Elephant", "Monkey", "Horse")
animal_factor <- factor(animal_vector) # Constructs a factor with ordinal categorical variable
temperature_vector <- c("High", "Low", "High", "Low", "Medium")
temperature_factor <- factor(temperature_vector, order = TRUE, levels = c("Low", "Medium", "High"))
对于顺序变量,使用<
指示顺序。
# Output for nominal variables
# Animals
[1] Elephant Giraffe Donkey Horse
Levels: Donkey Elephant Giraffe Horse# Output for ordinal variables
# Temperature
[1] High Low High Low Medium
Levels: Low < Medium < High
重命名因子级别
有时,出于清晰或其他原因,更改数据集中特定因子级别的名称会有所帮助。例如,假设来自调查的原始数据包含一个关于回答者性别的问题,只记录了两个类别:"M"
和"F"
。在数据收集过程中记录缩写可能很方便,但在分析过程中可能会变得混乱。我们可以通过使用[**levels()**](https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/levels)
功能来改变关卡的名称:
levels(factor_vector) <- c("name1", "name2", ...)# Specify the levels to "Male" and "Female" instead of "M" and "F"
survey_vector <- c("M", "F", "F", "M", "M")
survey_factor <- factor(survey_vector)
levels(survey_factor) <- c("Female", "Male")
**注意:分配等级的顺序很重要。levels(survey_factor)
输出[1] "F" "M"
。如果在创建过程中未指定因子等级,它们将自动按字母顺序分配。为了正确地将"F"
映射到"Female"
和"M"
映射到"Male"
,需要按照特定的顺序将电平设置为c("Female", "Male")
。
总结一个因素
[**summary()**](https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/summary)
函数给出了变量内容的快速概览。它可用于因子,以确定我们的向量中每个因子级别有多少个响应。
summary(my_factor)# Example
summary(survey_factor)# Output
Female Male
2 3
如果您想更深入地了解因素,请查看我写的这篇关于如何创建、子集化和比较因素的文章。它包括练习题,这样你可以练习你新开发的技能。
数据帧
数据帧类似于矩阵,但元素不必都是相同的数据类型。数据框以变量为列(如 married, age
),以观察值为行(如respondent1, respondent2 , …
)。
married age
Respondent1 TRUE 24
Respondent2 FALSE 18
Respondent3 FALSE 28
检查数据帧
我们可以通过使用以下函数显示整个帧的一小部分来检查元素:
[**head()**](https://www.rdocumentation.org/packages/utils/versions/3.6.2/topics/head)
—显示数据帧的第一部分[**tail()**](https://www.rdocumentation.org/packages/utils/versions/3.6.2/topics/head)
—显示最后一部分。
我们还可以使用[str()](https://www.rdocumentation.org/packages/utils/versions/3.6.2/topics/str)
函数来显示框架的结构,得到以下信息:
- 观察总数
- 变量总数
- 变量名的完整列表
- 每个变量的数据类型
- 第一次观察
创建数据框
为了构建数据框,我们使用了[data.frame()](https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/data.frame)
函数,将数据向量作为不同列的参数传递。请注意,数据帧中的每一列都具有相同的长度,因此传递的向量也应该具有相同的长度。但是它们不需要相同的数据类型。
my_df <- data.frame(vector_variable1, vector_variable2, ...)
选择数据框元素
类似于向量和矩阵,我们用方括号[]
来选择元素。逗号用于指示分别从行和列中选择什么。
# Select the value at the first row and second column
my_df[1,2]# Select rows 1 to 3, and columns 2 to 4
my_df[1:3, 2:4]# Select all elements in row 1
my_df[1,]# Select all elements in col 3
my_df[,3]# Select the first three elements from the age column
my_df[1:3, "age"]# Select all elements of the married column
my_df[,"married"]
my_df$married # Notice that we can use the $ sign as a short-cut
subset(my_df, subset = married) # We can also use the subset function
对数据帧进行排序
我们可以使用[**order()**](http://www.rdocumentation.org/packages/base/functions/order)
函数根据某个数据框变量对数据进行排序。
# Sorts data frame by age (youngest to oldest)
positions <- order(my_df$age) # Use order() to create positions
my_df[positions,] # Use positions to sort df
如果您想更深入地了解数据框,请查看我写的这篇关于如何创建、选择和排序数据框的文章,通过练习问题来进一步巩固您的学习。
列表
列表可以保存不同对象的组件,如矩阵、向量、数据帧和其他列表,以有序的方式聚集在一个名称(列表的名称)下。这些对象不需要以任何方式相关联,因此,实际上任何东西都可以存储在一个列表中。
创建列表
我们使用函数[**list()**](http://www.rdocumentation.org/packages/base/functions/list)
来构造一个列表:
my_list <- list(comp1, comp2, ...)# Constructs a list with different elements
my_list <- list(my_vector, my_matrix, my_df)
命名列表组件
我们可以给列表中的组件命名,这样就不会忘记它们所代表的含义。我们既可以在构建列表时命名它们,也可以在之后命名它们。举个例子,
# Name components directly during list construction.
my_list <- list(name1 = comp1, name2 = comp2)# Use names() function to name list after construction
my_list <- list(comp1, comp2)
names(my_list) <- c("name1", "name2")
选择列表元素
我们可以使用组件的编号位置以及双方括号[[]]
,而不是用于向量和矩阵的单方括号[]
。
# Select the first component (position 1)
my_list[[1]]# Select name2 from the list
my_list[["name2]]
my_list$name2# Select first element from name2 component
my_list[["name2"][1]]
my_list$name2[1]
r 数据结构备忘单
创建和选择不同数据结构的备忘单。
笔记
所有图片,除非特别注明,均归作者所有。横幅图像是使用 Canva 创建的。
你现在可以使用的关于新冠肺炎的 5 个数据集
开放数据集可用于改进预测模型、预测和分析新冠肺炎的影响或调查 Twitter 上传播的信息。
冠状病毒爆发及其导致的疾病新冠肺炎席卷了全世界。新闻编辑室每天过滤大量信息——文章、官方简报、专家采访等。医务人员每周都要努力跟踪数百份科学出版物,涉及药物研究、流行病学报告、干预政策等等。此外,社交网络平台需要减少噪音,推广经过验证的故事,以避免培养误导和恐惧的用户。
在这场斗争中,我们很幸运地生活在一个充分了解数据价值的世界,并且在收集和提炼这些数据方面有许多努力正在进行中。因此,问题是如何利用它们来提取价值和智慧,从而影响政策的制定和警报的触发。
在这个故事中,我展示了六个精心策划的数据集,它们在某种分析光线下可以证明非常有用。它们的主要可能应用从改善流行病学预测模型和预测各种干预政策的影响,到自然语言处理和 Twitter 上的信息传播。对于已经存在的应用,我邀请您阅读下面的故事。
卓越方法和特殊实践概述。
medium.com](https://medium.com/swlh/how-data-science-can-help-with-outbreaks-like-coronavirus-a042de25efa1)
学习率是为那些对 AI 和 MLOps 的世界感到好奇的人准备的时事通讯。你会在每周五收到我关于最新人工智能新闻和文章的更新和想法。在这里订阅!
nCoV-2019
我们考虑的第一个数据集发表于 2020 年 3 月 24 日,标题为“来自新冠肺炎疫情的流行病学数据,实时病例信息”[1]。它从国家、省和市卫生报告中收集个人信息,并从在线报告中收集额外知识。所有数据都进行了地理编码,并包含进一步的输入,如症状、关键日期(发病、入院和确诊日期)和旅行记录(如果有)。你可以在这里找到相关的 GitHub 回购。
新冠肺炎疫情可视化使用nCoV-2019
nCoV-2019
数据集能够产生模拟疾病爆发的实时方法。这种机制支持公共卫生决策,并协助决策者执行知情的指导方针。
新冠肺炎(新型冠状病毒肺炎)
新冠肺炎[2]可以说是收集冠状病毒爆发信息的最大努力。几乎所有读过关于即将到来的疫情的文章的人都看过它提供的仪表盘。
新冠肺炎·JHU 仪表板
数据集包含两个文件夹;一个记录每日病例报告,另一个提供每日时间序列汇总表,包括确认的新病例、死亡和康复。新冠肺炎数据集为研究人员、公共卫生机构和普通公众提供了一个直观、用户友好的工具来跟踪疫情的发展。你可以在这里找到相关的 GitHub repo。
绳索-19
艾伦人工智能研究所(Allen Institute for AI)与几个研究小组一起准备并发布了新冠肺炎开放研究数据集(CORD-19) [3]。该数据集汇集了 44,000 篇关于新冠肺炎和冠状病毒家族的学术文章,供全球研究界使用。
该数据集已经有了一个相关的 Kaggle challenge ,数据科学家被要求开发文本和数据挖掘工具,以帮助医疗界开发高优先级科学问题的答案。此外,已经有一个 CORD-19 Explorer 工具,它提供了一种熟悉的方式来浏览 CORD-19 语料库。
世卫组织 COVID-2019
世界卫生组织(世卫组织)也在进行类似的努力。世卫组织每天通过手动搜索相关期刊的目录来更新数据集。此外,他们追踪其他相关的科学文章,丰富了数据集。
你可以下载整个数据集或通过作者、关键词(标题、作者、期刊)、期刊或一般主题在这里进行搜索。
新冠肺炎推文 ID
新冠肺炎推特 IDs 数据集收集了数百万条与冠状病毒爆发和新冠肺炎病相关的推特[4]。这个数据集中的第一条推文可以追溯到 2020 年 1 月 22 日。
作者使用 Twitter 的 API 来搜索和关注相关账户,并收集多种语言的带有特定关键词的推文。在此之前,下面给出了语言分类。
| Language | ISO | No. tweets | % total Tweets |
|------------- |----- |------------ |---------------- |
| English | en | 44,482,496 | 69.92% |
| Spanish | es | 6,087,308 | 9.57% |
| Indonesian | in | 1,844,037 | 2.90% |
| French | fr | 1,800,318 | 2.83% |
| Thai | th | 1,687,309 | 2.65% |
| Portuguese | pt | 1,278,662 | 2.01% |
| Japanese | ja | 1,223,646 | 1.92% |
| Italian | it | 1,113,001 | 1.75% |
| (undefined) | und | 1,110,165 | 1.75% |
| Turkish | tr | 570,744 | 0.90%
你可以在该项目的 GitHub repo 这里下载数据集以及更多信息,包括如何水化它(即一条推文的完整细节)。
结论
数据社区在冠状病毒爆发时做出了反应,生成了各种数据集,这些数据集可以加快新疗法的研究,为政策制定者提供信息,或创建预测模型,以更好地预测当前疾病的表现或触发对未来事件的警告。
剩下的问题是数据科学家将如何使用这些数据集,以及将产生什么工具。无论如何,我们的武器库中似乎多了一件对抗这种病毒的武器。
我叫 Dimitris Poulopoulos,是希腊比雷埃夫斯大学*BigDataStack的机器学习研究员和博士©。我曾为欧洲委员会、欧盟统计局、国际货币基金组织、欧洲中央银行、经合组织和宜家等主要客户设计和实施人工智能和软件解决方案。如果你有兴趣阅读更多关于机器学习、深度学习和数据科学的帖子,请在 twitter 上关注我的*****LinkedIn或@ james2pl。******
参考
[1]徐,b,Gutierrez,b,Mekaru,S. 等来自疫情的流行病学数据,实时病例信息。 Sci 数据 7、 106 (2020)。https://doi.org/10.1038/s41597-020-0448-0
[2]董,e,杜,h .,,加德纳,L. (2020).实时跟踪新冠肺炎的交互式网络仪表板。柳叶刀传染病。https://doi . org/10.1016/s 1473-3099(20)30120-1
[3]新冠肺炎开放研究数据集(CORD-19)。2020.版本 2020-03-20。从年月日访问的 https://pages.semanticscholar.org/coronavirus-research.检索。https://doi.org/10.5281/zenodo.3727291
[4]陈,e .,勒曼,k .,,费拉拉,E. (2020)。新冠肺炎:第一个公开的冠状病毒推特数据集。arXiv 预印本 arXiv:2003.07372
启发您下一个数据科学项目的 5 个数据集
寻找一个数据集来使用?不要再看了…
弗兰基·查马基在 Unsplash 上拍摄的照片
开始一个新的数据科学项目有两种方式,要么你有一个想要实现的想法,所以你查找数据集来实现你的愿景。或者,你偶然发现一个令人兴奋的数据集,激发你开始一个新项目。
通常,作为一个初学者,你可能会有点迷失,四处寻找开始一个项目的好地方。对我来说,一个好的起点总是找到一个有趣的数据集来触发我的好奇心。
嗯,这篇文章是关于寻找数据集来启发你。当你偶然发现一个有趣的数据集,它有如此多的潜力来激发你的创造力,你会情不自禁地使用它来创建一些伟大的东西。
无论您处于数据科学之旅的哪个阶段,是刚刚起步,还是试图提高技能并建立新技能,没有比实践更好的方法来提高技能了。你建立的项目越多,你在数据科学方面就会越熟练,你的个人资料也会变得越好,越有吸引力。
为了提高您的数据科学技能,并建立一套建立强大档案所需的良好技能,您需要解决数据科学的 5 个方面:
- 深度学习
- 自然语言处理
- 大数据
- 机器学习
- 图像处理
在本文中,我将向您展示数据集的五个选项,分别针对数据科学的五个方面。我将谈一点关于数据集的构造,它的格式,以及一些可能的想法,关于如何使用它来构建一些奇妙的项目。
这些数据集可用于构建数据科学多个方面的项目。所以,发挥你的创造力,开始建立你的个人档案——或者扩大它。
MNIST 数据集
没有比从最著名的数据集集合——MNIST 数据集——开始更好的地方了。在这里,我们将讨论两个 MNIST 数据集:
- 手写数字的 MNIST。
- 时尚-MNIST。
手写数字的 MNIST
MNIST 数据集是手写数字的集合。该数据集包含 60,000 幅图像的训练集和 10,000 幅图像的测试集,可用于模型评估。数据集中的数字已经过大小标准化,并在固定大小的图像中居中。
该数据集非常适合想要尝试学习技术和模式识别方法的初学者,以及想要在真实世界数据上测试其模型同时花费最少精力进行预处理和格式化的中间数据科学家。
对于绝对的初学者来说,这个数据集的原始格式可能有点混乱;幸运的是,这个数据集也有一个易于处理的 CSV 格式的。
时尚-MNIST
时尚-MNIST 是 Zalando 文章图片的数据集。就像原始数据集一样,这个数据集也由 60,000 个样本的训练集和 10,000 个样本的测试集组成。
每个数据条目是一个 28x28 灰度图像,与来自 10 个类别的标签相关联。训练和测试图片的结构是相同的。
如何使用 MNIST 数据集?
- MNIST 数据集在帮助初学者理解和学习不同的机器学习和模式识别技术方面非常有用。
- 数据集包含定型数据和测试数据,因此不需要拆分数据。
- 该数据集可用于为时尚数据集中的手写、数字识别和服装识别构建图像识别应用程序。
- 您可以使用该数据集来学习和练习卷积神经网络(CNN)的不同方法和技术。你可以离开使用 Keras 和建立你的模型。
亚马逊产品数据集
亚马逊产品数据集包含来自亚马逊的产品评论和元数据,包括 1996 年 5 月至 2014 年 7 月期间的 1.428 亿条评论。该数据集包括评论(评级、文本、有用性投票)、产品元数据(描述、类别信息、价格、品牌和图像特征)和链接(也查看过/也购买过的图表)。
该数据集将让您对实际业务问题有一个基本的了解,并帮助您理解和提取多年来的销售趋势。
如何使用亚马逊产品数据集?
- 您可以使用该数据集来分析情感,这是自然语言处理(NLP)最受欢迎的应用之一。
- 这个数据集是一个文本处理数据,您可以使用它来构建各种类型的 NLP 模型。
- 您还可以使用该数据集构建产品趋势模型,并基于该模型预测未来趋势。
YouTube 视频统计数据集
YouTube 在平台上维护着一份持续更新的热门视频列表。为了选出年度热门视频,YouTube 使用了各种因素,包括衡量用户的互动(观看、分享、评论和喜欢的数量)。
YouTube 视频统计数据集是热门 YouTube 视频的每日记录。
如何使用 YouTube 视频统计数据集?
- 对不同类型的视频进行情感分析,寻找模式。
- 根据评论和统计数据对 YouTube 视频进行分类。利用这些结果,你可以建立你自己的数据库,其中的视频更能吸引观众。
- 训练像 RNNs 这样的机器学习算法来生成 YouTube 评论。
- 使用前几年的热门视频列表来建立一个机器学习模型,预测未来的热门视频列表。
垃圾短信数据集
如今,我们被垃圾邮件,垃圾邮件,垃圾广告和垃圾短信所包围。垃圾短信数据集包含一组 5574 条英文短信,标记为垃圾短信。
该数据集将不同的垃圾邮件表示为 CSV 文件的条目,以便于阅读和提取。数据集 CSV 文件包含两列,一列用于邮件是否为垃圾邮件的分类,另一列是邮件的原始文本。
如何使用垃圾短信数据集?
- 您可以使用机器学习分类算法来构建垃圾邮件分类器,然后对一些邮件进行测试,以将它们标记为安全邮件或垃圾邮件。
- 您可以在此数据集上构建模型并进行训练,以预测和检测垃圾邮件。
COCO 数据集
COCO 是一个大规模的对象检测、分割和字幕数据集,由微软创建,由许多其他大公司赞助。缩写 COCO 代表上下文中的公共对象。这个数据集包括许多特性,例如 80 个对象类别的 150 万个对象实例,33 万张图像,91 个物品类别,以及每张图像的 5 个标题。
COCO 拥有令人惊叹的文档,在你决定下载之前,你可以使用浏览器在线浏览数据集。
如何使用 COCO 数据集?
- COCO 可用于训练和建立机器学习模型,以检测和分类不同的对象。例如,您可以使用它来分类不同的可行类型。
- 本质上,使用 COCO 使您能够构建不同的图像处理应用程序,例如图像分割和压缩。
- 您还可以使用 COCO 训练您的模型通过检测人/动物来分析来自安全摄像机的镜头数据。
- COCO 还可以用于非数据科学项目,比如机器人学中的物体检测。
外卖
开始一个新项目可能有些棘手,尤其是如果你刚刚开始研究数据科学。当我刚开始时,我不能决定一个项目,简单地说,因为我没有足够的知识来选择一个项目和一个数据集。
对我有帮助的事情之一是,浏览数据集网站(例如 Kaggle )并阅读不同数据集及其使用方法。这给了我启动新项目所需的灵感。我现在仍然这样做。
唯一一次我不需要探索和浏览不同的数据集,是当我有一个带有特定数据集的 set 项目时。如果我受雇于一家公司或一个客户,情况就是这样。
随着我的知识基础的增长,我对好的数据集以及如何看到它们的潜力有了自己的看法。数据总会讲述一个故事,你只需要去听。
所以,我希望这篇文章能激发你去建立一个新的项目,或者浏览网页寻找令人兴奋的数据集,激发你去建立一些令人敬畏的东西。
5 天做别人的 Python 作业
所有的家庭作业都很酷,不仅仅是你自己的
看起来你想让别人帮你做作业…
让我帮你做作业吧!家庭作业应该让你学习你正在做的主题。做别人的作业只是让别人摆脱困境,他们也会错过学习的因素,对不对?
通常你会皱眉说“看起来你只是想让某人做你的作业……”,但是做别人的作业会很有趣!如果他们不想学,我当然想学。
我没有感到有点恼火,而是跳上车开始做作业!所有这些都可以在各种脸书团体中找到。我保持帖子匿名,但如果你看到你的帖子,并希望得到信任,请给我留言,我会将它添加到文章中。
第一天—用面向对象编程创建疫情:
让我们以最彻底的一个开始这一周。
这涉及到面向对象编程的使用。我想画出这些课程的草图,看看它们是如何联系在一起的,但是看着作业,我不认为我们需要太多。这可能是一个只有字典而没有课程的任务。然后你需要把它全部转换成包含类。这是一种强制使用的类赋值。
起初,我在寻找一个City
类的用法。你可以在这里使用一个城市类,但是真的没有必要。我们可以创建一个Pandemic
类并将城市存储在 dict 中。
pandemic.py
def add_city()
这个方法只是在self._city_overview = {}
字典中添加了一个城市。作业说城市的数据应该是一个序列。这通常是一个列表或一个元组,但是字典在这里更好,所以我们为用户添加到主字典中的键创建一个新字典,就像这样。
self._city_overview = {'Oslo' : {infected:0 , recovered:0 , deaths:0} }
这样,我们就完成了添加带有默认值的城市的任务。
def edit_city()
此方法编辑主概览字典中的现有城市。
因为我们只接受整数,所以我们首先检查是否所有的输入都是整数。由于 input 首先返回一个字符串,我们可以使用.isdigit()
来检查用户是否输入了有效的数字。
我们也可以使用int(input(‘’))
来强制一个 int,但是我不喜欢这种方法,因为如果你输入一个字符串,它会使程序崩溃。
def 显示 _ 所有 _ 城市 _ 统计()
这个方法只是显示我们拥有的数据。因为这是一个 dict with dicts,我们需要在这里做一些循环。
要打印城市名,这是一个键,我们只需要循环遍历这些键。我们可以在 dict 上使用key()
方法来获得这些
for key in self._city_overview.keys():
对于 city 键中的 dict,我们需要键和值。这里我们可以使用items()
方法
for inner_key,inner_value in self._city_overview[key].items():
print (f'{inner_key} : {inner_value}')
如果我们使用列表库,看起来会更漂亮。你可以在我关于作家分析的文章中看到这些漂亮表格的例子:
用数据分析为什么三位顶级作家如此成功
medium.com](https://medium.com/better-marketing/7-ways-you-can-find-the-magic-formula-of-great-successful-writers-d32001d6ac4e)
如果你觉得大胆,你可以在这里找到 400 万个城市的名单:
我们自豪地提供一个简单、准确和最新的世界城镇数据库。我们从…构建了它
simplemaps.com](https://simplemaps.com/data/world-cities)
使用csv
模块填充项目。
def get_city_overview()
以防万一,你曾经需要抓住任何东西的概述字典
main.py
让我们来看看完成所有交互的主程序。没什么大不了的,但我会把它分解。
您要做的第一件事是导入您的疫情类。
我们首先创建电晕疫情,然后我们将user_choice
设置为‘y’
,以确保我们进入了 while 循环,在这里我们请求用户输入。
作业说我们需要考虑到‘Y’
和‘y’
。通过使用lower()
,我们确保输入总是小写。这样我们只需要检查‘y’
就可以了。
如果用户说‘y’
,我们要求城市。如果城市在字典中,我们可以使用。edit_city()方法。
如果城市不存在,作业希望我们用默认值添加城市。我们为此使用了.add_city()
方法,如果用户想要立即编辑新的城市,我们在新创建的城市上使用edit_city()
。
您可以将数据输入到疫情方法本身,而不是在 main 中运行两次。这可能是一个好主意,看看…
第 2 天—器械包的经典用法:
让我们更轻松地做下一个来喘口气。
我喜欢作业中有错误的时候…这经常发生。预期的结果不会返回您期望从为解决问题而编写的程序中得到的结果。
作业希望我们得到一个序列中的值的列表(我猜要么是一个列表,要么是一个逗号分隔的字符串。)然后,它希望我们删除任何重复项,并返回排序后的列表。
有许多方法可以获得逗号分隔值的列表。对用户来说,最简单的方法可能是写一个单词,按回车键,然后再写一个。你可以创建一个菜单,直到你按下“q”或其他键。对于这个项目,我选择让用户一次按顺序输入所有内容。因为这个方法,我们需要解决另一个。如果用户在任何地方输入空格,我们需要删除它们。
你可能还想使用lower()
来确保“红色”和“红色”被同等对待。
为了解决这个问题,我们可以使用多种内置方法。这背后的基本思想是:
1) get a list of strings comma separated.
2) kill the duplicates
3) sort what's left
4) return sorted representation
我们允许用户输入单词,所以它是多才多艺的。我们还添加了一个条,这样我们可以在用户添加空格时考虑错误。
互动
split_user_words = [word.strip() for word in user_words.split(',')]
我们使用列表理解去除列表元素中的所有空格。拆分版的话,加strip()
。这将创建一个去掉空格的新列表。
clean_user_words = set(split_user_words)
这将创建一个set
,您可能知道,一个set
不能有同一个单词的多个实例。这对这项任务来说再合适不过了。
print (','.join(sorted(clean_user_words)))
为了确保我们根据任务文本正确输出打印结果,我们可以使用.join()
。这将使用列表中的所有元素,并将它们连接成一个字符串。‘,’
告诉 join 用逗号将它们连接起来。猜猜(sorted(clean_user_words))
是干什么的。
第三天——理解代码并以 pythonic 的方式重写代码
正如函数名所示,代码将接受一个 iterable 并返回第二大的 iterable。在这种情况下,我们传递一个列表。
它是以一种混乱的方式写的,但是让我们看看我们得到了什么。
largest = nums[0]
second_largest = num[0]
这里,代码将列表的第一个数字分配给最大和第二大的变量。当我们遍历列表的其余部分时,它准备看看是否有更大的数字进来。
for i in range(1,len(nums)):
if nums[i] > largest:
second_largest = largest
largest = nums[i]
好的,如果下一个数字大于largest
,它会将当前最大的数字加到变量second_largest
中,并将新的更大的值赋给 maximum。这样它就把数字推到了一边。
elif nums[i] > second_largest:
second_largest = nums[i]
如果该数字不大于largest
,但大于second_largest
,则应该将其从变量中推出并保持最大值。
return second_largest
替代代码:
我觉得上面的代码很笨拙。看起来写它的人来自非 Python 背景。手动工作太多,无法抓住要点。
下面是我如何编写相同的函数:
def get_second_largest(number_list):
return sorted(number_list)[-2]def main():
my_nums = [44,11,8,29,25,76,88]
print (f'second highest number: {get_second_largest(my_nums)}')main()>>> second highest number: 76
或者,您可以使用.sort()
,但是如果我不需要就地修改列表,我更喜欢使用 sorted。
#alternative:
def get_second_largest_sort(number_list):
number_list.sort()
return number_list[-2]
第四天——石头、布、剪刀
是的…大多数“截图”都是这样贴出来的。
我注意到最近在脸书问题上石头、纸、剪刀有所增加。我不知道这是不是因为几个人在做同一个作业,但我认为尝试解决这个问题是个好主意。
我不想用一长串 if/else 来解决这个问题,所以我开始寻找一种实现规则的方法,并找到了一种写一个简短而可靠的版本的方法。
定义菜单()
这是返回一个长字符串并将其用作菜单的简单方法。我想把它放在一个独立的函数中,这样它就很容易改变,并且和游戏本身是分开的。
def 随机计算机选择()
该函数使用导入模块,并根据该随机数返回计算机选择。
该数字生成索引,并使用备选项列表返回一个选项。
定义节拍 _ 检查()
这个函数允许我们不依赖一堆如果问题。
字典保存节拍值。这意味着键“石头”将击败值“剪刀”。
我使用了.get()
方法,而不是dict[key]
方法来获取键的值。通过使用.lower()
,我们也确保捕捉到岩石对岩石。
Jonathan Hsu 有一篇很好的文章讲述了这是如何工作的:
[## 在 Python 中,停止使用方括号符号来获取字典的值
超越传统方法,保护您的代码
medium.com](https://medium.com/better-programming/stop-using-square-bracket-notation-to-get-a-dictionarys-value-in-python-c617f6ea15a3)
我们不是在检查打字中的实际错误。您应该将这一点融入代码和交互循环中。
def main()
这里没什么特别的…我们有电脑选择和玩家选择。然后我们让他们互相比赛,看谁赢了。
这里唯一的额外部分是检查它是否是一个领带。
升级程序
为了让这个游戏更具互动性,你可以尝试创建一个循环,这样玩家就可以想玩多久就玩多久。
第五天——只想学 Python
嗯,他的范围很广,我对此没有很好的答案。不过,我想链接一些关于 Python 的好资源。下面是我用过的资源和被推荐的资源的随机列表。欢迎在评论区添加您的收藏。
用 Mosh 编程— Python 全教程
Andrei Neagoie——2020 年的完全 Python 开发者:零到精通,
我的课程
zed Shaw——艰难地学习 Python
**ISBN-10:**1593279280
**ISBN-13:**978–1593279288
Eric Matthes——Python 速成班第二版:基于项目的编程入门实践
**ISBN-10:**1593279280
ISBN-13:978–1593279288
YouTube——科里·谢弗
YouTube——卡勒·哈尔登
最后
这是一个非常有趣的练习,我希望你能学到一两个技巧。我正在考虑创作一个名为“允许我做你的作业”的系列。我接触初学者的地方。我们会看到这有多受欢迎。
谢谢你坚持和我在一起!
-M