在数据科学的日常工作中,经常使用熟悉的库和函数。是时候打破常规,探索Python的新世界了!Python不仅仅是Pandas、NumPy和scikit-learn(虽然它们在数据科学中绝对重要)!这里有一系列的Python技巧,可以帮助提高代码质量,加快数据科学任务的速度,让在编写代码时更加高效。更重要的是,学习Python中能做的事情本身就是一种乐趣!喜欢尝试不同的包和函数,偶尔会有一些新技巧吸引注意,会将它们融入到日常工作中。因此,决定将最喜欢的Python技巧整理在这篇文章中!这篇文章从加快基本的数据科学任务,如预处理,到在同一Jupyter Notebook中使用R和Python代码,应有尽有。有很多学习的机会,让开始吧!
经常需要编写复杂的for循环来合并多个列表。听起来很熟悉?那么会喜欢zip函数。zip函数的目的是“创建一个迭代器,聚合每个可迭代对象的元素”。
# 示例代码
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
zipped_lists = zip(list1, list2)
for item in zipped_lists:
print(item)
就是这样!看看合并多个列表有多简单?
喜欢处理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地图上被绘制出来。热图显示了点密度高的区域用红色表示。很酷,对吧?
在早期的数据科学数据集中面临的最大障碍之一——应该如何处理分类变量?机器可以在眨眼之间处理数字,但处理类别是完全不同的问题。
# 安装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种不同的编码方法,例如:
所有编码器都完全兼容sklearn-transformers,因此可以轻松地在现有脚本中使用。此外,category_encoders支持NumPy数组和Pandas数据框。可以在这里阅读更多关于category_encoders的信息。
通常在数据清洗和预处理上花费很多时间。数据科学家通常花费60-70%的时间来清洗数据的说法相当正确。这对来说很重要,对吧?不想花费数天时间来清洗数据,而忽视了其他数据科学步骤。这就是progress_apply函数让生活变得如此简单的地方。让来演示一下它是如何工作的。
# 计算所有点与特定点的距离,并查看此任务的完成进度
from progress_apply import progress_apply
progress_apply(data, lambda x: x**2)
可以看到跟踪代码的进度有多容易。简单、高效,救星。
花费很多时间来理解得到的数据。这是公平的——不想在不了解正在处理的数据的情况下直接跳到模型构建。这是任何数据科学项目中的一个重要步骤。
# 使用pandas_profiling生成数据的详细报告
import pandas_profiling
profile = data.profile_report()
profile.to_file("data_profile.html")
可以看到,仅用一行代码,就得到了数据集的详细报告:
谁不熟悉Pandas?它是最受欢迎的Python库之一,广泛用于数据操作和分析。知道Pandas具有惊人的能力和数据的操纵和总结。
# 将日期列转换为DateTime格式
data['date'] = pd.to_datetime(data['date'])
# 查看每月每个客户的销售额
data.groupby(data['date'].dt.to_period('M')).sum()
目标是查看每月每个客户的销售额。大多数人会尝试在这里编写一些复杂的东西。但这就是Pandas对更有用的地方(不得不爱Pandas!)。
刚刚看到了grouper如何在分组时间序列数据时有所帮助。现在,这里有一个挑战——如果想将name列(在上面的例子中是索引)作为数据框的列。
# 应用unstack函数
data.unstack()
非常有用!
注意:如果索引不是MultiIndex,输出将是一个Series。
是matplotlib库的忠实粉丝。这是用来在Jupyter Notebook中生成各种图表的最常见可视化库。
# 使用%matplotlib notebook查看可缩放和可缩放的图表
%matplotlib notebook
import matplotlib.pyplot as plt
plt.plot([1, 2, 3])
plt.show()
只需将%matplotlib inline替换为%matplotlib notebook,就可以在笔记本中获得可调整大小和可缩放的图表!
解决一个问题可以有多种方法。作为数据科学家,非常清楚这一点。在行业中,计算成本很重要——特别是如果是小型或中型企业。可能想要选择在最短时间内完成任务的最佳方法。
# 使用%%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()')