1 数据科学家常犯的10个编程错误-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

数据科学家常犯的10个编程错误

电子工程师 来源:fqj 2019-05-24 14:50 次阅读

数据科学家是“比软件工程师更擅长统计学,比统计学家更擅长软件工程的人”。许多数据科学家都具有统计学背景,但是在软件工程方面的经验甚少。我是一名资深数据科学家,在Stackoverflow的python编程方面排名前1%,并与许多(初级)数据科学家共事。以下是我经常看到的10大常见错误,本文将为你相关解决方案:

不共享代码中引用的数据

对无法访问的路径进行硬编码

将代码与数据混合

在Git中和源码一起提交数据

编写函数而不是DAG

写for循环

不编写单元测试

不写代码说明文档

将数据保存为csv或pickle文件

使用jupyter notebook

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

数据科学需要代码和数据。因此,为了让别人可以复现你的结果,他们需要能够访问到数据。道理很简单,但是很多人忘记分享他们代码中的数据。

importpandasaspddf1=pd.read_csv('file-i-dont-have.csv')#failsdo_stuff(df)

解决方案:使用d6tpipe来共享你的代码中的数据文件、将其上传到S3/web/google驱动等,或者保存到数据库,以便于别人可以检索到文件(但是不要将其添加到git,原因见下文)。

2.对无法访问的路径进行硬编码

与错误1相似,如果你对别人无法访问的路径进行硬编码,他们将无法运行你的代码,并且必须仔细查看代码来手动更改路径。令人崩溃!

importpandasaspddf=pd.read_csv('/path/i-dont/have/data.csv')#failsdo_stuff(df)#orimportosos.chdir('c:\Users\yourname\desktop\python') # fails

解决方案:使用相对路径、全局路径配置变量或d6tpipe,使你的数据易于访问。

3.将代码与数据混合

既然数据科学的代码中包含数据,为什么不把它们放到同一目录中?那样你还可以在其中保存图像、报告和其他垃圾。哎呀,真是一团糟!

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

