Vaex :突破pandas,快速分析100G大数据量

pandas处理大数据的限制

现在的数据科学比赛提供的数据量越来越大,动不动几十个G,甚至上百G,这就要考验机器性能和数据处理能力。

Python中的pandas是大家常用的数据处理工具,能应付较大数据集(千万行级别),但当数据量达到十亿百亿行级别,pandas处理起来就有点力不从心了,可以说非常的慢。

这里面会有电脑内存等性能的因素,但pandas本身的数据处理机制(依赖内存)也限制了它处理大数据的能力。

当然pandas可以通过chunk分批读取数据,但是这样的劣势在于数据处理较复杂,而且每一步分析都会消耗内存和时间。

下面用pandas读取3.7个G的数据集(hdf5格式),该数据集共有4列、1亿行,并且计算第一行的平均值。我的电脑CPU是i7-8550U,内存8G,看看这个加载和计算过程需要花费多少时间。

数据集:

使用pandas读取并计算:

看上面的过程,加载数据用了15秒,平均值计算用了3.5秒,总共18.5秒。

这里用的是hdf5文件,hdf5是一种文件存储格式,相比较csv更适合存储大数据量,压缩程度高,而且读取、写入也更快。

换上今天的主角vaex,读取同样的数据,做同样的平均值计算,需要多少时间呢?

使用vaex读取并计算:

文件读取用了9ms,可以忽略不计,平均值计算用了1s,总共1s。

同样是读取1亿行的hdfs数据集,为什么pandas需要十几秒,而vaex耗费时间接近于0呢?

这里主要是因为pandas把数据读取到了内存中,然后用于处理和计算。而vaex只会对数据进行内存映射,而不是真的读取数据到内存中,这个和spark的懒加载是一样的,在使用的时候 才会去加载,声明的时候不加载。

所以说不管加载多大的数据,10GB、100GB…对vaex来说都是瞬间搞定。美中不足的是,vaex的懒加载只支持HDF5, Apache Arrow,Parquet, FITS等文件,不支持csv等文本文件,因为文本文件没办法进行内存映射。

可能有的小伙伴不太理解内存映射,下面放一段解释,具体要弄清楚还得自行摸索:

内存映射是指硬盘上文件的位置与进程逻辑地址空间中一块大小相同的区域之间的一一对应。这种对应关系纯属是逻辑上的概念,物理上是不存在的,原因是进程的逻辑地址空间本身就是不存在的。在内存映射的过程中,并没有实际的数据拷贝,文件没有被载入内存,只是逻辑上被放入了内存,具体到代码,就是建立并初始化了相关的数据结构(struct address_space)。

什么是vaex?

前面对比了vaex和pandas处理大数据的速度,vaex优势明显。虽然能力出众,不比pandas家喻户晓,vaex还是个刚出圈的新人。

vaex同样是基于python的数据处理第三方库,使用pip就可以安装。

官网对vaex的介绍可以总结为三点:

  1. vaex是一个用处理、展示数据的数据表工具,类似pandas;
  2. vaex采取内存映射、惰性计算,不占用内存,适合处理大数据;
  3. vaex可以在百亿级数据集上进行秒级的统计分析和可视化展示;

vaex的优势在于:

  1. 性能:处理海量数据, 1 0 9 10^9 109 行/秒;
  2. 惰性:快速计算,不占用内存;
  3. 零内存复制:在进行过滤/转换/计算时,不复制内存,在需要时进行流式传输;
  4. 可视化:内含可视化组件;
  5. API:类似pandas,拥有丰富的数据处理和计算函数;
  6. 可交互:配合Jupyter notebook使用,灵活的交互可视化;

安装vaex

使用pip或者conda进行安装:

读取数据

vaex支持读取hdf5、csv、parquet等文件,使用read方法。hdf5可以惰性读取,而csv只能读到内存中。

vaex数据读取函数:

数据处理

有时候我们需要对数据进行各种各样的转换、筛选、计算等,pandas的每一步处理都会消耗内存,而且时间成本高。除非说使用链式处理,但那样过程就很不清晰。

vaex则全过程都是零内存。因为它的处理过程仅仅产生expression(表达式),表达式是逻辑表示,不会执行,只有到了最后的生成结果阶段才会执行。而且整个过程数据是流式传输,不会产生内存积压。

可以看到上面有筛选和计算两个过程,都没有复制内存,这里采用了延迟计算,也就是惰性机制。如果每个过程都真实计算,消耗内存不说,单是时间成本就很大。

vaex的统计计算函数:

可视化展示

