数据科学使用Python时常见的9个错误!

通过应用软件工程最佳实践,可以交付质量更好数据科学的项目。更好的质量可能是更少的错误、可靠的结果和更高的编码效率。

最佳实践都是从错误中总结出来的,所以这里我们总结了一些遇到的最常见的错误,并提供了如何最好地解决这些错误的方法、想法和资源。

1、不使用虚拟环境

这本身不是编码问题,但我仍然认为每种类型的项目进行环境的隔离是一个非常好的实践。

为什么要为每个项目使用专用环境呢?

第一个原因是Python本身包管理的问题,我们想尽量减少包和版本之间的冲突。

另外一个原因是我们代码和依赖可以方便的部署到任意的位置

使用虚拟环境可以从Anaconda 或 Pipenv 开始。如果想更深入那么 Docker 是首选。

2、过度使用Jupyter Notebooks

Notebooks 非常适合用于教育目的和做一些快速而复杂的分析工作,但它不能作为一个好的 IDE。

一个好的 IDE 是应对数据科学任务时的真正武器,可以极大地提高您的工作效率。

Notebooks 很适合做实验,而且可以轻松地将结果展示给其他人。但是它很容易出错,当涉及到执行长期、协作和可部署的项目时,最好还是使用IDE,例如 VScode、Pycharm、Spyder 等。

3、使用绝对而不是相对路径

绝对路径的最大问题是无法进行方便部署,解决这个问题的主要方法是将工作目录设置为项目根目录,并且不要再项目中包含项目目录外的文件,并且在代码中的所有路径均使用相对路径。

 import pandas as pd  
 import numpy as np  
 import os  
 #### 错误的方式 #####  
 excel_path1 = "C:\\Users\\abdelilah\\Desktop\\mysheet1.xlsx"  
 excel_path2 = "C:\\Users\\abdelilah\\Desktop\\mysheet2.xlsx"  
 mydf1 = pd.read_excel(excel_path1)  
 mydf2 = pd.read_excel(excel_path2)  
   
 #### 正确的方式 ####  
 DATA_DIR = "data"  
 #将要读取的文件复制到data目录  
 crime06_filename = "CrimeOneYearofData_2006.xlsx"  
 crime07_filename = "CrimeOneYearofData_2007.xlsx"  
 crime06_df = pd.read_excel(os.path.join(DATA_DIR, crime06_filename))  
 crime07_df = pd.read_excel(os.path.join(DATA_DIR, crime07_filename))

4、不处理警告

当我们的代码能够运行但产生奇怪的警告消息,我们很高兴终于让代码运行并收到了有意义的输出。但是我们需要处理这些警告吗?

首先,警告本身并不是错误,但它们是会引起我们对潜在错误或问题的提示。当你的代码中能够运行成功但可能不是它的预期方式时,警告就会出现。微信搜索公众号:架构师指南,回复:架构师 领取资料 。

我遇到的最常见的警告是 Pandas 的“SettingwithCopyWarning”和“DeprecationWarning”。

SettingwithCopyWarning最大的原因是 Pandas 检测到链式赋值(Chained Assignment)时发生的警告,我们应该避免对链式索引的结果赋值,因为这个操作有可能会报warning也有可能不会报。

DeprecationWarning 通常指出 Pandas 弃用了某些功能,并且您的代码在使用更高版本时会中断。

这里的建议并不是要处理所有的警告,但是一定要对所有警告产生的原因有所了解,要知道在特定项目中那些警告式可以忽略的,那些警告的出现对结果会有影响,应当避免。

5、没有使用(很少使用)列表推导式

列表推导式是 python 的一个非常强大的特性。许多 for 循环可以用更易读、更 Python 且速度更快的列表推导来代替。

可以在下面看到一个示例代码,该代码旨在读取目录中的 CSV 文件。可以看到,在使用列表推导时添很容易维护。

 import pandas as pd  
 import os  
   
 DATA_PATH = "data"  
 filename_list = os.listdir(DATA_PATH)  
   
 #### 不好的方法 #####  
 csv_list = []  
 for fileaname in filename_list:  
  csv_list.append(pd.read_csv(os.path.join(DATA_PATH, filename)))  
     
 #### 建议 ####  
 csv_list = [pd.read_csv(os.path.join(DATA_PATH, filename)) for filename in filename_list]  
 list comprehensions  
 csv_list = [pd.read_csv(os.path.join(DATA_PATH,  
        filename)) for filename in filename_list if      
        filename.endswith(".csv")]

