构建端到端数据科学项目,从我的Data Scientist Ideal Profiles项目中学习(附链接)

大数据文摘授权转载自数据派THU


Medium上一位作者完成了一项全周期数据科学项目,从爬取数据到可视化全部都有,下面是作者记录的整个过程和自己的心得,大家一起来学习一下吧~


人们常说,数据科学家的主要工作不是实际的分析和建模,而是数据的整理和清理部分。因此,涉及这些阶段的全周期数据科学项目将更有价值,因为它们证明了作者独立处理真实数据的能力,而不是使用给定的干净数据集。


完全理解端到端数据科学项目的价值,我一直想建立一个例子,但直到现在还不能建立。


我最近完成了我的Ideal Profiles项目(链接:https://towardsdatascience.com/what-does-an-ideal-data-scientists-profile-look-like-7d7bd78ff7ab)。因为这是一个涉及许多运动部件的重大项目,所以我想记录过程和经验教训,这是一个进一步的学习机(受到威廉·科赫森(链接:https://medium.com/@williamkoehrsen)关于数据科学写作价值的伟大文章的启发)。


各阶段


我认为,全周期数据科学项目应包括以下几个阶段:


在Kaggle项目上工作的最大的争论是它只专注于第二阶段。因此,在这个项目中,我将确保涵盖所有三个阶段。


在第一阶段,我做了网络抓取来获取数据,由于数据是脏的,所以我不得不整理数据进行分析。然后我做了各种数据可视化,并在第二阶段进行了分析。最后,我写了一些文章来发表结果并将这个项目投入生产。


当然,我可以通过包含一个机器学习组件使这个项目更加完整,例如,使用自然语言处理根据内容对工作岗位进行分类,但这将显著延迟项目完成时间,这将使我们进入下一个阶段:


迭代思维


对于一个给定的项目,可能有无限多的事情要处理,但实际上,我们只有有限的时间。为了协调这两个竞争因素,我们需要有纪律。


对我来说,“迭代思维”确实有帮助——看,罗马不是一天建成的,所以让我们先构造一些有用的东西,然后将其交付,然后我们总是可以回来改进更多的特征。另一方面,这也意味着我们需要能够处理“不完美”,而不是专注于细节。


考虑到这一理念,我能够延迟一些非常诱人的特征,并将它们放在项目文档的待办事项部分(链接:https://github.com/georgeliu1998/ideal_profiles#to-dos)。其中之一是使用更大的来自美国而不是加拿大的网站上的数据集。


模块化


鉴于项目的端到端的特性,我们有很多不同方面的工作:网络抓取,数据预处理,绘图……如果我们把所有的代码在一个Jupyter Notebook,它会过于大且复杂而不能处理。于是我决定使用Python脚本和一个中心Jupyter Notebook解决这个问题。


我将支持函数分为三大类,并将它们封装在三个相应的脚本中:


  • scrape_data.py-包含Web抓取所需的函数,如“get_soup()”和“get_urls()”。

  • process_text.py-包含文本处理和清除函数,如“tokenize_text()”和“check_freq()”

  • helper.py-包含文件输入输出和绘图函数,例如“plot_skill()”


这样,我就可以保持一个超轻且有组织的中心Notebook。然后根据需要从Notebook中导入和调用函数,如下所示:




from scrape_data import *from process_text import *from helper import *


可复制性


由于我在网上发现的许多抓取脚本都不起作用,我决定确保我的项目是可复制的。除了可靠的代码之外,一个健壮的README文件和一个完整的环境依赖文件也是解决方案的一部分。


  • readme.md-我努力确保捕获所有相关细节,特别是如何设置环境和如何使用脚本。

  • env_Ideal_profiles.yaml-通过将所有依赖项冻结到此文件中,我确保用户可以完全重新创建我使用的同一Anaconda python环境。此处提供更多信息(链接:https://conda.io/docs/user-guide/tasks/manage-environments.html)。


代码最优练习


良好的编码实践很重要!特别是,我发现以下实践在编写更大更复杂的项目时非常有用:


  • 具有有意义的描述性变量/函数名

  • 提供详细和结构化的文档字符串(链接:https://stackoverflow.com/questions/3898572/what-is-the-standard-python-docstring-format)

  • 确保使用python“try except”块处理异常


当你的项目是一个30行的Jupyter Notebook时,这些事情可能看起来微不足道,但是当你处理一个需要数百行代码的主要项目时,这些事情可能真的很关键!


厉害了Matplotlib


我过去只对基本的Matplotlib技巧感到满意。然而,对于这个项目,我不仅需要将几个图组合成一个,而且还必须进行详细的自定义,例如旋转轴标记标签……在这一点上,基本的Matplotlib技能将不再足够。


事实证明这是一个学习Matplotlib的好机会。一旦我知道它能做什么,我发现它不可能回头,仅仅是因为matplotlib真的很强大!它的面向对象方法允许您修改几乎所有内容…请查看以下教程以了解:


  • Matplotlib教程:Python绘图

    链接:https://www.datacamp.com/community/tutorials/matplotlib-tutorial-python

  • 高效利用Matplotlib

    链接:http://pbpython.com/effective-matplotlib.html

  • 使用Matplotlib绘制Python(指南)

    链接:https://realpython.com/blog/python/python-matplotlib-guide/


原文链接:

https://towardsdatascience.com/building-an-end-to-end-data-science-project-28e853c0cae3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值