0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

更高效的利用Jupyter+pandas进行数据分析

数据分析与开发 来源:数据分析与开发 作者:数据分析与开发 2021-03-12 15:20 次阅读

在使用Python进行数据分析时,Jupyter Notebook是一个非常强力的工具,在数据集不是很大的情况下,我们可以使用pandas轻松对txt或csv等纯文本格式数据进行读写。

然而当数据集的维度或者体积很大时,将数据保存并加载回内存的过程就会变慢,并且每次启动Jupyter Notebook时都需要等待一段时间直到数据重新加载, 这样csv格式或任何其他纯文本格式数据都失去了吸引力。

本文将对pandas支持的多种格式数据在处理数据的不同方面进行比较,包含I/O速度、内存消耗、磁盘占用空间等指标,试图找出如何为我们的数据找到一个合适的格式的办法!

格式说明

现在对本文进行对比的几种数据格式进行说明。

CSV:最常用的数据格式

Pickle:用于序列化和反序列化Python对象结构

MessagePack:类似于json,但是更小更块

HDF5:一种常见的跨平台数据储存文件

Feather:一个快速、轻量级的存储框架

Parquet:Apache Hadoop的列式存储格式

指标说明

为了找到格式来存储数据,本文选择以下指标进行对比。

size_mb:带有序列化数据帧的文件的大小

save_time:将数据帧保存到磁盘所需的时间

load_time:将先前转储的数据帧加载到内存所需的时间

save_ram_delta_mb:在数据帧保存过程中最大的内存消耗增长

load_ram_delta_mb:数据帧加载过程中最大的内存消耗增长

注意,当我们使用有效压缩的二进制数据格式(例如Parquet)时,最后两个指标变得非常重要。它们可以帮助我们估算加载串行化数据所需的RAM数量,以及数据大小本身。我们将在下一部分中更详细地讨论这个问题。

对比

现在开始对前文介绍的5种数据格式进行比较,为了更好地控制序列化的数据结构和属性我们将使用自己生成的数据集。 下面是生成测试数据的代码,我们随机生成具有数字和分类特征的数据集。数值特征取自标准正态分布。分类特征以基数为C的uuid4随机字符串生成,其中2 <= C <= max_cat_size。

defgenerate_dataset(n_rows,num_count,cat_count,max_nan=0.1,max_cat_size=100): dataset,types={},{} defgenerate_categories(): fromuuidimportuuid4 category_size=np.random.randint(2,max_cat_size) return[str(uuid4())for_inrange(category_size)] forcolinrange(num_count): name=f'n{col}' values=np.random.normal(0,1,n_rows) nan_cnt=np.random.randint(1,int(max_nan*n_rows)) index=np.random.choice(n_rows,nan_cnt,replace=False) values[index]=np.nan dataset[name]=values types[name]='float32' forcolinrange(cat_count): name=f'c{col}' cats=generate_categories() values=np.array(np.random.choice(cats,n_rows,replace=True),dtype=object) nan_cnt=np.random.randint(1,int(max_nan*n_rows)) index=np.random.choice(n_rows,nan_cnt,replace=False) values[index]=np.nan dataset[name]=values types[name]='object' returnpd.DataFrame(dataset),types 现在我们以CSV文件保存和加载的性能作为基准。将五个随机生成的具有百万个观测值的数据集转储到CSV中,然后读回内存以获取平均指标。并且针对具有相同行数的20个随机生成的数据集测试了每种二进制格式。 同时使用两种方法进行对比:

1.将生成的分类变量保留为字符串

2.在执行任何I/O之前将其转换为pandas.Categorical数据类型

1.以字符串作为分类特征

下图显示了每种数据格式的平均I/O时间。这里有趣的发现是hdf的加载速度比csv更低,而其他二进制格式的性能明显更好,而feather和parquet则表现的非常好。

保存数据并从磁盘读取数据时的内存消耗如何?下一张图片向我们展示了hdf的性能再次不那么好。但可以肯定的是,csv不需要太多额外的内存来保存/加载纯文本字符串,而feather和parquet则非常接近。

最后,让我们看一下文件大小的对比。这次parquet显示出非常好的结果,考虑到这种格式是为有效存储大量数据而开发的,也是理所当然。

2. 对特征进行转换

在上一节中,我们没有尝试有效地存储分类特征,而是使用纯字符串,接下来我们使用专用的pandas.Categorical类型再次进行比较。

从上图可以看到,与纯文本csv相比,所有二进制格式都可以显示其真强大功能,效率远超过csv,因此我们将其删除以更清楚地看到各种二进制格式之间的差异。

可以看到feather和pickle拥有最快的I/O速度,接下来该比较数据加载过程中的内存消耗了。下面的条形图显示了我们之前提到的有关parquet格式的情况。

为什么parquet内存消耗这么高?因为只要在磁盘上占用一点空间,就需要额外的资源才能将数据解压缩回数据帧。即使文件在持久性存储磁盘上需要适度的容量,也可能无法将其加载到内存中。 最后我们看下不同格式的文件大小比较。所有格式都显示出良好的效果,除了hdf仍然需要比其他格式更多的空间。

结论

正如我们的上面的测试结果所示,feather格式似乎是在多个Jupyter之间存储数据的理想选择。它显示出很高的I/O速度,不占用磁盘上过多的内存,并且在装回RAM时不需要任何拆包。