vaex还可以进行快速可视化展示,即便是上百亿的数据集,依然能秒出图。

vaex可视化函数:

结论

vaex有点类似spark和pandas的结合体,数据量越大越能体现它的优势。只要你的硬盘能装下多大数据,它就能快速分析这些数据。

vaex还在快速发展中,集成了越来越多pandas的功能,它在github上的star数是5k,成长潜力巨大。

附:hdf5数据集生成代码(4列1亿行数据)

import pandas as pd
import vaex
df = pd.DataFrame(np.random.rand(100000000,4),columns=['col_1','col_2','col_3','col_4'])
df.to_csv('example.csv',index=False)
vaex.read('example.csv',convert='example1.hdf5')

注意这里不要用pandas直接生成hdf5,其格式会与vaex不兼容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839690.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS之ArkUI布局设计常见细节

这里写目录标题 1. Button设置带有渐变色的背景图片无效1.1 问题分析1.2 成功案例 2. 路由跳转失败2.1 问题分析 1. Button设置带有渐变色的背景图片无效 1.1 问题分析 说明:设置颜色渐变需先设置backgroundColor为透明色。 Button($r(app.string.login), { type…

Logrus IT的专家们已将游戏《菇勇者传说》翻译成俄语

《菇勇者传说》是一款引人入胜的放置类RPG游戏,邪恶的龙将所有人变成了蘑菇。为了恢复人类形态,玩家的角色需要从小蘑菇成长为强大的勇士。 游戏中有多个蘑菇职业,每个职业都有独特的技能。玩家可以根据自己的喜好提升角色的属性和改变外观&…

0基础从前端到Web3 —— Mine Clearance Frontend(一)

初始化项目以及通过dapp-kit连接钱包的部分就不再赘述&#xff0c;具体可以点击查看&#xff0c;如果篇幅当中遇到了一些未添加的依赖项&#xff0c;直接通过pnpm add -D <name>一般都可以解决。 一&#xff1a;链上网络切换 这里提供一个最简单的切换方式&#xff0c;…

Obsidian Git 多端同步

2023年6月&#xff0c;某云笔记限制了免费用户最多同时登录 2 台设备&#xff0c;想要增加设备数量需要付费开通会员。之后我一直想找一款合适的笔记本软件&#xff0c;年底尝试了Obsidian&#xff0c;断断续续摸索了好几天终于成功了。将那时的笔记拿来分享一下。 相关地址&am…

FPGA搭积木之按键消抖(改进版)

目录 1.前言 2.回顾之前的设计 3.基于读者思路的设计 4.ModelSim仿真 1.前言 昨天分享的关于FPGA对机械按键消抖的设计&#xff0c;有读者指出了其中的不足&#xff0c;并给出了他的思路。今天就读者的设计思路&#xff0c;来再做一个按键消抖模块。这个程序大概是大学的时…

亚马逊、eBay、沃尔玛、OZON、速卖通等平台自养号攻略,助力测评补单

当前&#xff0c;跨境电商面临着巨大的挑战&#xff0c;其运营环境日益变得错综复杂。然而&#xff0c;这种复杂性可以归结为两个核心元素&#xff1a;买与刷。商家们通过进行买卖交易或补单操作&#xff0c;旨在增加销售、提升产品排名&#xff0c;并进而增强产品的权重。 销…

docker-如何将容器外的脚本放入容器内,将容器内的脚本放入容器外

文章目录 前言docker-如何将容器外的脚本放入容器内&#xff0c;将容器内的脚本放入容器外、1. docker 如何将容器外的脚本放入容器内1.1. 验证 2. 将容器内的脚本放入容器外 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&…

VMware Workstation 虚拟机安装 ubuntu 24.04 server 详细教程 服务器安装图形化界面

1 阿里云下载 ubuntu-releases安装包下载_开源镜像站-阿里云 2 打开vmware,新建虚拟机 3 选择下载的镜像,开始安装 3 光驱这里修改下 4 重新启动&#xff0c;安装图形化界面 #更新软件包列表 sudo apt-get update #安装Ubuntu图形桌面 sudo apt install ubuntu-desktop 5 安…

【调试笔记-20240524-Linux-扩展 OpenWrt-23.05 发行版 EXT4 镜像文件大小】

调试笔记-系列文章目录 调试笔记-20240524-Linux-扩展 OpenWrt-23.05 发行版 EXT4 镜像文件大小 文章目录 调试笔记-系列文章目录调试笔记-20240524-Linux-扩展 OpenWrt-23.05 发行版 EXT4 镜像文件大小 前言一、调试环境操作系统&#xff1a;Ubuntu 22.04.4 LTS工作环境调试目…

【SD-WAN】香港企业进入粤港澳大湾区所面临的机遇和挑战

粤港澳大湾区发展及规划是中国其中一个主点发展战略&#xff0c;具备完整的多元化产业结构&#xff0c;城市之间建立强大的经济互补性&#xff0c;是国际性湾区和世界级城市群。因此&#xff0c;大湾区近年吸引了不少香港的创新及科技企业前往发展投资及设立据点扩展业务。本文…

增强版 Kimi:AI 驱动的智能创作平台,实现一站式内容生成(图片、PPT、PDF)!

前言 基于扣子 Coze 零代码平台&#xff0c;我们从零到一轻松实现了专属 Bot 机器人的搭建。 AI 大模型&#xff08;LLM&#xff09;、智能体&#xff08;Agent&#xff09;、知识库、向量数据库、知识图谱&#xff0c;RAG&#xff0c;AGI 的不同形态愈发显现&#xff0c;如何…

SpringBoot中注解@RestController | @ResponseBody | @Controller

ResponseBody 可以修饰类和方法 Controller 和 RestController 只能修饰类 RestController 告诉Spring&#xff0c;帮我们管理这个代码&#xff0c;我们后续访问时&#xff0c;才能访问到 RequestMapping 路由映射&#xff0c;可以修饰方法&#xff0c;也可以修饰类 访问地址…

【Linux网络编程】IO多种转接之Reactor

Reactor 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 基于上一篇epoll的学习&#xff0c;现在我们也知道epoll的工作模式有两种&#xff0c…

【UE5.1 多线程 异步】“Async Blueprints Extension”插件使用记录

目录 一、异步生成Actor示例 二、异步计算示例 参考视频 首先需要在商城中下载“Async Blueprints Extension”插件 一、异步生成Actor示例 2. 创建一个线程类&#xff0c;这里要指定父类为“LongAsyncTask”、“InfiniteAsyncTask”、“ShortAsyncTask”中的一个 在线程类…

el-table 实现嵌套表格的思路及完整功能代码

要实现的需求是这样的&#xff1a; 本来我是用 el-table 的 :span-method 方法实现的&#xff0c;但发现合并起来有问题&#xff0c;跟我的需求差距有些大&#xff0c;于是我想到了嵌套表格。但是嵌套完之后的样子也是很奇怪&#xff1a; 不要气馁&#xff0c;思路还是对的&a…

基于文心智能体平台打造专属情感类陪伴智能体【情绪价值提供者】

文章目录 一、文心智能体平台介绍二、文心智能体平台注册三、智能体介绍四、智能体创建过程4.1 基础配置4.2 高级配置4.3 预览调优4.4 公开发布 五、智能体使用心得六、智能体分享方式七、参考链接 一、文心智能体平台介绍 文心智能体平台是百度推出的基于文心大模型的智能体&…

计算机毕业设计 | springboot药品库存追踪与管理系统 药店管理(附源码)

1&#xff0c;绪论 1.1 背景调研 如今药品调价频繁&#xff0c;且品种繁多&#xff0c;增加了药品销售定价的难度。药品来货验收登记中的审查有效期环节容易出错&#xff0c;错收过期或有效期不足的药品。 手工模式下的药品库存难以及时掌握&#xff0c;虽然采取了每日进行缺…

Flask CORS: 解决跨域资源共享问题的利器

文章目录 安装和启用 CORS配置 CORS拓展 在本文中&#xff0c;我们介绍了如何使用 Flask-CORS 扩展来解决跨域问题。Flask-CORS 是一个方便的工具&#xff0c;可以帮助我们轻松地实现跨域资源共享支持。 安装和启用 CORS 要开始使用 Flask-CORS&#xff0c;我们需要先安装它。…

机器学习模型可视化分析和诊断神器Yellowbrick

大家好&#xff0c;机器学习(ML)作为人工智能的核心&#xff0c;近来得到巨大应用&#xff0c;ML是使计算机能够在无需显式编程的情况下进行学习和预测或决策。ML算法通过学习历史数据模式&#xff0c;来对新的未见数据做出明智的预测或决策。然而&#xff0c;构建和训练ML模型…

静态代理和动态代理

静态代理 代理接口 public interface Person {public String wakeUp(String name);public String lunch(String name); }被代理对象 public class Student implements Person{Overridepublic String wakeUp(String name) {System.out.println(name"星期一早上8点上班&a…