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

    文章

    1400

    浏览量

    120988
  • 变量
    +关注

    关注

    0

    文章

    616

    浏览量

    29566
  • 数据集
    +关注

    关注

    4

    文章

    1240

    浏览量

    26261

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    利用数据API构建实时数据分析与可视化报表系统

    API(涵盖销售统计、用户画像、流量分析等)进行高效数据整合、分析,并实现 自定义报表生成 和 实时
    的头像 发表于 04-02 15:56 166次阅读
    <b class='flag-5'>利用</b><b class='flag-5'>数据</b>API构建实时<b class='flag-5'>数据分析</b>与可视化报表系统

    API数据分析:淘宝流量来源分析,渠道优化!

    ​ 在电商领域,流量来源分析是优化营销策略的核心。淘宝作为中国领先的电商平台,其流量数据可通过API(应用程序接口)高效获取和分析。本技术帖将逐步指导您如何
    的头像 发表于 01-23 13:42 378次阅读
    API<b class='flag-5'>数据分析</b>:淘宝流量来源<b class='flag-5'>分析</b>,渠道优化!

    利用拼多多用户API进行粉丝数据分析,有效提升用户粘性

    这些API进行粉丝数据分析,并基于分析结果制定增强用户粘性的策略。 一、 拼多多用户API概览 拼多多开放平台提供了丰富的API接口,涵盖商品、交易、用户、物流等多个维度。对于粉丝数据分析
    的头像 发表于 12-30 10:38 367次阅读
    <b class='flag-5'>利用</b>拼多多用户API<b class='flag-5'>进行</b>粉丝<b class='flag-5'>数据分析</b>,有效提升用户粘性

    淘宝数据分析API:用户行为洞察,精准营销决策!

    。本文将探讨如何利用这些API实现用户行为的深度洞察,并转化为实际的营销价值。 一、用户行为数据的价值:从流量到洞察 用户进入店铺或浏览商品的每一个动作,都蕴含着丰富的信息。传统的数据分析可能停留在流量、转化率等宏观层面
    的头像 发表于 12-25 14:12 407次阅读
    淘宝<b class='flag-5'>数据分析</b>API:用户行为洞察,精准营销决策!

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

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

    基于FPGA的高效内存到串行数据传输模块设计

    本文介绍了一个基于FPGA的内存到串行数据传输模块,该模块设计用来高效地处理存储器中的数据并传输至串行接口。项目中自定义的“datamover_mm2s_fpga_”方案利用异步FIF
    的头像 发表于 11-12 14:31 4489次阅读
    基于FPGA的<b class='flag-5'>高效</b>内存到串<b class='flag-5'>行数据</b>传输模块设计

    温度循环测试后如何进行数据记录和分析

    温度循环测试后的数据记录和分析是验证电能质量在线监测装置精度稳定性、功能完整性、硬件可靠性的核心环节,需围绕 “数据溯源可查、分析逻辑闭环、结论依据充分” 展开,结合测试标准(IEC
    的头像 发表于 09-26 14:22 664次阅读

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

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

    如何有效利用高光谱成像技术提升数据分析效率

    随着人工智能和大数据技术的快速发展,高光谱成像技术作为一种融合光谱信息与空间影像的新兴技术,正日益成为提升数据分析效率的重要工具。在农业监测、环境保护、矿产勘探等多个行业中,高光谱成像通过获取精准
    的头像 发表于 09-11 16:13 978次阅读
    如何有效<b class='flag-5'>利用</b>高光谱成像技术提升<b class='flag-5'>数据分析</b>效率

    如何通过数据分析识别设备故障模式?

    通过数据分析识别设备故障模式,本质是从声振温等多维数据中提取故障特征,建立 “数据特征 - 故障类型” 的映射关系,核心可通过特征提取、模式匹配、趋势分析三步实现,精准定位故障根源与发
    的头像 发表于 08-19 11:14 1113次阅读
    如何通过<b class='flag-5'>数据分析</b>识别设备故障模式?

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

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

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

    AI数据分析仪, 平板数据分析仪, 数据分析仪, AI边缘计算, 高带宽数据输入
    的头像 发表于 07-17 09:20 865次阅读
    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

    labview进行数据采集

    请问在labview中进行数据采集,为保证不同设备之间采集数据的同步性,准备利用PPS进行触发开始任务,利用DAQmx设备内部时钟源来设置
    发表于 04-27 10:19