6、不使用类型注释

类型注释(或类型提示)是为变量分配类型的方法。在IDE进行智能感知的提示时可以为我们提供指示变量/参数的类型。这不仅可以提高我们开发的速度,也可以对我们阅读代码有很大的帮助

 def mystery_combine(a, b, times):  
    return (a + b) * times

如果这么写,我们根本不知道a,b和times的类型

 def mystery_combine(a: str, b: str, times: int) -> str:  
    return (a + b) * times

但是加上了类型注释,我们就知道a和b是字符串times是整数

需要说明的是:python在3.5版本的时候引入了类型注释,python并不会在执行时检查类型注释,他只是为IDE提供了一个方便静态类型检查工具,对动态语言做静态类型检查,来避免一些潜在的错误。

7、pandas代码不规范

方法链是 pandas 的一个很棒的特性,但是如果在一行中包含了很多的操作,代码可能会变得不可读。

有一个技巧可以让这种方式边的简单,将表达式放入括号中,则可以对表达式的每个组件使用一行。

 var_list = ["clicks", "time_spent"]  
 var_list_Q = [varname + "_Q" for varname in var_list]  
   
 #不可读的方法  
 df_Q = df.groupby("id").rolling(window=3, min_periods=1, on="yearmonth[var_list].mean().reset_index().rename(columns=dict(zip(var_list, var_list_Q)))  
   
 #可读性强的方法  
 df_Q = (  
    df  
    .groupby("id")  
    .rolling(window=3, min_periods=1, on="yearmonth")[var_list]  
    .mean()  
    .reset_index()  
    .rename(columns=dict(zip(var_list, var_list_Q))))

8、不遵守 PEP 约定

刚开始使用 Python 进行编程时,代码可能是简陋并且不可读的,这是因为我们并没有自己的设计规则来让我的代码看起来更好。如果我们自己来设计这种规则是费事费力的并且这种规则需要很多的实践,好在Python官方有已经指定好的规则:PEP,它是 Python 的官方样式指南。

虽然PEP的规则很多并且很繁琐,我们可以忽略了一些 PEP 规则,但可以在 90% 的代码中使用了它们。

9、你不使用编码辅助工具

您想在编码方面大幅提高生产力吗?请开始使用编码辅助工具,它通过巧妙的自动完成、打开文档和提供改进代码的建议来提供帮助。

pylance, Kite ,tabnine,copilot都是非常好的选择。

---------------------------END---------------------------

题外话

“不是只有程序员才要学编程?!”

认真查了一下招聘网站,发现它其实早已变成一项全民的基本技能了。

连国企都纷纷要求大家学Python!
在这里插入图片描述

世界飞速发展,互联网、大数据冲击着一切,各行各业对数据分析能力的要求越来越高,这便是工资差距的原因,学习编程顺应了时代的潮流。

在这个大数据时代,从来没有哪一种语言可以像Python一样,在自动化办公、爬虫、数据分析等领域都有众多应用。

更没有哪一种语言,语法如此简洁易读,消除了普通人对于“编程”这一行为的恐惧,从小学生到老奶奶都可以学会。

《2020年职场学习趋势报告》显示,在2020年最受欢迎的技能排行榜,Python排在第一。
在这里插入图片描述

它的角色类似于现在Office,成了进入职场的第一项必备技能。

如果你也想增强自己的竞争力,分一笔时代的红利,我的建议是,少加点班,把时间腾出来,去学一学Python。

因为,被誉为“未来十年的职场红利”的Python,赚钱、省钱、找工作、升职加薪简直无所不能!

目前,Python人才需求增速高达**174%,人才缺口高达50万,**部分领域如人工智能、大数据开发, 年薪30万都招不到人!在这里插入图片描述

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

👉优快云大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值