网站首页 > 基础教程 正文
全文共1513字,预计学习时长8分钟
一切都始于NumPy。2006年,大数据这个话题逐渐引起人们关注,特别是在Hadoop问世时,Pandas DataFrames紧随其后。2014年是大数据元年,同年Apache Spark投入使用。2018年,Dask和其他用于Python数据分析的库诞生。可以看到,Python中的大数据分析正在复兴。
每个月笔者都会找到一个想学的新工具,跟上最新的技术步伐也很重要。花一两个小时看教程是值得的,从长远来看这可以节省大量时间。最近,笔者发现了一个值得了解的用于数据分析的Python库。
Python中的大数据分析正在复兴
Meet Vaex
Vaex是一个高性能的Python库,类似于Pandas,是采用延迟out-of-core DataFrames库,可以对大型表格数据集进行可视化及探索。每秒可计算超过十亿行的基本统计数据。支持多种可视化,允许对大数据进行交互式探索。
Vaex vs Dask
Vaex与Dask不同,但与Dask DataFrames类似,Dask DataFrames是建立在Pandas DataFrames基础之上的,这意味着Dask继承了Pandas的问题,例如必须将数据完全加载到RAM中才能进行处理,而Vaex并不会这样。
Vaex不会复制DataFrame,可以在主内存较少的机器上处理更大的DataFrame。Vaex和Dask都使用延迟处理。唯一的区别是Vaex会在需要的时候计算字段,而Dask则需要显式地使用compute函数。数据需要采用HDF5或Apache Arrow格式才能充分利用Vaex。
Vaex安装
安装Vaex和安装其他Python包一样简单:
pip install vaex
让我们试验一下
创建一个包含10亿行和1000列的Pandas DataFrame,以创建一个大数据文件:
importvaex
import pandas as pd
import numpy as npn_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()
此DataFrame使用多少主内存?
df.info(memory_usage='deep')
把它保存到磁盘上,之后可以用Vaex读取。
file_path= 'big_file.csv'
df.to_csv(file_path, index=False)
直接通过Vaex读取整个CSV,这与pandas相似,我们不会有什么发现。这个过程下来笔者的笔记本电脑需要大约85秒。
我们需要将CSV转换为HDF5(分层数据格式第五版)来看看看Vaex的好处。Vaex有一个转换函数,通过转换较小的块甚至可以支持大于主内存的文件。如果由于内存限制不能用pandas打开更大的文件,可以将其转换为HDF5并用Vaex处理。
dv =vaex.from_csv(file_path, convert=True, chunk_size=5_000_000)
这个函数自动创建一个HDF5文件并将其保存到硬盘。检查一下dv类型:
type(dv)#output
vaex.hdf5.dataset.Hdf5MemoryMapped
现在,用Vaex处理7.5GB的数据集——不需要读取它,因为在上面的dv变量中已经有了它。这里只是为了测试速度。
dv =vaex.open('big_file.csv.hdf5')
Vaex只需要不到1秒的时间来执行上面的命令。但因为延迟加载,Vaex实际上并没有读取文件。让我们通过计算col1的和来读取它:
suma =dv.col1.sum()
suma# array(49486599)
因为使用了存储印象,Vaex只需要不到1秒的时间来计算总和!
绘图
在绘制数据时,Vaex速度也很快。它具有特殊的绘图功能plot1d,plot2d和plot2d_contour。
dv.plot1d(dv.col2,figsize=(14, 7))
虚拟列
Vaex在添加新列时创建一个虚拟列,这个列在即时计算时不占用主内存。
dv['col1_plus_col2']= dv.col1 + dv.col2
dv['col1_plus_col2']
高效过滤
Vaex在过滤数据时不会创建DataFrame副本,这样可以提高内存效率。
dvv =dv[dv.col1 > 90]
聚合
聚合的工作原理与Pandas略有不同,但它们的速度极快。让我们计算一个二进制列,其中col1≥50。
dv['col1_50']= dv.col1 >= 50
Vaex在一个命令中包括分组和聚合。下面的命令按“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')
这个Python库可能你之前未听说过,但它真的值得了解。
留言点赞关注
我们一起分享AI学习与发展的干货
如转载,请后台留言,遵守转载规范
猜你喜欢
- 2024-10-28 pandas 与 GUI 界面的超强结合,爆赞
- 2024-10-28 如何基于RDD方式完成DataFrame的代码构建?
- 2024-10-28 pandas基础教程(四) DataFrame的前世今生
- 2024-10-28 推荐收藏!10个相见恨晚的Pandas函数,太好用了
- 2024-10-28 数据分析之数据载入及初步观察 数据加载的方法
- 2024-10-28 Pandas 数据结构之 DataFrame使用教程
- 2024-10-28 Pandas 数据结构 - DataFrame pandas数据类型有哪些
- 2024-10-28 如何在 Python 中创建DataFrame,教你七种方法玩转DataFrame
- 2024-10-28 超简单!Pandas DataFrame 高效数据分析入门指南
- 2024-10-28 Pandas使用系列(二):Dataframe常用操作方法
- 05-14CSS基础知识(一) CSS入门
- 05-14CSS是什么? CSS和HTML有什么关系?
- 05-14什么是CSS3?
- 05-14CSS如何画一个三角形?
- 05-14初识CSS——CSS三角制作
- 05-14Wordpress建站教程:给图片添加CSS样式
- 05-14HTML和HTML5,css和css3的区别有哪些?
- 05-14Html中Css样式Ⅱ
- 最近发表
- 标签列表
-
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- mysql教程 (60)
- pythonif (86)
- location.href (69)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)