Python中的大数据分析正在复兴。这一切都是从NumPy开始的,它也是我在本文中介绍的工具背后的构建块之一。

2006年,大数据这个话题逐渐受到关注,尤其是随着Hadoop的发布。

Pandas因为它的数据帧而紧随其后。

2014年是大数据成为主流的一年,也是Apache Spark发布的一年。

2018年,Dask和其他用于Python数据分析的库相继问世。

技术更迭速度实在太快了,每个月我都能找到一个新的工具,作为一名IT从业者,需要时刻保持与最新技术的联系。如果你认为这篇文章是关于Dask的,那你就大错特错了。在这里,给大家分享一个我发现的另一个用于数据分析的Python库,好用到飞起!

认识Vaex

Vaex是一个高性能的Python库,用于惰性核心数据帧(类似于Pandas),以可视化和探索大型表格数据集。它可以每秒计算超过十亿行的基本统计数据,并且支持多种可视化方式,允许对大数据进行交互式探索。

1、Vaex vs Dask

Vaex与Dask不相似,但与Dask数据帧相似,后者构建在pandas数据帧之上。这意味着Dask继承了pandas的问题,比如数据必须完全加载到RAM中才能进行处理。但是Vaex不是这样的。

Vaex不会复制数据帧,因此它可以在主存较小的机器上处理较大的数据帧。

Vaex和Dask都使用延迟处理。唯一的区别是Vaex只在需要时计算字段,而Dask则需要显式使用计算函数。

数据需要采用HDF5或Apache Arrow格式才能充分利用Vaex。

2、安装Vaex

安装Vaex与安装任何其他Python库一样简单:

pip install vaex

我们开始吧

让我们创建一个包含10亿行和1000列的pandas数据框来创建一个大数据文件。

import vaex
import pandas as pd
import numpy as np
n_rows = 1000000
n_cols = 1000
df = pd.DataFrame(np.random.randint(0, 100, size=(n_rows, n_cols)), columns=['col%d' % i for i in range(n_cols)])
df.head()

这个数据帧将会使用多少主内存?

df.info(memory_usage='deep')

我们要把该数据帧保存到磁盘上,以便以后用Vaex读取它。

file_path = 'big_file.csv'
df.to_csv(file_path, index=False)

通过直接使用Vaex读取整个CSV文件,我们不会获得太多的速度,因为这与Pandas相似。我的笔记本电脑需要大约85秒。

但是,当我们将CSV转换为HDF5(分层数据格式版本5)时,你就能了解到Vaex的好处了。Vaex具有转换的功能,该功能甚至可以通过转换较小的块来支持大于主内存的文件。

由于内存限制,我们无法使用Pandas打开大文件,但是我们可以将其隐藏为HDF5,使用Vaex处理可以轻松处理。

dv = vaex.from_csv(file_path, convert=True, chunk_size=5_000_000)

该功能自动创建HDF5文件并将其永久保存到磁盘上。

让我们检查一下dv类型。

type(dv)
# 输出
vaex.hdf5.dataset.Hdf5MemoryMapped

现在,让我们使用Vaex读取7.5 GB的数据集,测试读取速度。

dv = vaex.open('big_file.csv.hdf5')

Vaex用1秒的时间就执行完上面的命令。但Vaex实际上并没有读取文件,因为加载很慢。

让我们通过计算col1的和来强制读取它。

suma = dv.col1.sum()
suma
# 数组(49486599)

看到测试结果时,你会非常惊讶,Vaex只花了不到1秒的时间,就计算出了总和。它是怎么做到的呢?通过使用内存映射。

1、绘图

Vaex在绘制数据时也很快,它具有特殊的绘图功能plot1d、plot2d和plot2d_等高线。

dv.plot1d(dv.col2, figsize=(14, 7))

2、虚拟列

Vaex在添加新列时会创建一个虚拟列,该列不占用主内存,因为它是动态计算的。

dv['col1_plus_col2'] = dv.col1 + dv.col2
dv['col1_plus_col2']

3、有效过滤

Vaex在过滤数据时不会创建数据帧副本,这样更节省内存。

dvv = dv[dv.col1 > 90]

聚合

聚集的工作原理与Panddas略有不同,但重要的是,它们的速度非常快。

让我们计算一个二进制列,其中col1≥50。

dv['col1_50'] = dv.col1 >= 50

Vaex在一个命令中组合group by和aggregation。下面的命令按“col1_50”列对数据进行分组,并计算col3列的总和。

dv_group = dv.groupby(dv['col1_50'], agg=vaex.agg.sum(dv['col3']))
dv_group

连接

Vaex在不创建内存副本的情况下连接数据,这样可以节省主内存。Pandas用户熟悉的 join 函数:

