微拍,代码排行榜前1%的数据科学家揭露了我们容易犯的10个代码错误!,胸闷是怎么回事

点击上方重视,All in AI我国

数据科学家是“比任何软件工程师都更拿手统计数据的人,而且比任何统计学家都更拿手软件工程”。许多数据科学家都有统计学布景,但在软件工程方面经历很少。我是一名高档数据科学家,在Stack爽死overflow上python代码排名前1%,我常常与许多(初级reward)数据科学家协作。这是咱们常常看到的10个常见过错列表。

1.不要同享代码中引证的数据

数据科学需求代码和数据。因而,为了让其他人能够重现您的成果,他们需求能够拜访数据。这似乎是一个很自然而然的工作,可是女性性交很多人忘掉用代码同享他们的数据。

import pandas as微拍,代码排行榜前1%的数据科学家揭露了咱们简单犯的10个代码过错!,胸闷是怎么回事 pd
df1 = pd.read_csv('file-i-dont-have.csv') # fails
do_stuff(df)

处理计划:运用d6tpipe与您的代码同享数据文件或上传到S3 / web / google驱动器等或保存到数据库,以便收件人能够检索文件(但不要将它们添加到git,拜见下面的内容)。

2.硬编码无法拜访的途径

与和离过错1相似,假如您对其他人无权拜访的途径进行硬编码,则他们无法运转您的代码而且有必要查看许多地方以手动更改途径。 Booo!

import pandas as pd
df = pd.read_csv('/path/i-dont/have/data.csv') # fails
do_stuff(df)
# or
import os
os.chdir('c:\\Users\\yourname\\desktop\\python') # fails

处理计划:运用相对途径、大局途径装备变量或d6tpipe使您的数据易于拜访。

3.将数据与代码混合

因为数据科学代码需求数据,为什么不将它转储到同一目录中?当你在做的时分,需求保存图画、陈述和其他废物,太多稠浊在一同的费事事儿了!

├──atata.csv
├──ingest.py
├──other-data.csv
├──output.png
├──report.html
└──run.py

