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

本文探讨了在数据科学项目中常见的错误,如未使用虚拟环境、过度依赖JupyterNotebooks、绝对路径问题等,并提供了相应的解决方案。同时强调了使用最佳实践和工具的重要性,如IDE、类型注释和遵循PEP编码约定,以及利用编码辅助工具提升效率。
摘要由CSDN通过智能技术生成

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

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

图片

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都是非常好的选择。

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

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

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值