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

    文章

    1398

    浏览量

    119822
  • 变量
    +关注

    关注

    0

    文章

    615

    浏览量

    29369
  • 数据集
    +关注

    关注

    4

    文章

    1230

    浏览量

    26046

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    经营数据分析可以通过哪些方式

    在数聚股份看来,提起经营数据分析,大家往往会联想到一些密密麻麻的数字表格,或是高级的数据建模手法,再或是华丽的数据报表。其实,“ 分析 ”本身是每个人都具备的能力,对于业务决策者而言,
    的头像 发表于 12-05 16:31 355次阅读

    如何使用运行数据趋势分析验证装置准确性?

    利用行数据趋势分析验证电能质量在线监测装置准确性,核心逻辑是 通过长期采集的电网运行数据,判断其趋势是否符合电网实际规律、是否具备稳定性与一致性 —— 若装置准确,其输出的
    的头像 发表于 09-18 10:33 341次阅读
    如何使用运<b class='flag-5'>行数据</b>趋势<b class='flag-5'>分析</b>验证装置准确性?

    构建自定义电商数据分析API

    按需分析结果,帮助团队快速响应市场变化。本文将逐步指导您如何从头构建这样一个API,确保它可靠、高效且可扩展。 1. 理解电商数据分析基础 电商数据通常包括销售记录、用户行为、产品信息
    的头像 发表于 07-17 14:44 400次阅读
    构建自定义电商<b class='flag-5'>数据分析</b>API

    AI数据分析仪设计原理图:RapidIO信号接入 平板AI数据分析

    AI数据分析仪, 平板数据分析仪, 数据分析仪, AI边缘计算, 高带宽数据输入
    的头像 发表于 07-17 09:20 498次阅读
    AI<b class='flag-5'>数据分析</b>仪设计原理图:RapidIO信号接入 平板AI<b class='flag-5'>数据分析</b>仪

    如何使用协议分析进行数据分析与可视化

    使用协议分析进行数据分析与可视化,需结合数据捕获、协议解码、统计分析及可视化工具,将原始数据转化为可解读的图表和报告。以下是详细步骤及关键
    发表于 07-16 14:16

    B1505A 功率器件分析仪/曲线追踪仪

    。 B1505A 还支持功率器件的片上测试,因此无需事先封装器件。 在实验室中进行器件测试时,这个功能可以显著缩短周转时间(TAT)。 配有直观的 15 英寸触摸屏界面,无需借助外部的个人电脑,即可进行数据分析
    发表于 06-21 18:38

    选煤厂企业能源管控系统:让节能更简单、更高效

    摘要 在能源资源日益紧缺和环境保护压力不断增大的背景下,如何高效利用能源、实现节能减排成为工业企业面临的重要课题。本文提出了一种基于物联网(IoT)与大数据分析的智慧化工业企业能耗监测与优化系统
    的头像 发表于 02-25 17:13 813次阅读
    选煤厂企业能源管控系统:让节能更简单、<b class='flag-5'>更高效</b>

    如何利用MES系统进行产能分析呢?

    利用MES系统进行产能分析是一个涉及数据收集、处理、分析和结果呈现的全过程。对生产过程加以监控,充分利用
    的头像 发表于 02-21 12:10 767次阅读
    如何<b class='flag-5'>利用</b>MES系统<b class='flag-5'>进行</b>产能<b class='flag-5'>分析</b>呢?

    电力系统数据分析技术

    和可靠性。 数据来源与类型 电力系统数据分析数据来源广泛,包括但不限于: 电网运行数据 :包括电压、电流、功率、频率等实时监测数据。 用户
    的头像 发表于 01-18 09:46 1222次阅读

    智能焊接数据分析设备提升工业效率与精度

    随着科技的不断进步,智能制造已经成为推动工业4.0发展的关键力量。在众多的智能制造技术中,智能焊接数据分析设备因其在提高生产效率和焊接质量方面的显著效果而受到广泛关注。本文将探讨智能焊接数据分析设备
    的头像 发表于 01-15 14:11 664次阅读

    ADC12D1800RF使用DESCLKIQ模式采样数据分析时二次谐波大,有什么方法可以改善?

    请问利用ADC12D1800RF参考电路设计,对比于数据手册,使用DESCLKIQ模式采样数据分析时二次谐波大,有什么方法可以改善?
    发表于 01-02 07:14

    Mathematica 在数据分析中的应用

    ,在数据分析领域发挥着重要作用。 1. 数据导入 在进行数据分析之前,首先需要将数据导入到Mathematica中。Mathematica支持多种
    的头像 发表于 12-26 15:41 1077次阅读

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

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

    如何使用ddc进行数据分类

    在探讨如何使用DDC(Dewey Decimal Classification,即杜威十进制分类法)进行数据分类时,我们首先需要明确DDC是一种用于图书馆分类和组织图书的体系,它按照一定的体系将各种
    的头像 发表于 12-18 15:05 1792次阅读

    绝缘电阻测试仪数据分析与处理

    绝缘电阻测试仪主要用于检查电气设备或电气线路对地及相间的绝缘电阻。将所测得的结果与有关数据比较,这是对实验结果进行分析判断的重要方法。以下是对绝缘电阻测试仪的数据分析与处理方法的介绍:
    的头像 发表于 12-10 15:00 1515次阅读