从全栈工程师到数据科学家,入职第一年我都做了些什么?
大数据文摘出品
来源:codebuildrepeat
编译:徐玲、lin、夏雅薇
万事开头难,从一个软件开发程序员转型为数据科学家,第一年该怎么做?
一位博主就记录了自己从全栈工程师转h O Q行数据科学家第一年的心路历程,包括好的方面和不好的方面,希望能帮助到同样处境t n k ` + L的人i 6 F P a %。
我觉得自己非常幸运雇主给了我一个机会,让我从一个全栈软件开发人员转型变成数据科学家,和内部数据团队一起工作。
入职一年,我很享受这份工作Y ] a &给我带来的全新挑战,完全不同于以前做开发。我想写这篇文章,首先是为了回顾过去一年所做的事情:我经历的改变,我做得好的地方,我可以改u V U ` P进的地方。第二,通过记录我曾经遇到过的问题和挑战,我希望能帮助到和我处境{ V D P i v n相似的人。
在开始之前,我先介绍一下我的背景:我之前不是做软件开发的,我拥有计算机科学的硕士A T % = 7 ! 2学位和博士学位。因此,我不算冷启动,我有工具、模型和分析方法方面的相关经验。我从事开发工作将近8年。自从我的论文发表以后,我经历了很多变动。
本文将分为两部分。0 X ` Q R X w y 进展顺利的部分和进展不佳的部分。对于那些只对结果感兴趣的人,也可以拉到底直接看最后的结论。
进展顺利的方面
Python 和 R
刚开始,我不Z @ Y ^ @ 7 i v 8确定在项目中该使用Python或R。所以一开始我对这两种语言均作了研究学习,并在项目中结合使用了这两种语言。
R经常让我想起Matlab,两者在用来C ( S M 3编写和执行代码的界面非常像(我尝试了R Studio和Visual Studio的R插件),同时写代码和处理数据的X 0 h u q ]方法也很像。
但我只在硕士论文中z | & c | 5 # I 用了R,还在博士学位论文中用了一些。除此之外,R和其他编程语言相比(这些年来,我在软w ; W件开发中经常使用C#)就没什么共性了。R* K E x q 5 一开始没有意识到它对我的价值。当我意识g G _ ` ! X q W到SQL就是我的解决方案后,我花了很多时间来学习更多有关SQL的知识 | l 5 Z F +,因为我在做程序员的时候稍微学了一点SQL。? ) r
具体来说,我学习了如何查询数据(特别是我以前没接触过的高级语句)以及搭建和维护数据库的基础知识。我甚至通过了两个Microsoft SQL的考试。我现在主张尽可能用SQL。我把所有R / ( a ( - U S项目的数据都_ H x ^ V Q V ]存在了SQL数据库中,尽量在SQL中做数据查询和操作8 b K。
我的原则X C & ` - 5 I是:能在SQL中完成的处理,就在SQL中做。SQL处理不了的任务再用Python(例如,模型训练和执行)这里延伸出一个问题:你需要学会q y z #使用Python库,例如 SQLAlchemy,从 SQL读取数据到Pythop @ hn里。
现在我的后SQL生活变得容易很多:
- 所有项目数据存储在一个容易找到的地方。
- 没有重复代码用于读写文件。
- 我能快速查询数据并从数据中轻松得[ u [ R x `到统计F X H w @ I结果。
- 我能够很容易地查Z [ O D = 0 Z V看大量数据,特别是前几行的数据。
- 额外的好处是现在很容易把不同的数据联系起来,因为数据都已经m Z |在关系数z + w H k k L u据^ z U x r x上有潜在的风险。数据都在服务器里,安全很多。
因此,我强烈推荐学好SQL并用起来。
如何展示成果?
还有一个进展不顺利的地方是我做的3 . Y X 9一些展示。从开发人员到数据科学家的一个变化是,我做演示的场合变多。展示的内容各种各样,有面向技术人员的demo` 6 f演示,有面向业务相关人员的项目报告,再到c 5 $ o ~ %与公% 1 F r Y #司内部其他部门讨论项目工作,甚至向公司外部的第三方合作方展示工作。
对于这些人我觉得我没有做好的一点是我没有根据受众来调整自己的展示方3 } = U 8 法。有些展示我做得还不错,比如对开发人员的技术演示我觉得o B h & @ ? )我做得还不错。因为我跟技R l e f I术3 H W W / m | 0 P人员拥有差不多的背景所以说技术的内容彼此也听得懂,交流起来会更容易一些。其他类型的演示更难一些,不幸地1 ( ^ M Q是很多时候我在展示的时候才意识听众对我讲的内容不| ~ [ ! =是很在意。
我的受众分为四类,从展示的难易程度来分如下:从最简单的(最左边)开始,到最难的(最右边):开发人员,业务方,其他M % J ( 3 p + I K部门以及外部人员。
我还可以将最q Q { I Z左边的J m : p那些受众标记为最技术性p Y T J r ^ O +的,将右边的那些受众标w | A `记为更“销8 j B } m售型”的,当从左向右移动时,两者之y X %间会有一个过渡。我发现针对左边受众的展示是最容易准备的——他们对我正在使用的技术或所从事的业务领域有深刻的了解。
针对外部人员的演示是最难的,因为他们往往相关知识最少。过去,我与这些听众进行交流的时候会直接进入到技术细节,就像我和左边听众交流时一样,但是结果很不好,因为他们不一定具有任何数据科B 7 i学或机器学习的背景,G e ?所以我谈论许多概念对他们没有多大意义,他们不知道我在说什么。对这些受众来说,如果我花点时间介绍一下我正在做的工作以及更多的背景知识,效果会更好。m ~ w A Q O N q 9甚至 M g众来说,向他们介绍机器学习的概念,为什么我们D h b J E } q要使用它以及它的好处。 x d有时候,对我来说,不过多讨论技术细节反而是好事,给他们一些大概的框架概念就g $ t n d $好。I 8 { C 8 A
在反思了这一点之d 1 1 z ? c w ( |后,我现在在准备演示材料时,会更多地考虑我的目标受众。具体来说,我会考虑听众可能知道或不知道的内容,以及需要向他们呈现的内容,以帮助我准备需要讨论的内容和专业程度。这样他们就可以更好地理解我正在谈论什么=,并从演示中得到一些收获。为此,在准备演示文稿时我为自己准备了一些有用的问题,如下:
- 听众对于数据科学领域了Y ; F z解多少U a D _ A w }?
- 听众对于我试图解决的问题了解多少?
- 听众知道我在使用的技术吗?
- 听众对于我采用的技术细节或者结果感兴趣吗?
计划
与做程序员时相比,做数据数据家的工作计划更有挑战。作为开发人员,工作相对比较直接,所以也更好估算和排期。你通常知道你要实现的目标以及如何实现。当我还是一名开发人员的时候,我使用敏捷开发工具。
因此,工作内容可以先评估、计划,然后排V O c = V P 3 ^好优先级就开始做。在敏捷的方法论指导下,如d w i果工作没什么意义,或者你不清楚如何做,你就不会把它排进工作计划。因为无法评估,因为未知,你要等到所有不明确的地方明确后才开展工作。
数据科学的工作Q S ! ^ F V并, k - C不像这样简单,对于给定的问题你不会总是提前知道什么会起作用。也不会总是知道哪种类型的模型最准确。类似这样的情E a + A M 8 m R况与刚才提出的观点出现矛盾,当你是开发人员时,只有问题明确后,你才会把他们放入你的工作列表中。作为数据科学家,未知是你工作的一部分,因为你的工作d R l ; X v @ E T就是要回答这些问题。或者你正在处理的问题可能会随v G | H e v g着项目进. Z p L (展而改变。因此,有时候你提前做的几周计划可能很快要重新考虑。
在计划方面,我喜欢将开发工作视为线性的——你知道自己在做什么以及如何做。数据科学工作我觉得是分叉树,可k | $ N % 7能需要试不同的道路,可能会碰到死胡同。
数据科学家做短期工作计划还是可行的,比如你正在训练和测试的模型之类的—I 1 d—接下来一两周的工作,但是,长期计划很难做。你不可能总是提前知道什么会起作用,什么不会。所以我们才要进行实验和测试,这是数据科学家工作的核心价值。
最d C / Y H后,花点时间去做不一定会有成果的工作,即使不起作用,也没什么大不了的。
回答正确的问题
在过去一年中(这让我i ! v |栽过很多跟头),我发现数据科学 + 0 d )工作的关键部分是回答问题,但更重要的是回答正确的问题。
正如我所说,我栽过几次跟头,当时我F D y % M ^ / b正在回答一个问题,但并没有回答业务方实际想要回答的问题,之所以发生这种情况,是因为业务方使用的业务语言跟v t 6 G我用的的技术语言有差异,有时候我们用一样的词但要表达的意思却不同。
针对这问题我的解决方法是在做项目的实际工作(现在称为“项目前”工作)之前先做准备性工作,在这个阶段,我会从业务方那里收集初始需求和n ~ 3 q e 4 L S b信息。做一些初步分析,然后给业务方展示。
运用敏捷的工作思路,我希望在l $ 1 ! A每个sprint实现一个可交付的成功,并向业务方展示该成果。这样,我与业务方建立了一个有效的循环反馈机制,向他们展示一些东西并询问他们的意见,这可以建立一个有效对话,从而更清晰地定义真正要解决5 | _ X c B的问题。这个方法在项目各个阶段都有效,不仅仅是初始阶段。当你向业务方展示你的工作结果时,可能会激发他们不同的想法以及他们之前没有考虑[ ` k过的思路。从而你能找到他们真正的痛点w + : z。
所以过去一年来我发展的一项关键技能是与业务方的互动交流,深入挖掘他们真正想要的东西。
总结
Python比R更容易学习,因为对于程序员来说python与其他编+ K B , m ^ h O程语言更接近。
- 边执行边做文档
- 学习如何使用关系数据库,比如SQL,用数据库来查询,操纵和存储数据。
- 你需要准备很多展示,不仅是向项目业务方的报. y Z X告,还要向公司其他同事报告,甚至是公司外面的人。
- 你需要提高演讲能力以满足不同受众(技术或非技术)的需求。
工作计划不是一帆风顺的,因为你无法预知什么起作用什么无效,要有心理准备有时候花了时间不一定取得预想的结果。
花时间找你真正要解决的问题,不要不加思考就埋头开始做,与业r 4 q Y h 9 0 A u务方建立反馈闭环是很有必要的。
相关报道:
https://codebuildrepeat.blogspot.comG M M $ M 2 B d/2020/03/my-first-year-as-data-scientq + O l z 0 % .ist.html