Python 数据科学实用技巧

在数据科学的日常工作中,经常使用熟悉的库和函数。是时候打破常规,探索Python的新世界了!Python不仅仅是Pandas、NumPy和scikit-learn(虽然它们在数据科学中绝对重要)!这里有一系列的Python技巧,可以帮助提高代码质量,加快数据科学任务的速度,让在编写代码时更加高效。更重要的是,学习Python中能做的事情本身就是一种乐趣!喜欢尝试不同的包和函数,偶尔会有一些新技巧吸引注意,会将它们融入到日常工作中。因此,决定将最喜欢的Python技巧整理在这篇文章中!这篇文章从加快基本的数据科学任务,如预处理,到在同一Jupyter Notebook中使用R和Python代码,应有尽有。有很多学习的机会,让开始吧!

1. zip:在Python中合并多个列表

经常需要编写复杂的for循环来合并多个列表。听起来很熟悉?那么会喜欢zip函数。zip函数的目的是“创建一个迭代器,聚合每个可迭代对象的元素”。

# 示例代码 list1 = [1, 2, 3] list2 = ['a', 'b', 'c'] zipped_lists = zip(list1, list2) for item in zipped_lists: print(item)

就是这样!看看合并多个列表有多简单?

2. gmplot:在Google地图上绘制数据集中的GPS坐标

喜欢处理Google地图数据。想想看——这是能找到的数据最丰富的应用程序之一。这就是为什么决定从这个Python技巧开始。

# 安装gmplot !pip3 install gmplot # 绘制Google地图上的地点坐标 # 可以在这里下载数据集 # 导入库并读取数据 import gmplot gmap = gmplot.GoogleMapPlotter(latitude, longitude, 'my_map') gmap.heatmap(points) gmap.draw("my_map.html")

上面的代码将生成HTML文件,可以看到纬度和经度坐标在Google地图上被绘制出来。热图显示了点密度高的区域用红色表示。很酷,对吧?

3. category_encoders:使用15种不同的编码方案对分类变量进行编码

在早期的数据科学数据集中面临的最大障碍之一——应该如何处理分类变量?机器可以在眨眼之间处理数字,但处理类别是完全不同的问题。

# 安装category-encoders !pip3 install category-encoders # 将分类数据转换为数值数据 from category_encoders import OrdinalEncoder encoder = OrdinalEncoder(cols=['category_column']) encoded_data = encoder.fit_transform(data)

category_encoders支持大约15种不同的编码方法,例如:

  • Hashing Encoding
  • LeaveOneOut Encoding
  • Ordinal Encoding
  • Binary Encoding
  • Target Encoding

所有编码器都完全兼容sklearn-transformers,因此可以轻松地在现有脚本中使用。此外,category_encoders支持NumPy数组和Pandas数据框。可以在这里阅读更多关于category_encoders的信息。

4. progress_apply:监控在数据科学任务上花费的时间

通常在数据清洗和预处理上花费很多时间。数据科学家通常花费60-70%的时间来清洗数据的说法相当正确。这对来说很重要,对吧?不想花费数天时间来清洗数据,而忽视了其他数据科学步骤。这就是progress_apply函数让生活变得如此简单的地方。让来演示一下它是如何工作的。

# 计算所有点与特定点的距离,并查看此任务的完成进度 from progress_apply import progress_apply progress_apply(data, lambda x: x**2)

可以看到跟踪代码的进度有多容易。简单、高效,救星。

5. pandas_profiling:生成数据集的详细报告

花费很多时间来理解得到的数据。这是公平的——不想在不了解正在处理的数据的情况下直接跳到模型构建。这是任何数据科学项目中的一个重要步骤。

# 使用pandas_profiling生成数据的详细报告 import pandas_profiling profile = data.profile_report() profile.to_file("data_profile.html")

可以看到,仅用一行代码,就得到了数据集的详细报告:

  • 警告,如Item_Identifier具有高基数:1559个不同值
  • 所有分类变量的频率计数
  • 数值变量的分位数和描述性统计
  • 相关性图

6. grouper:对时间序列数据进行分组

谁不熟悉Pandas?它是最受欢迎的Python库之一,广泛用于数据操作和分析。知道Pandas具有惊人的能力和数据的操纵和总结。

# 将日期列转换为DateTime格式 data['date'] = pd.to_datetime(data['date']) # 查看每月每个客户的销售额 data.groupby(data['date'].dt.to_period('M')).sum()

目标是查看每月每个客户的销售额。大多数人会尝试在这里编写一些复杂的东西。但这就是Pandas对更有用的地方(不得不爱Pandas!)。

7. unstack:将索引转换为数据框的列

刚刚看到了grouper如何在分组时间序列数据时有所帮助。现在,这里有一个挑战——如果想将name列(在上面的例子中是索引)作为数据框的列。

# 应用unstack函数 data.unstack()

非常有用!

注意:如果索引不是MultiIndex,输出将是一个Series。

8. %matplotlib Notebook:在Jupyter Notebook中交互式绘图

是matplotlib库的忠实粉丝。这是用来在Jupyter Notebook中生成各种图表的最常见可视化库。

# 使用%matplotlib notebook查看可缩放和可缩放的图表 %matplotlib notebook import matplotlib.pyplot as plt plt.plot([1, 2, 3]) plt.show()

只需将%matplotlib inline替换为%matplotlib notebook,就可以在笔记本中获得可调整大小和可缩放的图表!

9. %%time:检查特定Python代码块的运行时间

解决一个问题可以有多种方法。作为数据科学家,非常清楚这一点。在行业中,计算成本很重要——特别是如果是小型或中型企业。可能想要选择在最短时间内完成任务的最佳方法。

# 使用%%time命令检查特定单元格的运行时间 %%time import time time.sleep(2)

在这里,有CPU时间和Wall time。CPU时间是CPU专用于一个过程的总执行时间或运行时间。Wall time是时钟测量的从过程开始到现在所经过的时间。

R和Python数据科学领域中最好和最受欢迎的两种开源编程语言。R主要用于统计分析,而Python提供了一个简单的接口,将数学解决方案转化为代码。

# 安装rpy2 !pip3 install rpy2 # 在同一Jupyter Notebook中使用R和Python import rpy2.robjects as robjects robjects.r('library(ggplot2)') robjects.r('ggplot(df, aes(x=x, y=y)) + geom_point()')
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485