加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

数据科学家易犯的十大编码错误,你中招了吗?

发布时间:2019-05-06 00:40:59 所属栏目:建站 来源:机器之心编译
导读:数据科学家比软件工程师善于统计,又比统计学家善于软件工程。听起来牛逼轰轰,究竟却是,许大都据科学家有统计学配景,却没有什么软件工程方面的履历,因此在编码时轻易犯一些简朴的错误。作为一名高级数据科学家,本文作者总结了他在事变中常见数据科学
副问题[/!--empirenews.page--]

数据科学家比软件工程师善于统计,又比统计学家善于软件工程。听起来牛逼轰轰,究竟却是,许大都据科学家有统计学配景,却没有什么软件工程方面的履历,因此在编码时轻易犯一些简朴的错误。作为一名高级数据科学家,本文作者总结了他在事变中常见数据科学家犯的十大错误。

数据科学

我是一名高级数据科学家,在 Stackoverflow 的 python 编码中排前 1%,并且还与浩瀚(低级)数据科学家一路事变。下文列出了我常见到的 10 个错误。

1. 没有共享代码中引用的数据

数据科学必要代码和数据。所觉得了让其他人可以或许复现本身做出来的功效,你必要提供代码中涉及的数据。这看起来很简朴,但很多人会健忘共享代码中必要的数据。

  1. import pandas as pd 
  2. df1 = pd.read_csv('file-i-dont-have.csv') # fails 
  3. do_stuff(df) 

办理方案:用 d6tpipe 共享代码中的数据文件,可能将数据文件上传到 S3/网页/Google 云等,还可以将数据文件生涯到数据库中,以便收件人检索文件(但不要将数据添加到 git 中,这一点后头的内容会讲到)。

2. 硬编码其他人无法会见的路径

和错误 1 相同,假如硬编码其他人无法会见的路径,他们就没法运行你的代码,并且在许多处所都必必要手动修改路径。Booo!

  1. import pandas as pd 
  2. df = pd.read_csv('/path/i-dont/have/data.csv') # fails 
  3. do_stuff(df) 
  4. # or  
  5. impor os 
  6. os.chdir('c:Usersyournamedesktoppython') # fails 

办理方案:行使相对路径、全局路径设置变量或 d6tpipe,这样其他人就可以等闲会见你的数据了。

3. 将数据和代码混在一路

既然数据科学代码必要数据,为什么不将代码和数据存储在统一个目次中呢?但你运行代码时,这个目次中还会存储图像、陈诉以及其他垃圾文件。乱成一团!

  1. ├── data.csv 
  2. ├── ingest.py 
  3. ├── other-data.csv 
  4. ├── output.png 
  5. ├── report.html 
  6. └── run.py 

办理方案:对目次举办分类,好比数据、陈诉、代码等。参阅 Cookiecutter Data Science 或 d6tflow 项目模板,并用题目 1 中提到的器材存储以及共享数据。

  • Cookiecutter Data Science:https://drivendata.github.io/cookiecutter-data-science/#directory-structure
  • d6tflow 项目模板:https://github.com/d6t/d6tflow-template

4. 用 Git 提交数据

大大都人此刻城市版本节制他们的代码(假如你没有这么做那就是另一个题目了!)。在共享数据时,也许很轻易将数据文件添加到版本节制中。对一些小文件来嗣魅这没什么题目。但 git 无法优化数据,尤其是对大型文件而言。

  1. git add data.csv 

办理方案:行使题目 1 中提到的器材来存储和共享数据。假如你真的必要对数据举办版本节制,请参阅 d6tpipe、DVC 和 Git Large File Storage。

  • DVC:https://dvc.org/
  • Git Large File Storage:https://git-lfs.github.com/

5. 写函数而不是 DAG

数据已经接头得够多了,接下来我们谈谈现实的代码。你在学编程时,起首学的就是函数,数据科学代码首要由一系列线性运行的函数构成。这会激发一些题目,详情请参阅「4 Reasons Why Your Machine Learning Code is Probably Bad。」

地点:

https://towardsdatascience.com/4-reasons-why-your-machine-learning-code-is-probably-bad-c291752e4953

  1. def process_data(data, parameter): 
  2.     data = do_stuff(data) 
  3.     data.to_pickle('data.pkl') 
  4. data = pd.read_csv('data.csv') 
  5. process_data(data) 
  6. df_train = pd.read_pickle(df_train) 
  7. model = sklearn.svm.SVC() 
  8. model.fit(df_train.iloc[:,:-1], df_train['y']) 

办理方案:与其用线性链接函数,不如写一组有依靠相关的使命。可以用 d6tflow 可能 airflow。

6. 写 for 轮回

和函数一样,for 轮回也是你在学代码时最先学的。这种语句易于领略,但运行很慢且过于冗长,这种环境凡是暗示你不知道用什么更换向量化。

  1. x = range(10) 
  2. avg = sum(x)/len(x); std = math.sqrt(sum((i-avg)**2 for i in x)/len(x)); 
  3. zscore = [(i-avg)/std for x] 
  4. # should be: scipy.stats.zscore(x) 
  5. # or 
  6. groupavg = [] 
  7. for i in df['g'].unique(): 
  8.     dfdfg = df[df[g']==i] 
  9.     groupavg.append(dfg['g'].mean()) 
  10. # should be: df.groupby('g').mean() 

办理方案:NumPy、SciPy 和 pandas 都有向量化函数,它们可以处理赏罚大部门你认为必要用 for 轮回办理的题目。

7. 没有写单位测试

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读