比较Python Pandas 和R data.table

    作者:deephub更新于: 2021-06-20 22:32:52

    5个例子比较Python Pandas 和R data.table。随着云时代的来临,大数据(Big data)也吸引了越来越多的关注。分析师团队认为,大数据(Big data)通常用来形容一个公司创造的大量非结构化数据和半结构化数据,这些数据在下载到关系型数据库用于分析时会花费过多时间和金钱。大数据分析常和云计算联系到一起,因为实时的大型数据集分析需要像MapReduce一样的框架来向数十、数百或甚至数千的电脑分配工作。

    Python和R是数据科学生态系统中的两种主要语言。它们都提供了丰富的功能选择并且能够加速和改进数据科学工作流程。

    在这篇文章中,我们将比较Pandas 和data.table,这两个库是Python和R最长用的数据分析包。我们不会说那个一个更好,我们这里的重点是演示这两个库如何为数据处理提供高效和灵活的方法。

    比较Python Pandas 和R data.table_数据分析_思维导图_网络推广_课课家

    我们将介绍的示例是常见的数据分析和操作操作。因此,您可能会经常使用它们。

    我们将使用Kaggle上提供的墨尔本住房数据集作为示例。我将使用谷歌Colab(Pandas )和RStudio(data.table)作为开环境。让我们首先导入库并读取数据集。

    1. # pandas  
    2. import pandas as pd  
    3. melb = pd.read_csv("/content/melb_data.csv")  
    4.  
    5. # data.table  
    6. library(data.table)  
    7. melb <- fread("datasets/melb_data.csv"

    示例1

    第一个示例是关于基于数据集中的现有列创建新列。这是特征工程过程中常见的操作。这两个库都提供了完成此任务的简单方法。

    1. # pandas  
    2. melb["Price_per_area"] = melb["Price"] / melb["Landsize"]  
    3.  
    4. # data.table  
    5. melb[, Price_per_area := Price / Landsize] 

    示例2

    对于第二个示例,我们通过应用几个过滤器创建原始数据集的子集。这个子集包括价值超过100万美元,类型为h的房子。

    1. # pandas  
    2. subset = melb[(melb.Price > 1000000) & (melb.Type == "h")]  
    3.  
    4. # data.table  
    5. subset <- melb[Price > 1000000 & Type == "h"

    对于pandas,我们提供dataframe的名称来选择用于过滤的列。另一方面,data.table仅使用列名就足够了。

    示例3

    在数据分析中使用的一个非常常见的函数是groupby函数。它允许基于一些数值度量比较分类变量中的不同值。

    例如,我们可以计算出不同地区的平均房价。为了使示例更复杂一些,我们还对房子类型应用一个过滤器。

    1. # pandas  
    2. melb[melb.Type == "u"].groupby("Regionname").agg(  
    3. avg_price = ("Price""mean")  
    4. )  
    5.  
    6. # data.table  
    7. melb[Type == "u", .(avg_price = mean(Price)), by="Regionname"

    pandas使用groupby函数执行这些操作。对于data.table,此操作相对简单一些,因为我们只需要使用by参数即可。

    示例4

    让我们进一步讨论前面的例子。我们求出了房屋的平均价格,但不知道每个地区的房屋数量。

    这两个库都允许在一个操作中应用多个聚合。我们还可以按升序或降序对结果进行排序。

    1. # pandas  
    2. melb[melb.Type == "u"].groupby("Regionname").agg(  
    3. avg_price = ("Price""mean"),  
    4. number_of_houses = ("Price""count")  
    5. ).sort_values(by="avg_price", ascending=False)  
    6.  
    7. # data.table  
    8. > melb[  
    9. Type == "u",  
    10. .(avg_price = mean(Price), number_of_houses=.N),  
    11. by="Regionname"  
    12. ][order(-avg_price)] 

    我们使用计数函数来获得每组房屋的数量。”。N”可作为data.table中的count函数。

    默认情况下,这两个库都按升序对结果排序。排序规则在pandas中的ascending参数控制。 data.table中使用减号获得降序结果。

    示例5

    在最后一个示例中,我们将看到如何更改列名。例如,我们可以更改类型和距离列的名称。

    类型:HouseType

    距离:DistanceCBD

    数据集中的distance列表示到中央商务区(CBD)的距离,因此最好在列名中提供该信息。

    1. # pandas  
    2. melb.rename(columns={"Type""HouseType",  
    3. "Distance""DistanceCBD"},  
    4. inplace=True)  
    5.  
    6. # data.table  
    7. setnames(melb,  
    8. c("Type""Distance"),  
    9. c("HouseType""DistanceCBD")) 

    对于熊猫,我们传递了一个字典,该字典将更改映射到rename函数。 inplace参数用于将结果保存在原始数据帧中。

    对于data.table,我们使用setnames函数。 它使用三个参数,分别是表名,要更改的列名和新列名。

    总结

    我们比较了pandas和data.table在数据分析操作过程中常见的5个示例。这两个库都提供了简单有效的方法来完成这些任务。

    在我看来,data.table比pandas简单一点。

    需要指出的是,我们在本文中所做的示例只代表了这些库功能的很小一部分。它们提供了许多函数和方法来执行更复杂的操作。

    从技术上看,大数据与云计算的关系就像一枚硬币的正反面一样密不可分。大数据必然无法用单台的计算机进行处理,必须采用分布式架构。它的特色在于对海量数据进行分布式数据挖掘。但它必须依托云计算的分布式处理、分布式数据库和云存储、虚拟化技术。

课课家教育

未登录