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
    +关注

    关注

    7

    文章

    1322

    浏览量

    113718
  • 变量
    +关注

    关注

    0

    文章

    597

    浏览量

    28114
  • 数据集
    +关注

    关注

    4

    文章

    1179

    浏览量

    24366

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

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

收藏 人收藏

    评论

    相关推荐

    Python利用pandas读写Excel文件

    使用pandas模块读取Excel文件可以更为方便和快捷。pandas可以将Excel文件读取为一个DataFrame对象,方便进行数据处理和分析
    的头像 发表于 12-16 11:22 608次阅读
    Python<b class='flag-5'>利用</b><b class='flag-5'>pandas</b>读写Excel文件

    Python编程的十大依赖库有哪些

    Pandas库是数据科学家的得力工具,它提供了强大的数据结构和数据分析功能。无论您需要进行数据清洗、分析
    的头像 发表于 12-13 10:29 453次阅读

    Get职场新知识:做分析,用大数据分析工具

    、多维动态分析,业务人随时按需分析,更灵活,更高效。 3、指标计算能力极强,能很好地完成计算组合多变、计算量极大的财务分析指标计算。 现在登录奥威BI SaaS平台,即可享受在线连接系
    发表于 12-05 09:36

    使用pandas进行数据选择和过滤的基本技术和函数

    Python pandas库提供了几种选择和过滤数据的方法,如loc、iloc、[]括号操作符、query、isin、between等等
    的头像 发表于 12-01 10:14 168次阅读
    使用<b class='flag-5'>pandas</b><b class='flag-5'>进行数据</b>选择和过滤的基本技术和函数

    如何实现Pandas的DataFrame转换交互式表格

    Pivottablejs是一个通过IPython widgets集成到Python中的JavaScript库,允许用户直接从DataFrame数据创建交互式和灵活的汇总报表。可以进行高效、清晰的
    的头像 发表于 11-21 16:15 381次阅读
    如何实现<b class='flag-5'>Pandas</b>的DataFrame转换交互式表格

    Anaconda:Python 数据分析与挖掘好帮手

    用Python进行数据分析的时候,你会不会烦恼要安装那么多的模块?比如Pandas、Numpy、matplotlib、scipy等等,而当你接手的项目是由不同的Python版本编写的时候你又得
    的头像 发表于 11-02 16:00 261次阅读
    Anaconda:Python <b class='flag-5'>数据分析</b>与挖掘好帮手

    Pandas:Python中最好的数据分析工具

    Pandas绝对是Python中最好的数据分析工具,不接受反驳。 本文将展示如何美化 Pandas DataFrame 中的数字,并使用一些更高级的
    的头像 发表于 10-31 10:47 219次阅读
    <b class='flag-5'>Pandas</b>:Python中最好的<b class='flag-5'>数据分析</b>工具

    什么格式是保存Pandas数据的最好格式

    数据分析相关项目工作时,我通常使用Jupyter笔记本和pandas库来处理和传递我的数据。对于中等大小的数据集来说,这是一个非常直接的过
    的头像 发表于 10-30 15:05 311次阅读
    什么格式是保存<b class='flag-5'>Pandas</b><b class='flag-5'>数据</b>的最好格式

    盘点66个Pandas函数合集

    今天我们重新盘点66个Pandas函数合集,包括数据预览、数值数据操作、文本数据操作、行/列操作等等,涉及“ 数据清洗 ”的方方面面。
    的头像 发表于 10-30 09:58 533次阅读
    盘点66个<b class='flag-5'>Pandas</b>函数合集

    别再埋头苦干了,标准化财务数据分析方案开箱即用!

    ,完成集团财务分析,随时对预算进行管控和分析; 4、独有的内存行列计算模型,只需在BI工具前端做简单设置,即可高效完成财务分析指标计算; 5
    发表于 09-05 10:06

    千人千面的数据分析有没可能?奥威BI数据可视化工具告诉你

    ,实现数字化运营管理。 ③按需筛选。用户可根据具体情况按照组织、时间段、产品品类等条件展开数据筛选分析。 奥威BI数据可视化工具是一款支持零编程的智能数据可视化
    发表于 08-29 14:45

    财务数据分析?奥威BI数据可视化工具很擅长

    、快速整合多业务系统,进行系统化财务分析 该方案可以快速整合多业务系统数据,直接将数据导入到系统中,无需进行复杂的
    发表于 08-29 09:44

    如何利用填报数据进行数据分析?#数据填报 #光点科技

    数据
    光点科技
    发布于 :2023年08月18日 09:13:16

    电商数据分析攻略,让你轻松搞定数据分析

    在当今的数字经济时代,运用大数据分析来促进业务增长已然成为一种普遍行为,拥有一套系统化的数据分析方案尤为重要。奥威BI电商数据分析方案是一种基于数据挖掘和机器学习技术的解决方案,以丰富
    发表于 06-27 09:22

    事实证明,国产BI软件的财务数据分析性价比极高!

    ,低成本、低风险、高效率。综合这两大因素,企业所需投入的成本被大幅度缩减,但财务数据分析效果极好。 哪款国产BI软件最适合做财务数据分析? 当然是奥威BI软件。 1、使用成本、维护成本低 它支持按功能
    发表于 05-16 11:06