我是如何进入数据科学领域的(拥有文科学位)——应对面试准备的两大支柱
这本初学者友好的指南概述了我如何为数据科学求职做准备,所以你可以带着详细的行动计划离开。
西蒙·艾布拉姆斯的照片
从 2017 年底到 2018 年初,我为我目前的数据科学角色进行了准备和面试。现在,我得到了训练和部署机器学习模型的报酬(耶!)并用我的统计学/计量经济学和编程技能创造影响。在这篇由两部分组成的文章中,我分享了我的方法,我认为这种方法对我从学校一毕业就进入这个领域贡献最大,并通过对工作的真实观察进行了更新。
现在,无论你是应届毕业生、经验丰富的数据科学家,还是打算转行,我都希望这篇文章能对数据科学求职有所启发。尽管我现在已经坐在桌子的另一边,但作为一名采访者,我仍然从其他数据科学家的经历中学到了很多。我的目标是让这篇文章像与你的在线咖啡聊天;在我找工作的过程中,有很多人与我分享了他们的知识,我想把这些知识传递给他们!
这篇文章以前只对时事通讯的订阅者开放,但是我抓住机会更新了很多额外的内容,最后有两部分!我也鼓励你去看看 Serena 的精彩文章,关于她的数据科学家求职方法,这启发了我写一篇自己的文章。此外,对于那些来自学术界的人(例如博士),请查看 Amir 的综合 LinkedIn 文章。
数据科学技能的两大支柱
我的观点是,数据科学需要统计和编程两方面的专业知识。我确实感觉到最终会有更多的支柱加入进来,比如产品或系统设计,但是因为这篇文章关注的是我进入这个领域的经历*,所以我只关注这两个支柱。*
为了简单起见,我使用术语“统计学”来指代机器学习理论,特别是对算法如何工作的数学理解,从逻辑回归到自然语言处理(NLP)技术。同样,我会用“编程”这个术语来指代一般的编码、构建数据管道、软件开发(包括版本控制、终端等。如果角色需要)。
事实上,培养统计和编程两方面的专业知识是一个很高的要求——通常情况下,学校教育只能为一个人准备这么多。有统计学背景的人可能没有编程经验,反之亦然。对于入门级别的,我的观点是,在面试时,不需要同时精通统计和编程。然而,你绝对应该而不是在其中任何一个都是“零”。
我这样说的原因是,有很多很多类型的数据科学家。这完全取决于团队、该角色参与的项目、公司的技术水平以及许多其他因素。有些数据科学家在日常工作中只利用了 70%的统计专业知识,但只利用了 30%的编程技能。其他团队成员可以更专注于 MLOps(生产化、CI/CD…),并在日常工作中需要更少的统计数据,但仍应熟悉他们部署的算法。
因此,我更愿意从候选人在这两个支柱方面的技能来看他们的资格,这两个支柱的要求在所有名为“数据科学家”的角色中有很大差异。关键是,对于一个入门级角色来说,不需要 100%同时具备这两个支柱,而是两者的综合。
如果你正在寻找进入该领域,并注意到你在其中一个支柱方面的专业知识较少,例如,对统计只有轻微的了解(例如,1/10,在本科时只上过入门课程),但在编程方面有很多经验(例如,8/10),则专注于将统计支柱提高到 3/10。
我如何用这两个支柱来定制我的面试准备
我的个人教育背景是经济学,主要侧重于使用金融市场、定价、家庭收入等数据进行推理或预测建模。听起来很像工业中的数据科学,不是吗?
计量经济学让我对“统计学”支柱有了坚实的理解,因为高年级的课程需要大量的微积分和矩阵代数,当我开始自学更多的机器学习算法时,这些都是非常宝贵的。但是,有一个问题——我只通过一个名为 Stata 的专有软件学习了统计编程,而不是行业中常见的语言,如 Python 或 r。
对于那些不熟悉 Stata 的人来说,它仍然非常适合进行快速线性建模或时间序列,并且通常用于经济学家职业,例如,向决策者提供建议的政府或相关机构(新闻中引用的那些人!).然而,当我申请(非政府、非研究)行业职位时,我很快注意到 Python 和 R 是更常见的要求,Python 在我的求职过程中被提到得最多。
就正规教育而言,我会把我的 Python 技能放在 1/10,因为我只选修了一门计算机科学课程。注意:这里的 10 分并不是整个行业的 10 分,而是我的印象,不管现实与否,对一个非常有竞争力的入门级候选人的期望。
事实证明我是幸运的——我从三年级就开始编写代码来构建视频游戏原型,这应该可以将编程支柱提升到比如说 4/10。但是我大吃一惊——在工作描述中,Python 包如NumPy
和pandas
被反复提及。然而,我从来没有听说过他们!在游戏开发中,我根本不需要使用那些包。我有一些重要的事情要做。所以我在心里把我的“编程”定为 1/10,因为我对“用于数据科学的 Python”缺乏经验,而不是对“一般的 Python”。
我详细提到了我的经历,因为如果我没有对这两个支柱的技能进行自我评估,我就不会发现我在数据科学方面的优势。我可能害怕申请任何数据科学职位,因为我的学位不是“纯”统计学或计算机科学。我也不会找出需要改进的地方,所以两个支柱的得分最低都是 4/10。为了实现这个目标,我花了很多时间在小项目中学习NumPy
和pandas
,比如复制我在 Stata 中做的作业。在我的数据科学专题文章中,我详细介绍了如何构建投资组合;如需更多信息,我推荐 Serena 文章的“工作证明”部分。
警惕工作描述诱发的冒名顶替综合症
我和一些人喝咖啡聊天,他们提到工作描述要求,比如说,计算机科学博士学位,即使这显然是一个入门级的职位。在这种情况下,忽略要求去申请,即使你没有所述学科的博士学位。有可能,其他申请人也是应届毕业生或数据科学新手。
冒名顶替综合症是我很想警告年轻时的自己的一件事。不要因为你认为所有的申请人都比你“更有资格”而回避申请。事实是,你根本不知道其他申请人是谁!所以,这种想法是不正确的,是骗子综合症在说话。
根据个人优势准备数据科学面试
简单回顾一下:在对我在统计和编程这两个支柱上的技能进行自我评估之后,我立即列出了一系列行动项目,旨在将我在这两个支柱上的技能提高到令人满意的最低水平。当时我的 Python 数据科学编程很弱,所以我花了很多时间学习NumPy
和pandas
,用那些包复制过去的项目(用 Stata 写的),还有statsmodels
。
此外,这很大程度上是运气——我刚刚开始对我的游戏开发过程实施版本控制,因为没有它,我的项目在扩大规模时会变得一团糟(在本文中,我会更详细地阐述游戏开发体验)。所以,我从终端(也就是命令行)得到了很多使用git
的练习。这些现有的知识对工作有很大的帮助,在我的面试中会被问到,但是如果我没有这方面的经验,我肯定会付出额外的努力来复习。
我也花了很多时间去了解最常见的机器学习算法——逻辑回归、一些聚类技术等。,以及它们的数学推导。我的计量经济学背景为我节省了很多时间,因为在几个学期的课程学习后,迭代最小化损失的核心直觉已经非常清楚了。然而,就像大多数课程一样,当我申请工作时,大多数细节已经从记忆中消失了,所以我不得不回顾这些概念,直到我感到可以向面试官大声解释为止。
建立关系网以了解工作描述中缺失的信息
作为求职的一部分,人际关系网被认为是必不可少的一步。在大学里,我听说了很多关于人际关系网有多重要的事情,但在那时,我从未理解这个术语的真正含义。这给人一种错误的印象,就是带着免费饮料和披萨去参加活动和聚会,随意闲逛,直到遇到愿意雇用你的人。我的意思是,“网络”这个术语非常令人困惑。
然而,现在我进入了这个行业,我回过头来,和我之前的人一样,说人脉很重要。在我看来,原因如下。在读研期间,我参加会议和当地聚会。当时我正在两家大公司的面试过程中,我在不同的场合遇到了两个招聘团队的人——甚至是我未来的几个面试官!
因此,参加活动当然有所帮助,同时也是一种运气——当我在聚会上与那些人交谈时,我不知道他们会直接采访我,我怀疑他们也不知道。此外,在活动中与许多人聊天会让你更好地了解这个行业中的典型角色是什么样的——通常情况下,单单一份工作描述远远不能涵盖日常工作。
这也是一个很好的时间来了解团队使用了多少支柱:他们在日常工作中更依赖于他们的统计知识,还是他们更专注于编程?在接受了这个角色后才知道这一点是不和谐的;毕竟,如果一份工作符合你的长期职业目标,你可以做出更明智的决定。
另一个因素是,与你相处融洽的人通常乐于提供帮助——我在大学期间认识的许多朋友,大多是通过我的志愿者工作认识的,他们一直支持我的职业生涯,尽管在我们相遇的时候,求职还远远没有在我们的脑海中出现。
除了这些偶然的相遇和现有的友谊,我还联系了我的研究生项目的校友。他们给我的求职建议往往是无价的,因为他们的背景相似;很多网上的文章都有很好的见解,但由于教育背景不同,无法回答我的具体问题。我试图对求职有一个整体的看法——有些校友,我特别询问了他们工作场所的问题,而有些人,我问了他们是如何培养技能的,不管是哪家公司。
以上是我的网络经验,可能还不太清楚,所以这里有一些要点可以帮助你迈出第一步:
- 当你和某人喝咖啡聊天或打电话时,不要指望他们会告诉你一个神奇的、放之四海而皆准的解决方案“清单”。如果有人问我到底是如何“找到工作”的,我可能无法给出一个完美的答案,而是我的回溯性猜测(“后知之明是 20/20”)。听听他们的职业历程——通常比预期的更加非线性!
- 参加本地或在线聚会。实际了解人们和他们的团队,这比阅读职位描述更有价值。我有机会认识了很多最终和我一起工作的人,接受一份工作对我来说是一个强烈的吸引力,因为我已经和他们相处得很好了(或者我喜欢这么认为)!然而,我只是在面试进行到一半的时候才遇到他们,所以这里面有一些运气成分。
要开始的行动项目
- 评估你在数据科学、统计和编程这两大支柱上的技能,并制定一个行动计划来总结你的优势和劣势
- 接触人们,无论是面对面还是在线,听取他们的职业经历,并寻求全面的覆盖(例如,接触一些人以了解他们的公司或角色,接触一些人以了解教育经历等。)
在本文的下一部分(即将更新),我将介绍在数据科学面试过程的每一轮中会遇到什么,以及我当时是如何准备的。希望这是有帮助的!
原载于 2020 年 3 月 18 日 https://www.susanshu.com。
量身定制的数据科学面试方法,循序渐进——我是如何进入数据科学领域的(拥有文科学位)
关于招聘人员电话、招聘经理技术面试的完整指南,以及如何花一点时间为每家公司量身定制你的答案。
西蒙·艾布拉姆斯的照片
之前,我讲述了数据科学角色的两大支柱:统计和编程知识,以及如何根据您在这两大支柱方面的专业知识准备进入该领域。(链接媒体走向数据科学)。
在这篇文章中,如果你已经收到了你将被面试的好消息,我将会告诉你会发生什么!这包括一些节省时间的技巧,涵盖了各种各样的行为问题,如何让 10 分钟的研究获得数倍的回报,等等。
第一道“关卡”:人力资源或招聘人员的电话筛选
了解人力资源和招聘经理之间的区别
对于大中型公司,人力资源或非技术招聘人员(又名人才获取)通常会对简历进行初步筛选,然后打电话给看起来合格的候选人。谈话结束后,如果他们觉得候选人是潜在的合适人选,他们可能会把它交给招聘经理。
回到 2017 年,我对 HR 和招聘经理的区别感到困惑。现在,我知道招聘经理通常是你真正要一起工作并向其汇报的人,而人力资源部通常进行初步筛选和其他类型的管理,如协调面试。再一次,这是假设一个中型到大型的公司有固定的部门——我将而不是在这篇文章中浏览创业公司的具体信息,尽管大多数提示仍然适用。
展示你的沟通技巧以通过第一道“门”
下面是第一个人力资源或招聘人员电话屏幕的大致情况:
- 他们让你介绍自己
- 他们会问你在某些技术方面的经验(他们通常会将你的答案与职位描述或招聘经理提供的清单进行比较)。例子:“你知道怎么用 Tensorflow 吗?”
- 他们会调查你简历上的项目。例如:“告诉我更多关于你的 Reddit 抓取项目。”
- 他们会问你一些行为面试问题。例子:“告诉我一个你展示领导力的例子。”
- 他们通常会问你为什么对他们公司或这个角色感兴趣。
因为人力资源不会每天和你一起工作,所以跨过第一道“门”所需要的不一定是技术技能,而是沟通技能。
我希望我是在开玩笑,当我说人们这一轮失败实际上是因为可避免的原因,如紧张,或无法用不太专业的术语清楚地表达他们的答案。这是因为你的招聘人员可能来自多种教育背景,所以你需要能够在不同层次的技术细节上进行沟通。如果你能以一种人力资源或招聘人员理解的方式表达,为什么你的技能会有价值,他们会很乐意为你争取,并把你推荐给招聘经理。
清除手机屏幕的定制方法的完整指南
简介:“说说你自己吧”
- 我为这个问题准备了一份“电梯推销”,我在无数次面试中重复使用了这份“电梯推销”。它包括对我的教育背景、经历的简要概述,以及一两句为什么我的经历能帮助我对公司和角色做出贡献的话。
在[技术]、[机器学习技术]或[编程语言]方面有经验
- 在这里,我通常会准备好职位描述。如果描述中列出了我有经验的事情(例如,寻找一个精通 SQL 的候选人),我会准备一个我以前在 SQL 中做过的事情的大纲。
- 我还花了一些时间(10 分钟足够了)来头脑风暴,根据他们的行业,团队可能正在进行什么类型的项目。例如,对于电信,我四处询问,发现他们非常关注客户流失模型(预测哪些客户可能会离开)。就我个人而言,我没有做客户流失建模的经验,但可以事先查找一些例子或常用技术,这样我就可以将这类问题与我的经验联系起来。
关于你简历上所列经历的探讨
- 我精心准备,以便能够描述我在简历中列出的任何项目——这也将为技术面试带来回报。对于人力资源这一轮,我侧重于能够用非技术人员也能理解的高级语言描述影响或结果。然而,如果你能在职位描述中提到任何人力资源正在倾听的行话,那就太好了。如果你指出来就更好了(例如,“我在这个项目中使用了梯度推进技术,这在工作描述中有提到。”)
行为面试问题
- 对于这些,我在网上抓了一个问题清单,确保自己可以口头回答。这里有一些例子。每个公司和面试官都可能会问出截然不同的问题,这让你觉得准备工作让人应接不暇,但不要担心——我的省时建议是准备一些可以用来回答各种问题的故事。
- 例如,我给准备了一个可以用来回答所有这 4 个问题的故事,而不是 4 个关于我如何展示沟通技巧、领导技巧、主动性或主人翁精神的独立故事。你可以随时修改要强调的内容:例如,如果问题是关于沟通技巧的,你可以删除一些关于领导力的细节,同时使用相同的故事。使用这种方法,你可以准备好他们可能抛给你的 99%的问题,只有少数几个故事!
- 使用星形方法,这样你的回答才能传达关键信息。在我知道用这种方式来组织我的答案之前,我大部分时间都忘了提及我项目的结果,这其实是面试官最好奇的!
你为什么对这家公司或这个职位感兴趣?
- 坦白地说,这对人力资源来说非常重要。如果你能表现出热情并理解公司的工作,这将对这一轮很有帮助。很难对一个似乎对公司产品或服务一无所知的候选人感兴趣。我通常会浏览公司的网站或社交媒体,了解公司的概况,如果可能的话,还会了解公司的整体“使命”。他们是 B2B 还是 B2C?如果他们是某种网络平台,他们是更关注创造内容的人,还是消费内容的人,或者两者兼而有之?
- 这项研究在的基础上多次获得回报,因为你将能够围绕如何帮助公司完成使命来构思你的所有答案和故事(例如,“我在【经济建模】方面的教育背景可以帮助我创建稳健而准确的【客户流失模型】,这样我们就可以主动【拯救客户】。”)
这是很多信息,也有很多要准备的,但好消息是,这一轮的准备将在未来的面试中得到回报。不过,如果你觉得没有时间为所有这些问题做详细准备,下面是我发现的一些节省时间的方法,可以大大增加通过这一轮考试的几率:
- 花 10 分钟快速查找公司及其核心使命(或者猜猜可能是什么)。这可以让你成为一个有吸引力的候选人,并多次获得回报
- 准备一个简短的电梯间推介,概述你的经历,以及你为什么对这家公司、团队或职位感兴趣
- 准备 3 个你过去经历的故事来回答各种各样的行为问题
- 例如,一个故事回答关于沟通/协作/领导力的任何问题,另一个故事涵盖时间管理/适应性等,每个故事能够涵盖一些特质
如果可能的话,找一个朋友一起练习——我很幸运,我的朋友们抽出时间来听我的电梯推销——你宁愿先在朋友面前结巴,也不愿在面试官面前结巴!
与招聘经理和未来的同事进行技术/编码交流
在一家中大型公司,如果你在最初的电话面试中赢得了人事经理的赞赏,你很可能会被邀请与招聘经理面谈。我为这几轮面试准备的策略涉及了更多的技术细节,比如回顾我在简历中提到的任何统计模型。因为这些项目中有许多是在我面试的几个月或几年前完成的,所以我需要花时间温习细节是很自然的。
好消息是,前一轮的大量准备也可以帮助你完成这一轮。有些问题,尤其是行为问题,甚至可能是相似或相同的,但后面几轮是在你的答案中加入更多技术细节的好时机。
量身定制的招聘经理面试方法
根据我的经验,我发现技术面试比电话面试有更多的变化。这是因为每家公司,甚至团队本身,都可能专注于不同类型的数据科学。因此,这也是你对公司和团队所做的研究派上用场的地方。
如果角色是入门级的,或者描述不够具体,最好回顾一下一些常见的算法,如随机森林、逻辑回归、K 均值聚类等。(在我目前职位的面试中,我确实被要求口头解释所有这些算法)。
总的来说,我优先考虑基本机器学习算法的理论和技术细节,以及我在简历中特别提到的项目中使用的那些。如果你在简历中提到在一个项目中使用 CNN,准备好解释你的方法及其利弊。当然,如果你的工作描述字面上说他们在寻找 NLP 能力强的人,你最好也准备好特定主题的技术。
然而,如果还没有人告诉你这个角色专注于哪些领域,从公司的使命或招聘团队的信息来看,你可以对需要审查哪种算法进行有根据的猜测。如果是这种情况,我建议询问人力资源或招聘经理,更多细节见下一节。
技术回合变化很大——尽可能多地收集信息
现在,关于编码面试,我听到了各种各样的经历。有一些是 90%编码,10%询问过往经验或算法;有一些面试恰恰相反。
例如,我自己面试候选人的经验是,我们更多地寻找解决问题的技能和对 Python 的熟练程度,我们不会问 LeetCode 风格的编码问题,这似乎越来越受欢迎。因此,我不会评论太多关于编码部分准备的细节,因为它可能会因角色而异,我不想误导任何人。
根据您对团队日常使用数据科学的两大支柱(统计和编程)的了解,可以做出有根据的猜测,如果团队的工作更依赖于统计知识,他们可能会对前者要求更多,反之亦然。我将在本系列的第一部分详细阐述这两个支柱。
我建议你从招聘经理那里获取尽可能多的信息;如果你不知道谁会在这个阶段,问你的人力资源或招聘联系人。如果 HR 不知道,你可以让他们代你去问招聘经理。我发现人力资源部门的人对此非常友好,并尽力帮助你——毕竟,他们的部分职责是给应聘者提供足够的信息。
- 回顾一下你在简历中提到的项目的技术细节——所有的问题都是公平竞争的,如果你不能回答你列出的一些细节,那就不太好了。
- 根据角色或工作描述,查看您认为可能适用于该角色的算法系列。
- 联系招聘经理或人力资源部,尽可能多地了解技术面试的细节(当然,要在合理的范围内)。
- 如果有编码回合,在 LeetCode 上练习或者回顾流行算法的实现。
最后一个提醒,我之前已经提到过,但值得重复:我真的建议你根据公司的使命和你对团队的了解来设计你的答案。可以这样想:如果我的团队为客户个性化进行机器学习,但候选人的经验似乎无法为我们团队的任务或我们日常使用的技术做出贡献,这就使得雇用候选人变得更加困难。
这就是为什么根据你对面试官的了解来描述你的经历是值得的,因为他们根本不知道关于候选人的完美信息。事实上,在两个拥有完全相同技能的候选人之间,谁能更好地证明自己能为团队做出贡献,谁就更有吸引力。
总结和即时面试准备步骤
网上有大量关于数据科学面试流程的资源,可能会让人应接不暇。当我开始找工作时,我也处于那种情况,我肯定能理解——这就是为什么我分享了上面的细节和技巧。我希望我学到的一切可以帮助你!
如果你在申请和面试之前有一些时间,正如本博客系列第一部分中提到的——关键是将你的机器学习理论和编程都带到基线水平。例如,如果你对其中一项一无所知,那就把它提高到 2 或 3。
如果您预约了面试,立即采取的行动是:
- 准备你的电梯间自我介绍
- 研究公司和角色
- 准备几个故事,每个故事都能够回答多个行为问题
- 回顾简历中的技术细节,关注团队或角色需要的技能
- 回顾过去项目的代码实现或 LeetCode
这就是这个博客系列。不管你是否在找工作,我希望它是有帮助的或者有趣的。如果你此时正经历面试,我祝你一切顺利!
原载于 2020 年 3 月 29 日【https://www.susanshu.com】。
我如何向我的非技术同事解释单词嵌入
数据科学
没有代码。没有行话。只是你需要知道的高级事实
单词嵌入。
它们是什么?他们长什么样?它们是如何制造的?…
我将不用代码或行话来分解它。
这是基于我向非技术同事解释机器学习术语的经验。
理解:机器学习模型只理解数字
您不能向 ML 模型输入文本。
因为,简单来说,数学对文本不起作用。
不工作
你必须先把单词/句子/等等转换成一系列数字。
但是这个有用
单词嵌入是一种将文本转换成机器可读格式的方法。
有几种方法,包括单词袋,但我们不会在这里深入探讨。
单词嵌入将单词转换成数字序列
下面是几个词,“亮”“闪亮”“狗”,用流行的嵌词库 Word2Vec 翻译成数字。
注意“明亮的”和“闪亮的”比“狗”更相似。
当使用像 Word2Vec 这样的预训练嵌入时,每个单词的数字表示都包括在内。
你只需将你的单词转换成每个给定的数字序列,然后将它们插入到你的模型中。
单词嵌入中的值是什么意思?
孤立来说,什么都没有!
但是相对于彼此,它们包含了大量的信息。
在前面的 Word2Vec 示例中,我们可以看到,在每个索引处,“bright”和“shiny”彼此更相似,而不是“dog”。
我们称每个索引为一个“维度”
如果我们把 D1 和 D2 标绘在一个 2x2 的网格上,我们会看到“明亮的”和“闪亮的”离得很近,“狗”离得更远。
在单词嵌入方法中,具有相似含义的单词“应该”具有相似的数值。
为什么相似的词有相似的数值?
好问题。
因为一个词就是它的上下文。
用于构建单词嵌入的训练文本中的“上下文”=“单词周围使用的单词”。
因此,当推导“美丽”和“华丽”的数值时,我们可能会在它们周围找到相似的词,它们会得到相似的数值。
在给定上下文的情况下,单词的数值是正确猜测单词时神经网络中权重的函数(CBOW 方法)。
神经网络不断调整其权重,直到它可以获取单词的上下文,并猜测单词本身。
此时,当前重量(想想机器上的旋钮和刻度盘)变成了数值。
相似的上下文经常出现在意思相似的词周围。
所以相似的神经网络权重会预测相似的词。
结论
免责声明:我已经做了一些概括,并跳过了一些小步骤,以帮助使这个更容易解释
就是这样。
单词嵌入是将文本转换成数字以便计算机处理的一种方法(几种方法之一)。
与其他方法相比,实践经验(成功和失败)是你何时应该真正使用它们的最佳指南。虽然很受欢迎,但它们的表现往往不如更传统的方法(根据我的轶事经验)。
这就是为什么我总是建议深入了解一些代码。
记住,在机器学习中,没有免费的午餐。我们真的不知道什么有效,直到我们尝试它!
我是如何爱上 GitHub 的
马库斯·温克勒在 Unsplash 上的照片
作为一名开发人员,我倾向于对现有的解决方案和开源项目进行大量研究,以进一步构思我当前的项目,并在我每天充满代码的生活中使用一些开源项目。
作为我在 2016 年开始本科学位时开始的旅程的一部分,我开始通过我的大学作业和我的团队积极使用 GitHub 来合作完成各种作业,GitHub 为我提供了一套惊人的工具来积极合作和管理我的所有项目(有时我同时有 3 个项目/作业,人们在不同的时间处理它们)。
GitHub 有各种各样的工具,这些工具实际上让我发现了更多关于软件开发的知识,如果你对某个特定的问题有任何疑问,这个社区非常有用,他们会指导你,从我的角度来看,你可以从那里的开源项目中学到很多东西。
现在让我们来谈谈我最喜欢的 GitHub 的一些特性:
GitHub 动作
当我用 GitHub Actions 说话或做一些事情时,我脑海中出现的第一个词是“哇”,现在我们都已经使用了 Travis CI 和所有这些很酷的工具,但 GitHub Actions 从您的存储库中管理工作流,相信我,您越深入了解,您就越会意识到它是多么挽救生命和有用的工具。您可以查看 GitHub Marketplace 中已经提供的各种工作流,以使您的生活更加轻松,但您也可以编写自己的工作流来完成各种任务,我自己的个人资料自述文件贯穿 GitHub 操作,这是最无缝的过程。
我发现了这个非常酷的博客,它帮助你使用 GitHub Actions 和 Neptune 为机器学习模型设置 CI,并真正解释了在机器学习和数据科学方面,自动化操作是多么令人惊讶。所以请在这里查看(https://Neptune . ai/blog/continuous-integration-for-machine-learning-with-github-actions-and-Neptune)
GitHub 项目
作为我日常工作生活的一部分,我有许多问题和任务要跟踪,我的大脑有时相当于一颗花生,我大量使用 GitHub 项目和看板来管理我的所有工作。当我有了一个想法或者一个任务的时候,我会把它加进去,然后一直放在我旁边,整个星期我都会继续更新它,完成我的任务。我不想夸大其词,但我发现自己使用 GitHub 项目更有效率,它确实帮助我按时完成了任务。
GitHub 页面
担心托管自己的项目网站,那么你没有理由担心,因为 GitHub Pages 来拯救(对不起,这听起来像你最近在互联网上看到的广告)。但实际上,GitHub Pages 允许你托管一个面向你的 GitHub 的项目网站。如果你真的希望为你的目标人群更详细地解释你的项目,你可以根据你的需要为你的项目提供一些技巧和更多的解释。
与 CI/CD 管道整合
在一个基于 DevOps 的世界中工作,我倾向于使用 CI/CD 和我使用过的几乎所有工具,可能是 Tekton、Jenkins 或 IBM toolchain,GitHub 是该项目的主要部分。在 Kubernetes 或 OpenShift 上部署什么东西?您实际上可以将您的项目存储在 GitHub 上,当您提交变更时,您的 CI/CD 工具实际上可以从您的 GitHub 存储库中提取变更,并将它们应用到您的部署中(但是请不要直接提交到 master,使用分支进行变更跟踪😂).
开源软件和社区
另一个“令人惊叹”的因素是,GitHub 上有如此多令人惊叹的开发人员和如此多的开源代码,以至于 GitHub 实际上决定推出 Arctic Vault 程序来存储我们的代码。我倾向于寻找让我的工作生活和开发生活更有效率的工具,GitHub 上的一些开源软件实际上是我工作周期的一部分,是的,我会说我完全是为了生产力和让事情更有效率。
代码空间
哇,这是一个很长的列表,但最后但并非最不重要的是我最喜欢的功能是代码空间。想要一个在线编辑来快速做出改变吗?那么 Codespaces 就是您的答案,它直接将存储库加载到托管的 Visual Studio 代码环境中,允许您随时进行更改并快速编辑您的代码。有时,我会初始化一个代码空间并选择我想要工作的库,而不是克隆,瞧,我有了一个全功能的编辑器,允许我对我的代码进行更改。
这些工具真正的好处是,它们使您的开发生活变得更容易,更有效率,集成是惊人的和安全的。实际上,我建议成长中的开发者积极使用 GitHub,它会教会他们很多东西,是最有用的开发资源之一。我在这里提到的只是一些让我爱上它的工具,但是 GitHub 上还有更多工具可以真正开启一个惊人的开发和项目生命周期。我就是这样爱上 GitHub 的。
您可以通过各种媒介与我联系,我将非常乐意为您提供关于开源的建议,并回答您有关开发的问题
你可以打找到我
推特:【https://twitter.com/fawaz_siddiqi
领英:https://www.linkedin.com/in/fawazsiddiqi/
GitHub:https://github.com/fawazsiddiqi
我如何微调人工智能来创造有创意的域名
我心中有一个目标,要创造一个对人有帮助,同时又超级简单的人工智能服务。在摆弄了 GPT-2 之后,我意识到它有巨大的创造潜力,可以证明在创造性的文本生成中是有用的。
因此我创建了 NameKrea,这是一个人工智能域名生成器。域名生成器业务已经上线很长时间了,但是还没有看到这么多高质量的内容。(如果你想了解更多关于项目构思阶段和生产力技巧,这里是文章的第一部分)
让我向你介绍一下我是如何构建一个生成域名和商业创意的人工智能服务的!
介绍
在从 Majestic Millions top 100 万域名列表中抓取了大约 10 万个网站后,我微调了 355M 参数模型。结果非常准确,同时也很有创意。看看结果:
如果有足够的训练数据,GPT-2 能够理解上下文。为了能够训练它,我们需要大量的数据。这可以很容易地通过抓取网站的元描述来完成。幸运的是,互联网上并不缺少网站:)
通过使用 CSV 文件读取每一行,可以对 GPT-2 进行微调。在开始抓取之前,我们需要定义算法可以理解的数据结构。为此,我采用了一种相当简单的方法,即给 GPT-2 提供每个域一行的文本和元描述。我们的训练数据中的单个条目将如下所示:
Create an account or log into Facebook. Connect with friends, family and other people you know. Share photos and videos, send messages and get updates. **= @ =** facebook.com
如您所见,我们首先输入给定上下文的元上下文,然后使用一个普通文本中不存在的分隔符。您可以选择自然文本中通常不存在任何内容。我选择了这个分隔符:-> = @ =
第一步:刮擦
正如您可能会想到的,手动复制和粘贴域的元上下文将会花费大量的时间。我们需要想出一个刮算法,能够为我们生成干净的训练数据。
数据的整洁很重要,因为大多数机器学习模型都依赖于质量。你的机器学习模型可以和你的训练数据一样好。因此:
当训练一个机器学习模型的时候,永远记住:垃圾进,垃圾出!
垃圾进,垃圾出!
那么,我所说的干净数据是什么意思呢?首先,GPT-2 主要是在互联网上搜集的英语数据上进行训练的。因此,我们需要确保我们收集的是英语的元上下文数据。其次,有很多网站都有使用表情符号和不同字符的元描述。我们不希望这些出现在我们最终收集的数据中。
如果我们设计一个抓取算法,它应该能够按照以下逻辑过滤和提取数据:
- 仅英文
- 没有表情符号和表情符号之类的。只是光秃秃的英文文本。
- 只收集一系列 TLD 的数据(如。com,。网,。(同 organic)有机…)
- 要快!我们需要同时从多个域获取数据的多重处理,否则将需要很长时间来收集数据。
既然我们决定了我们的主要需求,让我们继续构建我们的铲运机!
Python 有很多很棒的抓取包,比如 BeautifulSoup 。它有许多功能,使它有可能在瞬间开始抓取网站。我们将使用这个库来获取域,然后将它们写入 csv 文件。
在 github repo 的 namekrea 处完成刮刀
出于某种原因,Github Gist 嵌入不能正常工作。在域名生成器 namekrea 的 github repo 看一下源代码中的 scraper.py
首先 scraper.py 从 majestic 的前 100 万域名列表中读取域名,然后开始抓取数据的过程。
注意:在运行 scraper.py 之后,你将从 5 个不同的线程中获得 5 个不同的文件。因此,您需要将这些文件合并成 1 个文件,并将其转换为 csv 文件,否则无法进行微调。
。scraper.py 的 txt 输出如下所示:
Create an account or log into Facebook. Connect with friends, family and other people you know. Share photos and videos, send messages and get updates. = @ = facebook.com Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for. = @ = google.com Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube. = @ = youtube.com
当您完成数据收集后,我们将继续下一步。
第二步:微调它!
GPT 二号是巨大的!中等规模的预训练模型有 3.55 亿个参数!这种架构的微调,用你普通的笔记本电脑 CPU 肯定是做不到的。在我的设置中,我使用了 2x1070Ti GPU,大约花了 2 个小时才达到高质量的输出。
让我们看看项目的总体架构,以了解如何训练该模型:
为生成域名微调新 GPT 协议工作流程的基本架构
因此,首先,我们将数据和文本文件组合成一个 csv 文件,使其可以被 model_trainer.py 脚本使用。
训练完成后,我们将把检查点加载到 text_generator.py,随机生成域名。
第三步 AI 生成域名:
随机生成的域名很酷,但是如果我们不能给 GPT-2 系统提示的话,它就没什么用了。幸运的是,这可以通过前缀变量实现:
gpt2.generate(sess, model_name=model_name,
#run_name=run_name, checkpoint_dir=checkpoint_dir,
temperature=0.8, include_prefix=True, **prefix='The best e-cigarette',**
truncate='<|endoftext|>', nsamples=10, batch_size=2, length=128
)
当我看到结果时,我忍不住笑了:
尼古丁含量超过 99%的最好的电子烟。电子烟不仅仅是一种 vape。是一款通讯 APP。把它当作便携式汽化器。或者放在口袋里,用智能手机控制你的 vape。Vaporsca 是最好的电子烟对比网站。
一个 vape 也是一个通讯 APP??我可以肯定地说,这个东西是非常有创意的:D
我希望你喜欢这个教程。GPT-2 当然是一个惊人的神经网络架构,我不能给简单的 GPT-2 包足够的信任。如果没有这个包,这个项目可能需要更多的时间。如果你错过了该项目的 github 链接,这里是:https://github.com/cderinbogaz/namekrea
我还建立了一个网站,你已经可以使用 NameKrea 的创作能力!请查看 Namekrea 人工智能域名生成器
感谢您的阅读,请在评论中告诉我您的想法!
作为一个旁注,我写了另一篇关于我如何在全职工作的时候获得 NameKrea 的文章。如果你需要一些生产力和如何找到适合市场的产品,那么这篇文章就是给你的:
我如何在 6 天内完成 6 周的编程课程
有效学习编程的技巧
介绍
在我开始之前,让我首先为自己辩护说**我并不是鼓励你们所有人在尽可能短的时间内完成课程。**速度不是最重要的,学习才是。
数据科学是多学科的。数据科学不仅仅是启动 Jupyter 笔记本电脑。你学习数学、统计学、经济学、市场营销、商业、数据结构、算法等等,甚至顾客心理学。除了 Jupyter Notebook,你还必须熟悉版本控制系统、数据库、DevOps 和不同的编程语言。这个列表永远不会结束。
你永远不能停止学习数据科学。来源:数据经济
在新冠肺炎封锁的情况下,我每天节省了 3 个小时往返工作地点的交通时间。我想,既然有那么多时间,为什么不充分利用呢?
在线课程。不,不是网飞。在线课程。
你会惊讶于你能从大学/工作场所的在线课程中获得如此多的知识。有了大量的在线课程和如此少的时间,我们如何掌握这个领域?!在这篇文章中,我将提供 5 个技巧,告诉你如何在很短的时间内完成大量的在线课程。如果你想知道,不,这个标题并不夸张。有可能在 6 天内完成 6 周的课程。
1.获得动力
动机很重要。如果你没有动力,这篇文章的其余部分将不会有任何帮助。找出激励你的动力。
你想了解更多吗?您想打造自己的产品/解决方案吗?你想被 FAANG 雇佣吗?你想升任首席数据科学家吗?你想给你的女性/男性朋友留下深刻印象吗?你不想浪费你已经花在课程上的 99 美元吗?
你的动力来源可能并不健康,但是……不管怎样都行?什么激励你并不重要。重要的是你有动力,你想做这件事。如果你不帮助你自己,没有人可以。
动力的来源。通过 Slideplayer 向徒弟馆积分
为什么动机如此重要?动力驱使你保持一致。它驱使你坚持你的时间表。它驱使你一点一点地点击你的课程,直到你完成它。
2.找到正确的课程
在你开始这个旅程之前做一些研究。不要简单地点击一门课程,因为你听说 90%的人在完成这门课程后会找到工作。如果你已经是 Python 的高手了,那学习《Python 入门》就没有意义了。
首先,找出你是谁。你想当数据分析师还是数据工程师还是数据科学家?(对,有都不一样)。
信用: Udacity
在你决定了你对哪条道路更感兴趣之后,找出你想学习哪种技术。如果你有一家梦想中的公司,不要害怕去接近他们,了解他们的工作范围和他们在理想候选人身上寻找的技能。一个简单的谷歌搜索“被 ___ 使用的前 ___ 是什么?”会给你很多结果。
信用:业务拓展
此外,我在本文末尾提供了一个有用资源的列表。一定要去看看!
提示:尽量选择有动手练习的课程。如果没有,试着选择有随堂考的课程。尽量避免只包含视频的课程。
3.计划你的时间表
保持一致。快速提问,哪个更好:
- 你每天花 5 分钟试图完成一节课的一半
- 你计划每天花 30 分钟,但是你每隔一节课休息一周
回答:不知道。
每个人都有不同的学习风格。我们中的一些人必须每天学习一些东西,而我们中的一些人必须长时间休息。只要适合你的学习风格,你有动力,你坚持不懈,这都没关系。
我建议你浏览一下你的课程大纲,试着上一课。估量你完成一节课需要多少时间,计算你完成整个课程需要多少时间,根据你的截止日期(如果你有截止日期的话)把计划挤进你的时间表。
最后,计划你的时间表。使用纸质记事本,三星笔记,苹果日历或者写在一张卫生纸上。我自己也用微软的便利贴。这不是最好的,但这是我最习惯的。从你的时间表中删除一些东西的感觉非常令人满意。它让我坚持下去,让我想一个接一个地删除任务。
我的便利贴。是的,它很丑,但对我很有效。
4.交错
交错是一种有效的学习方法。它包括在学习过程中切换不同的主题。
例如,不要在接下来的 2 周内每天学习 MongoDB,而是尝试在 4 周内学习 MongoDB 和 Git。你可以在我上面的便利贴中观察到,我在同一天学习 Azure 和 AWS。
来源:内驱
有什么好处?
- 你会更好地记住新信息。
- 你将能够把不同的概念联系起来。
- 你不会感到无聊。
然而,每个人都是不同的。如果这对你不起作用,你不必遵循它。做对你最有利的事!
5.强化你的学习
我认为这是最重要的一点。
为了确保你完全理解你所学的内容,我建议采取以下步骤(不分先后):
- 不随波逐流。有几门课程的每一节课都是视频课。这会诱使你跳到每门课程的末尾,这样你就可以在 5 分钟内拿到证书。不要这样做。如果有编程练习,就编码吧。如果有要完成的环境,就启动它。如果有重要的数学方程式,把它写下来。如果有测验,那就拿 a。
- 用你自己的数据集复制你所学到的东西。在课程结束时,我强烈建议你用自己的数据集复制你所学到的东西。例如,如果你刚刚学会如何建立一个决策树来预测客户流失,建立另一个决策树来预测购买决策。构建完成后,将其记录在您的 Github 概要文件中!
- 反思/写下你所学到的东西。反思,虽然听起来很老套,但它有助于巩固你的学习。它可以是一篇文章、一篇日志或者仅仅是一幅思维导图。将所有不同的课程整合成一个你写的简明笔记。通过连接这些点,你将对你所学的有更深的理解。
- 教导你的同龄人。不要不好意思/害怕展示你的技能。把你学到的东西教给你的同事或朋友。传播你所获得的知识!
结论
不,网络课程不是没用。如果你只是为了证书而匆匆忙忙地学习课程,却什么也学不到,那是没有用的。软件/库的片断是你可以呈现给客户的最终产品的组成部分。永远不要停止学习!
资源
- Udemy:包含非常具体的技术领域。课程可以很短,很容易完成,特别是如果你想学习特定的软件。
- Coursera:提供了复杂而全面的解释。有学位和全日制课程。有些课程是可以旁听的,也就是说你不需要付费,除非你想要证书。
- Edx:提供复杂和全面的解释。有学位和全日制课程。
- Datacamp:每月 25 美元。如果你有时间,支付 25 美元,尽可能多的做一些课程!课程数量有限,但我强烈推荐 T-SQL 课程。
- 走向数据科学:TDS 就像数据科学世界的谷歌。这里有许多优秀的人才开发出了有用的产品/解决方案。文章短小精悍,非常适合初学者!
- Youtube:除了猫的视频,你还可以找到各种各样与数学、统计学、机器学习等相关的视频。你说出来的,他们都有。
将职业转向自动驾驶汽车
我如何从讨债转向自动驾驶汽车
新年是反思过去和规划未来的时候。本着这种精神,我想借此机会讲述一下我作为深度学习(DL) /计算机视觉(CV)工程师在这个行业中的经历。
2017 年 1 月,我在旧金山一家名为 TrueAccord 的公司工作。我使用时间序列和表格数据构建传统的推荐系统。那时,互联网上开始充斥着描述这些新的尖端深度学习模型的博客帖子和论文,这些模型甚至能够超越人类。我的热情很快转移到这个令人兴奋的新领域。
虽然我确实有一些深度学习的知识,但我的实践经验相当有限。研究生院让我几乎没有机会应用机器学习模型,但幸运的是,我发现了 Kaggle,这让我可以培养我的深度学习专业知识。最终,我获得了 Kaggle 大师的称号,在超声波神经分割挑战赛中获得了一枚金牌。这是深度学习架构 UNet 被 Kaggle 社区广泛使用的第一个挑战。这也是第一个挑战,其中软骰子被用作分割任务的损失函数。
在 2017 年之前,Kaggle 主要专注于举办表格数据竞赛。获胜的解决方案通常涉及 xgboost 和其他经典 ML 算法的堆叠。很少有深度学习算法能够取代这样的技术。
2017 年一切都变了。DL 变得更加成熟,从学术界走向工业界。Kaggle 竞赛紧跟潮流,与成像相关的挑战变得更加普遍。
我喜欢我在 TrueAccord 的工作,但我想跳槽到一个可以从事深度学习相关任务的职位。
问题是我的技能不一定有助于这样的改变:
- 我的专业是物理,不是计算机科学。
- 我只有一年的行业经验。
- 我的简历中没有任何机器学习相关的论文。
- 我在工作中没有做过任何计算机视觉项目。
- 我的深度学习知识有限。
基本上,我和其他试图改变工作方向的人处于同样的情况。
因此,我不得不像任何处在我位置上的人一样处理我的困境。方法很简单:你去面试,如果有效,你就完了,如果无效,你就研究你不知道的,然后重复。希望在有限的迭代次数内获得成功,你会幸运地得到想要的位置。
在此期间,我继续完善我的深度学习技能;看论文,看博文,当然还有参加深度学习比赛。
2017 年 3 月,当我和我的朋友 Sergey Mushinsky 在 Dstl 卫星图像特征探测挑战赛中获得 493 名第三名,并分享了 2 万美元的奖金时,我的工作开始得到回报。在那次挑战之后,我开始对二进制图像分割和多光谱图像感到舒适,这通常会在卫星图像中找到。(描述解决方案的博文、预印本、代码)
我用奖金买了第二个 GPU,这反过来让我意识到 Keras 在多 GPU 设置下工作不太好。我转向 PyTorch,它仍然是我选择的 DL 框架。然而,各行各业的成功来之不易。在同一时期,我没有通过笛卡尔实验室的现场面试和一些技术筛选。我知道我需要继续努力提高我的技能。
大约在那个时候,我被邀请参加英伟达的现场面试,但我也没有通过。我遇到的一个问题是我对 2D 物体探测器的工作原理了解有限。幸运的是,DSTL 启动了安全通道:在航空影像挑战赛中对车辆进行检测和分类,该挑战赛专注于 2D 检测。他们决定不在 Kaggle 托管,而是使用自己的平台。
那次比赛有一个重要的规则:“每个人都可以参加,但你需要有护照,并居住在一些有限的国家,才能领取奖金。”我住在旧金山,在美国纳税,但由于我的俄罗斯公民身份,我没有资格获得该奖项。我知道这个不幸的事实,但比赛仍然提供了使用物体探测器的宝贵实践,所以在努力工作后,我能够在比赛中获得第二名。
数据科学的进步在很大程度上基于广泛的国际社会的合作。我在脸书和 Twitter 上表达了我的观点,即我认为 DSTL 的规则与这些理想背道而驰,但随着尘埃落定,我将这些从脑海中清除,继续前进。不知何故,这个故事跟着我,被俄罗斯新闻选中了。很快,我发现我的脸出现在俄罗斯主要新闻媒体和电视频道的头版。
一个英国国防实验室为 MI-6 开发工具,人工智能算法,一个俄罗斯公民因为国籍而被拒绝获奖。这是一个很好的故事,俄罗斯媒体很快就发现了这一点。有一段时间,我对在镜头前接受采访感到不自在,所以我拒绝与记者交谈。这并没有阻止他们。他们把我的个人资料照片放在背景中,并邀请该主题的“专家”给出他们的专业意见。
记者们甚至找到了我的父母,他们对机器学习、竞赛和所有的事情都一无所知。我母亲告诉他们,父母是至关重要的,但低估学校老师的影响力是不明智的。这种偏离奏效了,记者们带着他们的问题来到了我的高中。
俄罗斯顶级科技公司之一的 Mail Ru Group 决定利用这个机会进行一些积极的公关。他们提出给我 15000 美元,相当于挑战的第二名奖金。我喜欢这个主意,但我觉得它不公平。我明知故犯地同意了规定我没有资格获奖的规则。此外,我并不兴奋地在简历中加入我曾为英国军情六处开发人工智能算法而获得报酬。我想到了一个更好的解决办法。我热爱理论物理,我知道要获得足够的资金总是有困难的。因此我要求把钱转给支持基础科学的俄罗斯基金。
最终,一切顺利。邮件 Ru 组和我得到了一些积极的公关。俄罗斯基础科学得到了 1.5 万美元。DSTL 有动力重新考虑他们的大联盟比赛规则。
这个故事引起了俄罗斯观众几天的注意,之后就销声匿迹了。在英语媒体中,只有一篇博客文章谈及此事。也许这样最好:)
很快三月变成了六月,我仍然没有找到一份计算机视觉的工作。
我名单上的下一家公司是特斯拉。招聘人员联系我是因为我的 Kaggle 成就,这并不经常发生。我通过了课后测试、技术筛选和现场面试。接下来是背景调查和埃隆·马斯克对我申请的批准。我没有通过。招聘人员告诉我,我违反了保密协议(NDA),并在一个论坛上谈论了面试过程。这是真的。我确实提到了我正在 slack 频道 ods.ai 进行采访。我没有分享任何面试问题,但从技术上讲,他们是对的。我记得,特斯拉的 NDA 相当严格,禁止讨论你的面试过程,即使是在高层次上。
这个拒绝让我很难过。与安德烈·卡帕西一起工作会很令人兴奋。即使是现在,几年后,我仍然为自己造成了那种不健康的状况而感到内疚。希望在某个时候,我有机会为我的行为道歉。
接下来是在卡格尔举行的星球:从太空了解亚马逊竞赛。这个问题太简单了,不能花太多时间。小数据集上的多标签分类。结果我和另外六个人的团队合并了。一个星期的时间,我们训练了 480 个分类网络,并进行堆叠。938 人中的第 7 名。
组织这次竞赛的公司叫做星球实验室。他们有一个开放的 DL 工程师职位,我问了一下,并被邀请到现场面试。我又失败了。反馈—没有深入的 DL 知识。
那是八月中旬。经过七个月的求职,我开始失去典型的积极态度和对自己的信心。我刚刚开始与 Lyft 的面试过程,但我认为它会像之前的所有事情一样结束。
我坐在窗前,用一杯白兰地来麻痹我的悲伤。
我又被拒绝了。
一位谷歌员工最近推荐你担任谷歌大脑(美国)的研究科学家。我们仔细审查了你的背景和经历,决定目前不继续处理你的申请。
我开始受不了了。
但是我有个主意。在每一个糟糕的情况下,都有一些深奥的举措可能奏效。大多数拒绝是在简历筛选阶段收到的。因此,我没有机会展示我的技能。为了先发制人,我决定需要在简历中添加深度学习出版物。
我联系了麻省理工学院的博士后 Alexey Shvets,并提出了一个建议:
- 找到下一个有比赛赛道的 DL 会议。
- 训练一个模型,创建一个提交,获得最后一名。(我假设,如果人们花费数年时间研究某个问题,那么对他们来说,这将很难成为合法的竞争)
- 写一份关于学术数据集的预印本或论文,描述我们的解决方案。
他同意了,我们寻找一个适合我们的会议。我们遇到了三周内发生的 MICCAI。它有一个名为内窥镜视觉挑战赛的工作室,还有一些计算机视觉比赛。最后期限是八天后。
我们选择了第一个挑战,吉安娜。这个问题有三个次级挑战。在剩下的八个晚上,我修改了我在 Kaggle 比赛中使用的管道,重构了代码,并训练了新的模型。阿列克谢写了描述我们方法的报告。我们相信我们会在排行榜的末尾。因此,我真的没有在这些问题上花时间。我们向组织者提交了我们的申请和报告,我想这将是我们小小冒险的结束。事实并非如此,Alexey 发现该研讨会还有另一项名为机器人器械分割的竞赛,其中有三项分挑战,截止日期延长,四天后即将到来。他问我是否愿意尝试这些次级挑战。我同意了,把自己关了四个晚上,为组织者粗制滥造代码、模型和生成预测。
挑战伴随着一个警告:团队的一名成员需要来 MICCAI 并展示结果。最终地位只能在会议上宣布。
我从来没有去过魁北克市和加拿大,所以我很高兴去,并同意了。
工作坊的日子到了。我走进工作室,发现一大群热情的医学影像专家似乎彼此都认识。我不认识任何人,我也不能开始对话,因为我在深度学习和计算机视觉方面感觉很舒服。尽管如此,医学成像的所有细节对我来说还是有点陌生。
第一项挑战开始了。来自不同大学的团队展示了他们的解决方案。很难判断他们有多好,但很明显他们投入了大量的工作。轮到我了。我来到讲台,告诉观众我不是这个领域的专家,我们做这个挑战只是作为一个深度学习练习,为浪费他们的时间道歉,并展示了我们的两张幻灯片。
组织者展示了结果。
1.第一项子挑战—我们是第一名。
2.第二次挑战—我们是第三名。
3.第三项子挑战—我们是第一名。
首先总体来说。(官方新闻稿)
是第二次挑战的时候了,这次挑战的截止日期推迟了四天。不同的团队提出了他们的解决方案。我再次为浪费观众的时间道歉,并展示了我们的两张幻灯片。
第一,第二,第一。首先总体来说。
我至今记得那一刻。我站在现场。组织者正在准备一张支票和一些礼物。阿列克谢和我取得了胜利,但我不禁对这种明显的荒谬感到沮丧。这是怎么发生的,一些随机的没有医学成像领域知识的家伙在两个挑战中都获得了第一名?然而,那些以医学成像工作为生的人使用的是更弱的模型?
我问观众:“你们知道我在哪里工作吗?”没有人知道,除了一个查看我 LinkedIn 个人资料的组织者。我告诉他们,我在讨债机构 TrueAccord 工作,我没有在工作中训练深度学习模型。我感叹自己没能脱离这种模式,因为 Google Brain 和 Deepmind 里的 HR 甚至都不看我的简历。
在那次充满激情的演讲后,听众中 Deepmind 健康团队的成员在休息时抓住我,问我是否有兴趣面试他们团队的一个研究工程师职位。
我相信这是历史上第一次,一个讨债机构赢得了医学成像的比赛。😃
不久后,我接受了 Lyft 的一份工作邀请,目前我在那里工作。在 TrueAccord 和 Lyft 之间,我还参加了在 Kaggle 举行的 Carvana 图像屏蔽挑战赛。GIANA 的做法让我进入了排行榜的后 20%。新的想法不断涌现,由 Vladimir Iglovikov、Alexander Buslaev 和 Artem Sanakoyeu 组成的团队在 735 名选手中获得第一名。(博文,代号)
该竞赛是社区开始在 UNet 类型架构中使用预训练编码器的第一个大挑战。这是现在的标准,并且有伟大的库允许你用各种不同的预训练编码器得到各种不同的分段网络。但是在那个时候,这个想法还是比较新的。这个挑战导致了名为 TernausNet 的预印本,这是我和阿列克谢写的,只是为了好玩,令人惊讶的是,这是我被引用最多的作品。
结论
在八个月的时间里,我在自己感兴趣的领域找到了一份的优秀工作。那段时间充满了痛苦。当你在尝试新事物时,你会犯错误。每次失败的时候,你可能都会觉得自己很蠢。有时,你可能会开始对自己失去信心。但是记住你正在学习新的东西。你迈出的每一步都会让你更接近你想要的目标。
在过去的几年里,我在我的谷歌学术档案:)中添加了一些深度学习论文
校对: Erik Gaasedelen 。
我是如何获得 4 份数据科学工作邀请,并在被解雇后两个月内收入翻倍的
数据科学面试
在这个前所未有的疫情时期,许多人发现他们的职业生涯受到了影响。这包括一些我曾经共事过的最有才华的数据科学家。在与一些密友分享了我的个人经历以帮助他们在下岗后找到新工作后,我认为这值得公开分享。毕竟这触动的不仅仅是我和我的朋友。任何因疫情而被解雇的数据科学家或正在积极寻找数据科学职位的人都可以在这里找到一些相关的东西,我希望这些东西最终会给你的求职带来希望。
所以,如果你曾经陷入困境——在面试中,在面试准备中,在谈判中,任何事情——我都曾在那里,我想帮助你。如果你认为我能以任何方式让你的旅程变得更容易,你可以在这里联系我。这是我的故事。我希望你能从中找到一些有用的提示和鼓励。
目录
被解雇了
2018 年 12 月,我的经理通知我,我将于 2019 年 1 月被解雇。三个月前,我当时创业公司的工程副总裁给我们的人力资源主管写了一封信。这封信解释了为什么我是公司里表现最好的人之一,并主张增加我的工资。这帮助我获得了 33%的加薪。我很自然地感到有动力,渴望在一个重要的项目上突破下一个里程碑。公司和我自己的未来看起来一片光明。正是在这个成功的时刻,我被告知我受到了公司削减成本计划的影响。1 月 15 日我被解雇了。
至少可以说,被迫开始寻找新工作是令人畏惧的。在浏览了市场上的数据科学职位空缺后,我很快意识到了自己的知识差距。我在 B2B 初创公司所做的事情(入门级数据工程和机器学习的结合)与那里的许多工作要求完全无关,比如产品感觉、SQL、统计等等。我知道基础知识,但不确定如何填补更高级技能的空白。然而,与更紧迫的问题相比,即使是这个问题似乎也是次要的,例如我怎么才能得到面试机会?我只有一年半的创业工作经验,而且没有任何统计学或计算机科学相关的学位。更多的问题接踵而至。如果我在失去签证身份前找不到工作怎么办?如果在我找到新工作之前经济衰退了怎么办?尽管我很害怕,但几乎没有选择。我不得不找一份新工作。
为搜索做准备
面对如此艰巨的任务,我需要一些信息来决定接下来的步骤。在做了一些研究后,我意识到市场上超过一半的数据科学职位是产品驱动型职位(‘产品分析’),其余的要么是建模,要么是面向数据工程的职位。我还注意到,产品分析以外的职位往往要求更高。例如,大多数模特职位需要博士学位,工程职位需要计算机科学背景。很明显,不同赛道的要求差异很大,因此每条赛道的准备工作也会有所不同。
有了这些知识,我做了一个重要的决定:为所有的赛道做准备将是势不可挡的,而且很可能是低效的。我需要专注于一个。我选择产品分析,因为根据我的背景和经验,我有更大的机会在这个领域获得面试机会。当然,并不是每个数据科学领域的人都有我的背景和经验,所以下面我总结了大公司三类数据科学职位的一般要求。理解这个基本的问题为我节省了很多时间,我相信它会对其他寻找数据科学工作的人有用。然而,我要补充的是,对于小型创业公司来说,面试可能不那么结构化,需要更多的这三者的混合。
产品分析(约 70%的市场份额)
- 要求:有推出产品的实践经验;商业敏锐度强;高级 SQL 技能
- 例子:数据科学家,Airbnb 的分析;Lyft 的数据科学家;脸书大学的数据科学家;谷歌的产品分析师
建模(市场上约 20%)
- 要求:机器学习的知识(不仅要知道如何使用还要知道底层的数学和理论);强大的编码能力
- 例子:Lyft 的数据科学家、算法;数据科学家,Airbnb 的算法;亚马逊的应用科学家;脸书大学的研究科学家
数据工程(市场上约 10%)
- 要求:具有数据工程技能的端到端数据科学家;分布式系统的知识;MapReduce 和 Spark 有使用 Spark 的实践经验;强大的编码能力
- 例如:Airbnb 基金会数据科学家;一些创业公司的数据科学家
根据我自己的经验,这篇文章的其余部分是为那些准备进入产品分析岗位的人量身定做的。稍后回来查看我关于准备数据工程职位的帖子。
求职开始了
当我知道自己将被解雇时,我做的第一件事就是积极主动地申请其他工作。我用了所有我知道的求职板,包括 GlassDoor 、early和 LinkedIn 。我也问了所有认识的人推荐。但由于已经快年底了,直到 2019 年 1 月,我都没有收到任何回复。
事实证明,寻求推荐比我自己申请有效得多。在大约 50 份原始申请中,我只获得了 3 次面试机会,但在 18 份推荐中,我获得了 7 次面试机会。总的来说,越来越明显的是,在这个市场上,我不被认为是一个强有力的候选人。
面试:概述
虽然每个公司的面试结构都不一样,但大多数公司都遵循一个总体框架:
- 招聘人员最初的电话
- 1 或 2 轮技术电话筛选(TPS)或带回家的作业
- 4 ~ 5 小时的现场面试,通常包括 3 ~ 4 轮技术面试和招聘经理的行为面试
我采访过的公司中,大约有一半(4/10)在 TPS 之前或之外有带回家的任务。带回家的作业消耗了很多能量。通常,8 小时的带回家作业导致我在提交后至少需要半天时间休息。正因为如此,我尽了最大努力相应地安排了面试。我课后作业的第二天早上没有面试。仅仅意识到基本结构就能让你感觉更轻松,并能应对找新工作的过程。
面试前
进入我的面试,每一个机会对我来说都是至关重要的**。虽然我知道有些人通过面试来学习,在多次面试后变得更好,通常会获得他们面试的最后几家公司的录用通知,但我觉得我不能采取这种方法。2017 年毕业的时候,500 份原始申请,我只收到了 4 份面试。我不指望在 2019 年得到更多。因此,我的计划是为每次面试做好充分准备。我会让没有机会去浪费。**
被解雇的一个好处是我可以为面试而全职学习。每天我都把我所学的东西组织起来,每天集中在两三件事情上。不会了。从以前的面试中,我了解到深刻的理解可以让你在面试中给出更透彻的回答。当你比平时更加紧张和焦虑的时候,在面试中有一个深度的知识会特别有帮助。这不是你想假装的时候。
当我描述自己的经历时,我不禁想起了我经常听到的一个常见的误解:没有真实的经历,就不可能获得关于产品/实验的知识。我坚决不同意。我之前没有任何产品或 A/B 测试的经验,但是我相信这些技能可以通过阅读、倾听、思考和总结获得。毕竟,这和我们在学校被教导的方式是一样的。事实上,随着我越来越了解更多的资深数据科学家,我不断了解到这种方法很普遍,甚至对于有多年经验的人来说也是如此。你将要面试的内容可能与你正在做的事情完全无关,但是你可以通过工作经验之外的方式获得你需要的知识。
以下是你可以预期的基本情况。通常,产品和 SQL 问题是在 TPS 期间提出的。现场采访包括几轮问题,包括产品意识、SQL、统计、建模、行为,可能还有演示。接下来的几个小节总结了我在准备面试时使用的最有用的资源(都是免费的)。总的来说, GlassDoor 是了解公司具体问题的好来源。一旦我看到这些问题,我就明白了公司需要什么,以及在满足这些需求方面我的差距在哪里。然后我就可以制定一个计划来填补这些空白。
特定科目的准备
以下六个小节是我如何准备产品分析专题采访中出现的具体内容的。在解释我自己的准备时,我希望为我的后来者铺平道路。
产品感
在一家创业公司做数据科学家,主要负责开发和部署机器学习模型,编写 spark 作业。因此,我几乎没有获得任何产品知识。当我在 GlassDoor 上看到一些真实的面试问题,比如“如何衡量成功?”或者“如何通过当前用户的行为来验证新功能?”,我完全不知道如何处理这样的问题。当时,它们似乎过于抽象和开放。
为了学习产品意识,我求助于基本的阅读和总结策略,使用下面列出的资源。所有这些阅读帮助我积累了产品知识。因此,我想出了一个结构化的方法(我自己的“框架”)来回答任何类型的产品问题。然后,我将我的知识和框架用于测试,这对于学习任何技能都是必不可少的:练习。我写下了涉及产品感觉的问题的答案。我大声说出我的答案(甚至用手机给自己录音),并用录音来微调我的答案。很快,我不仅可以在面试时假装,我还真的知道自己的东西。
资源:
结构化查询语言
我第一次参加 SQL TPS 考试失败了,那是在一家我非常感兴趣的公司。显然,有些事情需要改变。我需要再次练习,所以我花时间研究 SQL 问题。最终,我能够在一天内完成之前要花一整个星期的问题。熟能生巧!
资源:
统计和概率
为了准备这类问题,我复习了基础统计和概率,并做了一些编码练习。虽然这看起来很难回答(这两个主题都有很多内容),但是对于产品数据科学家来说,面试问题从来都不难。下面的资源是复习的好方法。
资源:
- 汗学院有一门介绍性的统计和概率课程,涵盖了这两方面的基础知识。
- 这本在线统计书涵盖了所有基本的统计推断。
- 哈佛有一门统计 110:概率课程,这是一门关于带有实际问题的概率的入门课程。如果你更喜欢阅读而不是听,宾夕法尼亚州立大学有一门介绍概率论的课程,里面有很多例子。
- 我还在 HackRank 上通过 10 天的统计进行编码,来巩固我的理解。
- 有时,A/B 测试问题会在统计面试中被问到。Udacity 有一个很棒的课程涵盖 A/B 测试的基础知识,Exp Platform 有一个关于这个主题的更简洁的教程。
机器学习
没有 CS 学位,我带着有限的机器知识去找工作。我在之前的工作中上过一些课程,我复习了这些课程的笔记来准备面试。然而,即使现在建模问题变得越来越频繁,产品数据科学家的面试问题主要是如何应用这些模型,而不是基础的数学和理论。这里仍然有一些有用的资源,可以在面试前提升你的机器学习技能。
资源:
- 首先,我推荐安德烈亚斯·穆勒的免费应用机器学习课程
- Coursera - 机器学习吴恩达
- Udacity - 机器学习工程纳米学位
介绍会;展示会
一些公司要求候选人要么展示带回家的作业,要么展示一个他们最引以为豪的项目。尽管如此,其他公司还是在行为访谈中询问了最有影响力的项目。然而,不管是什么形式,关键是要让你的演讲有趣和有挑战性。
听起来不错,但是你怎么做呢?我的主要建议是考虑所有的细节**,比如高层目标和成功指标,ETL,建模实现细节,部署,监控和改进。这些小事情加在一起,而不是一个大想法,就能形成一个伟大的演示文稿。这里有几个问题值得重新思考,以帮助你达到理想的演示效果:**
- 项目的目标和成功标准是什么?
- 你如何决定启动这个项目?
- 你如何知道客户是否从这个项目中受益?差多少?
- 你如何测试它?如何设计你的 A/B 测试?
- 最大的挑战是什么?
演示项目时,您希望吸引观众。为了让我的演讲有趣,我经常分享这个项目中有趣的发现和最大的挑战。但是确保你投入的最好方法是练习。练习,大声练习。我练习向我的家人展示,以确保我对材料的掌握和沟通的便利。如果你能让你认识的人参与进来,一个被要求倾听的面试官就没有机会了。
行为问题
虽然很容易陷入准备技术面试问题,但不要忘记行为问题同样重要。我面试过的所有公司在现场部分都至少有一轮行为面试。这些问题通常分为以下三类:
- 为什么是我们?/一份工作中你最看重的是什么?
- 介绍一下你自己/你为什么要离开现在的工作?
- 职业生涯中最大的成功/失败/挑战。其他版本:告诉我你解决冲突的一次经历,或者你不得不说服你的经理或项目经理的一次经历。
行为问题对于数据科学家来说非常重要。所以要做好准备!了解一家公司的使命和核心价值观有助于回答第一组的问题。像问题 2 和 3 可以通过讲故事来回答——3 个故事足以回答所有的行为问题。当你去面试的时候,确保你手头有几个好故事。类似于产品问题,我练习了很多,大声说出来,录音,听,然后调整我的答案。听一个故事是确保它有效的最好方法。
获得 100%现场报价率的秘诀
现场面试的前一天晚上通常是一个紧张、忙碌的夜晚。我总是试图塞进更多的技术知识,同时回顾我的统计笔记,思考我的框架来回答产品问题。当然,正如我们在学校学到的,这些都不是非常有用的。结果在很大程度上取决于没有一晚临时抱佛脚之前的准备量。所以准备是重要的,但是有一些规则你可以遵循,以确保你的面试成功。
- ****总是在回答问题之前澄清问题。用自己的话复述问题,确保你理解了对方的提问。如果你回答问题却不澄清,这是一个危险信号。
- 整理所有问题的答案。用要点写下你的思考过程。这向面试官展示了你处理问题的系统方法,并有助于面试官稍后为你写一篇评论。
- 不知道答案的时候不要慌。如果你不熟悉这个领域也没关系。在这种情况下,你可以先做一些假设,但一定要告诉对方你在做假设,并询问这些假设是否合理。有时候要求更多的时间完全没问题。如果你想不出任何答案,大脑一片空白怎么办?谈谈你的一次与问题相关的经历。
- 态度很重要。公司正在寻找一个愿意倾听并能接受不同意见的人。你想表现出你是一个容易共事的人。要谦虚,要尊重。听并澄清。把你的正能量带到房间里,尽你所能进行一次愉快的谈话。
- ****研究公司。熟悉其产品。问问你自己如何改进产品,什么样的标准可以用来衡量这些产品的成功。阅读数据科学家的博客也有助于了解他们在每家公司的工作。做这种研究能让面试中的对话更深入,最终更好。
利用这些规则,这是我从现场采访中得到的反馈:
- 非常有条理地回答产品问题
- 演示非常有条理,经过深思熟虑
- 对我们的产品表现出浓厚的兴趣,并提出了宝贵的改进意见
谈判
在收到口头提议后,下一步是与招聘人员合作,最终确定人数。这里只有一条我坚持的规则——永远谈判。但是怎么做呢?
Haseeb Qureshi 有一个关于谈判工作机会的非常有用的指南(带脚本!)在我的报价谈判阶段,我严格遵循了这一原则。每一条规则都是如此真实。我和所有给我报价的公司都进行了谈判。报价的平均增幅为 15% ,最高报价的总价值增幅为 25% 。谈判行得通,所以不要害怕尝试!
外卖食品
- 大量的练习是关键。
- 失败是生活的一部分,也是求职的一部分。不要太认真。
- 找到一种对你有效的减压方式。
概观
在减掉了 11 磅,经历了大量的哭泣和尖叫(找工作压力很大,承认这一点没关系)之后,我终于在被解雇的 2 个月内获得了 4 份工作。其中 3 份来自我从未想过要加入的公司: Twitter、Lyft 和 Airbnb (我最终加入了这家公司),另一份来自一家医疗保健初创公司。在疯狂的两个月结束时,我总共收到了 10 次面试、4 次现场面试和 4 份工作邀请,给了我 40%的 TPS 到现场率和 100%的现场到工作邀请率。
图片由艾玛丁 |从被解雇到加入我梦想中的公司的时间线
我很幸运,在被解雇后,我从家人和朋友那里得到了很多支持和帮助,这对于在我梦想的公司找到一份工作至关重要。这很难。具有讽刺意味的是找工作也是一大堆工作,但一切都是值得的。
我写这篇博客是因为我知道我有多不知所措。面试要准备的东西太多了。我希望这篇文章能让其他需要工作的数据专家明白一些事情,如果你想要更多的建议,请随时联系我这里。我很高兴现在能从事一份很棒的工作,我也很乐意帮助你实现这一目标!
更新(2020 年 10 月 1 日)
自从我三周前发表这篇文章以来,我收到了数百个关于数据科学面试的问题。所以我决定制作一系列视频来帮助你获得梦想中的数据科学工作。有兴趣可以去我的 YouTube 频道看看!
感谢阅读!
如果你喜欢这个帖子,想支持我…
- 订阅我的 YouTube 频道 !
- 跟我上 中 !
- 连接上Linkedin!**
- 前往emmading.com/resources获取更多关于数据科学面试技巧和策略的免费资源!
我如何在加拿大找到一份数据科学的工作
我的加拿大新移民之旅
图片鸣谢:https://www . pexels . com/photo/Canada-city-city scape-downtown-6998/
移居国外对我来说是一种幻想。我花了 3 年时间来计划和执行它。我想分享我的旅程,认为它可能会帮助走相同道路的人。长话短说,我拿到了我的公关,于 2018 年 10 月软着陆,探索了一周的城市,并搬回了印度,因为冬天开始了,我也想节省足够的资金,以便我为艰难的开始做好准备。我开始探索就业市场,发现它对数据科学非常乐观。我从以前的移民那里学到的东西
- 人脉是找工作的核心
- 作为一个家庭搬进来会增加我的开销,可能会迫使我去做一份零工。所以我打算一个人来
- 我有 10 个月的资金来集中精力找工作
- 预订了 3 个月的 Airbnb 房间,所以我的注意力完全放在了找工作上。我选择留在怡陶碧谷,因为它在密西沙加和多伦多之间。
- 我在 Coursera 和 Udemy 上完成了许多认证,这帮助我在市场中占据有利位置
抵前规划
- 我得到了一个有加拿大号码的神奇杰克号码,这样加拿大的任何人都可以很容易地与我联系。注意:这样做帮助我建立了联系,但没有帮助我获得面试机会,因为大多数员工希望我亲自去
- 我开始用加拿大格式制作我的 2 页简历(避免花哨的格式,遵循 ATS 格式)。我看到有人建议准备许多版本的简历,并根据工作要求进行更改,但我不建议这样做。我准备了一份合适的简历,并根据许多人的评论持续改进了几个月。
- 我接受了 Access 就业帮助来格式化我的简历。这是为新移民提供的免费服务
- 在联系任何人之前,确保我的 LinkedIn 已经更新,并且复制了简历内容。如果你有一份基于工作描述的不同版本的简历,这就是人们被抓住的地方。我对拥有不同版本的 resume☹持否定态度
- 我是 LinkedIn 的忠实粉丝,因为我的大部分工作都是通过它完成的。我列出了多伦多所有相关公司的候选名单,并开始向分析领域的人员发送带有自定义消息的连接请求(例如:经理、高级经理、主管、副总裁等。每天我都试着联系 60 到 100 个人,我得到的回复率是每天 10 到 20 人。接下来,我会解释我的经历和我正在寻找的机会。20 个人中,大约有 4 到 5 个人会给出不同的回答,比如
a.目前,我们没有任何空缺,但如果有事情发生,我们会通知你
b.请将您的简历发送给我,我们的人力资源团队将会与您联系
c.目前,我们不会在三个月后开放 ping me
d.访问我们的网站并申请这份工作
e.有些人有空缺,但希望我立即加入
我把所有提供积极和中立信息、名称和对 excel 模板的回应的联系人都找了出来。我会定期跟踪人们,更新他们的状态。因为我的搬家计划被推迟了两个月,我停止了这个过程几个月。我本应在 2019 年 4 月前搬家,但我直到 2019 年 5 月才搬家,因为我试图在我之前的公司内部平行调动(我真倒霉,在☹没有成功)
岗位到达提示:
在我到达的前 45 天,我开始积极地推销自己。随着着陆日期的临近,我开始接到很多电话,并在第一周安排了 5 次面试。是的,这是一个令人敬畏的开始,但最近,我意识到事情需要很长时间才能取得进展。幸运的是,在第 10 天,我在一家营销机构找到了一份全职工作(高级分析师),但由于这份工作不符合我的职业目标,我告诉他们我需要一些时间来探索其他机会。是的,我知道这是什么感觉,但我不想在几个月后就开始一个角色并改变。幸运的是,一周后高级经理联系了我,给了我一个月的自由职业机会,并同意让我在完成工作后参加面试。哇,这让我很开心,也给了我一些喘息的机会,因为在接下来的 2 到 3 个月里,我不用动我的资金了。
快进 30 多天,有许多咖啡会议和 10 多个采访,许多都在最后阶段。我攻破了两家银行,一家电信公司和一家营销机构。这一切都发生在一周之内。我选择了一家银行,因为这份工作很棒,气氛也很友好。我喜欢在咖啡会议和采访中与我交谈的人。
如果你需要任何帮助,请随时在 LinkedIn 上给我发消息。
我如何在没有 STEM 背景的情况下找到一份数据科学家的工作
我如何找到一份有商业背景的数据科学家的工作
图片由皮克斯拜的 Gerd Altmann 提供
这篇文章讲述了我是如何对数据科学感兴趣的,我成为数据科学家的历程,以及我对你的建议,即使没有 STEM(科学、技术、工程、数学)背景,你也可以成为一名数据科学家。最后,我希望这能帮助你朝着正确的方向去实现你的目标!开始了…
如果这是你喜欢的那种东西,成为第一批订阅 我的新 YouTube 频道在这里 !虽然还没有任何视频,但我会以视频的形式分享很多像这样的精彩内容。感谢大家的支持:)
尽管我拥有商学学士学位,但我最终还是在 Datatron 找到了一份数据科学家的工作,这是我过去三年的目标。为了让你明白我是如何走到今天这一步的,我认为让你了解一点我的过去是很重要的。
我对数据的兴趣源于本科二年级时对金融数据的涉猎。通过一点分析和足够的运气,我的股票投资组合翻了十倍,我被从原始数据中提取巨大价值的想法迷住了。
大约在同一时间,我接触到的软件工程师朋友让我对学习如何编程产生了兴趣,特别是 Python。当我最终听说机器学习的概念时,我知道这是我想了解更多的东西。
这引出了我的第一个建议…
1.致力于自己学习和完成几个数据科学项目
让我把它进一步分成两个子点:
a)持续了解与数据科学相关的任何内容
因为“数据科学”的定义非常模糊,所以成为一名全面发展的数据科学家需要具备广泛的技能。以下是我在过去几年中努力磨练的一些最重要的技能,以及我为此利用的资源:
机器学习:
- 机器学习入门(Kaggle) :如果你对机器学习一无所知,我相信这是最好的入门资源。它从零开始,带你完成你的第一个机器学习模型。
- 中级机器学习(Kaggle) :这是上述课程的延伸,也以直观的方式教你更多的概念。
- 机器学习 A-Z (Udemy) :一旦你有了机器学习的想法,这门课就(几乎)涵盖了所有的机器学习技术。它涵盖了每个模型背后的概念,并通过代码向您展示了一个示例。
- 机器学习——斯坦福大学(Coursera) :如果你真的想加强对每个模型背后概念的理解,这是最好的方法,也是最受欢迎的课程之一。
Python/SQL :
- Python 简介(Datacamp) :学习 Python 的最好方法是完成一些辅助项目,而不是一堆训练营。也就是说,如果你对 Python 一无所知,这是一个很好的入门资源。
- 学习 Pandas 教程(Kaggle) : Pandas 是一个用于数据操作和分析的 Python 库。知道如何使用这个库是非常有益的,因为当完成个人数据科学项目时,它将使您的生活变得容易得多!
- 学习 SQL (Codecademy) :可以说 SQL 和 Python 一样重要,而且学习基础知识非常容易!一旦你完成了这个课程,你就可以在网上找到练习题来磨练你的技能。
统计/数学:
- 统计与概率(可汗学院):机器学习本质上是统计学。我直到后来才知道这一点,但是有一个好的统计学基础会让你的旅程更加顺利。
- 线性代数(可汗学院):学习线性代数的基础知识也很重要,因为它是机器学习不可或缺的一部分。
b)完成几个出色的数据科学项目。
一旦你建立了基础,加速学习的最好方法就是完成一些数据科学项目。最好的方法是继续追踪,选择一个数据集,并创建一个预测模型或一些数据可视化。记住,你最初的几个项目不会很棒!但重要的是你如何随着时间的推移而进步。
以下是我过去完成的一些数据科学项目,你可以从中获得一些灵感!
在您继续学习和实践数据科学技能的同时,您还可以做其他事情来使自己成为更有价值的数据科学候选人,这就引出了我的下一个技巧:
2.寻找类似数据科学家职位的工作
我知道这将是一场艰苦的战斗,尤其是我之前没有数据科学家的经验。然而,找到类似于数据科学家职位的工作将显著增加你成为数据科学家的机会。这样做的原因是相关的工作会给你机会在商业环境中处理实际数据。
我最初在加拿大贝尔公司担任商业情报顾问,这让我第一次接触到现实生活中的数据。实习结束时,我学会了如何更广泛地使用 Excel,如何使用 SQL 查询大型复杂的数据库,以及如何利用数据支持业务决策。
然后,我在 Wealthsimple 担任数据和运营助理,在这里,我有机会开发其第一个数据处理和分析流程,并创建了几个仪表板。
最后,我去了 HelloFresh,做了一名增长型市场分析师。这是我有机会在商业环境中开发机器学习模型的第一份工作,我开发了几个模型来优化折扣。
我的观点是这样的:尽管没有一份数据科学工作,但我能够在前一份工作的基础上学习一些与数据科学相关的技能。
做“数据科学”工作不需要成为数据科学家
以下是一些你可以寻找的数据科学相关的工作:
- 商业智能分析师
- 数据分析师
- 产品分析师
- 增长营销分析师/营销分析
- 定量分析师
除了以上两点,还有一个技巧大大提高了我作为数据科学家的声望…
3.获得定量领域的硕士学位
大多数数据科学工作清单要求硕士学位,因为它通常需要高水平的技术技能。如果你发现上面的两条建议并没有让你获得成功,我建议你去看看定量领域的硕士项目(计算机科学、统计学、数学、分析学等等)
就我个人而言,我选择参加佐治亚理工学院的理学硕士分析课程有以下几个原因:
- 它不需要定量领域的学士学位。
- 它有一个在线项目,以防你想边工作边学习。
- 整个项目只需花费 100 10K 美元.
也就是说,有几种选择,我强烈建议你在做决定之前花时间探索所有的选择!
真正帮助我获得曝光率并最终获得数据科学职位的是我致力于的一个名为“52 周数据科学”的个人计划,在这个计划中,我用一年时间学习和博客任何与数据科学相关的东西。下面是一个时间表,显示了我的成就以及博客是如何帮助我的。
时间表
11 月 28/19 日:发表了我的第一篇博文
12 月 12 日/19 日:这家初创公司发布了第一篇博文
1 月 2 日/20 日:被批准成为《走向数据科学》的作者
2 月 8 日/20 日:单日浏览量超过 28,000 次
2 月 25 日/20 日:在 30 天内获得超过 200,000 的浏览量
2 月 25/20 日:收到 Datatron 的数据科学家职位
TLDR
- 致力于自己学习和完成几个数据科学项目
- 寻找类似数据科学家职位的工作
- 获得定量领域的硕士学位
感谢阅读!
如果你喜欢我的工作,想支持我…
- 支持我的最好方式就是在媒体 这里关注我。
- 在 Twitter 这里成为第一批关注我的人之一。我会在这里发布很多更新和有趣的东西!
- 此外,成为第一批订阅我的新 YouTube 频道 这里!
- 在 LinkedIn 这里关注我。
- 在我的邮箱列表 这里注册。
- 查看我的网站,terenceshin.com。
以前的文章
一些脸书面试问题的预演!
towardsdatascience.com](/facebooks-data-science-interview-practice-problems-46c7263709bf) [## 在这里你可以看到冠状病毒的实时更新和统计数据
以下是你需要了解的关于冠状病毒 Worldometer 的信息
towardsdatascience.com](/heres-where-you-can-see-data-visualizations-live-updates-and-statistics-on-the-coronavirus-dff8b2986b39) [## 使用 Plotly 实现冠状病毒数据可视化
新型冠状病毒 2019 数据集分析及代码
towardsdatascience.com](/coronavirus-data-visualizations-using-plotly-cfbdb8fcfc3d)
我是如何进入 12 个数据科学硕士项目的
我自己的统计数据,目的声明与个人声明,所有的一切。
PC @我:)狼獾加油!
**您好,世界!🌎
我认为这是一个合适的开始,因为当我开始收集申请研究生院的材料时,这就是我所知道的一切。我当时是经济学专业的学生,只是在游戏的后期才意识到我想从经济学博士转向数据科学家——但我做到了,这意味着你也可以。
我的指标(申请本科大四):
- 平均绩点: 3.4
- GRE:Quant 162,Verbal 163,写作 4.5
- **学校:**密歇根大学——安阿伯分校
- **学过:**经济学(主修)数学(副修),语文和法语
- 缺点:我第一次大学数学课(Calc 1)得了个 C-。我不知道如何编码。喜欢,一点都不喜欢。什么是投资组合?
- 优点:我学了 Calc 4 和线性代数(因为我很喜欢惩罚)。随着时间的推移,我的成绩越来越好。热情第一。
数据科学/分析项目硕士:
- 适用: 12
- 接受:12
- **学校:**杜克、塔夫茨(2 所)、南加州大学(2 所)、乔治敦、乌米奇(2 所)、弗吉尼亚大学、内奇加戈(2 所)、北卡州立
- 先是拒绝了我,后来又接受了我
- 提供奖学金的项目
- **提供的奖学金:**UChicago 每年 25000 美元,弗吉尼亚大学每年 12000 美元,杜克大学学费减免 25%,乔治敦大学每年 14500 美元
哦,我有没有提到我的母校密歇根大学拒绝了我?是的,那一个击中了要害。
高三的秋天🍁
正如你可能知道的那样,我在某种程度上患有编码缺陷(因为我不知道如何编码,或者 Github 是什么,或者提到的 Python 不是有毒的生物),所以我在这里做了两件事:我参加了我大学的 CS 入门班,我找到了一个人雇我为他们做数据可视化。我还参加了一个教授 R 的课程,这是我个人最喜欢的(出于某种原因,我无缘无故地强烈保护 R。跟我打,兄弟)。
坦率地说,这份工作相当幸运;我表达了我对学习如何编码的热情,并表示我会尽可能地收拾残局。我还在面试后发了一封非常体贴的感谢信(就像一个小时的撕掉你的头发,不管是说“真诚的”还是“恭敬地”),并在回复邮件后立即被录用了。谢谢你们已经走了很长的路了,伙计们。
在 CS 入门课程结束时,我已经学会了用 Python 创建基本的机器学习算法。我的最后一个项目是从老玛丽亚·凯莉、麦可·布雷和宾·克罗斯比创作新的圣诞音乐,我还成功地实现了一个 web scraper 程序来完成它。尽管我主要学的是 C++,但我很快发现这些技能是可以转移的,并且能够为最终项目学习很多 Python。
如果你现在是本科生,我强烈推荐你参加计算机科学课程。否则,有很多 MOOCs 会教授基本相同的东西。例如,麻省理工学院使用 Python 类免费在线提供其计算机科学和编程入门(它看起来超级难和有用)。
Christmas_Break == “SOP 写作时间”
我的祖父住在佛罗里达州一个僻静的公寓里,所以我和我的母亲去那里休息(哦,冠状病毒之前的日子!).一天中的大部分时间,我都蹲在这个地方的一个角落里,只是为了出去续杯咖啡或者让我妈妈看我最新的草稿。晚上,我和我的 S.O .面对面交流,让他对我粗暴一点——为了让我的 sop 可行,我流了不止一滴眼泪(还有与冒名顶替综合症相关的崩溃)。
尽管如此,我知道我在其他地方薄弱的地方,我可以通过一封写得很好的信脱颖而出。
在佛罗里达写作给了我一个阳光明媚的好地方,让我感觉超级有灵感和新鲜。如果可以的话,从一个让你开心的地方开始写作——无论是咖啡馆、有着高高的彩色玻璃窗的图书馆,还是散发着薄荷和蛾球味道的公寓(像我一样!).
研究、冲洗、重复🚿
这也意味着我学习了所有的程序,通常大约一个小时。我记下了教员、他们的专业领域以及他们教的课。在我的标准作业程序中,我写了我的兴趣以及那些教员是如何结盟的。大学不会接受他们认为不会去的人(这会降低他们在《美国新闻与世界报道》上的排名),所以尽可能具体是非常重要的。
我申请了 12 所学校,完成了一篇荣誉论文,修了两门高等数学课和一门经济学课,找到了一份工作,在最后一个学期每周教一次跆拳道。我时间紧迫,所以我会按照申请截止日期的顺序完成申请——我只是不能去想那一份申请之前或之后的申请,这确实帮助我专注于每一份申请本身。
要点:如果你时间紧迫,不要在每个申请上花费 10 个小时以上也是可以的。专注于确定 2-3 名你可以谈论的教员,一些让你兴奋的课程,以及你对这所大学的另一件事,这表明你做了功课。
研究生院的应用程序是…命运
首先,他们会问你还申请了哪些学校;这一部分要么是中性的,要么是消极的,取决于你如何管理它。我试图让每所学校看起来像我列出的那些学校中的“范围”,同时也只列出邻近和项目类型相近的学校(这是一种真正令人讨厌和不完美的艺术)。
通常,学校会要求一篇“大”的论文,然后可能会附带一些小论文。他们也可能会留下一些空间来解释你的赤字,如果你有赤字,你应该使用它(像我一样,在 Calc 1 中得了 C)。
最后,目标陈述和个人陈述可以相似。事实上,我基本上为我申请的每所学校交了同样的论文。
例如,这是我对塔夫茨工程学院的个人陈述:
测量系统分析(Measurement System Analysis)
drive.google.com](https://drive.google.com/file/d/1y3riMDRtaZDG52bj6qkoQefv6wZXZXgt/view?usp=sharing)
这是我为密歇根大学写的目标声明:
报文交换数据服务
drive.google.com](https://drive.google.com/file/d/1vpx1x1hNmyw8f1-bVxpII9b3ObwSXwjG/view?usp=sharing)
专注于一个好的,高质量的作品,然后重新加工,以适应每所大学。不要,我重复一遍,不要仅仅因为你认为你需要而写一百万篇不同的文章;首先,我没有。
“大”文章是最重要的,所以我总是确保我至少有一双(或三双)眼睛关注它。在你的时间表中,把大文章放在优先位置,把剩余的时间放在小文章上。
离别的思绪
希望这篇文章对担心申请研究生的人有所帮助。如果你对课程或者我如何帮助你进入硕士有任何问题,请在下面评论。您也可以通过我的个人网站或 Twitter 联系我。感谢阅读!
附言如果你想知道*,*我决定去 UVA。🧡💜
(再次 PC @我)
附加作品:
提示 3:关注中位数,而不是平均数
towardsdatascience.com](/read-this-before-going-to-grad-school-for-data-science-890fd05d4127) [## 研究生论文的艺术
让我进入 12 个数据科学硕士项目的 5 个简单技巧
towardsdatascience.com](/art-of-the-graduate-school-essay-f59b14c79649) [## 加入我的介绍链接媒体-阿曼达西
加入我的推荐链接,我将免费查看您自己的 DS SOP!
lramawest.medium.com](https://amawest.medium.com/membership)
我如何使用 Python 实现可解释的电影推荐
我还测试了用户是否真的喜欢它们。这是结果。
如何在应用程序中向用户显示建议及其解释。图片作者:Ville Kuosmanen
这篇文章是我关于可解释建议系列文章的第二部分,基于我的 BSc 论文 。 第一部分 介绍了可解释建议的概念,而 第三部分 讨论了事后可解释性在数据科学中的应用。
本系列的前一篇文章讨论了为什么提高推荐系统的可解释性很重要。这不是一个教程,而是我在实现一个带有可解释推荐的电影推荐服务时所采用的方法的概述。如果你想进一步探索,你可以阅读全文或者深入前端或者后端代码库(它们是开源的!).我选择首先使用矩阵分解算法 SVD 实现一个黑盒推荐系统,然后实现两个事后解释器来生成对推荐的解释。然后通过一个模拟电影推荐服务的 web 应用程序来测试添加解释的效果。
描述用户研究中操作顺序的流程图。使用 web 应用程序,用户首先对电影进行评级。推荐系统然后为他们生成推荐,解释器为推荐生成解释,然后显示给用户。图片作者:Ville Kuosmanen
设计和实施
推荐系统是使用惊喜库用 Python 实现的。用于该问题的数据集是公开可用的 MovieLens 数据集,由真实用户的电影评级组成[1]。该数据集广泛用于推荐系统研究,由于 CF 不是特定领域的,因此模型和算法通常会推广到电影评级之外的其他领域。当开发推荐系统时,使用包含 100,000 个评级的开发数据集来减少训练时间;2000 万评级基准集用于评估和使用研究。在训练潜在因素模型之前,使用随机的 75%-25%等级训练-测试分割,将数据分割成训练和测试数据。
在训练之后,推荐系统可以用于预测训练集中的项目和用户的评级。这对于静态评估来说已经足够了:然而,使用系统进行的用户研究需要动态的推荐。为只有几个评分的新用户生成个性化推荐是不可能的:模型首先需要学习用户的潜在因素。这可以通过完全重新训练模型来完成,但是,这种方法在实时系统中是不可行的,因为针对数百万个评级训练模型在计算上是昂贵的,并且需要在每个新的评级时进行。因为现有的模型“几乎是正确的”,并且可以作为添加用户的良好起点,所以可以根据 SVD 算法的底层实现以多种方式优化该方法。例如,一些基于梯度下降的系统可以用原始模型的权重(这里是潜在因子)进行初始化,这将允许算法更快地收敛。然而,Surprise 的 SVD 在运行其梯度下降时使用固定数量的历元,并且直到所有历元都完成时才停止。因此,为 SVD 模型设计了一个新的操作,它向模型添加了一个新用户。这个操作只训练新用户的潜在因子,对于物品和其他用户的因子不变。
我选择添加的解释是基于关联规则和影响,并用 Python 实现的。关联规则解释器的实现遵循了之前提出的方法[2],旨在通过显示数据集中的规则来解释推荐,该规则描述了之前观看的电影是什么导致了它被推荐。影响解释旨在显示哪些先前观看的电影对推荐影响最大。使用的影响方法是新颖的,但它产生了与先前提出的快速影响分析相同的解释[3]。它通过比较在训练集中有和没有每个先前观看的电影的情况下推荐电影的预测评级来工作。这是通过在没有这些单独数据点的情况下反复重新训练模型来实现的。通常情况下,这将是不可能的昂贵,但由于为增加新用户而开发的优化方法,它可以有效地完成。
估价
进行了一项用户研究,以测试解释类型对推荐的测量可信度和说服力的影响,定义见[4]。为此,构建了一个模拟电影推荐服务的 web 应用程序。前端使用 React 构建,后端 REST API 使用 Flask 构建。除了提供对推荐系统和解释器的访问,API 还通过电影 DP API 加载关于真实电影的数据(例如标题、海报和年龄分级)。然后,web 服务被部署到我的大学 web 服务器上。
web 应用程序的电影分级屏幕的屏幕截图,其中有几部电影已经分级(屏幕右侧)。图片作者:Ville Kuosmanen
影响解释如何在 web 界面中呈现给用户。条形的色调显示电影的影响是积极的还是消极的,其宽度显示效果的强度。图片作者:Ville Kuosmanen
关联规则解释如何在 web 界面中呈现给用户。先行项显示在规则的左侧,而结果项显示在右侧。图片作者:Ville Kuosmanen
除了这两个解释者,用户研究还包含了一个基线解释“推荐这部电影是因为你和喜欢它的用户相似”。这项研究首先要求用户对他们过去看过的十部电影进行评级,然后向他们展示每一类的推荐和解释。41 名用户参与了这项研究,在有利于关联规则解释者的解释类型之间,在说服力(p=0.008)和信任度(p=0.001)方面观察到了统计学上的显著差异。
针对每种类型的解释,在用户研究中测量的用户评价的兴趣(黄色)和信任(灰色)的均值条形图。还显示了误差条(即 95%置信区间)。图片作者:Ville Kuosmanen
解释生成器也在各种离线实验中进行了测试。最重要的是,关联规则解释器被发现受到低模型保真度的困扰,模型保真度是衡量可以被解释的建议的份额的指标[2]。低模型保真度导致用户研究中的解释有轻微的选择偏差:关联规则解释被添加到最受欢迎的电影的推荐中(因为它们在挖掘的关联规则中最常见)。令人惊讶的是,这将导致效果的增加——一般来说,用户应该更喜欢对他们更有针对性的推荐。研究平台的“虚假”性质可能会影响这一点——受欢迎但针对性不强的内容可能代表用户事先知道的电影,可以很容易地看出他们想看,但不会在真实系统中观看。在其他实验中,用于为单个用户重新训练推荐系统的算法被示出与完全重新训练一样准确,并且由于重新训练中的随机变化,影响计算被示出遭受适度高的方差(即,相同电影的影响的多次计算会产生非常不同的结果)。
用户喜欢关联规则解释,因此它是添加到实际系统中的一个很好的候选解释。我在生成解释时使用了全局关联规则:它们的优点是挖掘规则的过程只需进行一次。关联规则挖掘中使用的 apriori 算法[5]计算量很大,尤其是对于大型数据集,这可能会在扩大基于局部或聚类的方法[2]中造成重大问题。
为了将关联规则解释应用到实际系统中,需要提高其模型的保真度。如果解释器本身被视为机器学习模型,那么支持度和置信度的阈值(以及用于过滤关联规则集的其他参数)可以被视为其超参数。虽然阈值是根据研究人员的最佳猜测手工设置的,但也可以通过超参数优化来确定。这超出了本项目的范围,但可能是一种有趣的方式,使关联规则步骤更加科学,并允许该方法更容易地应用于更多样化的数据集。
虽然用户研究没有发现添加基于影响的解释对用户评价的信任和说服力有统计学上的显著影响,但它们仍然值得进一步研究。最重要的是,可以进一步优化向用户呈现解释的方法。即使影响解释没有提高模型的可信度和说服力,但它们确实提高了透明度。它们还可以用于实现特殊的用户界面组件:例如,UI 元素可以显示受特定项目影响最大的推荐。这对于实现经典的*“这个项目类似于下面的项目……”*推荐系统的更个性化版本可能是有用的,推荐系统通常是基于项目的邻居模型或基于内容的模型。
这篇文章展示了我用可解释的推荐来实现和评估电影推荐服务的方法。本系列的最后一部分将描述推荐系统中的激进内容问题,并建议如何使用关联规则解释来帮助数据科学家确定他们的推荐系统是否受到它的影响。
[1]:哈珀,F. M .,&康斯坦,J. A. (2015)。电影镜头数据集:历史和背景。美国计算机学会交互式智能系统汇刊(tiis) , 5 (4),1–19。
[2]:皮克,g .,&王,J. (2018 年 7 月)。推荐系统潜在因素模型的事后可解释性。《第 24 届 ACM SIGKDD 知识发现和数据挖掘国际会议论文集》(第 2060–2069 页)。ACM。
[3]:程,魏,沈,杨,黄,李,朱,(2019 年 7 月)。通过快速影响分析将可解释性纳入潜在因素模型。在第 25 届 ACM SIGKDD 知识发现国际会议论文集&数据挖掘(第 885–893 页)。ACM。
[4]:廷塔列夫,n .,&马斯托夫,J. (2011)。设计和评估推荐系统的解释。在推荐系统手册(第 479–510 页)中。马萨诸塞州波士顿斯普林格。
[5]阿格拉瓦尔和斯里坎特(1994 年 9 月)。挖掘关联规则的快速算法。在 Proc 中。第 20 国际。糖膏剂超大型数据库,VLDB (第 1215 卷,第 487–499 页)。
我如何通过 S3 选择提高检索大数据的性能
理解大数据
如何使用 S3 选择有效地提取数据,以及它与亚马逊雅典娜有何不同
我最近在 S3 遇到一个功能,在处理大数据时特别有用。您可以编写一个简单的 SQL 查询来选择特定的列并筛选特定的行,以便只检索您的应用程序所需的数据。在本文中,我将演示如何使用 Python 的boto3
库来实现这一点。
示例使用案例
想象以下场景:
- 你经常会得到一个大型 CSV 文件,它存储在一个 S3 桶中。该文件包括您的网上商店活跃的所有国家的营销数据。
- 然而,你有一个运行在 AWS Lambda 中的应用程序,它只需要来自某个特定国家的营销数据。
通常,您必须下载整个大文件并过滤掉应用程序中的数据。问题是你的 Lambda 函数可能没有足够的内存将这个大文件读入内存。有一些方法可以解决这个问题,比如读取和过滤块中的数据或者将函数移动到 Docker 容器,但是在这个场景中最简单和最具成本效益的解决方案是使用 S3 选择特性。这是它的工作原理。
履行
首先,由于我实际上没有任何营销数据,我们将使用来自纽约的出租车出行数据[1],我们将过滤具有未知支付类型的可疑记录,根据数据字典编码为payment_type==5
。
让我们看看整个文件有多少行,相比之下,只有那些与payment_type==5
。
这意味着我们只对 50 万条记录中的 12 条感兴趣。仅仅为了获得这 12 行数据而将整个数据集下载并读取到内存中是一种巨大的资源浪费!
S3-选择
为了展示 S3 选择的实际效果,我们首先将我们的大型 CSV 文件[1]上传到 S3 存储桶:
现在,我们可以使用 S3 选择来仅获取付款类型等于 5 的数据,即我们仅从 S3 检索我们感兴趣的数据 —付款类型未知的数据。最棒的是,这一切都是在一个简单的 SQL 查询中定义的:
- 在我们的查询中,我们只选择用例需要的列
- 我们只过滤
payment_type='5'
—注意,在 S3,平面文件中的所有列都被认为是文本,所以一定要用引号'5'
将值括起来。
在上面的代码片段中,我们必须定义InputSerialization='CSV'
来指定这是我们的 S3 对象的格式。此外,我们将FileHeaderInfo
设置为'Use'
,这确保我们可以在 S3 选择查询中使用列名。
通过使用OutputSerialization
参数,我们定义我们希望我们的输出是逗号分隔的,这允许我们将结果存储在一个单独的 CSV 文件中。如果您想在 API 中使用 S3 选择,您可能更喜欢JSON
格式。
一些额外的警告:
- S3 选择只返回记录,不返回列名(标题),所以在第 27 行,我确保在
query
中定义的相同列也作为第一行包含在TARGET_FILE
中。 - S3 选择返回一个编码字节流 [2],所以我们必须循环返回的流并解码输出:
.decode('utf-8')
。
测试结果
让我们交叉检查一下TARGET_FILE
——它应该只有 12 行。
结果是:
Nr of rows: 12
ID distance tip total
0 1 9.7 0 31.80
1 1 10.0 0 30.80
2 1 0.4 0 7.80
3 1 13.6 0 40.80
4 1 0.5 0 7.80
5 1 1.7 0 11.80
6 1 6.4 0 22.80
7 1 4.0 0 16.80
8 1 1.7 0 11.30
9 1 5.6 0 22.80
10 1 7.3 0 30.42
11 1 6.7 0 24.80
S3-选择 vs 雅典娜
您可能会问:如果 S3 这么容易使用,为什么我们需要 Athena 来查询数据湖?这两者的主要区别如下:
- 雅典娜可以一次查询 多个对象,而使用 S3 选择,我们只能查询单个对象( ex。单个平面文件
- 有了 Athena,我们可以使用符合 ANSI 的 SQL 查询封装复杂的业务逻辑,而 S3 选择让您只执行基本查询,在从 S3 加载数据之前过滤掉数据。
- 雅典娜支持更多的文件格式和更多形式的文件压缩比 S3 选择。例如, S3 选择只支持 CSV、JSON 和 Parquet ,而 Athena 另外允许 TSV、ORC 文件等等。
- S3 选择仅适用于 S3 API (例如。通过使用 Python boto3 SDK),而 Athena 可以通过 JDBC 从管理控制台或 SQL 客户端直接查询。
- Athena 允许许多优化技术来获得更好的性能和成本优化,例如分区、列存储,而 S3 选择是一个非常基本的查询,除了过滤数据什么都不是。
- S3 选择可以直接查询,而雅典娜需要定义一个模式。
S3-精选的优势
简而言之,这个 API 的好处是:
- 减少 IO,从而提高性能
- 由于数据传输费用减少,降低了成本。
结论
在本文中,我们讨论了 S3 选择,它允许过滤存储在 S3 的数据。S3 选择应该只在处理单个文件时使用,并且只需要从平面文件中选择特定的列和特定的行。
如果这篇文章有帮助, 关注我 看我下一篇文章。
在下面链接的文章中,我讨论了在 S3 存储桶之间传输大量数据的各种选择。
[## 7 名工程师花了 2 天时间在 S3 存储桶之间移动数据
在两个 S3 存储桶之间传输大数据的最佳选择
medium.com](https://medium.com/better-programming/it-took-2-days-and-7-engineers-to-move-data-between-s3-buckets-d79c55b16d0)
资源:
[1] TLC 行程记录数据:https://www1 . NYC . gov/site/TLC/about/TLC-Trip-Record-Data . page
[2]boto 3 Docs:https://boto 3 . Amazon AWS . com/v1/documentation/API/latest/reference/services/S3 . html # S3。客户端.选择 _ 对象 _ 内容
[3] AWS 文档:https://Docs . AWS . Amazon . com/Amazon S3/latest/API/API _ input serialization . html和https://Docs . AWS . Amazon . com/Amazon S3/latest/API/API _ selectobject content . html
我如何在 React Native 中集成 Instagram 私有 API
作为一名开发人员,我总是尽可能地尝试自动化任务。Instagram 就是这样一个自动化似乎很有趣的地方。我在 Github 上偶然发现了这个回购:【https://github.com/dilame/instagram-private-api。它提供了一个 NodeJS Instagram 私有 API 客户端。我用这个库在本地创建了一个新的 npm 项目,运行它,并在我的手机上打开应用程序,看看它是否会自动喜欢帖子。果然是这样!
私有 API 客户端可以让你喜欢,关注,上传,基本上你可以在原生 Instagram 应用中做的一切。我在本地成功地使用了我的脚本,我想知道是否可以在 React Native 中使用客户端。
最初的挑战
我最初的想法是尝试在 React Native 中直接导入库。这并不成功,因为该库有一些依赖项需要使用本机模块,通常称为 C++插件。
然后,我开始研究如何在 React Native 中运行 Node.js。我看到了这篇帖子,它更详细地介绍了 Node.js 移动原生模块面临的挑战。那篇文章的作者致力于创建一个修改版的 node-gyp “它能够针对正确的操作系统和 CPU 架构,并包括来自 Node.js for Mobile Apps 版本的 Node.js 头。”
使用 Node.js 库和 React Native,我成功地构建了一个应用程序,允许用户自动完成通常必须手动完成的功能。
另一种选择是将它安装在服务器上,让用户从应用程序中拨打电话。这种方法的缺点是,所有对 Instagram 的 API 调用都来自与服务器相同的 IP,这将导致服务被阻止。让电话直接来自每个用户的设备,将导致 Instagram 看到这些请求来自用户的常用 IP 地址,该服务将可以安全使用。
积分时间
我首先使用命令创建了一个新的 react-native 项目:
npx react-native init reactNativeInsta
我选择使用 React Native CLI 而不是 Expo ,因为正确运行客户端库需要本机代码。
在我的项目文件夹中,我为 React Native 安装了 Node.js 库。
npm install nodejs-mobile-react-native
你可能想看一下入门指南了解更多关于 Android & iOS 的细节。
Node.js 库包括一个 React 本机桥模块,它有助于 Node.js 代码和 React 本机代码之间的通信。该库将生成一个名为 nodejs-assets 的顶级文件夹。这个文件夹中有一个名为 nodejs-project 的子文件夹。这是安装任何节点库和编写节点代码的地方。下面是它在 VSCode 中的样子。
BUILD_NATIVE_MODULES.txt 存在,所以我可以绕过对本机模块的自动检测。这完全是可选的。
在控制台中,您可能希望导航到 nodejs-project 文件夹并安装 Instagram 私有 API 库。
npm install instagram-private-api
我安装了另外两个库,sleep-promise&blue bird。sleep-promise 用于将脚本暂停一段时间;这很重要,这样你就不会一次发出多个请求,冒着被 Instagram 屏蔽的风险。使用蓝鸟是因为它改进了。catch()函数的工作方式更像 Java 或 C#中的 catch 子句。
节点代码
对于节点代码,我要求这些库在顶部。
const sleep = require("sleep-promise");
const { IgApiClient, IgCheckpointError } = require("instagram-private-api");
const Bluebird = require("bluebird");
const rn_bridge = require("rn-bridge");
const { promises: fs } = require("fs");
let ig = new IgApiClient();
- IgApiClient —用于与 API 交互的类。
- IgCheckpointError —检查点异常类(处理检查点流)。
- rn_bridge —与 React Native 通信的桥。
- fs —访问文件系统以保存用户的状态。
为了允许用户与客户端库(节点代码)交互,我们需要添加一个函数来处理这些消息。下面的代码流通过检查来查看用户是否通过了身份验证,数据对象包括他们通过身份验证流的凭证。通过桥发送的每条消息都被序列化为 JSON。我在函数调用时解析每条消息。
- insta gram creds 的快速说明。我选择将用户/密码存储在本地存储而不是后端服务器上,以保护用户的信息。每次调用节点代码时,我都会从 localStorage 中提取凭证,并与数据对象一起发送。
要执行任何操作,我们需要添加功能来允许用户通过 Instagram 进行身份验证。我创建了一个名为 loginFlow 的函数来检查会话是否存在。我将在下面介绍如何保存和加载这个会话。
如果会话存在,我调用 loadSession 函数。这个函数从手机的文件系统中检索会话 json 文件,并恢复用户的会话。我返回用户的 id,因为我调用的一些函数需要 id 和 API 调用一起发送。
如果会话不存在,我将调用 newLogin 函数,该函数使用用户的凭证处理用户登录,并将会话存储到手机的文件系统中。
这是一个 saveSession 函数,我用它来写文件系统。
const savePath = rn_bridge.app.datadir();const saveSession = async (data) => {
*await* fs.writeFile(savePath + "/igSessionStore.json", JSON.stringify(data), "utf-8");
};
我将 datadir()存储到一个常量变量中,因为这在 iOS 和 Android 之间可能有所不同。关于这一点的更多信息可以在 Github repo 找到。
一旦用户登录,我就调用用户请求的函数。这是一个示例函数,允许用户通过标签喜欢帖子。
我保留了一个计数器来跟踪用户已经喜欢了多少帖子,并在应用内通知 toast 中将其发送给用户。mediaArray 变量调用 getMediaFromTags,它接受用户输入的要被喜欢的以逗号分隔的标签数组,并推送要被喜欢的帖子的主键。
因为数组有时由数组中的数组组成,所以我调用一个实用函数来展平数组。由于 javascript 版本会因平台而异,所以我没有使用 array.flat()。
const flatten = (arr) => {
*for* (let i = 0; i < arr.length; (Array.isArray(arr[i]) && arr.splice(i, 1, ...arr[i])) || i++) {}
*return* arr;
};
一旦我有了一个喜欢的帖子的数组,我就把这个数组发送给一个叫做 likeMedia 的函数,它为用户喜欢这个帖子。我在这里随机化了睡眠功能,以免被 Instagram 屏蔽。
在返回之前的调用是调用一个后端服务器函数,该函数跟踪用户的喜好。该应用程序保存了统计数据,并在登录后的第一个屏幕上显示出来。
React 本机代码
在 React Native 的 index.js 文件中,我从“nodejs-mobile-react-native”导入 nodejs。这允许我使用 Node.js 启动 main.js 脚本。我还添加了一个事件侦听器,它将处理从 Node.js 发送的消息。
当消息返回时,该消息是通知或错误通知;我向用户显示消息。
下面的代码展示了一个允许用户基于标签来喜欢文章的功能。每次我想向节点端发送消息时,我都从“nodejs-mobile-react-native”导入 nodejs。
因为用户输入的是逗号分隔的列表或单个值,所以我选择在将空白列表发送到节点端之前,对其进行修整并删除任何重复的内容。如果 userHashTags 为空,我会提醒用户输入一个或多个 HashTags。当用户在这个特定的屏幕上点击 submit 时,这个函数被调用。当节点代码调用 Instagram 的 API 时,我将 setLoading 设置为 true,以向用户显示一个旋转的加载指示器,并防止用户在初始调用完成之前多次调用 API。一旦节点端的 like 函数完成,它就向 React 本机端发送一条消息,事件侦听器将 loading 设置为 false,并重置一些本地状态值。
DeviceEventEmitter.addListener("changeLoading", (event) => {
setLoading(false);
setUserHashTags();
setUserLimitPost("0");
});
结论
几年前,我在谷歌的 Play Store 上推出了这款应用,并使用 NW.js 发布了桌面版。时间限制使我无法跟上与 Instagram 保持一致所需的更新,用户体验也受到了影响。希望这篇文章能帮助那些想做类似事情的人。
为了简洁起见,此处显示的一些代码示例已被修改,并且删除了一些功能,如对后端的调用。
如果你有任何问题或意见,请在下面留下!
我如何在我的数据科学项目中“发明”机器学习
一名计算机科学学生构建其首个数据科学项目的旅程
斯文·布兰德斯马在 Unsplash 上的照片
对于许多程序员来说,副业给生活增添了情趣。他们不仅仅是一种爱好,他们是珍贵的宝贝,花费你大量的时间和精力,但是当他们长大后,你会感到自豪。在我学习计算机科学的第二年,我准备开始一门新的课程。找到一个好的兼职项目并不容易:它应该是你感兴趣的事情,并能让你学习新技能。作为一名一级方程式赛车的粉丝,我有一个奇怪的想法——我可以用统计数据来预测未来一级方程式比赛的结果吗?这似乎是可行的(统计模型通常用于其他运动来预测结果),对学习新技能有用,最重要的是,有趣!虽然当时我没有数据科学方面的经验,但我接受了挑战,并决定从预测 f1 资格赛的结果开始。
在大多数体育项目中,历史成绩基本上是一个时间序列:与 10 年前相比,运动员未来的表现与他们过去一年的表现更加密切相关。为了对问题的时间序列性质进行建模,我决定将统计模型建立在“权力得分”系统的基础上。该模型将包括用于预测车手在资格赛中表现如何的动力得分。如果他们表现超出预期,他们的分数应该会增加,反之亦然。这类似于 Elo 评级系统,用于对各种游戏(如国际象棋)中的玩家进行排名。然而,一级方程式赛车很复杂,因为车手的表现不能完全归功于他们自己:他们为之效力的车队也扮演着重要的角色。在开发模型时,确定了三个独立的实体:驱动程序、构造器和构造器使用的引擎。该模型为驾驶员、发动机和构造者保持单独的功率分数,并且通过组合所有这些来计算预测。
然而,这又产生了另一个问题:在预测结果时,每个“组件”应该承载多大的权重?车手的分数是否应该比建造师或发动机的权重更大?首先,我根据我的领域知识手工设置权重。但后来我开始想,是否有更聪明的方法来做事情:可以用某种方法计算出最佳权重吗?为了计算最佳权重,我首先需要定义“最佳”。我决定最好的权重应该是最小化真实结果和预测结果之间的位置差异。在这个损失函数中,并不是每个位置的差异都是相等的:前 4 名资格赛选手之间的差异比垫底选手之间的差异更重要,因为我最感兴趣的是看到顶级车手的顺序是什么。定义损失函数后,运行时间序列上的统计模型计算出总体“预测得分”,该得分显示了所选权重对资格结果的预测程度。
然后手动使用损失函数来寻找给出最佳预测分数的权重。我将首先计算初始权重的分数,然后尝试单独调整它们。当分数提高时,我继续调整它们:当分数没有提高时,最初的重量被保留。这样做,直到达到一个点,改变权重不再提高分数:找到了最佳的权重!
虽然模型中的权重已经过优化,但仍有改进的余地。如前所述,该模型是通过读取和转换历史资格结果生成的。然而,有几个参数来定义这种转换是如何工作的,例如新手车手的起步动力得分,动力得分在赛季之间应该改变多少等等。这些可以被认为是模型的超参数——它们也是我的最佳猜测。我也想优化它们,但是由于超参数直接影响模型权重,手动优化这两个权重将过于复杂和耗时。显然,至少该过程的某些部分需要自动化。
至此,我在学校开始学习更多的机器学习和 AI 知识。虽然我以前知道什么是机器学习,但这个话题被神秘化为一些高度复杂的“魔法”,你至少需要一个博士学位才能想到。但随着我对它了解的越来越多,我开始认识到机器学习原理和我的统计模型之间的相似之处。最终,机器学习模型是将一组输入和模型参数(权重)映射到输出的函数。权重可以以你想要的任何方式确定(随机,手动设置,通过询问水晶球等。),但一般都是从训练数据中学习的。我手动优化模型权重的基本方法是正确的,甚至使用了类似于梯度下降的方法,这是一种常用于训练机器学习模型的算法。我的方法也教会了我选择正确的损失函数进行训练的重要性。学习的权重仅在所选损失函数的上下文中是最优的-如果损失函数无效,则学习的解决方案也无效。此外,该项目强调了数据清理和预处理步骤的重要性,这些步骤通常在 AI/ML 作业中给出的整洁数据集中缺失。
最终,机器学习模型是将一组输入和模型参数(权重)映射到输出的函数
上面描述的模型是我为项目的第一个版本构建的。从那以后,对该模型进行了重大改进,最显著的是使用梯度下降实现了模型训练的自动化。输入和权重的概念也已经正式成为一个适当的线性回归模型。尽管线性回归很简单,但它对该数据集非常有效,尤其是因为它在很大程度上避免了其他模型难以解决的过度拟合问题。该模型还使用更传统的 MAE 作为成本函数。该系统还允许超参数优化,尽管它的一部分仍然是手动完成的。由于数据的时间序列性质,系统还没有正确地将数据分成测试集和训练集。这是我希望在未来几个月内解决的问题,之后我可以再看一眼非线性模型。无论如何,预测的结果可以在线访问,尽管由于冠状病毒的爆发,尚不清楚 2020 年一级方程式赛季将于何时正式开始。
机器学习和数据科学是非常有前途的技术领域,因此难怪许多学生对学习它们感兴趣。这个项目告诉我,最好的开始方式可能不是按照一步一步的指南或课程制作标准的 ML 模型,而是在一个真实的项目和数据集上进行实验,并自己发现 ML 技术的需要。在花了几个小时手动调整我的模型的权重后,我比任何教科书都更好地理解了机器学习的目的。因此,如果你开始你的数据科学和 ML 之旅,总是问你自己为什么要使用工作流程中的每一步,如果没有它会发生什么。这样你不仅会学到要做什么,还会学到为什么要完成!
我如何在数据科学领域找到第一份工作
乌鲁鲁的登山者| Jun 拍摄
从微生物学博士后到数据分析师的转变
不尝试,永远不知道。
经过近 6 个月的准备和努力,它最终获得了两个数据科学领域的工作机会。回顾过去的半年(2019 年 11 月-2020 年 5 月),这是我一生中最不确定的时期之一,为了一份 3 年的博士后合同,从布里斯班搬到悉尼,决定改变职业生涯,并被 COVID 停工期所困扰。
我总共申请了 41 份工作,要么是数据分析师,要么是初级数据科学家,每个人都有一份量身定制的简历/求职信。在这些申请中,有 21 份没有回应,18 份被拒绝,2 份面试邀请最终在 4 月下旬发出。如你所见,这不是一次令人鼓舞的旅程。但是,我从黑暗隧道的另一边出来了。
在这篇文章中,我想和你分享我是如何完成从博士后研究员到数据分析师的转变的,以及我在这一路上学到的经验教训。虽然过程可能因个人情况而异,但我希望我的经历为那些早期职业研究人员(ECR)提供了一条可能的途径,尤其是那些科学领域的研究人员,他们正在寻求转变,但仍不确定如何开始。
我为什么离开学术界
不要误解我。我喜欢做研究,或者我应该说是“解决问题”。在整个研究训练中,我系统地学会了如何阅读文献、剖析问题、设计实验、检验假设、分析数据和写文章。然而,经过 3 年的博士后研究和 4 年的博士学位,我发现自己逐渐进入了一个非常特定的研究领域,这不是我所期望的。相反,我渴望为我的未来探索更多的可能性,我想利用在学术界获得的所有这些技能来解决更多的实际问题。这是驱使我离开学术界的第一个原因。
此外,学术界已经有不少关于 ECR 的讨论。在所有这些不利因素中(例如,工作不稳定、不正常的工作时间(特别是对生命科学领域的湿实验室研究人员来说)、职位空缺、发表或灭亡的困境),定期合同是一直让我紧张的一个因素。
我确实理解学术聘用制度的重要性。它旨在通过不同实验室的多轮博士后奖学金培养下一代研究人员,直到他们能够独立负责一个研究主题/领域。换句话说,ECR 不太可能在她/他的整个学术生涯中都呆在一个实验室里。然而,从现实的角度来看,在短期研究合同的情况下,包括我在内的大多数博士后甚至无法承诺抵押贷款,因为我们不知道在一份合同之后我们是否会有工作,也不知道下一份工作在哪里。当涉及到我们的伴侣或家庭时,这个问题会变得更加复杂。例如,我们可能需要与他们分开,因为他们待在位于另一个城市或国家的“著名实验室”。
这里我的目的绝不是要抹黑学术界。我想表达的观点是保持选择的开放性。在我职业生涯的这个阶段,我需要一份与我的目标最匹配的工作,并且值得放弃我在学术界多年建立的东西。
为什么选择数据科学
进入数据科学是基于两个方面的慎重考虑,技能和热情。
作为一名生物科学博士后,我一直在使用多元分析、回归、网络分析和显著性检验来分析数据。所有这些知识都可以很容易地转移到数据科学。此外,由于我通常处理的数据量很大(高通量 DNA 测序),我熟悉了 Python、R、bash 脚本和 SQL,它们也非常符合数据科学所需的工具。
除了必要的技能和科学的心态,我认为在设定职业目标时,激情是不可或缺的一部分。我们不想走出死胡同,进入另一个死胡同。因此,确定我们的激情是很重要的,这并不难。我的建议是,当我们仅仅被好奇心和做某事的兴奋感所驱使时,那就是我们的激情所在。
对我来说,我的激情是应用数据洞察来讲述故事和解决问题。我热衷于利用现代统计学和数据可视化的方法从错综复杂的数据集中提取模式。
有了上述基础,我清楚地知道数据科学将是我下一个职业目标的最佳选择。话虽如此,当时我对就业市场还没有完全准备好。我需要将我所知道的转化为更有市场价值的技能,这就导致了下面的部分。
在线学习
虽然我非常熟悉数据科学中需要的一些技能,但他们并没有连贯地学习。在分析数据时,我仍然需要谷歌搜索的帮助。这对于日常工作来说完全没问题,然而,我不想在面试时被简单的问题(例如贝叶斯定理、中心极限定理、t-test、pandas 中的groupby
、SQL 中的JOIN
等等)卡住。因此,有必要系统地复习这些知识。
在这里,我列出了我用于统计学、python 和 SQL 的在线课程和材料:
- 《统计与概率》(可汗学院,免费) :本课程对所有的基础统计提供了极其详细(有意重复)的讲解和练习。
- 用 Python 和 R 进行基本统计:本书以直接简洁的方式涵盖了统计学的基本思想。更重要的是,它们为统计分析提供了 Python 和 R 语言的代码。
- 【IBM 数据科学专业证书 :该项目由 9 门课程组成,为您提供就业准备技能和技术,涵盖广泛的数据科学主题,包括 Jupyter notebook、Github、Python、SQL、数据可视化和机器学习。在最后一门课程中,你将被要求完成一个数据分析项目,形成你自己的报告并在某个地方发表(这里是我的: 探索悉尼郊区开一家新餐馆 )。所有这些完成后,您将获得一份证书,可以添加到您的 Linkedin 个人资料和简历中。
- 完整的 SQL Bootcamp 2020:从零到英雄 :有很多免费的详细的 SQL 教程。我买这个课程主要是因为 1)它提供了许多数据库,我可以用它来练习 pgAdmin。2) Udemy 提供超低折扣价(~ 20 澳元)。结果证明它完全值这个价。
建筑组合
如今,简历不应该是我们展示技能和经验的唯一方式。很有可能招聘人员或将要面试我们的人想要仔细阅读我们的 Linkedin、Github、个人博客和项目网站。我认为,由于数据科学的性质,这一点对于数据科学角色来说尤其如此。我们网站上展示的所有内容都可以作为我们简历中“漂亮数字”的证据。
此外,作为一名没有任何行业/商业经验的学术界候选人,通过在线学习经历、个人项目和博客来丰富我们的投资组合是最具成本效益的方式,因此可以帮助我们在其他申请人中脱颖而出。我们的投资组合应该传递至少两个信息:1)我们对数据科学充满热情,2)我们在数据科学领域所做的事情是积极的、持久的和专业的。
以下是我丰富投资组合的步骤:
- 建立自己的博客 :这是人们了解我、我的文章和项目的主要途径。在建立和维护自己博客的过程中,我也学到了基本的网站知识,比如 HTML,CSS 和 DNS。有了个人博客,我的个人资料就可以主动提供给每一个潜在的雇主或客户,而不是被动地将简历提交给工作岗位。例如,在推出我的博客并发表了几篇技术博客后,一位来自美国的数字制作人联系我进行一个数据可视化项目(真诚感谢他的信任)。
- 撰写技术文章:作为一名潜在的数据分析师/数据科学家,清晰有效的数据沟通技巧是必须的。写技术文章是我练习这种技能的最好方法。除此之外,我写作还有另外三个原因。1)写作帮助我以清晰和有条理的方式学习。2)写作使我能够贡献我在该领域的经验、技能和知识,并获得反馈。3)写作建立自己的受众群,拓展自己的职业人脉。
一月我的媒介故事统计
- :为了让我的博客有更多的读者,我选择在媒体上发表文章,因为它有巨大的用户群。此外,Medium 为我提供了关于我的文章的详细统计数据,这些数据可以包含在我的简历中。作为一个附带的好处,加入媒体合作伙伴计划,我可以从我的每篇媒体文章中获得收入,这可以支持我在线学习的成本。
新冠肺炎全球病例监测统计
- 开发自己的项目 :作为来自学术界的考生,我们可能缺乏真实数据科学项目的实践经验,这些项目往往比我们所学的课程更重要。所以,还是从零开始开发自己的项目比较好。这样,我们将面临一系列的技术挑战,迫使我们出于需要而不仅仅是好奇心去阅读和学习更多的东西。这就是为什么我开始开发自己的项目,并在 2020 年 2 月启动了新冠肺炎全球病例监测。通过这个项目,我的数据科学技能显著提高,我比以前更有信心(这对面试真的很重要)。例如,我学会了如何从动态加载的网站上抓取网页。我使用
NumPy
和Pandas
的数据辩论技能显著提高。我现在很擅长在 Python 中使用破折号构建仪表板。 - 整理 Linkedin 简介 : Linkedin 是一个专业的社交网络平台,我们在寻找新工作和维护个人品牌时必须使用。这是除了个人博客之外的第二个展示门户。我用来组织 Linkedin 个人资料的一个原则是保持 Linkedin 个人资料和简历的一致性。具体来说,个人资料摘要部分是精心设计的,以反映我的激情、个性和技能。个人项目和博客已被放在主页上。在线学习证书在许可证&认证部分进行了更新。
建立工作关系网
毫无疑问,人际关系网在寻找新工作中非常重要。有意识的人际交往可以产生信息、建议和机会。作为博士后,我们可能一直呆在实验室里,只有有限的时间与研究课题之外的人交往。然而,如果我们真的想要改变,我们需要走出我们的舒适区,接触新的联系。但我们应该记住,建立关系网是一项互惠的长期投资。
以下是我的一些建议:
- 参加合适的活动:在由数据科学悉尼主办的活动上,我遇到了 Hieu Tran ,他是一名数据分析师。我们聊得很愉快。在我们第二次叙旧时,他为我修改简历提供了很好的建议。我后来也帮他做过 Python 题。
- 向在你目标公司工作的人伸出援手:只要你把你的目的说得简明扼要,大多数人都愿意提供帮助。这就是我如何在 Linkedin 上与人联系,并认识了黄楚欣,他为我提供了关于面试的宝贵建议。
- 联系来找我:在启动新冠肺炎全球病例监测后,我在 Linkedin 上收到了许多联系请求和电子邮件。他们要么想为开发提供帮助(非常感谢 Johannes Pistorius 在设计仪表板方面的贡献),要么只是想表达他们对这个仪表板的喜欢。我还收到了尼克·伯恩发来的信息,他友好地在仪表板上覆盖了赫罗库的费用。在知道我在找工作后,尼克·伯恩甚至把我介绍给了他网络中的人。非常感谢他为帮助我所做的努力。
- 朋友推荐:如果你有在目标领域工作的朋友,他们应该是给你推荐的最佳人选。他们不仅比任何新关系更了解你的个性,还了解你的技能。也可以向他们寻求专业建议,没有任何社会压力。
结束语
正如你所看到的,以上所有的组成部分都是相互依赖的,这需要我们有一个全面的计划并坚持下去(就像在实验室里实施一个实验)。会有艰难和沮丧。但我们只需要不断尝试,接受失败,并做出改进,转折点终将到来。
这是所有的乡亲。和往常一样,我欢迎反馈、建设性的批评以及倾听您的数据科学项目/故事。可以通过 Linkedin 和我的网站找到我。
我是如何得到一份 6 位数的数据科学家工作的
数据科学职业指南
学习这些步骤,这样你也可以!
来源:Unsplash.com(由卢克·切瑟拍摄)
你为什么要读这篇文章?
如果您对从事数据科学职业感兴趣,并且想知道如何才能找到工作。
如果你想知道一个人如何在没有太多经验的情况下获得数据科学的工作。
如果你想知道一个人如何得到一份 6 位数的数据科学工作。
这些只是你会对这篇文章感兴趣的几个原因,但不管出于什么原因,下面的内容会让你对如何获得一份 6 位数的数据科学工作有一个很好的了解。
我的背景
我目前是一名营销数据科学家。我的数据科学之旅并不典型,因为我直到大学毕业才了解这个领域。我主修数学和数量经济学,渴望以分析师的身份加入金融界,并有可能在人生的某个时刻成为一名定量分析师。我一点也不知道华尔街定量分析师的竞争有多激烈。在对股票市场进行一些预测分析研究时,我偶然发现了数据科学的想法。我在大学时学过一些统计分析课程(侧重于计量经济学/统计学),所以我一直对预测未来的能力很感兴趣。实际上,我曾经问过我的数学教授,是否有一种方法可以 100%预测一只股票的未来回报,我得到了一个有趣的回答:“那将是圣杯方程式。就像抛硬币,知道它会落在哪边一样。”我有点希望能够尽可能地预测硬币会落在哪一边,所以我继续把预测作为我的小爱好。这最终让我发现了数据科学和机器学习的世界。我花了无数个小时自学编码,做 Kaggle/DS 相关的项目(偶尔还有 NBA 黑客马拉松比赛)。几份工作之后,我得到了梦寐以求的数据科学职位,从此一往无前。
如何找到数据科学工作?
现在你对我有了一点了解,我想告诉你我是如何适应脚本/编码、统计、机器学习等的。我不会说我是该领域的完全专家,但我确实认识到,我已经实现了许多人想要复制的目标。因此,让我们深入了解帮助我进入数据科学的步骤。
1。挑选你的爱语(Python vs R)
在我们开始之前,第一步是决定你想学习哪种编程语言。在数据科学社区中,关于哪种语言更优越存在着巨大的争论,但是答案是它们都是用于特定任务的优秀语言。
稀有
如果你来自任何与社会科学相关的背景,那么在某个时候你会利用 R 进行一些分析,R 是统计学家的常用语言,因为有许多统计软件包(CRAN 软件包)。我要说的语法是为我们这些以前从未用编程语言编码的人设计的,然而,对于有其他语言经验的人来说,R 语法可能需要一点时间来适应。我从 R 开始,并且能够让自己以面向编程的思维方式思考,如果你可以称之为面向编程的思维方式的话。R 的优势在于它的灵活性和快速运行分析的能力,而不需要导入太多的包。当你进入 for 循环的时候,这种语言确实变得有点笨拙,但是对于一个初学者来说,这是很棒的!r 还有一个很棒的应用程序 RShiny,它允许部署你的代码,对于一个数据科学家来说,这是一个很好的知识。我用了下面这本数据科学的书R来学习。
R for Data Science 是一本学习如何拿起 R 并开始运行的好书
巨蟒
Python 已经成为机器学习和数据科学非常青睐的语言。它有很多机器学习包(scikit-learn ),已经变得非常流行,并且易于使用。Python 是一种多用途语言,其中 R 用于分析,Python 可用于创建 API、Web 应用程序、数据科学模型等。如果发现整个后端数据存储都是用 Python 创建的,然后再用 Python 部署,这并不疯狂。很多人发现学习 Python 要容易得多。我知道一旦我从 R 过渡到 Python,我就能相当容易地学会这门语言。如果您已经有了使用 Python 的经验,那么学习用于分析的包将会相当容易。一本让你入门的好书是 Python for Data Analysis 。
Python for Data Analysis 是一本学习 Python 中用于数据的包的好书。(来源:谷歌图片/亚马逊网站)
决定先学哪种语言,归根结底是你觉得学哪种语言最舒服。真的没有错答案。然而,你应该在职业生涯的某个时候努力成为双语者。
2.研究数据科学/机器学习算法
一旦你对编程语言感到满意,你就可以投入时间学习数据科学了。这个领域一直在变化,实时有新的发现发生,所以成为专家需要你做大量的独立研究。你不需要完全了解深度学习算法的整个后端,但你应该能够回答一些关于最流行的数据科学算法的顶级问题。一些真正帮助我学习这些概念的书籍:用 Scikit 动手机器学习——学习& TensorFlow 、数据科学家实用统计学、统计学习入门、统计学习的要素。
动手机器学习是一本开始学习机器学习模型的好书。给出了模型的详细信息以及帮助您练习的示例。(来源:我的书)
实用统计学是一本学习任何数据科学家都应该知道的所有重要统计概念的好书。用 R & Python 提供了详细的解释和示例代码。(来源:我的书)
统计学习简介是一本深入研究 r 中统计概念应用的好书。这是一本更注重教科书的书,用于研究生课程,因此将更侧重于理论和应用(来源:Google Images/Amazon.com)
统计学习的要素是一本概念/理论厚重的书,深入到数据科学中使用的许多统计/机器学习算法背后的实际数学。如果你真的想学习数学,这是一本很棒的书。请注意,这是非常沉重的概念,将需要一些阅读。(来源:我的书)
3.工程,工程,工程!
类似于软件工程,你应该建立一个项目组合,真正让你在求职中脱颖而出。一旦你完成了编码和建模,你就应该开始将你所学到的应用到数据中。找出你可能感兴趣的东西,思考你能解决的问题。在给定一组属性的情况下,您可能想要预测房子的价格,或者您可能想要根据人口统计和城市大小来预测节目的收视率。可能性是无限的!如果你想不出一个项目,你总是可以通过访问kaggle.com找到难以置信的数据集和问题来解决。这是一个学习和应用数据科学和其他统计模型的好网站。如果你足够优秀,你甚至可以因为帮助公司而获得奖金。
我做的第一个项目是利用 Twitter 的 API 创建一个情感模型。利用词袋法,我能够根据 Twitter 帖子对我感兴趣的任何关键词进行分类。这不是一个完美的项目,还有更复杂的方法可以应用,但这是我的第一个数据科学项目,它真正让我保持了动力。
这是推特情感项目的一个成果。使用 Plotly 创建的图形,我相信这里被分类的是“德雷克”。(来源:我的图)
4.迈出你的第一步
一旦以上所有的都感觉舒适,下一步,我觉得是最艰难的,是得到你的第一份数据科学工作。我可以承认,在一年的时间里,我发出了 500 多份求职申请。然而,现场面试的次数我可以用两只手来数。确保你在简历中突出了你所有的项目成就。如果你缺乏数据科学方面的经验,就把它们作为简历的重点。如果你能表现出对解决项目问题的兴趣和奉献精神,招聘经理有时会忽略你的经历。一旦你进行面试,这些也是很好的话题。这个领域竞争非常激烈,似乎每个人都想从事数据科学方面的职业。不要让那些暂时的失败阻碍你实现目标。我发现,真正让自己进入大公司的最佳方式是接受一个小公司的数据科学职位。这可能不那么有魅力,薪水也不那么有竞争力,但是一旦你迈出了第一步,你真的可以利用自己获得一个极具竞争力的职位,以及随之而来的所有福利。这是我采取的方法。我从一家小媒体代理处开始,靠杠杆作用成为一个 6 位数的角色。但是,如果你有机会直接进入大公司,权力会更大。如果有兴趣的话,我会努力整理一份数据科学的面试指南。
专攻您的数据科学
一旦你进入了这个行业,你应该开始考虑你想把数据科学工作的重点放在哪里。数据科学有许多不同的领域,有时将你的工作专门化可以在未来产生巨大的杠杆作用。不同类型划分的一些示例如下:
数据科学、产品分析 —专注于解决与产品约定和性能相关的问题。(例如脸书新闻源、Facebook Messenger 等)
营销数据科学(Marketing Science) —我目前在做什么!专注于解决营销方面的问题。生命时间价值、客户生命价值、营销组合建模和多点接触归因。
数据科学,分析——更关注事物的分析方面。度量测量。
机器学习工程师——专注于应用深度机器学习实践解决问题。
数据科学有很多不同的领域,所以开始缩小你的兴趣范围会非常有益。将在另一篇文章中解释数据科学的不同应用。
最后的话
我希望本指南能够帮助您了解如何在数据科学领域找到一份有竞争力的工作。有很多方法可以采用,但这就是我所做的,而且很成功。有时也有运气因素,在正确的时间出现在正确的地方,但这不是我们能真正量化的。如果您想了解更多,甚至想进行一对一的咨询,您可以拨打联系我。
感谢阅读:)
- 此帖子包含亚马逊的附属链接。
- 不是赞助内容。
我如何在没有硕士或博士学位的情况下找到一份数据科学的工作
我在数据科学领域找到工作的故事
这是我在数据科学领域求职之旅的第一部分,我在这里分享我的建议。
你好 Medium 和 TDS 家族!
我叫 Jaemin Lee,是一名刚从数据科学专业毕业的学生。我想分享一下我是如何在没有高等学位(硕士或博士)的情况下找到数据科学领域工作的故事。
要跳过我的人生故事,请向下滚动到建议和意见部分。
如果你想看我的提示和建议的视频版本,请查看这个视频:https://youtu.be/l02DXbGszJM
我的背景
我最初是计算机科学(CS)专业的学生,直到大学三年级的第一学期。在那个学期,我进入了股票交易,我对影响股票价格的不同变量着迷。我认为建立一个预测股票价格的模型会很棒(当时我并不知道为股票建立一个预测模型是如此困难的任务)。然后我遇到了令我非常感兴趣的数据科学领域。我喜欢使用数据历史来预测、分类和分组有趣见解的想法。
有趣的是,我的大学宣布他们将在下学期为本科生开设数据科学课程,这让我很兴奋(多么完美的时机!).于是,我毫不犹豫地从 CS 专业转到了数据科学专业。通过参加数据科学相关的课程,我真正爱上了数据科学的本质。了解数学和统计学如何在机器学习和统计模型的幕后工作是很有趣的。
求职过程
2019 年 12 月开始,我开始应聘数据科学方面的工作。我意识到大多数数据科学家职位至少需要硕士学位(有些公司甚至更喜欢博士)。这有点令人失望,因为我坚信,只要一个人拥有正确的技能,学位并不重要。
我遇到了一个数据科学/体育分析 YouTuber, Ken Jee ,他已经在这个行业工作了 5 年多(他的频道与他的名字相关联),我联系了他。我分享了我对在没有高等学位的情况下找一份数据科学工作的担忧,他建议我申请数据分析师的职位。这让我印象深刻,因为大多数数据分析师角色不需要机器学习或深度学习技能等高级知识,我认为我可以利用这些技能将自己与其他候选人区分开来。
我开始申请数据分析/数据分析师的职位。幸运的是,一家公司的分析团队喜欢我的简历,他们想采访我。在面试过程中,我展示了我的机器学习技能。他们似乎喜欢我的技能,因为他们想将人工智能融入他们的工作。总共有三轮,我很幸运地得到了他们的邀请。
我相信整个面试过程帮助我成长为一个人。我从来没有时间反思自己,准备面试让我更加了解我是谁,我想做什么。
建议和意见
现实情况是,许多数据科学家仍然需要硕士或博士学位,平均至少有 5 年的工作经验。我希望这种情况在未来会有所改变,但这是当前就业市场的预期,我们需要接受这一点。如果你想在没有高等学位的情况下获得数据科学方面的工作,请查看我的建议:
- **开始学习机器学习&深度学习。**如果你在本科阶段展示你的机器学习和深度学习知识,公司会印象深刻。如果你的学校提供机器学习/统计学习/深度学习课程,那么一定要选那些。如果没有,网上有大量的资源(Coursera,Udemy,YouTube ),所以只需选择一个并开始学习概念。
- **开始做项目,建立你的投资组合。**我非常同意 YouTuber 数据教授 — “学习数据科学的最佳方式是做数据科学。”(也可以看看他的频道。)将数据科学付诸行动,你会获得更多的知识。通过做关于回归、分类、聚类、深度学习和 NLP 的项目来弄脏你的手,并把它们放在 GitHub 或你的个人网站上。
- 确保你的简历有说服力。一旦你理解了机器学习/深度学习的概念,并建立了自己的投资组合,就开始写简历吧。同样,查看肯·吉的 YouTube 频道和他的媒体,了解更多关于如何打造一份优秀简历的信息。
- **不要把重点放在职称上,要把重点放在工作的性质上。**你想成为一名数据科学家,应该是因为你喜欢这个领域和工作,而不是因为职称(是的,我知道数据科学家是 21 世纪“最性感”的工作之一)。申请数据分析/数据分析师角色,确保在面试过程中展示你的机器学习/深度学习技能。初级数据科学家的角色也存在,但很少见到。
- 与你的网络互动(这适用于任何工作)**。**积极主动,通过线下和线上接触你的人际网络。请求推荐人,因为推荐人在选择候选人时发挥着巨大的作用。如果你是被你申请的公司的员工推荐的,那么你的简历会排在第一位(前提是你的简历要有说服力)。
- **了解你的简历。**在面试过程中,准备好从头到尾谈论你简历上的项目。公司通常会询问整个过程——获取数据、探索性数据分析、数据清洗、模型构建和结果。提及你所面临的任何挑战,以及你是如何克服这些挑战的,这也是很好的。
感谢你阅读这篇文章!我希望它能帮助任何在数据科学领域寻求职业生涯的人。
特别感谢 Ken Jee (以及他的 YouTube 频道)和 Chanin Nantasenamat (又名。数据教授)给我灵感,让我提到你们!看看他们的 YouTube 频道和媒体。他们张贴无价的内容!
我如何在没有硕士或博士学位的情况下找到一份数据科学的工作|第二部分——经验
我在数据科学领域找到工作的故事
这是系列的第二部分,我将讲述我是如何在没有实习经验的情况下在 DS 找到一份工作的。
视频版本
介绍
你可能在想,“这家伙肯定在撒谎!没有高等学位和实习经历的人怎么可能在数据科学领域找到一份工作呢?!"
但这是真的!下面是我的故事…
申请实习
2019 年秋天,我在大学里学习了机器学习和深度学习课程。我认为我对 ML 和 DL 中的概念有很好的理解,所以在学期快结束时我开始申请实习职位。
我申请了大约 20 个职位,得到了 3 次面试机会。其中两个导致了现场面试,其中一个再也没有回复我。我多次联系招聘人员,但没有得到任何回应。
我仍然很高兴我对他们中的两个进行了现场采访。我觉得有一次现场面试还算顺利(为了便于我解释,姑且称这家公司为 A 吧)。我知道我不会从 B 公司得到这个职位,因为他们问我是否曾经部署过一个模型——我从来没有这样做过。
然而,A 公司一直没有回复我。我联系了他们无数次,但他们还是没有回应我。
所以,我最终没有得到任何实习机会。老实说,我压力很大。由于我下学期(2020 年春天)就要毕业了,我不知道我是否能够获得一份没有实习经验的全职工作。
机会依然存在…
让我们再回到 2019 年秋季学期。我收到了学校发来的电子邮件,说他们将举办一个本科生研究展。
幸运的是,有相当多的教授在寻找有机器学习经验的本科生。一位来自政治科学系的教授正在研究多国军事演习。多国军事演习是不同国家之间的联合军事行动,主要分为“作战”、“维和”和“人道主义”。
这个研究项目对我来说非常有趣,因为我在我的祖国服了两年的兵役(韩国男性必须服兵役)。所以我给了他我的简历,并向他展示了我对这个项目的兴趣。最终,我能够为他的项目工作,在这个项目中,我们使用自然语言处理对多国军事演习的类型进行分类。
然后…另一个机会向我走来。之前我提到过,我参加了一门机器学习课程,教授这门课程的教授也教授了我的大数据课程。在学期结束时,我必须在他面前做一个项目演示,演示后,他问我是否想在下一个学期做一个项目。我问他这个项目是关于什么的,他说我可以选择一些主题,我将有机会在他的研究实验室和博士生一起工作。他还提到,他们是政府资助的项目,所以我会得到报酬。
接下来的一个学期(2020 年春天),我回到他的办公室,见到了在他实验室工作的博士生。他们向我们展示了我可以从中选择的主题,我最终参与了识别事故相关推文的项目。然后,我更深入的去找事故的类型——枪击、火灾、车祸、不相关。
通过我的两个研究岗位,我了解到现实生活中的数据是如此的杂乱。在你真正开始做有趣的事情之前,你必须花很多时间收集数据并清理它们。
结束语
因此…在获得数据科学的全职职位之前,我有实习经历吗?没有。但是,在我最后一个学期,我在两个本科研究岗位上工作,在那里我可以获得实践经验。
我不是想贬低实习的重要性。实习是获得经验的好方法,你可以通过实习解决现实世界的问题。
然而,由于目前疫情的形势,许多实习机会被取消。如果你在这种情况下,我很抱歉,但这不是世界末日。归根结底,你只需要一些经验,还有其他获得经验的方法:
- 联系你的教授。大多数教授进行研究。你可以去他们的个人网站,看看他们的研究领域。如果你发现了你感兴趣的东西,不要犹豫,向他们伸出援手。大多数时候,教授们喜欢谈论他们的研究领域,他们可能会给你一个你可以做的项目。
- 利用虚拟实习机会。由于整个疫情的形势,一些公司正在提供虚拟实习机会。点击这里找到虚拟实习。数据教授 YouTuber 也浏览虚拟实习,所以一定要看看他在的视频。
- 找到自己的项目。这可能有点挑战,但绝对值得。这表明你是一个积极主动的人,你可以做任何你想做的项目。有不少网站可以找到数据集(一些有用的网站— Kaggle 、 Reddit 数据集、 UCI 机器学习库、 DataWorld 、Data.gov)。
我希望这篇文章对你有用!我将写更多关于我如何在没有硕士或博士学位的情况下找到一份数据科学的工作,敬请关注!
我如何在没有硕士或博士学位的情况下找到一份数据科学方面的工作|第三部分——简历
我在数据科学领域找到工作的故事
这是系列文章的第三部分,我将讨论如何组织你的简历。
注:本系列其他部分可以在 这里找到 。
视频版本
介绍
通常,有两个主要的地方会用到你的简历。
- 通过在线申请
- 面对面(招聘活动/招聘会,以及一旦你的简历通过自动筛选)
在这篇文章中,我将谈论你应该如何组织你的简历,你需要写些什么,这样你的简历才能通过电脑屏幕,让人们注意到。
在线简历技巧
一旦你在网上提交了简历,它就会被保存到雇主的求职者跟踪系统(ATS)中。
- 仅使用一页。如果你的工作经验少于 5 年,或者如果你申请的是初级职位,这是一条通用的经验法则。在某些情况下,如果你有 10 年以上的职业经验,并且有很多成就,这份简历可以长达 2 页。
- 一定要放公司找的关键词。 ATS 搜索与职位匹配的关键词。如果你的简历没有足够的关键词,那么你的简历很可能会被存档,永远不会到达招聘人员或招聘经理的手中(取决于招聘的人)。
- 你的简历需要具有可解析性。这意味着你要避免使用独特的字符、多列、不寻常的缩进或图像。我也建议不要用横线或横线来分隔段落。
- 提交 PDF 或 Word 文档格式的简历。我推荐使用 PDF 版本,因为它不可更改。此外,确保检查你的文件转换成 TXT 文件是否没有问题——在简历中创建奇怪的字符或丢失信息。可以用这个这样的网站。
个人简历的结构
你的简历是第一印象。招聘人员会收到大量的简历,他们没有时间仔细检查你的简历。你的简历应该在 10-20 秒内引人注目。以下是一些关于你应该如何组织你的简历以及你应该为数据科学职位写些什么的建议:
- 将你的技能放在首位。你希望审阅你简历的人首先注意到你的技能。我推荐把语言&能力(如编程语言、软件、语言技能等)、技术技能(如回归、分类、聚类、深度学习、NLP 等)、数据科学库(Scikit-learn、Numpy、Pandas、Matplotlib、Seaborn、Tensorflow、ggplots 等)
- **说出你的相关工作经历。**你想按从最新到最老的顺序排列它们。如果你有工作经验,但两者没有关联,那么我建议放在你的项目下。一个简单的格式应该是这样的,“动作 X 导致结果 Y”。
- **你参与的项目。**正如我上面提到的,如果你没有任何相关的工作经验,这个可以去技能部分下面。我推荐放回归,分类,聚类,深度学习/NLP,数据库(SQL)项目。我提到数据库项目是因为这表明你有基础设施方面的经验。同样,一个简单的格式是,“动作 X 导致结果 Y”。一个例子是“开发了一个程序,它能以 92%的准确率识别狗的图像。”
- 你的教育。我建议写上学校的名字,你的专业,你预计毕业的月份和年份,任何学校活动,以及相关的课程。没有必要公布你的平均绩点,但是如果你没有任何工作经验,我建议你把它公布出来,因为它反映了你的职业道德和你有多勤奋。如果你的 GPA 低于 3.0,我建议你不要考虑它。我相信 GPA 并不总是反映一个人,所以我会用一些其他的方式来展示你的性格(例如,通过项目或工作经历)。
- **关于我(可选)。**我个人喜欢放一点“关于我”的版块来展现我的性格。在这一部分,你可以放任何关于你的特别之处,你热衷的事情,你的爱好等等。这也可以作为一个很好的谈话开始。
- 确保没有拼错的单词。拼错代表不注重细节。雇主不在乎你不知道如何拼写某些单词或者你打错了一个错别字。他们关心的是你忽略了一个错误。我会确保在你提交简历之前进行拼写检查,并让人校对,尤其是如果英语不是你的母语的话。
我希望这有所帮助!请继续关注该系列的下一部分!
我如何在没有硕士或博士学位的情况下找到一份数据科学方面的工作|第 4 部分—面试
我在数据科学领域找到工作的故事
这是本系列的第 4 部分,我将讨论入门级数据科学职位的面试准备以及您应该具备的心态
视频版本
介绍
面试总是让我感到害怕。我过去常常在面试前和面试中感到非常紧张。回想起来,这完全取决于你如何对待面试。
在这篇文章中,我想谈谈以下几点:
- 如何准备技术面试
- 如何准备行为面试
- 面试前你应该有的心态
- 其他一些有用的提示
注意:这些是基于我对入门级数据科学职位的面试经验。
技术面试准备
数据科学是一个技术领域。你需要了解编程、统计和数学,并且会被问到关于这些主题的问题。
- 尽可能多做项目(特别是 SQL、Python 和/或 R)。你做的项目越多,你就会越熟悉数据科学的生命周期。通过做项目和面对问题,你需要思考如何解决问题,这将帮助你记住解决方案。
- **做好基础机器学习题的准备。**您可能需要回答过度拟合和欠拟合以及如何处理它们,如何处理缺失值,学习技术之间的差异——监督、非监督、半监督和强化,不同类型的模型精度测量等。我在这里提供机器学习面试问题的网址链接:跳板,分析 Vidhya ,精英数据科学。
- **了解你的简历。**准备好从头到尾谈论你在简历上列出的项目。你将被要求向面试官介绍你在处理项目时采取的每一个步骤(数据收集、数据清理、探索性数据分析、模型构建、准确性和/或模型部署)。谈论你所面临的任何挑战,你如何克服它们,以及你本可以做得更好的事情,这很好。
行为面试准备
- 研究公司。他们会问这样的问题:“你为什么想在这家公司工作?”你需要能够谈论你欣赏公司工作的哪些方面,以及为什么这对你很重要。
- 使用 Glassdoor 的面试问题。你可以在 Glassdoor 上找到一些公司问的问题,让自己熟悉他们问的问题类型。
- 展现你的性格。你的性格和行为是你融入团队和公司的有力指标。面试官是你潜在的同事或老板,所以他们想发现你的工作道德和个性。
心态
我曾经认为,如果我没有通过面试,我就不能证明自己是一个合格的候选人。我给自己的压力太大了,这让我害怕面试。
我认为重新构建面试的整体视角很重要。不要想着“我会在面试中表现得很好”,试着告诉自己“我会有一个很好的谈话,会很开心”或者“我会向他们展示我是谁,并了解面试官和公司。”这样,这不是关于你是否通过面试,而是关于你是否享受在那里的时光。你会感到压力较小,因为你的重点是享受乐趣,而不是通过它并获得职位。
即使你被拒绝了也没关系,只要你对这家公司充满了兴奋和热情。你会学到一些有价值的东西,你可以在未来的面试中使用这些经验!
其他提示
- 利用模拟面试,多做一些。通常,学校会提供模拟面试,所以我强烈建议你参加。你也可以请你的朋友或家人帮助你。
- 尝试做公司特定领域的项目。这表明你对公司所在的领域感兴趣。例如,如果你正在申请一家金融公司,并且你做了一个与金融相关的项目,那么这是一个巨大的优势。
- 要诚实。有些事情不知道也没关系。更重要的是,你是诚实的,而不是假装知道。
- 提问。这是你展示对公司真正兴趣的机会。数据科学 YouTuber 的 Ken Jee 制作了一个关于这个主题的非常有用的视频。
- 确保在面试后 24 小时内写一封感谢信。你想在面试官还记忆犹新的时候留下一个好印象。
就是这样!感谢你阅读这篇文章,希望你觉得有用。欢迎在评论区分享你的想法或面试技巧!敬请期待下一部分!
我如何在澳大利亚四大银行之一找到我的第一份数据科学工作
我在澳大利亚刚下飞机后的旅程
你也可以在这里听故事
澳大利亚的第一天
在我祖国的国际机场含泪告别后,飞往墨尔本的飞机起飞了,不久之后,透过飞机的窗户,一切看起来都变小了。最后一次俯视我的城市,我知道我即将在另一个国家开始一段新的旅程,对未来和归期都没有把握。我告诉自己,至少,我知道目的地,那时我最珍贵的财产是希望和梦想。
第二天到达墨尔本,我不得不离开过去,朋友和家人,像许多其他来澳大利亚参加 2018 年 2 月入学的学生一样开始新的生活。华丽、宁静、阳光是我第一天对墨尔本的感受。被瘦骨嶙峋的摩天大楼包围的古老建筑,反射着夕阳的上坡道路,电车的锣声和人行横道按钮的声音让我从想家的情绪中分心,让我对探索这座历史名城和它在中央商业区的秘密小巷感到兴奋。
努力找工作
在探索墨尔本的第一个星期后,我在城里我的大学旁边的一个学生宿舍安顿下来,并开始跟踪我银行账户中的数字,以计划未来几个月的租金支付。即使我有足够的钱在接下来的 12 个月里不用工作也能在墨尔本生存,看着余额每天下降也是一种真正的压力,就像倒计时直到我破产的时刻…是的,我必须找份工作。
我是一名经验丰富的自动化工程师,有 7 年多的工作经验,曾经在我的祖国为一家德国科技巨头工作。因此,我很有信心,以我的背景,我会很容易找到一份类似的工作,所以我在某些澳大利亚求职网站上创建了我的个人资料,并申请了一些相关的职位。令我震惊的是,在发出的 10 份申请中,只有 3 份得到了回复,尽管他们对我的简介印象深刻,但我对这 3 份申请的面试问题都是一样的。
问题是:“你的居留身份是什么?”
“我目前持有学生签证”,我说。
我就是这样被拒绝的。在澳大利亚,学生每周只能工作 20 个小时,这也是许多公司不愿意雇佣国际学生的原因之一。从我的角度来看,工作时间的限制并不是一件坏事,因为学生应该专注于他们的学习,从项目中受益。我几乎没见过哪个学生边工作边全职学习,还能听懂所有的课。毕竟我们来澳洲都是为了学习,提升自己,追逐梦想。如果你成功地把自己提升到了一个新的高度,金钱肯定会随之而来。
对咖啡因上瘾
然而,这一政策的不利之处在于,由于财政压力仍然存在,学生需要赚取收入来维持生活,因此他们往往会转向有现金在手的工作,这些工作有帐外工资支付和被剥削的高风险。我在大学时曾做过兼职,我想这是全世界典型的学生生活。
几周后,我在一个热门的澳大利亚兼职网站上跳转,开始搜索咖啡师的职位。在来澳大利亚之前,我完成了一个制作澳大利亚咖啡的短期课程,因为我认为万一我找不到工程方面的工作,这可能是有用的,事实也的确如此!
澳大利亚咖啡非常独特,深受澳大利亚历史和文化的影响。如果你有机会去澳大利亚旅行,当一位女士走进咖啡店说她想要一杯黑色的长咖啡时,你应该不会感到惊讶。这个“长黑”的东西绝对不是你现在所想的,相反,它是美式咖啡的澳大利亚版本(如果我这样解释,我的澳大利亚朋友会非常失望)。唯一不同的是倒咖啡和水的顺序。
回到这个故事,我很快在墨尔本西北部的郊区找到了一份咖啡师的工作,这是我在澳大利亚的第一份“工作”。这是一家繁忙的餐厅,供应披萨、咖啡和羊角面包,这是当地人的家常便饭。冲咖啡对我来说不是问题,但在一分钟内完成订单是一个真正的挑战,尤其是从上午 11 点到下午 1 点,有很多顾客走进来。与我还是大学生时相比,在办公室坐几年确实让我慢了下来。我承认我不擅长客户服务,我知道我表现不好。我每天下班后都感到压力很大,筋疲力尽,更不用说由于餐馆离市区很远,我还得长途通勤。此外,我没有时间独立学习或课前预习,这开始拉低我的分数。
我曾考虑辞职,但想到我银行账户上不断下降的数字和所有即将到来的账单,我没有足够的勇气这么做。然而,没过多久,我就收到了经理发来的消息,说“你下周不用来了”……我丢掉了第一份工作。
结束最后一天的工作回家后,我把自己锁在一个小房间里,停用所有社交媒体账户,停止与人交谈,并开始喝大量咖啡来为大学讲座补充能量。如果当时有人给我药,我早就吃了。总之,我对咖啡因上瘾了。咖啡师沉迷于咖啡并不是一件坏事,不是吗?
学期休息活动
我想,如果我这么没用,而且唯一没有人能阻止我做或者没有工作时间限制的事情是"学习"",那么我就会专注于学习、研究并把它做得非常好。否则,我还能做什么,对吗?我对技术和数据科学的热情让我忙碌了一段时间,忘记了“失业”状态以及账户余额。终于在硕士第一学期 GPA 考了个 4.0 满分的 4.0。
时光飞逝,第一学期已经过去,我已经在澳大利亚呆了几个月了。在过去的一段时间里发生了太多的事情,唯一让我振奋的是老师的鼓励,妻子的支持和学校的一封表扬信。坐在经过市中心的火车上,我希望有一天我能在这些摩天大楼之一工作。
然后学期结束了,在下学期开学前我有三周的空闲时间。我试图利用这个空档时间开始一个兼职项目,否则,我会感到无聊并面对失业的现实。我开始研究谷歌云平台,并阅读了我的第一本关于云技术的书:用 Python 编写谷歌应用引擎,作者是丹·桑德森。书中的知识使我能够建立一个自动报纸,能够从我最喜欢的页面抓取新闻,并显示在应用程序的单个首页上。这样我就可以阅读所有我喜欢的新闻,而不用浏览不同的网站。
该应用程序托管在谷歌云平台上,由包括谷歌云数据存储、谷歌云 SQL、谷歌云存储和谷歌应用引擎在内的几个云服务提供支持。当时,人们在多个媒体渠道谈论数字云,认为它是最先进的颠覆性技术,因此我非常兴奋地看到我的第一个应用在研发的三周内就运行在云上。我第一学期的假期就是这样度过的。
寻找联系
一个月后,在我的第二学期开始后,我继续发送我的简历,并收到许多来自人力资源部门的拒绝邮件。直到现在,我都不记得我当时申请了多少份工作。
然后我开始以不同的方式思考,也许我应该停止担心工作,看看硬币的另一面。我有机会学习我热爱和热爱的东西。当我一天天地学习新的东西和探索知识海洋时,我感到兴奋。这就像玩电子游戏时打开地图的隐藏区域一样。最坏的情况当游戏结束时,我仍然可以回到我的祖国,带回留学的无价之宝“知识”。至少,我有一个家可以回去。
虽然这种积极的想法并没有改变我没有工作的事实,反而让我更加开放。然后,我试着去接触新的人,不羞于谈论我的失业状态,并且接受我是一个初学者并且还在学习的事实。从那以后,我扩大了与积极思考者的关系网,他们能够用自己的积极能量激励社区。
这项任务
在第二学期,其中一门课程要求我们建立一个团队,并参加墨尔本的数据科学竞赛,作为评估的一部分。我很快与一位才华横溢的软件工程师合作,他是我几个月前认识的。他是一个经验丰富的前端开发人员,而我在云平台和机器学习作为后端服务方面有一些知识。后来又有三名学生加入,我们和其他 200 支注册队伍一起参加了墨尔本数据马拉松比赛。
所有团队都收到了超过 25 GBs 的公共交通数据,其中包含有关墨尔本乘客的车票触摸和触摸信息。我们需要从这些数据中构建一个应用程序(web 应用程序或移动应用程序),这个想法没有任何限制。这就是他们所说的端到端数据科学。我们的目标是开发一个 web 应用程序,告诉乘客他们是否应该在工作日的特定时间从目的地到目的地乘坐公共交通工具或汽车。该应用程序的后端采用了多个时间序列模型来预测未来给定时间的公共交通等待时间、出行时间和道路交通。
团队结构看起来很完美,成员拥有不同的技能:前端、后端、云基础设施、模型构建、数据处理和数据分析。然而,有一个问题:我们都是一年级学生,我们知道的唯一模型是 K-neighbors、K-Means、DBSCAN 和决策树。深度学习甚至 XGBoost 肯定不在名单上。
让我们玩大的!
成功的机会不是很高,我们都参加了比赛,只是因为这是课程要求的一部分。因此,我们很快就失去了动力,想要放弃,因为这极具挑战性,而且我们中没有人有处理如此大量数据的经验。当时我甚至不知道如何使用 Hadoop 和 Spark(一个流行的大数据平台)。我们的目标是提交项目,完成作业并通过课程。
经过一个月在数据中徘徊,什么也没做,然后我说服团队尝试一些新的东西。我决定使用谷歌云平台(GCP)来存储、处理和分析数据,然后建立模型并将其作为一种服务。云平台让我们能够轻松协作,在同一个 GCP 项目上一起工作,而不用担心计算资源或跨团队共享数据(我在下面为感兴趣的人提供了应用程序架构)。由于工作流程已经改进,我们尽了最大努力,在两个月内完成了申请,并最终提交了申请。我感到非常高兴,因为我完成了一个端到端的数据科学项目,它结合了我在过去几个月中学到的所有知识和技术。
意想不到的结果
第二学期也在我学完课程的时候过去了。我仍然没有工作,但保持积极的态度,不断结识新朋友。我的激情又一次让我忙碌起来。在等待 datathon 的结果时,我学习了 Docker 的容器化机器学习模型,Kubernetes 的容器编排。在所有的事情发生后,我开始相信生活是一面镜子,我对它的看法会反射回来。夏天开始后的几个星期,我得到了最终的结果…我们获得了二等奖。
与此同时,赞助竞赛的银行正在启动一个名为数据科学 Gig 孵化器的特殊实习生项目。他们通过比赛寻找候选人,并选择前两个团队的成员加入该计划。当第三学期开始时,我成为了 Gig 孵化器,并开始在他们位于中央商业区的一栋高楼里的办公室里工作。
一年后,我完成了硕士学位,然后被提升为银行的数据科学家。
一切都是相连的
你可能认为我很幸运,事实上,我对此毫不怀疑。然而,从一个数据科学家的角度来看,我会用“概率”这个词,而不是“幸运”。
在某个时刻,我得到数据科学的工作似乎是一个随机事件,就像中了彩票一样。然而,如果你看看所有发生事件的整个时间表,有一些因素有助于增加获得工作的概率或机会。鉴于最后一个里程碑是成为澳大利亚的数据科学家,可以看出:
- 如果 I 没来澳洲,概率是 0%
- 如果我来澳洲后没有参加比赛,概率只有 50%
- 如果我在第一学期没有学习如何使用谷歌云平台,我赢得比赛的机会将会减少。
- 如果我没有积极思考并接触社区,我就不会认识我伟大的队友,我们赢得比赛的机会也会因此而减少。
- 如果我没有探索技术并将其应用到项目中的热情,面对阻碍时更加努力,我们就不会成为赢家。
或者以复选框的形式(这很像奇异博士对某些事件发生几率的计算):
这些数字不是量化的,它们是用来帮助你理解的
我使用第一人称主语“ I ”来表达这一想法,因为这些是我们可以主动采取的行动,增加了我们想要的结果的可能性,即使总会有一些我们无法控制的外部因素,如银行的赞助或我的签证申请失败。
这里的想法是,它采取了一个旅程,导致今天的结果。换句话说,你现在做的每件事都会把你带到未来的某个地方,当你回头看的时候,你会发现这一切都是因为某些原因而发生的。如果你在漫长的旅途中感到疲惫或失去动力,试着想象你将来想成为什么样的人,就像我希望我能在城市的摩天大楼里有一份工作一样。如果你在旅途中迷失了方向,请永远记住,你的激情将是一个准确的指南针。
附录
我在 2018 年墨尔本数据大会上搭建的平台架构
我如何在 6 个月内学会 Python
从一个没有编程经验的药学学生到新加坡的数据科学家。
在 Unsplash 上由 Hitesh Choudhary 拍摄的照片
坦率地说,学习一门新语言绝非易事。对于以前没有编程或计算经验的人来说,学习像 python 这样的整个语言似乎是一项不可能的任务。然而,所有的事情都一样,没有什么是完全不可能的,除非你认为它是。在这里,我和大家分享一些我的小技巧,学习 2020 年最流行的编程语言。
心中有一个目标
没有目标的学习是你可能犯的最严重的错误之一。如果没有一个激励性的目标,你将很容易忘记你最初为什么要学习这门语言。我根据经验写了这篇文章,因为我以前曾试图学习 C 和 Java,但没有成功。两者都以失败告终,因为我不知道在哪里应用这种语言,很快就放弃了学习的想法。没有任何用例,我也无法学习这些语言的语法。
然而,当我学习 Python 时,事情就不同了。学习 python 是我学习数据科学技能并将职业生涯转向分析的计划的一部分。因此,我不是为了学习而学习 python。我需要 python 的工作知识来进行数据分析,需要了解一系列的库来开始我的项目。我学 python 有更大的目的。
设定一个最初的目标就是完成工作的一半。为你正在学习的语言找一个应用,你就离掌握它更近了一步。
资源
网上不缺资源。我唯一的建议是不要只依赖一个。利用各种可用的资源,利用不同的交付模式来增强您的学习体验。下面是我用来学习 python 的一些资源;
- Udemy
完整的 Python 训练营和 Python for Data Science 涵盖了 Python 编程的基础知识和数据科学的基本库。这些课程以视频授课的形式进行,作业是 Jupyter 笔记本。
2.交互式编码环境
在你学习数据科学的时候,Datacamp 和 Dataquest 是很好的编码平台。它们提供了一个交互式的环境,让你边走边练习,让你记住概念,熟悉编码。对于一般的 python,查看类似的交付【learnpython.org 的。编程语言类似于自然语言,练习和练习是学习的方式。
- edX
使用 python 的计算思维由 MITx 以课堂式的方式教授 Python。这是最适合你的,如果你错过了参加校内课程,因为讲座和作业是每周一次的,还有期中和期末考试。他们与其他 MOOCs 的区别在于他们给出的编程作业。这些作业是经过深思熟虑的,要求学习者编写基本算法,作为逻辑思维的一个很好的练习。
4.博客
提供学习数据科学资源的推荐或建议的博客并不少见。我最近遇到的一个这样的博客是Self learning Data Science,他们在那里积极推出帮助初学者开始数据科学学习之旅的内容。他们还以简洁明了的方式展示,以客观的方式提供他们的评论和建议。其他更著名的博客包括数据科学中心或 KDnuggets 。根据你的喜好,你可能会更喜欢一些。环顾四周,看看哪些博客适合你的学习风格。
项目
除非你应用你所学的,否则你不会知道你知道多少。Project 是评估你知识的一个很好的方式,绝对是你简历的一个很好的补充。做一个你感兴趣的项目,你可能会学到比上课更多的东西。实际应用永远是学习技能的最佳途径。
举个例子,我自己致力于将机器学习课程材料从 MatLab 翻译成 python 代码。我花了整整一个月的时间每天编写代码,搜索并掌握这门语言。我坚信这比我所学的任何课程都更有助于我掌握 python。你可以在这里阅读更多关于这个项目的信息。
开源代码库
如果你打算进入科技领域,拥有一份 GitHub 档案是必不可少的。您可以找到有用示例/起始代码,用于您想要构建的所有类型的应用程序,甚至用于有趣的项目。那么 GitHub 和学习 python 有什么关系呢?几乎一切。程序员从复制代码中学习,GitHub 就是一个伟大的代码库。从 GitHub 学习 python 有几种方法:
- 从他人处复制代码以在您的应用程序中使用
- 为他人开发您自己的包并获得反馈
- 为现有项目做贡献
这就是我如何在 6 个月内学会 python 的。你当然也能做到,请在评论区告诉我进展如何。
掌握另一种语言就拥有了第二个灵魂——查理曼
9 个月我是如何学会深度学习的
我的人工智能之旅与免费的 Udacity 纳米学位
在 Unsplash 上由 Hitesh Choudhary 拍摄的照片
有这么多的资源可以教你深度学习,如果你正在阅读这篇文章,你可能会想知道你应该追求哪一个。
我写这篇文章是为了分享我参加的课程,它不仅帮助我在大约 9 个月的时间里很好地掌握了深度学习,还让我成为了一个相互帮助成长的支持社区的一部分。
我来分享一下我的故事。
学习之旅
我之前记录了我在向数据科学学习数据科学的旅程,我惊讶于它与他人的共鸣程度。很多人告诉我,他们发现我的文章很有帮助,很有启发,所以接下来,我想分享一下我在深度学习方面的旅程。有兴趣的可以看下面我之前的文章。
如果你不知道从哪里开始
towardsdatascience.com](/how-i-learned-data-science-and-the-1-course-that-changed-everything-16912ccbab2b)
通过学习数据科学,我接触到了机器学习,这使我对深度学习和人工智能感兴趣。然而,我不知道如何才能学会它,因为它看起来太复杂了。
大约是在去年的这个时候,我发现了 Udacity 与贝塔斯曼一起创建的奖学金,接受者可以获得免费完成深度学习、数据分析或云计算纳米学位的机会。
边注:今年的奖学金刚刚开放,可以在这里 申请 。也可以在 Udacity 的奖学金页面 查看其他可用的。
我最终申请了奖学金,被录取了,并被授予深度学习纳米学位!
我来告诉你我是怎么做到的,它是如何帮助我学习深度学习的。
奖学金申请流程
第一步是申请奖学金。你要选择你想追求的赛道(AI,数据,还是云),所以我选择了 AI 赛道。作为申请流程的一部分,您必须回答一些问题,例如:
- 背景信息(您的个人信息和期望的课程)。
- 必备知识(您的编码经验水平)。
- 你的目标(参加奖学金项目的目的以及你将如何利用新获得的技能)。
- 技术问题(取决于您选择的曲目)。
不同的奖学金申请过程可能会有所不同,但这些是我必须回答的问题。
然后 Udacity 挑选了 15000 人参加挑战课程,我是其中之一!
挑战课程
既然选择了 AI 赛道,我做的挑战课程就是 PyTorch 课程 深度学习入门 *。*本课程教你深度学习的基础知识,以及如何使用 PyTorch 构建自己的深度神经网络。教学大纲包括:
- 深度学习简介
- PyTorch 简介
- 使用 PyTorch 进行深度学习
- 卷积神经网络
- 风格转移
- 递归神经网络
- 自然语言分类
- 使用 PyTorch 部署
我喜欢这门课程,因为它让我从基本的 Python/数据科学技能发展到能够实现自己的人工智能代码,可以对照片进行分类,生成文本和其他很酷的东西。他们还提供了训练/运行神经网络所需的所有笔记本,这使学习变得更容易。
萧条社区
获得纳米学位需要满足两个要求。
- 完成挑战课程。
- 松散的社区参与。
完成挑战课程
第一个要求很简单。
如果你每周花几个小时学习挑战课程,你应该能够在 3.5 个月的时间内完成。更不用说什么都不评分,所以确保你已经完成课程真的是你自己的事。从技术上来说,你可以点击浏览所有的课程,而不用完成它,但是这将我们引向第二个要求。
松散社区参与
Udacity 为奖学金计划的每个项目创建了一个宽松的工作空间,并希望学生参与其中。这一要求可能是为了确保人们不只是为了完成课程而点击课程,而是真正浏览材料。
那么参与是什么意思呢?
这意味着你必须帮助其他学生,无论是在技术上还是参与社区活动。
有许多方法可以做到这一点,包括:
- 回答学生关于课程的技术问题(例如,在空闲频道回答,撰写/分享媒体文章等)。
- 创建一个网上研讨会/演示,介绍你将如何解决课程问题。
- 启动资源回答常见问题。
- 为学生设计相互了解的计划(例如,开始一个问题线索并标记他人,分享故事并鼓励他人也这样做)。
- 制定计划来帮助学生理解课程材料(例如技术挑战、学习障碍和游戏)。
- 通过在渠道中发布激励信息来鼓励他人完成课程,并庆祝他人的成功。
- 发起一个关于你感兴趣的主题的学习小组(例如,基于位置的、医学的等等),并鼓励人们开始他们的项目。
- 分享你在课程中做的笔记。
- 在 Airtable、Github 或 Google Docs 上建立一个有用资源的数据库。
- 只要能帮助别人就行!
参与并不意味着:
- 只是喜欢别人的帖子。
- 评论低质量的回答,如:“感谢分享”,或“伟大的照片”。
- 重复别人已经分享过的答案。
- 为贡献而贡献,却没有真正帮助他人。
Udacity 定期澄清该计划的参与方面,并表示如果你每天花大约 15 分钟浏览 Slack 并回答人们的问题,或发布高质量的内容,那么你应该有很好的机会获得 nanodegree。
Udacity 如何衡量您的参与度?
Udacity 不共享这些信息。
许多人假设他们有一个 Slack 扩展,可以帮助他们可视化的尖子生,但这并没有得到证实,因为这些信息并没有提供给我们。他们衡量参与程度最可能的方式是通过他们的社区经理(CM ),他们也在 Slack 工作区。这些 CM 监控着频道的日常活动,并对那些不断为社区贡献高质量内容的学生有了很好的了解。
计划创新
你可以利用一些 Udacity 创建的计划来增加你的社区参与。
学生领袖
在挑战课程开始后不久,你的 CM 将发出一个学生领袖(SL)的号召。由于 Slack 社区如此之大,CM 很难跟踪所有的事情,这就是 SL 的用武之地。每个松弛渠道将有几个 SL,他们将致力于确保渠道的意图得以实现。SL 也被期望为他们被分配到的渠道创建计划。
例如,如果你是一个技术渠道的领导者,你将帮助回答技术问题,并提出倡议来帮助学生更好地理解/学习概念。
对我来说,我被选为#Introductions 频道的 SL,所以我的团队创建了一个挑战,让学生们分享自己的个人信息,以帮助更好地了解彼此。我们还组织了一个表格来收集每个人的社交媒体页面,以便进一步联系。
你创造的计划很大程度上取决于你自己,所以要有创造性!例如,我们创建了一个所有学生的图片拼贴,这有助于灌输一种社区意识。
mosaically.com
要成为学生领袖,你必须申请并被选中。申请过程的一部分将是分享你有什么领导经验,为什么你会是一个好的领导者,并选择你的渠道偏好。
学习堵塞
学习堵塞是一个一到两天的活动,SL 和其他学生志愿者花费大量时间帮助其他人完成课程材料。实际上,有一个 SL 专门负责组织学习聚会,他们的工作是计划活动,包括招募其他人来领导/组织网络研讨会、向我提问会议(ama)以及在当天的演示。活动前也需要做大量的工作来管理物流和营销,所以有很多方法可以参与进来。
这是一个非常好的获得一些参与积分的机会!
AMA 刘宇
每周都会有一个 AMA 会议,CM 会分配一个小时的时间来回答学生的任何非技术性问题。通常这些都是在 CM 工作的营业时间内,所以可能会根据他们的时区限制谁可以参加。然而,这是一个非常简单的方法来提高你的参与度,因为通常问题都很容易回答。许多问题也是重复的,因此你可以通过创建漂亮的帖子/指南来回答这些常见问题,从而进一步提高你的社区参与度。
一些学生甚至创造了一个机器人,可以自动转录所有的问题和答案,这样错过会议的人就可以参考它。
uda city 的 60 天
Udacity 鼓励学生每天学习,并在一个特殊的#60DaysOfUdacity 频道上记录他们的工作。
您可以记录您完成了课程的哪一部分或其他编码工作,甚至添加到您日常生活的各个方面。我看到许多学生分享激励性的故事/图片,这无疑增加了他们的参与,因为它激发了更多的对话。
关于社区参与乏力的思考
尽管不得不总是在空闲时间做贡献会变得乏味(我想我在空闲时间花的时间比挑战课程还多!),它仍然是一次无价的经历。我不仅交到了现在仍保持联系的朋友,而且每个人都愿意互相帮助学习和成长,这才是真正让这段经历难忘的原因。
由于参与的要求,每个人可能都开始互相帮助,但最终,他们继续下去,因为他们真的希望看到彼此成功,达到新的高度。我认为这个社区灌输给我一种帮助他人的奉献精神。
摘要
总而言之,获得纳米学位的关键在于:
- 保持一致。
- 总是帮助别人。
就是这样!
深度学习纳米学位
在我获得深度学习纳米学位后,我有大约 6 个月的时间来完成它。
教学大纲包括:
- 神经网络
- 卷积神经网络
- 递归神经网络
- 生成对抗网络
- 部署
你会注意到,nanodegree 有许多主题与【PyTorch 深度学习入门课程相同,所以当我登录时,许多课程实际上已经完成了。
挑战课程和纳米学位的区别
项目
除了纳米学位有新的课程,主要的不同是项目和 Udacity 评论者的评价。一旦你完成了一个项目,它会得到审查,你会得到反馈,以帮助你改善它。
项目包括:
- 预测自行车共享模式
- 犬种分类器
- 生成电视脚本
- 生成面
- 部署情感分析模型
如果你从 Udacity 的 Github 页面下载了挑战课程的所有内容,你实际上就可以访问上述项目的材料。因此,即使你没有获得纳米学位,你仍然可以自己从事这个项目。
学生社区
你还可以访问 Udacity 平台上的学生社区,在那里你可以与其他攻读纳米学位的人交流并提出问题。它类似于 Slack 社区,但在我看来更缺乏组织性,所以我没有使用它。
问题论坛
最后,有一个论坛,在那里你可以发布问题,并让 Udacity 的导师回答这些问题,这非常有帮助。
走向
Slack 社区在挑战课程结束几周后关闭,每个人都对此感到沮丧,但其中一名学生创建了一个新的工作空间,以便我们可以在之后继续社区并保持联系。这个新的 Slack 社区直到今天仍然很强大!因此,这提供了另一个平台,我们可以在那里获得纳米级的帮助。
新 Slack 社区
不幸的是,我不能及时完成纳米学位,因为,生活发生了,但我能够保存一些内容,以便我可以按照自己的节奏更慢地工作。我期待着尽快与大家分享更多我从 nanodegree 中学到的项目!我还打算申请即将到来的 Udacity x Bertelsmann 奖学金,所以也许我们会在那里相遇?
包扎
这是一篇相当长的文章。如果你一路走到这一步。感谢您的阅读!
我一直想写这篇文章来分享如何获得 Udacity 奖学金/免费纳米学位。我希望通过分享我的经历和我采取的步骤,它将帮助你发现你自己的学习之路。
如果您有任何问题或意见,请在下面留下您的反馈。你也可以在 Linkedin 上关注我,或者在这里与我联系。
如何在任何赛车游戏中实现你的首次车道检测
在 Python 中使用这 5 个简单的编码步骤
图片来自 flickr 上的 bagogames
如今,ane 检测和控制已经成为许多车辆的常见功能。此外,这也是任何人朝着自动驾驶方向前进的基本起点。但对于大多数不从事自动驾驶或计算机视觉工作的人来说,从它开始可能看起来比实际情况更令人生畏。
在进行实际的车道检测时,需要进行大量的技术研究。在这种情况下,我们看到了一个实用的视角,因此任何感兴趣的人都可以毫不费力地尝试一下。该理论的详细链接仍在好奇者的相关章节中:那些不满足于实际应用并喜欢深入主题的人。
以下是您开始工作所需的一切:
- 沥青 8 空降:如果你是 Windows 10 用户,可以到 Windows 商店免费下载:https://www . Microsoft . com/en-us/p/asphalt-8-空降/9wzdncrfj12h?activetab=pivot:overviewtab
- Python 3.7:您可以安装最新版本的 Anaconda,大多数必需的包都已经捆绑好,随时可以使用。这里是下载最新版本的链接:【https://www.anaconda.com/products/individual
- OpenCV:这是一个主要针对实时计算机视觉的库。你可以在这里找到关于如何安装和使用它的文档:https://www.learnopencv.com/install-opencv3-on-windows/
既然我们需要的都有了,那就让我们切入正题吧!
第一步:找到进入游戏屏幕的方法
这个很简单。我做了一个快速的谷歌搜索,查看可以用来访问屏幕的 python 代码。这是一个非常棒的教程,我使用了其中的基本代码,并针对这个案例进行了修改:
[## 如何用 Python-HolyPython.com 捕捉你的屏幕
本 Python 教程解释了数字图像的基本原理。您将了解像素如何表示为…
holypython.com](https://holypython.com/how-to-use-imagegrab-of-cv2/)
如果我们直接运行代码,你会看到一个类似的结果,如下图所示。你会注意到颜色有点不同,屏幕速率导致一些滞后(这对于我们的目的来说是可以的)。
让我们在 OpenCV 文档的帮助下纠正颜色部分。cv2 中有一个参数使屏幕记录看起来像实际的颜色(或至少在我的视觉允许的范围内),即 COLOR_BGR2RGB,这是我在这里用于校正的颜色。还有,时间函数是用来得到屏幕速率的,大概 10 fps 左右,一点都不差!修改后的代码如下所示:
# import libraries
from PIL import ImageGrab
import cv2
import numpy as np
import time# for timing
last_time = time.time()# screen capture loop
while True:
screen = np.array(ImageGrab.grab(bbox=(0,40,800,700)))
print(f'the screen rate is {(1/(time.time()-last_time))}')
last_time = time.time()
cv2.imshow('Python Window', cv2.cvtColor(screen, \
cv2.COLOR_BGR2RGB)) if cv2.waitKey(25) & 0xFF == ord('q'):
cv2.destroyAllWindows()
break
为了让上面的代码正确地捕获屏幕,我将游戏窗口最小化到主显示器的左上角,尺寸为 800 x 700。你可以在你的代码中适当地调整它(通过改变上面的 ImageGrab 中的 bbox ),特别是当你使用多个监视器的时候。
一旦运行此命令,您将获得如下屏幕截图:
这种截屏方法非常方便,特别是当我们需要为机器学习用例生成图像时。
现在我们可以捕捉游戏窗口,我们可以进入下一步。
步骤 2:用于边缘检测的图像处理
由于车道检测基本上是从图像中识别边缘,所以您必须处理图像以实际获得主要轮廓。计算视觉处理中最常用的方法之一是用于边缘检测的 Canny 算法。它基本上从图像中提取并保留有用的结构信息,同时大大减小了它的大小。
Open CV 有一个简洁的 Canny 边缘检测的小实现。这进一步降低了图像的复杂性,我们用三行代码就可以得到图像的边缘。
让我们使用 cv2 中的 Canny 实现创建一个小函数来处理图像。您可以通过查看文档来试验各种阈值,代码如下所示:
# canny image processing for detecting edgesdef edgeprocessed(image):
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edgeprocessed_img = cv2.Canny(gray_image, \
threshold1 = 200, threshold2 = 300) return edgeprocessed_img
我们必须在图像捕捉循环中再次运行处理过的图像,因此将该循环定义为一个函数以考虑作为输入的处理更有意义。我在这里有点超前了,将它修改为以列表形式输入的通用函数,这在分析中会更有意义。
def screen_capture(processing = None):
# takes in a list for type of processing
# [processing_function, masking_function]
last_time = time.time()
while True:
screen = np.array(ImageGrab.grab(bbox=(0,40,800,700)))
count = 0
if processing is not None:
for i in processing:
count += 1
processed_screen = processing[0](screen) if count > 1:
masked_screen = processing[1] \
(processed_screen,[vertices]) screen_1 = masked_screen
else:
screen_1 = processed_screen
else:
screen_1 = screen
cv2.imshow('Python Window 2', screen_1)
cv2.imshow('Python Window', cv2.cvtColor(screen, \
cv2.COLOR_BGR2RGB))
print(f'the screen rate is {(1/(time.time()-last_time))}')
last_time = time.time()
if cv2.waitKey(25) & 0xFF == ord('q'):
cv2.destroyAllWindows()
break
现在使用该功能会好得多。在下一节中,您将会看到我为什么这样构造函数。到那时,让我们检查边缘处理的结果。
screen_capture([edgeprocessed])
这是你将会看到的:
我们几乎可以从游戏屏幕上获得物体的边缘。这是我在游戏中的测试跑道上尝试时的样子:
正如您所注意到的,图像中仍然有太多不需要的信息。树木、岩石、电线,基本上是道路地平线以上的一切。更不用说游戏本身的覆盖控件显示了。如果我们想把注意力集中在车道上,我们必须找到一种方法,以某种方式过滤掉或掩盖其余的图像线。
步骤 3:从图像中屏蔽附加信息
为此,让我们定义一个掩蔽函数。我们需要的是定义一个多边形来屏蔽图像中的所有信息,除了让我们关注车道的区域。这是一个非常基本的方法,在这种情况下,我用一点试错法定义了我需要的精确区域的顶点,如下图所示:
所需的区域函数使用一个遮罩帧和一个带顶点的多边形。蒙版和多边形的交集只给了我们所需的图像部分。函数和顶点(如上定义)如下所示:
def required_region(image, vertices):
mask = np.zeros_like(image) # black image
cv2.fillPoly(mask, vertices, 255) # fill within vertices
masked = cv2.bitwise_and(image, mask) # intersection
return maskedvertices = np.array([[120,500],[120,400],[150,330],[650,330], \
[680,400],[680,500],[260,500],[260,450], \
[325,370],[475,370],[540,450][540,500]], \
np.int32)
现在,我们也可以用这些输入运行屏幕捕获功能。
screen_capture([edgeprocessed, required_region])
并且,结果如下:
正如你现在注意到的,我已经去掉了所有不必要的信息,除了车道。对于一个基本级别的代码,我要说这是非常整洁的!
但是我们还没有完全实现。
第四步:用霍夫线寻找线条
为了找到实际的几何线,我们需要对边缘处理后的图像进行某种变换。在这种情况下,我在 Open CV 中使用了霍夫变换实现。为了正常工作,图像在作为 Hough 变换的输入之前必须被模糊一点。在这种情况下,我使用了来自 Open CV 的高斯模糊。
此外,需要在图像帧上绘制检测到的线。所以我又定义了一个函数来覆盖帧上检测到的线。
修改的覆盖线和边缘处理代码是:
def overlay_lines(image, lines):
for line in lines:
coordinates = line[0]
cv2.line(image,(coordinates[0],coordinates[1]), \
(coordinates[2],coordinates[3]),[255,255,255],3)def edgeprocessed(image):
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edgeprocessed_img = cv2.Canny(gray_image, threshold1 = 200,\
threshold2 = 300)
edgeprocessed_img = cv2.GaussianBlur(edgeprocessed_img,(5,5),0)
lines = cv2.HoughLinesP(edgeprocessed_img, 1, np.pi/180, \
180, np.array([]), 100, 5)
overlay_lines(edgeprocessed_img, lines)
return edgeprocessed_img
如您所见,这一点也不差,而且只需要几行代码!我们快到了。
第五步:获取车道
在前面的步骤中检测到了各种线条。我们必须找到一种方法,以某种方式合并它们,这样我们就可以得到实际的车道。这有点复杂,我在网上查阅了一些资源,看看是否有更简单的方法。我在 Github 项目这里中发现了一个很棒的绘制车道函数,我在这里直接使用了这个函数(代码太长,所以没有在下面添加,但是你可以参考我在 Github 中的项目笔记本,链接在最后)。所有需要做的就是修改边缘处理函数如下:
def edgeprocessed(image):
original_image = image
gray_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY)
edgeprocessed_img = cv2.Canny(gray_image, threshold1 = 200, \
threshold2 = 300)
edgeprocessed_img = cv2.GaussianBlur(edgeprocessed_img,(5,5),0)
edgeprocessed_img = required_region(edgeprocessed_img, \
[vertices])
lines = cv2.HoughLinesP(edgeprocessed_img, 1, np.pi/180, 180, \
np.array([]), 100, 5)
#overlay_lines(edgeprocessed_img, lines)
m1 = 0
m2 = 0
try:
l1, l2, m1, m2 = draw_lines(original_image,lines)
cv2.line(original_image, (l1[0], l1[1]), \
(l1[2], l1[3]), [0,255,0], 30)
cv2.line(original_image, (l2[0], l2[1]), \
(l2[2], l2[3]), [0,255,0], 30)
except Exception as e:
pass try:
for coords in lines:
coords = coords[0]
try:
cv2.line(edgeprocessed_img,
(coords[0], coords[1]),
(coords[2], coords[3]), [255,0,0], 2)
except Exception as e:
print(str(e))
except Exception as e:
passreturn edgeprocessed_img,original_image, m1, m2
并相应地对捕获功能进行了一些调整:
def screen_capture(processing = None):
# takes in a list for type of processing
# [processing_function, masking_function]
last_time = time.time()
while True:
screen = np.array(ImageGrab.grab(bbox=(0,40,800,700)))
count = 0
if processing is not None:
for i in processing:
count += 1
processed_screen ,original_image, m1, m2 = \
processing[0](screen) if count > 1:
masked_screen = processing[1] \
(processed_screen,[vertices]) screen_1 = masked_screen
else:
screen_1 = processed_screen
else:
screen_1 = screen
cv2.imshow('Python Window 2', screen_1)
cv2.imshow('Python Window', cv2.cvtColor(screen, \
cv2.COLOR_BGR2RGB))
print(f'the screen rate is {(1/(time.time()-last_time))}')
last_time = time.time()
if cv2.waitKey(25) & 0xFF == ord('q'):
cv2.destroyAllWindows()
break
瞧啊。
screen_capture([edgeprocessed])
正如你所看到的,仍然有更多的调整和微调可以做。但作为入门学习项目,这是一个很棒的应用程序!
有趣的是,整个事情现场工作!您可以在运行代码的同时玩游戏和检测车道。这给了我们很多可能性,比如为 ML 保存图像,游戏控制等等。我将在以后的文章中探讨这个问题。
就这样,伙计们!我希望你在这 5 个简单的步骤中实现了车道检测。Jupyter 笔记本可以在这个 链接 中找到。
请随意使用和修改代码,如果您有任何有趣的调整、结果或想法,请告诉我。快乐学习!