日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vaex 处理海量数据_Vaex真香!几秒钟就能处理数十亿行数据,比Pandas、Dask更好用... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Python中的大數(shù)據(jù)分析正在復(fù)興。這一切都是從NumPy開始的,它也是我在本文中介紹的工具背后的構(gòu)建塊之一。

2006年,大數(shù)據(jù)這個話題逐漸受到關(guān)注,尤其是隨著Hadoop的發(fā)布。

Pandas因?yàn)樗臄?shù)據(jù)幀而緊隨其后。

2014年是大數(shù)據(jù)成為主流的一年,也是Apache Spark發(fā)布的一年。

2018年,Dask和其他用于Python數(shù)據(jù)分析的庫相繼問世。

技術(shù)更迭速度實(shí)在太快了,每個月我都能找到一個新的工具,作為一名IT從業(yè)者,需要時刻保持與最新技術(shù)的聯(lián)系。如果你認(rèn)為這篇文章是關(guān)于Dask的,那你就大錯特錯了。在這里,給大家分享一個我發(fā)現(xiàn)的另一個用于數(shù)據(jù)分析的Python庫,好用到飛起!

認(rèn)識Vaex

Vaex是一個高性能的Python庫,用于惰性核心數(shù)據(jù)幀(類似于Pandas),以可視化和探索大型表格數(shù)據(jù)集。它可以每秒計(jì)算超過十億行的基本統(tǒng)計(jì)數(shù)據(jù),并且支持多種可視化方式,允許對大數(shù)據(jù)進(jìn)行交互式探索。

1、Vaex vs Dask

Vaex與Dask不相似,但與Dask數(shù)據(jù)幀相似,后者構(gòu)建在pandas數(shù)據(jù)幀之上。這意味著Dask繼承了pandas的問題,比如數(shù)據(jù)必須完全加載到RAM中才能進(jìn)行處理。但是Vaex不是這樣的。

Vaex不會復(fù)制數(shù)據(jù)幀,因此它可以在主存較小的機(jī)器上處理較大的數(shù)據(jù)幀。

Vaex和Dask都使用延遲處理。唯一的區(qū)別是Vaex只在需要時計(jì)算字段,而Dask則需要顯式使用計(jì)算函數(shù)。

數(shù)據(jù)需要采用HDF5或Apache Arrow格式才能充分利用Vaex。

2、安裝Vaex

安裝Vaex與安裝任何其他Python庫一樣簡單:

pip install vaex

我們開始吧

讓我們創(chuàng)建一個包含10億行和1000列的pandas數(shù)據(jù)框來創(chuàng)建一個大數(shù)據(jù)文件。

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()

這個數(shù)據(jù)幀將會使用多少主內(nèi)存?

df.info(memory_usage='deep')

我們要把該數(shù)據(jù)幀保存到磁盤上,以便以后用Vaex讀取它。

file_path = 'big_file.csv'

df.to_csv(file_path, index=False)

通過直接使用Vaex讀取整個CSV文件,我們不會獲得太多的速度,因?yàn)檫@與Pandas相似。我的筆記本電腦需要大約85秒。

但是,當(dāng)我們將CSV轉(zhuǎn)換為HDF5(分層數(shù)據(jù)格式版本5)時,你就能了解到Vaex的好處了。Vaex具有轉(zhuǎn)換的功能,該功能甚至可以通過轉(zhuǎn)換較小的塊來支持大于主內(nèi)存的文件。由于內(nèi)存限制,我們無法使用Pandas打開大文件,但是我們可以將其隱藏為HDF5,使用Vaex處理可以輕松處理。

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

該功能自動創(chuàng)建HDF5文件并將其永久保存到磁盤上。

讓我們檢查一下dv類型。

type(dv)

# 輸出

vaex.hdf5.dataset.Hdf5MemoryMapped

現(xiàn)在,讓我們使用Vaex讀取7.5 GB的數(shù)據(jù)集,測試讀取速度。

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

Vaex用1秒的時間就執(zhí)行完上面的命令。但Vaex實(shí)際上并沒有讀取文件,因?yàn)榧虞d很慢。

讓我們通過計(jì)算col1的和來強(qiáng)制讀取它。

suma = dv.col1.sum()

suma

# 數(shù)組(49486599)

看到測試結(jié)果時,你會非常驚訝,Vaex只花了不到1秒的時間,就計(jì)算出了總和。它是怎么做到的呢?通過使用內(nèi)存映射。

1、繪圖

Vaex在繪制數(shù)據(jù)時也很快,它具有特殊的繪圖功能plot1d、plot2d和plot2d_等高線。

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

2、虛擬列

Vaex在添加新列時會創(chuàng)建一個虛擬列,該列不占用主內(nèi)存,因?yàn)樗莿討B(tài)計(jì)算的。

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

dv['col1_plus_col2']

3、有效過濾

Vaex在過濾數(shù)據(jù)時不會創(chuàng)建數(shù)據(jù)幀副本,這樣更節(jié)省內(nèi)存。

dvv = dv[dv.col1 > 90]

聚合

聚集的工作原理與Panddas略有不同,但重要的是,它們的速度非???。

讓我們計(jì)算一個二進(jìn)制列,其中col1≥50。

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

Vaex在一個命令中組合group by和aggregation。下面的命令按“col1_50”列對數(shù)據(jù)進(jìn)行分組,并計(jì)算col3列的總和。

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

dv_group

連接

Vaex在不創(chuàng)建內(nèi)存副本的情況下連接數(shù)據(jù),這樣可以節(jié)省主內(nèi)存。Pandas用戶熟悉的 join 函數(shù):

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

最后

看完有沒有覺得大開眼界?

平時,我們一般都會用Pandas和Dask等庫,但是Python的讀取速度實(shí)在不敢恭維,這也是它的最大缺點(diǎn)了,有了Vaex,相信能幫助大家提高一些讀取速度。

希望以上內(nèi)容,能給大家?guī)韼椭?#xff0c;喜歡本文的同學(xué)記得轉(zhuǎn)發(fā)+收藏哦~

關(guān)注我們的公眾號:為AI吶喊(weainahan)可以學(xué)到更多知識!

總結(jié)

以上是生活随笔為你收集整理的vaex 处理海量数据_Vaex真香!几秒钟就能处理数十亿行数据,比Pandas、Dask更好用...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。