解决方案:将你的目录进行分类,比如数据、报告、代码等。请参阅Cookiecutter Data Science或d6tflow项目模板[见#5],并使用#1中提到的工具来存储和共享数据。

4.在Git中和源码一起提交数据

现在,大多数人对他们的代码使用版本控制(如果你不使用,那就是另外一个错误,请参阅git:https://git-scm.com/)。在尝试共享数据时,很容易将数据文件添加到版本控制中。当文件很小时是可以的,但是git并没有针对数据进行优化,尤其是大文件。

gitadddata.csv

解决方案:使用第1点中提到的工具来存储和共享数据。如果你真的希望对数据进行版本控制,请参阅d6tpipe,DVC和Git大文件存储。

5.编写函数而不是DAG

关于数据部分已经够多了,现在来谈一谈实际的代码!在学习编程时最先学习的内容之一就是函数,数据科学代码通常由一系列线性运行的函数组成。

这会导致一些问题,请参阅“为什么你的机器学习代码可能不好的4个原因”:

defprocess_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)model=sklearn.svm.SVC()model.fit(df_train.iloc[:,:-1],df_train['y'])

解决方案:数据科学代码不是一系列线性连接的函数,而是一组具有依赖关系的任务集合。

6.写for循环

与函数类似,for循环也是你学习编程时最初学习的内容。它们易于理解,但是运行缓慢且过于冗长,通常意味着你不了解矢量化的替代方案。

x = range(10)avg=sum(x)/len(x);std=math.sqrt(sum((i-avg)**2foriinx)/len(x));zscore=[(i-avg)/stdforx]#shouldbe:scipy.stats.zscore(x)# orgroupavg=[]foriindf['g'].unique():dfg=df[df[g']==i]groupavg.append(dfg['g'].mean())#shouldbe:df.groupby('g').mean()

解决方案:Numpy,scipy和pandas为你需要for循环的情况提供了矢量化函数。

7.不编写单元测试

随着数据、参数或用户输入的改变,你的代码可能会出现问题,有时你并没有注意到。这可能会导致糟糕的输出结果,而如果有人基于你的输出做出决策,那么糟糕的数据将会导致糟糕的决策。

解决方案:使用assert语句来检查数据质量。pandas有相等测试,d6tstack有数据提取检查以及用于数据连接的d6tjoin。

以下是数据检查的示例代码:

assert df['id'].unique().shape[0] == len(ids) # have data for all ids?assertdf.isna().sum()<0.9 # catch missing valuesassert 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.不写代码说明文档

我明白,你急着做出一些分析结果。你把事情汇总到一起分析,将结果交给你的客户或老板。一个星期之后,他们回来说,“可以把XXX改一下吗”或者“可以更新一下这里吗”。你看着你的代码,但是并不记得你当初为什么这么写。现在就像是在运行别人的代码。

defsome_complicated_function(data):data=data[data['column']!='wrong']data=data.groupby('date').apply(lambdax:complicated_stuff(x))data=data[data['value']<0.9] return data

解决方案:即使在你已经提交分析报告后,也要花费额外的时间,来对你做的事情编写说明文档。以后你会感谢自己,别人更会感谢你。那样显得你很专业!

9.将数据保存为csv或pickle文件

回到数据,毕竟是在讲数据科学。就像函数和for循环一样,CSV和pickle文件很常用,但是并不好用。CSV文件不包含纲要(schema),因此每个人都必须再次解析数字和日期。Pickle文件解决了这个问题,但是它只能在python中使用,并且不能压缩。两者都不是存储大型数据集的最优格式。

defprocess_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 notebook

最后一个是颇有争议的错误:jupyter notebook和csv文件一样普遍。许多人使用它们,但是这并不意味着它们很好。jupyter notebook助长了上述提到的许多不良编程习惯,尤其是:

把所有文件保存在一个目录中

编写从上至下运行的代码,而不是DAG

没有对代码进行模块化

很难调试

代码和输出混在一个文件中

没有很好的版本控制

它容易上手,但是扩展性很差。

解决方案:使用pycharm和/或spyder。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程
    +关注

    关注

    88

    文章

    3614

    浏览量

    93685
  • 函数
    +关注

    关注

    3

    文章

    4327

    浏览量

    62567

原文标题:数据科学家常犯的 10 个编程错误

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    关于C语言编程常犯错误汇总

    17C语言新手编程常犯错误及解决方式
    的头像 发表于 06-26 09:19 6134次阅读
    关于C语言<b class='flag-5'>编程</b>时<b class='flag-5'>常犯</b>的<b class='flag-5'>错误</b>汇总

    TI科学家谈浮点DSP未来发展

    TI科学家谈浮点DSP未来发展 自十多年前浮点数字信号处理器(DSP)诞生以来,便为实时信号处理提供了算术上更为先进的备选方案。不过,定点器件至今仍是业界的主流--当然低成本是主要原因。定点DSP每
    发表于 11-03 15:18

    科学家推出多种波动描记传感器

      美国得克萨斯大学的科学家们最新一项研究结果表明,人们很快将根据肠子的波动情况当场揭穿骗子的谎言。  该大学的科研小组还认为,将来有一天,以记录心脏活动为主的多种波动描记器将极大地提高其工作质量
    发表于 10-24 11:40

    生物电磁波揭密 场导发现(俄罗斯华裔科学家写的脑控技术丛书)

    生物电磁波揭密场导发现(俄罗斯华裔科学家写的脑控技术丛书)
    发表于 03-05 09:31

    通往数据科学家的崎岖道路

    如果你曾经查看过数据科学家的岗位要求,你就知道它的职责范围有多广。有的数据科学家致力于自然语言处理、计算机视觉、深度学习,有的则从事A/B测试、产品分析。确定哪些工作适合自己,哪些不适
    的头像 发表于 07-26 09:17 2566次阅读

    哪些才是对数据科学家最迫切的技能呢?

    AngelList提供的是列出数据科学家岗位的公司数而不是岗位数。我把AngelList从所有分析里面排除掉了,因为其搜索算法似乎按照OR型的逻辑搜索进行,没有办法改成AND。如果你寻找的是“数据
    的头像 发表于 11-19 18:14 3059次阅读

    什么是数据科学家?需要认证吗?

    得以清晰化。”Fleming指出,IBM目前雇佣了大约1.5万名被定义为数据科学家的技术人员,预计数据科学家人数的增长速度超过其雇员总数的增长速度。
    的头像 发表于 02-14 09:41 6599次阅读

    数据科学家与机器学习工程师怎么区分

    十年来,我们一直在谈论数据科学数据科学家。虽然在怎么才叫“数据科学家”的问题上始终存在着争议,
    的头像 发表于 05-18 11:24 3216次阅读

    数据科学家数据工程师的区别

    数据科学家和数据工程师的主要区别,可以用ETL和DAD的区别来解释。
    的头像 发表于 07-10 17:06 2641次阅读

    企业如何解决数据科学家短缺详细方法什么

     随着企业以数据为中心的文化,以做出决策和规划,数据科学家对全球企业的重要性日益增加。但是企业无法足够快地聘请数据科学家,因为合格候选人仍然
    的头像 发表于 04-18 10:31 3465次阅读

    采访资深数据科学家:成为数据科学家应具有的品质

    作为一门逐渐成熟的新兴领域,与数据科学相关的很多领域开始变得备受青睐,比如数据工程,数据分析以及机器学习和深度学习。数据
    的头像 发表于 06-30 11:28 2308次阅读

    什么是数据科学家的最佳编程语言?

    每个数据科学学习者都最常问的问题:“ 什么是数据科学家的最佳编程语言?”。
    的头像 发表于 07-05 11:32 2497次阅读

    数据科学家和数据工程师能合二为一吗?

    虽然数据科学家和数据工程师的角色似乎截然不同,但数据科学家和数据工程师有许多共同的特点和共技能。这些重叠的技能包括处理和操作大数据集、应用
    的头像 发表于 07-25 10:17 2535次阅读

    面向工程师和科学家的大数据

      为了有效地利用大数据的优势,工程师和科学家需要一可扩展的工具,例如 MATLAB,以提供对用于存储和管理数据的各种系统和格式的访问。
    的头像 发表于 10-06 07:52 628次阅读

    中国联通AI科学家廉士国入选全球前2%顶尖科学家榜单

    %顶尖科学家榜单是Elsevier和斯坦福大学John P.A. Ioannidis教授团队合作的具有全球影响力的项目成果,为全球学术界提供了一面向科学家长期科研表现的衡量指标,旨在更客观、更真实地反映
    的头像 发表于 11-07 16:18 2680次阅读