当然这种比较并不意味着我们应该在每种情况下都使用这种格式。例如,不希望将feather格式用作长期文件存储。此外,当其他格式发挥最佳效果时,它并未考虑所有可能的情况。所以我们也需要根据具体情况进行选择!

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1368

    浏览量

    114651
  • 变量
    +关注

    关注

    0

    文章

    613

    浏览量

    28361
  • 数据集
    +关注

    关注

    4

    文章

    1208

    浏览量

    24691

原文标题:更高效的利用 Jupyter+pandas 进行数据分析,6 种常用数据格式效率对比!

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    zeta的定义和应用 如何使用zeta进行数据分析

    Zeta(ζ)电位是描述悬浮粒子在液体中移动时所产生的电位差的一个物理量,以下是对其定义、应用以及如何进行数据分析的详细解释: Zeta电位的定义 Zeta电位是通过理论推导和实验测量得到的,它反映
    的头像 发表于 12-19 18:10 359次阅读

    如何使用SQL进行数据分析

    使用SQL进行数据分析是一个强大且灵活的过程,它涉及从数据库中提取、清洗、转换和聚合数据,以便进行进一步的分析和洞察。 1.
    的头像 发表于 11-19 10:26 252次阅读

    eda与传统数据分析的区别

    进行初步的探索和理解,发现数据中潜在的模式、关系、异常值等,为后续的分析和建模提供线索和基础。 方法论 :EDA强调数据的真实分布和可视化,使用多种图表和可视化工具来展示
    的头像 发表于 11-13 10:52 306次阅读

    为什么选择eda进行数据分析

    数据科学领域,数据分析是一个复杂且多步骤的过程,它涉及到数据的收集、清洗、探索、建模和解释。在这些步骤中,探索性数据分析(EDA)扮演着至关重要的角色。 1. 理解
    的头像 发表于 11-13 10:41 224次阅读

    raid 在大数据分析中的应用

    RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)在大数据分析中的应用主要体现在提高存储系统的性能、可靠性和容量上。以下是RAID在大数据分析
    的头像 发表于 11-12 09:44 239次阅读

    云计算在大数据分析中的应用

    和处理大规模的数据集。通过云计算平台,用户可以快速构建数据仓库,将海量数据进行存储、管理和分析。这种能力使得企业能够
    的头像 发表于 10-24 09:18 440次阅读

    使用AI大模型进行数据分析的技巧

    使用AI大模型进行数据分析的技巧涉及多个方面,以下是一些关键的步骤和注意事项: 一、明确任务目标和需求 在使用AI大模型之前,首先要明确数据分析的任务目标,这将直接影响模型的选择、数据收集和处理方式
    的头像 发表于 10-23 15:14 702次阅读

    如何利用海外爬虫IP进行数据抓取

    利用海外爬虫IP进行数据抓取需要综合考虑多个方面。
    的头像 发表于 10-12 07:54 182次阅读

    IP 地址大数据分析如何进行网络优化?

    一、大数据分析在网络优化中的作用 1.流量分析数据分析可以对网络中的流量进行实时监测和分析,了解网络的使用情况和流量趋势。通过对流量
    的头像 发表于 10-09 15:32 231次阅读
    IP 地址大<b class='flag-5'>数据分析</b>如何<b class='flag-5'>进行</b>网络优化?

    数据分析在提高灌区管理水平中的作用

    数据分析在提升灌区管理水平中扮演着至关重要的角色,它通过深度挖掘海量信息,为灌溉系统的高效运作、资源优化配置及可持续发展提供了科学决策的基础。这一过程不仅涉及数据的收集、整理与分析,还
    的头像 发表于 08-28 17:23 261次阅读
    <b class='flag-5'>数据分析</b>在提高灌区管理水平中的作用

    数据分析除了spss还有什么

    数据分析是当今世界中一个非常重要的领域,它涉及到从大量数据中提取有用信息、发现模式和趋势,并为决策提供支持。SPSS(Statistical Package for the Social
    的头像 发表于 07-05 15:01 612次阅读

    数据分析的工具有哪些

    开发的一款电子表格软件,广泛应用于数据分析领域。它具有以下特点: 数据整理:Excel提供了丰富的数据整理功能,如排序、筛选、查找和替换等。 数据计算:Excel内置了数百种函数,可以
    的头像 发表于 07-05 14:54 852次阅读

    数据分析有哪些分析方法

    。 描述性分析 描述性分析数据分析的第一步,它的目的是对数据进行描述和总结。描述性分析通常包括
    的头像 发表于 07-05 14:51 569次阅读

    机器学习在数据分析中的应用

    随着大数据时代的到来,数据量的爆炸性增长对数据分析提出了更高的要求。机器学习作为一种强大的工具,通过训练模型从数据中学习规律,为企业和组织提
    的头像 发表于 07-02 11:22 614次阅读

    求助,关于AD采集到的数据分析问题

    问题描述:使用AD采集一个10Hz到2MHz的脉冲,脉冲底部可能大于零,由采集到的数据分析出该脉冲的上升时间,幅值和占空比。 备注:在分析的时候已经知道脉冲的频率,精度为2X10^-5. 在分析
    发表于 05-09 07:40