在数据科学中你需要尝试的10个有用的Python技巧
译者|Arno
来源|Analytics Vidhya
概览
- 在数据科学中10个有用而创新的Python技巧
- 这个Python技巧列表包含我们日常数据科学任务的用例,例如数据预处理,数据分析,可视化等等
- 来看一下之前我们错过的Python包或函数吧
介绍
你最后一次学习到新的Python技巧是什么时候?作为数据科学家,我们习惯于使用熟悉的库并且每次都调用相同的函数。现在是打破旧惯例的时候了!
Python不仅限于Pandas,NumPy和scikit-learn(尽管它们在数据科学中绝对必不可少)!我们可以使用很多Python技巧来改进我们的代码,加速我们的数据科学任务,并在编写代码时变得更加高效。
更重要的是我们可以在Python中学习新的东西是很有趣的一件事!我喜欢玩不同的包和函数。每隔一段时间,就会有一个新的技巧将引起我的注意,并将其纳入我的日常工作中。
所以我决定在这里整理我最喜欢的Python技巧!这个列表的范围从加速基本数据科学任务(如预处理)到在同一个Jupyter Notebook中运行R和Python代码。其中有很多需要我们学习的东西,所以让我们一起开始吧!
1. zip: 在Python中组合多个列表
我们经常编写复杂的for循环来将多个列表组合在一起。你自己是不是这样做的呢?如果是,你会喜欢zip函数。这个zip函数的目的是“创建一个迭代器,该迭代器可以聚合每个可迭代对象的元素”。
让我们通过一个简单的例子看看如何使用zip函数并组合多个列表:
[code lang=python]
a = [1,2,3]
b = [4,5,6]
c = [4,5,6,7,8]
zipped = zip(a,b) # 打包为元组的列表
for ele in zipped:
print(ele,end="\t")
print()
zipped = zip(a,c) # 元素个数与最短的列表一致
for ele in zipped:
print(ele,end="\t")
[/code]
2. gmplot: 在Google地图上绘制数据集中的GPS坐标
我喜欢使用Google地图数据。它是你可以在任何地方找到的数据最丰富的应用之一。这就是为什么我决定从这个Python技巧开始。
当我们想要看到两个变量之间的关系时,散点图是一个非常好的方式。但如果变量是某个位置的纬度和经度坐标,你还会这么做吗?可能不会。最好将这些点绘制在真实地图上,以便我们可以轻松地查看和解决特定问题(例如优化路线)。
gmplot提供了一个惊人的接口来生成HTML和JavaScript,以便在Google地图上呈现我们想要的所有数据。让我们看看用一个示例看看如何使用gmplot。
安装gmplot
[code lang=text]
!pip3 install gmplot
[/code]
在Google地图上绘制位置坐标
你可以从这里1下载代码所用到的数据集。让我们首先导入必要的库和读数据:
[code lang=python]
import pandas as pd
import gmplot
data = pd.read_csv('3D_spatial_network.csv')
data.head()
[/code]
[code lang=python]
# 纬度和经度列表
latitude_list = data['LATITUDE']
longitude_list = data['LONGITUDE']
# 地图的中心坐标
gmap = gmplot.GoogleMapPlotter( 56.730876,9.349849,9)
# 在谷歌地图上绘制坐标
gmap.scatter( latitude_list, longitude_list, '# FF0000', size = 40, marker = True)
#以下代码将在你的Web浏览器中创建html文件视图
gmap.heatmap(latitude_list, longitude_list)
gmap.draw( "mymap.html" )
[/code]
上面的代码将生成HTML文件,你可以看到在Google地图上绘制了纬度和经度坐标。热图显示了具有高密度红色点的区域。
3. category_encoders: 使用15种不同的编码方案对你的类别变量进行编码
我们在早期数据科学数据集中面临的最大障碍之一是我们应该对类别变量做些什么呢?我们的机器在眨眼之间处理数值,但处理类别是一个完全不同的问题。
一些机器学习算法可以自己处理类别变量。但我们需要将它们转换为数值变量,为此,category_encoders是一个令人惊叹的库,它提供了15种不同的编码方案。
让我们看看我们如何利用这个库。
安装category-encoders
[code lang=text]
!pip3 install category-encoders
[/code]
将类别数据转换为数值数据
[code lang=python]
import pandas as pd
import category_encoders as ce
# 创建一个Dataframe
data = pd.DataFrame({ 'gender' : ['Male', 'Female', 'Male', 'Female', 'Female'],
'class' : ['A','B','C','D','A'],
'city' : ['Delhi','Gurugram','Delhi','Delhi','Gurugram'] })
data.head()
[/code]
[code lang=python]
# 热编码
# 创建One Hot Encoder对象
ce_OHE = ce.OneHotEncoder(cols=['gender','city'])
# 转换数据
data = ce_OHE.fit_transform(data)
data.head()
[/code]
所有编码器都与sklearn-transformer完全兼容,因此可以轻松地在现有脚本中使用。此外,category_encoders支持NumPy数组和Pandas dataframe。你可以在此处2阅读有关category_encoders的更多信息。
4. progress_apply:监控你在数据科学任务上花费的时间
你通常花多少时间来清理和预处理数据?数据科学家通常花费60-70%的时间来清理数据的说法是完全正确的。对我们来说跟踪这个很重要,对吧?
我们不想花费数天来清理数据而忽略其他数据科学步骤。这就是progress_apply函数使我们的生活变得如此简单的地方。让我演示它是如何工作的。
让我们计算各个点的经纬度之和(这虽然没有什么意义),并查看完成此任务的进度。你可以在此处3下载此数据集。
[code lang=python]
import pandas as pd
from tqdm._tqdm_notebook import tqdm_notebook
tqdm_notebook.pandas()
data = pd.read_csv('3D_spatial_network.csv')
data.head()
[/code]
[code lang=python]
def calculate_sum(x):
return (x['LATITUDE']+x['LONGITUDE'])
data['DISTANCE'] = data.progress_apply(calculate_distance,axis=1)
[/code]
5.pandas_profiling:生成数据集的详细报告
我们花了很多时间来理解我们获得的数据。这是公平的 – 我们不希望在不了解我们做什么的情况下直接进入模型构建。这是任何数据科学项目中必不可少的一步。
pandas_profiling是一个Python包,可以减少执行最初数据分析步骤的大量工作。该软件包只需一行代码即可生成详细的数据报告!
[code lang=python]
import pandas as pd
import pandas_profiling
# 读取数据
data = pd.read_csv('add-your-data-here')
pfr = pandas_profiling.ProfileReport(data)
# 在jupyter执行代码,则不需下面一行代码
pfr.to_file("./example.html")
[/code]
我们可以看到,只需一行代码,我们就可以获得数据集的详细报告:
– 警告
– 所有类别变量的频率计数
– 数值变量的分位数和描述性统计
– 相关图
6. grouper: 分组时间序列数据
现在谁不熟悉Pandas?它是最流行的Python库之一,广泛用于数据操作和分析。我们知道Pandas具有操作和汇总数据的惊人能力。
我最近正在研究一个时间序列问题,并注意到Pandas有一个我以前从未使用过的Grouper函数。我对它的使用变得非常好奇。
事实证明,这个Grouper函数对于时间序列数据分析来说是非常重要的功能。那么,让我们试一试,看看它是如何工作的。你可以在此处4下载此代码的数据集。
[code lang=python]
import pandas as pd
data = pd.read_excel('sales-data.xlsx')
data.head()
[/code]
现在,处理任何时间序列数据的第一步是将date列转换为DateTime格式:
[code lang=python]
data['date'] = pd.to_datetime(data['date'])
[/code]
假设我们的目标是查看每个客户的月销售额。我们大多数人都试着写一些复杂的东西。但这是Pandas对我们有用的地方。
[code lang=python]
data.set_index('date').groupby('name')["ext price"].resample("M").sum()
[/code]
我们可以通过groupby语法使用一种简单的方法,而不必使用重建索引。我们将通过提供有关如何在日期列中对数据进行分组的更多信息,为此函数添加额外的内容。它看起来更干净,工作方式完全相同:
[code lang=python]
data.groupby(['name', pd.Grouper(key='date', freq='M')])['ext price'].sum()
[/code]
7. unstack: 将索引转换为Dataframe的列
我们刚刚看到grouper如何帮助分组时间序列数据。现在,这有一个挑战,如果我们想要将name列(在上面示例结果中是索引)视为dataframe的列,该怎么办?
这是unstack函数至关重要的地方。让我们在上面的代码示例中应用unstack函数并查看结果。
[code lang=python]
data.groupby(['name', pd.Grouper(key='date', freq='M')])['ext price'].sum().unstack()
[/code]
非常实用!注意:如果索引不是MultiIndex,则输出将是Series。
8. %matplotlib Notebook: Jupyter Notebook中的交互式图
我是matplotlib库的忠实粉丝。它是我们用于在Jupyter Notebook中生成各种图形的最常见的可视化库。
要查看这些图,我们通常使用一行 – %matplotlib inline – 同时导入matplotlib库。这很好用,但它渲染了Jupyter Notebook中的静态图。
只需用%matplotlib notebook替换 %matplotlib inline。你将在Jupyter Notebook中获得可调整大小和可缩放的图表!
[code lang=python]
%matplotlib notebook
import matplotlib.pyplot as plt
# 绘制散点图
#在你的数据集上尝试此操作
plt.scatter(data['quantity'],data['unit price'])
[/code]
9. %%time: 检查特定Python代码块的运行时间
可以有多种方法来解决一个问题,作为数据科学家,我们非常清楚这一点。而计算成本在行业中很重要 – 特别是在一个中小型组织中。你可能希望选择在最短时间内完成任务的最佳方法。
实际上很容易检查Jupyter Notebook中特定代码块的运行时间。
只需添加%% time命令即可检查特定单元格的运行时间:
[code lang=python]
%%time
def myfunction(x) :
for i in range(1,100000,1) :
i=i+1
myfunction(3)
[/code]
在这里,我们CPU time和Wall time。CPU time是CPU专用于进程的总执行或运行时间。Wall time是从进程开始到“现在”之间经过的时间。
10: rpy2: R和Python在同一个Jupyter Notebook中!
R和Python是数据科学领域中最好和最流行的两种开源编程语言。R主要用于统计分析,而Python提供了一个简单的接口,可以将数学解决方案转换为代码。
现在我们可以在一个Jupyter Notebook中同时使用它们!我们可以利用这两种生态系统,为此,我们只需要安装rpy2。
所以,让我们暂时搁置R与Python的争论,并享受在我们的Jupyter Notebook中绘制ggplot级别的图表。
[code lang=text]
!pip3 install rpy2
[/code]
我们可以将两种语言一起使用,甚至可以在它们之间传递变量。
[code lang=python]
%load_ext rpy2.ipython
%R require(ggplot2)
[/code]
[code lang=python]
import pandas as pd
df = pd.DataFrame({
'Class': ['A', 'A', 'A', 'V', 'V', 'A', 'A', 'A'],
'X': [4, 3, 5, 2, 1, 7, 7, 5],
'Y': [0, 4, 3, 6, 7, 10, 11, 9],
'Z': [1, 2, 3, 1, 2, 3, 1, 2]
})
[/code]
[code lang=python]
%%R -i df
ggplot(data = df) + geom_point(aes(x = X, y= Y, color = Class, size = Z))
[/code]
在这里,我们在Python中创建了一个dataframe df,并通过使用R的ggplot2库(函数geom_point)来创建一个散点图。来吧试试,我想你会喜欢它。
结语
除了这些之外,你还直到哪些Python技巧吗?请在下面的评论部分告诉我们,分享彼此的经验!
- https://drive.google.com/file/d/1VS292bhx_caAamNGY1bRrAySABMNSAhH/view?usp=sharing ↩
- https://github.com/scikit-learn-contrib/categorical-encoding ↩
- https://drive.google.com/file/d/1VS292bhx_caAamNGY1bRrAySABMNSAhH/view?usp=sharing ↩
- https://drive.google.com/file/d/1UXHlP2TcenRFQJi5ZoaFtWpRuSU6AwQk/view?usp=sharing ↩
原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2019/08/31/10-powerful-python-tricks-for-data-science-you-need-to-try-today/