dv_join = dv.join(dv_group, on=’col1_50')

最后

看完有没有觉得大开眼界?

平时,我们一般都会用Pandas和Dask等库,但是Python的读取速度实在不敢恭维,这也是它的最大缺点了,有了Vaex,相信能帮助大家提高一些读取速度。

希望以上内容,能给大家带来帮助,喜欢本文的同学记得转发+收藏哦~

关注我们的公众号:为AI呐喊(weainahan)可以学到更多知识!

数据加载很慢_Vaex真香!几秒钟就能处理数十亿行数据,比Pandas、Dask更好用相关推荐

  1. vaex 处理海量数据_Vaex真香!几秒钟就能处理数十亿行数据,比Pandas、Dask更好用...

    Python中的大数据分析正在复兴.这一切都是从NumPy开始的,它也是我在本文中介绍的工具背后的构建块之一. 2006年,大数据这个话题逐渐受到关注,尤其是随着Hadoop的发布. Pandas因为 ...

  2. ElasticSearch 在数十亿级别数据下,如何提高查询效率?

    来源:https://zhuanlan.zhihu.com/p/60458049 面试题 es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊? 面试官心理分析 这个问题是肯定要问的,说白了,就 ...

  3. 【ElasticSearch】ElasticSearch在数十亿级别数据下,如何提高查询效率? 性能优化

    1.概述 转载:https://zhuanlan.zhihu.com/p/60458049 这里面主要有个filesystem cache 服务这个想法很好. 面试题 es 在数据量很大的情况下(数十 ...

  4. sql索引从入门到精通(十亿行数据测试报告)

    导读部分 ----------------------------------------------------------------------------------------------- ...

  5. PyTorch1.12 亮点一览 | DataPipe + TorchArrow 新的数据加载与处理范式

    目录 前言 现有的 Dataset 和 DataLoader 及其存在的问题 新的数据加载方式:DataPipe 与 DataLoader2 结构化数据处理新范式:TorchArrow 总结 参考链接 ...

  6. pandas入门(6)——数据加载、存储与文件格式

    pandas入门(6)--数据加载.存储与文件格式 输入输出通常可以划分为几个大类:读取文本文件和其他更高效的磁盘存储格式,加载数据库中的数据,利用Web API操作网络资源 一.读取文本格式数据 函 ...

  7. hive 复合类型_hive原生和复合类型的数据加载和使用

    原生类型 原生类型包括TINYINT,SMALLINT,INT,BIGINT,BOOLEAN,FLOAT,DOUBLE,STRING,BINARY (Hive 0.8.0以上才可用),TIMESTAM ...

  8. 【学习系列7】Pytorch中的数据加载

    目录 1. 模型中使用数据加载器的目的 2. 数据集类 3. 迭代数据集 1. 模型中使用数据加载器的目的 在前面的线性回归横型中,我们使用的数据很少,所以直接把全部数据放到锁型中去使用. 但是在深度 ...

  9. 已解决微软Office2016 Excel卡顿\缓慢、打开第二个文件加载很慢问题(亲测有效)

    已解决微软Office2016 Excel卡顿\缓慢.打开第二个文件加载很慢问题(亲测有效) 文章目录 问题描述 问题分析 解决方法1 解决方法2 解决方法3 1) 修改基本设置 2)修改配置文件 千 ...

最新文章

  1. android 蓝牙耗电量,外媒测试手机蓝牙耗电情况:近乎毫无影响
  2. AI“生死”落地:谁有资格入选AI Top 30+案例?
  3. RISC-V的自定义CPU悖论
  4. JavaScript发布订阅者模式
  5. 疫情下跨境电商逆势增长,大数据告诉你如何抓住跨境网购新趋势
  6. 深入react技术栈(2):JSX语法
  7. 2016-5-31 问题及解决
  8. [Tips] WSL ubuntu 18.04 安装python3
  9. python集合类型中的元素是有序的_python基础篇:很有意思的数据类型,集合(set) 常用去去重...
  10. Java并发 乐观锁和悲观锁 乐观锁的一种实现方式CAS
  11. 在XCode工程中创建bundle文件
  12. Fragment学习(二): 管理Fragment和Fragment通讯
  13. 资深码农教你写详细设计(附示例模板)
  14. I2C总线与EPPROM
  15. Ubuntu18.04: Git clone 时出现gnutls_handshake() failed: The TLS connection was non-properly terminated
  16. [置顶] 可惜了,没有人可以代替你自己的思考
  17. 【图】max51开发板(手工焊接)
  18. iscc2022弱雪wp
  19. group normalization
  20. mtatlas mysql_MHA-Atlas-MySQL高可用(下)

热门文章

  1. 使用OpenCV的ANN_MLP神经网络实现数字识别
  2. OpneCV3特征提取及匹配SURF算法(一)——SURF概述与代码演示
  3. VS2010解决方案位置不对和改变程序字体的方案
  4. php post请求后端拿不到值_[精选] uniapp实现多端开发,与PHP是如何结合的
  5. python输入一组数据、进行简单的统计_《利用Python进行数据分析》学习笔记——第二章(3)...
  6. c语言平滑raw图像(取平均值法)
  7. Spring Boot 2.0(四):使用 Docker 部署 Spring Boot
  8. 团队作业第二次—项目选题报告(追光的人)
  9. P4568 [JLOI2011]飞行路线 P2939 [USACO09FEB]改造路Revamping Trails
  10. JS特效 -- 网页图片飞起来