处理计划会伴:将目录组织成如数据、陈述、代码等类别。请参阅Cookiecutter Data Science或d6tflow项目模板(请参阅#5),并运用#1中说到的东西来存储和同享数据。

4.Git运用源代码提交数据

大多数人现在操控他们的代码版别(假如你不这样做,那便是另一个过错了!!请参阅git)。在测验同享数据时,或许很简单将数据文件添加到版别操控中。这关于十分小的文件是能够的,可是git没有针对数据进行优化,尤其是大文件。

git add data.csv

处理计划:运用#1中说到的东西来存储和同享数据。假如您真的想要对数据进行版别操控,请参阅d6tpipe、DVC和Git大文件存储。

5.编写函数而不是DAG

上面关于数据的评论现已很多了微拍,代码排行榜前1%的数据科学家揭露了咱们简单犯的10个代码过错!,胸闷是怎么回事,让咱们南旭东博客谈谈实践的代码吧!因为您在学习编码时首要学到的榜首件事便是函数,因而数据科学代码主要由一系列线性运转的函数组成的。这会导致一些问题,请参阅为什么您的机器学习代码或许欠好的4个原因。

de馆官能奇谭f pr范荩ocess_data(data, parameter):
data = do_stuff(data)
data.宾利慕尚to_pickle('data.pkl')
data = pd.read_csv('data.csv')
process_data(data)
df_train = pd.re微拍,代码排行榜前1%的数据科学家揭露了咱们简单犯的10个代码过错!,胸闷是怎么回事ad_pickle(df微拍,代码排行榜前1%的数据科学家揭露了咱们简单犯的10个代码过错!,胸闷是怎么回事_train)
model = sklearn.svm.SVC()
model.fit(df_train.iloc[:,:-1], df_train['y'])

处理计划:数据科学代码不是线性链接函数,不如将数据科学代码编写为一组使命,并在这些使命之间树立依靠联系。运用d6tflow或风流。

6.写循环

与函数相同,for循环是学习编码时要学习的榜首件事。简单了解,但它们很慢,而且过于冗长,一般标明你不知道矢量化的代替计划。

x = range(10)
avg = sum(x)/len(x); std = math.sqrt(sum((i-avg)**2 for i i天天向商n x)/len(x融冰之旅宁波的博客));
zscore = [(i-avg)/std for淳 x]
# 重生之黄埔军魂should be: scipy.stats.zscore(x)
# or
groupavg = []
for i in df['g'].unique():
dfg = df[df[g']==i]
groupavg.append(dfg['g'].mean())
# should be: df.groupb微拍,代码排行榜前1%的数据科学家揭露了咱们简单犯的10个代码过错!,胸闷是怎么回事y('g').mean()

处理计划:Numpy、s龙青鲤cipy和pandas为您以为或许需求循环的大多数事物供给了矢量化函数。

7.不要写单元测验

跟着数据、参数或用户输入的改动,您的代码或许会中止,有时您不会注意到。这或许导致输出过错,假如有人根据您的输出做出决议,那么糟糕的数据将导致过错的决议计划!

处理计划:运用assert句子查看数据质量。 pandas有持平的测验,d6tstack有数据吸取查看,d6tjoin有数据衔接查看。代码示例数据查看:

assert df['id'].unique().shape[0] == len(ids) # ha微拍,代码排行榜前1%的数据科学家揭露了咱们简单犯的10个代码过错!,胸闷是怎么回事ve data for all ids?
assert df.isna().sum()<0.9 # catch missing values
assert df.groupby(['g','date']).size().max() ==1 # no duplicate values/date?
assert d6tjoin.utils.PreJoin([df1,df2],['id烫发发型','date']).is_all_matched() # all ids matched?

8.不要记载代码

有时分你会着急做一些剖析,把工作都挤在一同做,然后直接将成果交给了你的老板。一个星期后,当他们问你“你能改动xyz”或“你能更新吗”。这时分,你看看你的代码你现已不记得为什么这么做了。而咱们要做到的是,当有另一个人来运转的时分,也能够正常的运用。

de摩登情书在线阅览全文f some_complicated_function(data):
data = data[data['column']!='wrong']
data = data.groupby('date').apply(lambda x: complicated_stuff(x))
data = data[data['value']<0.9]
return data

处理计划:即便在您供给剖析之后,也要花费额定的时刻来记载您的所作所为。你会感谢自己,其他人也会感谢你这样做的!这样的你看起来更像专业人士!

9.将数据保存为csv或pickle

让咱们接着回到数据,毕竟是数据科学。就像函数和for循环相同,CSV和pickle文件是常用的,但它们实践上并不是很好。 CSV不包括架构,因而每个人都有必要再次解析数字和日期。 Pickles处理了这个问题但只能在python中运用而且不会被紧缩。两者都不是存储大型数据集的好格局。

def process_data(data, parameter):
data = do_stuff(data)
data.to_pickle('data.pkl')
data = pd.read_csv('data.csv')
process_data(data)
df_train = pd.read_pickle(df_train)

处理计划:对数据形式运用 parquet 或其他二进制数据格局,抱负情况下是紧缩数据的格局。 d6tflow主动将使命的数据输出保存为parquet,这样就不用处理它。余超颖

10.运用jupyter笔记本

让咱们以一个有争议的定论来完毕:jupyter笔记本和CSV相同遍及。很多人都运用它们,这并不能使他们变得更好。 Jupyter笔记本促进了上面说到的许多不良软件工程习气,特别是:

  1. 您很想将一切文件转储到一个目录中
  2. 您编写的代码运转自上而下,而不是DAG
  3. 您没有模块化您的代码
  4. 很难调试
  5. 代码和输出混合在一个文件中
  6. 他们没有很好的版别操控

它很简单上手,但规划很小。

处理计划:运用pycharm和/或spyder。坎特

Bio:作者Norman Niemer是一位大型财物办理公司的首席数据科学家,担任摸下体供给数据驱动的出资洞察力。他具有哥伦比微拍,代码排行榜前1%的数据科学家揭露了咱们简单犯的10个代码过错!,胸闷是怎么回事亚大学的金融工程硕士学位和伦敦卡斯商学院的银行和金融学士学位。

编译出品

评论(0)