• 10个强大的Python数据科学技巧


    作者|LAKSHAY ARORA
    编译|Flin
    来源|analyticsvidhya

    介绍

    你上一次学习新的Python技巧是什么时候?作为数据科学家,我们习惯于使用熟悉的库并每次都调用相同的函数。现在该打破旧的惯例了!

    Python不仅限于Pandas,NumPy和scikit-learn(尽管它们在数据科学中绝对必不可少)!我们可以使用大量的Python技巧来改进代码,加速数据科学任务并提高编写代码的效率。

    更重要的是,学习我们可以在Python中做的新事情真的非常有趣!我喜欢玩各种不同的程序包和函数。每隔一段时间,就会有一个新的花样吸引我,我将其融入我的日常工作。

    因此,我决定在一个地方整理我最喜欢的Python技巧——本文!此列表的范围从加快基本数据科学任务(如预处理)到在同一Jupyter Notebook中获取R和Python代码不等。有大量的学习任务在等着我们,让我们开始吧!

    Python和数据科学世界的新手?这是一门精妙而全面的课程,可帮助你同时入门:

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

    通常我们最终会写出复杂的for循环以将多个列表组合在一起。听起来很熟悉?那么你会喜欢zip函数的。这个zip函数的目的是“创建一个迭代器,从每个iterable中聚合元素”。

    让我们通过一个简单的示例来了解如何使用zip函数并组合多个列表:

    https://id.analyticsvidhya.com/auth/login/?next=https://www.analyticsvidhya.com/blog/2019/08/10-powerful-python-tricks-data-science

    看到合并多个列表有多容易了吗?

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

    我喜欢使用Google Maps数据。想想看,它是最丰富的数据应用程序之一。这就是为什么我决定从这个Python技巧开始的原因。

    当我们想查看两个变量之间的关系时,使用散点图是非常好的。但是如果变量是一个位置的经纬度坐标,你会使用它们吗?可能不会。最好把这些点标在真实的地图上,这样我们就可以很容易地看到并解决某个特定的问题(比如优化路线)。

    gmplot提供了一个令人惊叹的界面,可以生成HTML和JavaScript,将我们想要的所有数据呈现在Google Maps之上。让我们来看一个如何使用gmplot的例子。

    安装gmplot

    !pip3 install gmplot
    

    在Google地图上绘制位置坐标

    你可以在此处下载此代码的数据集。

    让我们导入库并读取数据:

    import pandas as pd
    import gmplot
    data = pd.read_csv('3D_spatial_network.csv')
    data.head()
    

    # latitude and longitude list 
    latitude_list = data['LATITUDE'] 
    longitude_list = data['LONGITUDE'] 
    
    # center co-ordinates of the map 
    gmap = gmplot.GoogleMapPlotter( 56.730876,9.349849,9)
    
    # plot the co-ordinates on the google map 
    gmap.scatter( latitude_list, longitude_list, '# FF0000', size = 40, marker = True) 
    
    # the following code will create the html file view that in your web browser 
    gmap.heatmap(latitude_list, longitude_list) 
    
    gmap.draw( "mymap.html" )
    

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

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

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

    一些机器学习算法可以自己处理分类变量。但是我们需要将它们转换为数值变量,为此,category_encoders是一个了不起的库,提供了15种不同的编码方案。

    让我们看看如何利用这个库。

    安装 category-encoders

    !pip3 install category-encoders
    

    将分类数据转换为数值数据

    
    import pandas as pd 
    import category_encoders as ce 
    
    # create a Dataframe 
    data = pd.DataFrame({ 'gender' : ['Male', 'Female', 'Male', 'Female', 'Female'],
                          'class' : ['A','B','C','D','A'],
                          'city' : ['Delhi','Gurugram','Delhi','Delhi','Gurugram'] }) 
                                                                                          
    data.head()
    

    # One Hot Encoding 
    # create an object of the One Hot Encoder 
    
    ce_OHE = ce.OneHotEncoder(cols=['gender','city']) 
    
    # transform the data 
    data = ce_OHE.fit_transform(data) 
    data.head()
    

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

    • 哈希编码
    • LeaveOneOut编码
    • 顺序编码
    • 二进制编码
    • 目标编码

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

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

    你通常花费多少时间来清理和预处理数据?数据科学家通常花费60~70%的时间来清理数据这一说法是正确的。对我们来说,追踪这一点很重要,对吗?

    我们不想花费数天的时间来清理数据,而忽略其他数据科学步骤。这是progress_apply 函数使我们的研究更加轻松的地方。让我演示一下它是如何工作的。

    让我们计算所有点到特定点的距离,并查看完成此任务的进度。你可以在此处下载数据集。

    import pandas as pd
    from tqdm._tqdm_notebook import tqdm_notebook
    from pysal.lib.cg import harcdist
    tqdm_notebook.pandas()
    data = pd.read_csv('3D_spatial_network.csv')
    data.head()
    

    # calculate the distance of each data point from # (Latitude, Longitude) = (58.4442, 9.3722) 
    
    def calculate_distance(x): 
       return harcdist((x['LATITUDE'],x['LONGITUDE']),(58.4442, 9.3722)) 
       
    data['DISTANCE'] = data.progress_apply(calculate_distance,axis=1)
    

    你会看到跟踪我们的代码进度有多么容易。简单,高效。

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

    我们花了很多时间来理解我们得到的数据。这很公平——我们不想在不了解我们正在使用的模型的情况下直接跳入模型构建。这是任何数据科学项目中必不可少的步骤。

    pandas_profiling 是一个Python软件包,可减少执行初始数据分析步骤所需的大量工作。该软件包只需一行代码即可生成有关我们数据的详细报告!

    import pandas as pd 
    import pandas_profiling 
    
    # read the dataset 
    data = pd.read_csv('add-your-data-here') 
    pandas_profiling.ProfileReport(data)
    

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

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

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

    现在谁不熟悉Pandas?它是最流行的Python库之一,广泛用于数据操作和分析。我们知道Pandas有惊人的能力来操纵和总结数据。

    我最近在研究一个时间序列问题,发现Pandas有一个我以前从未使用过的 Grouper 函数。我开始对它的使用感到好奇。

    事实证明,这个Grouper函数对于时间序列数据分析是一个非常重要的函数。让我们试试这个,看看它是如何工作的。你可以在这里下载此代码的数据集。

    import pandas as pd 
    
    data = pd.read_excel('sales-data.xlsx') 
    data.head()
    

    现在,处理任何时间序列数据的第一步是将date列转换为DateTime格式:

    data['date'] = pd.to_datetime(data['date'])
    

    假设我们的目标是查看每个客户的每月销售额。我们大多数人都在这里尝试写一些复杂的东西。但这是Pandas对我们来说更有用的地方。

    data.set_index('date').groupby('name')["ext price"].resample("M").sum()
    

    我们可以通过groupby语法使用一种简单的方法,而不必再进行重新索引。我们将为这个函数添加一些额外的内容,提供一些关于如何在date列中对数据分组的信息。它看起来更干净,工作原理完全相同:

    data.groupby(['name', pd.Grouper(key='date', freq='M')])['ext price'].sum()
    

    7. unstack:将索引转换为Dataframe的列

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

    这就是unstack函数变得至关重要的地方。让我们对上面的代码示例应用unstack函数并查看结果。

    data.groupby(['name', pd.Grouper(key='date', freq='M')])['ext price'].sum().unstack()
    


    非常有用!注意:如果索引不是MultiIndex,则输出将是Series。

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

    我是matplotlib库的超级粉丝。它是我们在Jupyter Notebook中用来生成各种图形的最常见的可视化库。

    要查看这些绘图,我们通常在导入matplotlib库时使用一行——%matplotlib inline。这很好用,它呈现了Jupyter Notebook中的静态图。

    只需将行 %matplotlib替换为 %matplotlib notebook,就可以看到神奇的效果了。你将在你的 Notebook得到可调整大小和可缩放的绘图!

    %matplotlib notebook
    import matplotlib.pyplot as plt
    
    # scatter plot of some data # try this on your dataset
    plt.scatter(data['quantity'],data['unit price'])
    

    只需更改一个字,我们就可以获取交互式绘图,从而可以在绘图中调整大小和缩放。

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

    解决一个问题可以有多种方法。作为数据科学家,我们对此非常了解。计算成本在行业中至关重要,尤其是对于中小型组织而言。你可能希望选择最好的方法,以在最短的时间内完成任务。

    实际上,在Jupyter Notebook中检查特定代码块的运行时间非常容易。

    只需添加%% time命令来检查特定单元格的运行时间:

    %%time 
    def myfunction(x) : 
        for i in range(1,100000,1) : 
            i=i+1
    

    在这里,我们有CPU时间和Wall时间。CPU时间是CPU专用于某个进程的总执行时间或运行时间。Wall时间是指时钟从流程开始到“现在”之间经过的时间。

    10:rpy2:R和Python在同一个Jupyter Notebook中!

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

    这是个好消息,我们可以在一个Jupyter Notebook中同时使用它们!我们可以利用这两个生态系统,为此,我们只需要安装rpy2。

    因此,现在暂时搁置R与Python的争论,并在我们的Jupyter Notebook中绘制ggplot级图表。

    !pip3 install rpy2
    

    我们可以同时使用两种语言,甚至可以在它们之间传递变量。

    %load_ext rpy2.ipython
    %R require(ggplot2)
    
    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]
        })
    
    %%R -i df
    ggplot(data = df) + geom_point(aes(x = X, y= Y, color = Class, size = Z))
    

    在这里,我们用Python 创建了一个数据框df,并使用它创建了一个使用R的ggplot2库(geom_point函数)的散点图。

    尾注

    这是我必不可少的Python技巧集合。我喜欢在日常任务中使用这些软件包和功能。老实说,我的工作效率提高了,这使在Python中工作比以往更加有趣。

    除了这些之外,你还有什么想让我知道的Python技巧吗?在下面的评论部分中告诉我,我们可以交换想法!

    而且,如果你是Python的初学者和数据科学的新手,那么你真的应该查看我们全面且畅销的课程:

    原文链接:https://www.analyticsvidhya.com/blog/2019/08/10-powerful-python-tricks-data-science/

    欢迎关注磐创AI博客站:
    http://panchuang.net/

    sklearn机器学习中文官方文档:
    http://sklearn123.com/

    欢迎关注磐创博客资源汇总站:
    http://docs.panchuang.net/

  • 相关阅读:
    shell的格式化输出命令printf
    shell数组
    shell字符串
    shell注释
    shell运算符
    shell替换
    shell特殊变量
    shell变量
    linux修改主机名
    ssh免密码登录设置
  • 原文地址:https://www.cnblogs.com/panchuangai/p/13720369.html
Copyright © 2020-2023  润新知