㈠ 我的第一份数据科学实习
我的第一份数据科学实习
在写本文时,这是我在Quantum Inventions公司实习的最后一天。当我坐在电脑屏幕前,反思过去几个月的学习历程,我感到非常的满足。
在实习即将结束时,萦绕在我脑中的问题是:我学到了些什么?这是我想要的吗?
作为一名物理学家,我习惯通过推理解答问题从而来寻求真相。事实上,对数据科学家来说,问合适的问题也是至关重要的。
本文分为三个部分:实习前,实习期间,实习后。当中记叙了在这段经历中我所得到的收获。也欢迎阅读我上一篇文章《我是如何从物理学转行到数据科学领域》。
实习前
我仍然清楚地记得,在2017年11月的期末时我开始阅读《统计学习导论:基于R应用》(An Introction to Statistical Learning?—?with Applications in R)。这是第一次接触到基础的机器学习知识。
一旦掌握了这些概念之后,我就开始学习热门的课程Coursera上吴恩达的《机器学习》。虽然刚开始的时候并不那么轻松,但是吴恩达能够吸引人们的注意力,用简单的方式解读复杂的概念。这也许就是我喜欢上机器学习的原因之一。我也强烈建议你试试,机器学习并没有听上去那么高大上和复杂。
同时,我开始学习人工智能的另一个重要领域——深度学习。
在掌握了一定的基础知识之后,我在2017年12月开始了我的第一份数据科学实习。
实习期间
Quantum Inventions专注于向消费者、企业和政府智能交通服务。我是第一位加入研发和分析团队的数据科学实习生。
在刚开始的几天,我认识到了许多出色的同事,接触到许多行业术语以及正在进行的项目。在这次实习中,Quantum Inventions给了我足够的信任和自由,让我能够选择感兴趣的项目,并为其而努力。
令我吃惊的是,目前我着手的这个项目是之前没有人做过的。这时就需要大量的研究,存在许多不确定性和困难,但是我仍然乐在其中。为什么呢?很简单,因为我能够有机会从头开始体验整个数据科学工作流程。
下面我将列出我所经历的工作流程,在这一过程中为我进入数据科学领域打下了一定的基础。希望能够给你带来一些帮助。
1. 了解业务问题
我所选的项目是预测短期高速公路行程时间。正如我所说的,提出合适的问题对数据科学家来说非常重要。 在项目完成前,需要提出大量的问题,从而了解实际的业务问题:可用的数据源,项目的最终目标等等。我们的目标是更准确地预测新加坡高速公路行程时间。
2. 收集数据源
我对新项目感到十分兴奋,然后我开始从数据库等渠道收集数据源。收集正确的数据源类似在不同网站抓取数据,以便稍后进行数据预处理。这一过程非常重要,这可能会影响你在后期建立模型的准确性。
3. 数据预处理
真实世界的数据并不那么理想。我们不能期望会获得Kaggle比赛中那样格式良好且干净的数据。因此,数据预处理(也称为数据管理或数据清理)至关重要。该过程占到整个工作流程的40%-70%,对提供给模型的数据进行清理。
Garbage in, Garbage out。(无用输入,无用输出)
我喜欢数据科学的一点在于,你必须对自己诚实。如果你没有把握,认为预处理的数据已经足够干净,并可以提供给模型,那么将存在使用错误数据构建模型的风险。换句话说,你需要从专业的角度质疑自己,确认数据是否可以使用。严格用阈值检查数据,确认整个数据集中是否存在其他异常、缺失或不一致的数据。
我对这个过程格外谨慎,之前我仅仅因为预处理步骤中的小疏忽就给模型提供了错误的数据。
4. 建立模型
经过一番研究,对于项目我提出了以下四个模型:支持向量回归(SVR),多层感知器(MLP),长期短期记忆网咯(LSTM)和状态空间神经网络(SSNN)。
对于还在学习在线课程的我来说,从头开始构建不同的模型无疑是十分困难的。幸运的是,Scikit-learn and Keras拯救了我,因为它们很容易学习,能够快速构建原型模型,并用Python进行编写。此外,我还学习了如何使用多种技术优化模型,并调整每个模型的参数。
5. 模型评估
为了评估每个模型的性能,我主要使用了以下指标:
· 平均绝对误差(MAE)
· 均方误差(MSE)
· 测定系数(R2)
在这个阶段,重复步骤3-5(可互换),直到得出的最佳模型能够超越基线估计。
实习后
这次实习加深了我对数据科学领域的热爱,这段经历为我之后的工作也提供了一些动力。我也大大提高了自身的能力,比如与不同人群进行利益的沟通技巧,利用数据解决业务问题等等。
数据科学行业还是一个新兴领域,对于我们这些求职者来说,有时当中的一些工作描述可能有些模棱两可。因此在求职时,发现自己不具备岗位所需的全部技能是完全正常的,因为大多数工作描述都是按照理想的方式写的,从而符合雇主的期望。
当在学习或工作中遇到疑问时,你可以从在线课程、书籍和文章中进行学习,这也是我仍在做的,并通过个人项目或实习来应用所学到的知识。请耐心一点,学习的过程需要大量的精力和时间。
在最后,记得问自己:你学到了什么?这是你要的吗?
㈡ python好学吗
有网友点评说:
Python语言本身是比较容易的,楼主说的难应该指programming本身。
不觉得非计算机专业出身就学不好编程,我就是学通信的,学Python全凭兴趣。平时用Python干各种脏活累活,数值计算、数据处理、复杂文本处理、数据库导入导出excel、网上抢票、Web数据抓取、消息推送、DHT网络爬虫、Kodi插件、Web自动化测试、网盘下载、云点播。甚至有次日记软件密码忘了,都是通过py+autoit暴力破解出来的。
我的win、debian、mac上面一般都会开一两个ipython,临时处理各类杂务。简单来说,Python现在就是我日常生活的一部分。我不是专业程序员,也没用Python做过什么大项目,只是每天享受Python带来的便捷与快乐。
楼主所说的不能深入理解,其实是不愿意花时间钻研。用了十几年Python,现在也要一直翻看官方文档和一些第三方mole的文档,不断把遇到的问题弄懂弄透,学习不就是这个过程么?
我觉得楼主对Python无爱,对编程无爱,那就没必要强迫自己填鸭式“学习”了。
另外一个建议,练习时尽量不要后在现有demo基础上改,从头开始写起,遇到问题一个个查清,这样才能学到东西。
接收到这个小伙伴的答案,我内心开始反思,其实他说得都对的3个点是:
1.其实本身我对编程是不热爱的,只是因为需要;
2.其实本身我是对Python更上层可以用来做什么是不清楚的,思维还是在机械的完成一个Python习题;
3.其实我本身对编程的难度是小悄了的,Python简单是相对于C、Java等语言。
说到这里,不知道看到本文的小伙伴有几个有类似的心理映射,如果你是上面的状态,那你学习Python一定是难的。
下面我们来看看另外一位学习者的建议:
python是一门简单易学,容易理解,分分钟就可以掌握的语言,我也是学了大概一两个星期吧,就开始做项目了,嘻嘻!!!
这里有一个很严重的问题,,我在学python之前,做过3点的C#,一年的php和一年的java!
所以呢,我想说的是,如果你对编程不那么敏感,就需要时间来弥补了,那些什么书啊,公开课啊,我觉得都是辅助的,你要是不经历几个项目,怎么知道python为什么容易学,怎么知道python好理解,怎么知道python有哪些超级好用的框架,比如django,tonado之类的。
所以呀,编程没有捷径,你甭想通过看。。。就学会,写起来才是最重要的!
最终通过对学习Python这件事,我总结了几点关于学习Python的建议,希望跟大家一起分享:
1.编程语言是一回事,但更重要的是编程思想,不要把应试教育的思想带到这里面来,并不是所有的知识都能靠“五年高考三年模拟”来掌握;
2.自己找个想用程序解决的任务,然后自己边学边完成。
3.没有编程基础的人新学一门语言一定一定要有耐心,基础知识没有半年以上的学习和练习是很难彻底掌握的,千万不要图快,学的太快或许会有一时的成就感,但基础知识不扎实终将会成为你前进道路上的瓶颈,不仅学新的知识一知半解,工作时也会磕磕绊绊。
4.没有计算机基础,不管学什么语言都会有点吃力的,python语法比较简单的。
5.现在要做的就是把错误犯下100遍,那你就拿下这个Get了!
祝你学习Python之路愉快。
知乎网友任泉经典评论:
说Python简单的都是程序员或者半程序员,说其实还是很困难的都是有需求但并非依赖性的业余爱好者。
Python的简单,是相对于C++的简单,而不是相对于Word、Excel的简单。它再接近自然语言,也有语法,也有数据结构,也有编程思想,而这些对于“业务爱好者”来说就等于“难”。
想要不难也很容易,保证自己每天都会去使用它就好了,每天不管是看书学习也好,照着案例敲代码也好,针对需求写个小程序也好,一定要每天用,直到自己习惯语法,习惯数据结构,习惯编程思想为止,到那个时候,你就变成了半个程序员。
想以一周一两次,甚至更低的频率来学习编程,无论你内心多么热爱,无论这门语言多么简单,都是学不会的,更别谈学好了。