值得與Python結(jié)合使用的五個(gè)新穎的數(shù)據(jù)科學(xué)工具
譯文譯者 | 布加迪
審校 | 重樓
Python龐大的數(shù)據(jù)科學(xué)工具生態(tài)系統(tǒng)對用戶有很大的吸引力。生態(tài)系統(tǒng)如此龐大而豐富的唯一缺點(diǎn)是,有時(shí)最好的工具可能會(huì)被忽視。
下面介紹了其中幾款面向Python的最優(yōu)秀的或不太知名的數(shù)據(jù)科學(xué)項(xiàng)目。Polars等一些項(xiàng)目得到了比以前更多的關(guān)注,但依然值得更廣泛的關(guān)注,ConnectorX等其他工具則是隱藏的瑰寶。
1.ConnectorX
大部分數(shù)據(jù)位于數(shù)據(jù)庫的某個(gè)地方,但計(jì)算操作通常在數(shù)據(jù)庫外面進(jìn)行。為實(shí)際工作從數(shù)據(jù)庫倒騰數(shù)據(jù)可能會(huì)減慢速度。ConnectorX將數(shù)據(jù)從數(shù)據(jù)庫加載到Python中的許多常見數(shù)據(jù)整理工具中,并通過盡量減少要完成的工作量來保持高速度。
像后面討論的Polars一樣,ConnectorX在其核心使用Rust庫。這便于優(yōu)化,比如說能夠在分區(qū)的同時(shí)從數(shù)據(jù)源加載數(shù)據(jù)。PostgreSQL中的數(shù)據(jù)可以通過指定分區(qū)列來加載。
除了PostgreSQL外, ConnectorX還支持從MySQL/MariaDB、SQLite、Amazon Redshift、Microsoft SQL Server、Azure SQL以及Oracle讀取數(shù)據(jù)。結(jié)果可以匯集到Pandas或PyArrow,或者通過PyArrow匯集到Modin、Dask或Polars。
2.DuckDB
使用Python的數(shù)據(jù)科學(xué)人員應(yīng)該了解SQLite,這是一種用Python打包的小巧、但功能強(qiáng)大且快速的關(guān)系數(shù)據(jù)庫。由于它作為進(jìn)程內(nèi)庫來運(yùn)行、而不是作為單獨(dú)的應(yīng)用程序來運(yùn)行,因此屬于輕量級(jí),且響應(yīng)迅速。
DuckDB有點(diǎn)像有人回答這個(gè)問題:“如果我們設(shè)計(jì)面向OLAP的SQLite,會(huì)怎么樣?”與其他OLAP數(shù)據(jù)庫引擎一樣,它使用列式數(shù)據(jù)存儲(chǔ),并針對長時(shí)間運(yùn)行的分析查詢工作負(fù)載進(jìn)行了優(yōu)化。但是它提供了您期望從傳統(tǒng)數(shù)據(jù)庫獲得的所有功能,比如ACID事務(wù)。而且沒有單獨(dú)的軟件套件需要配置。您使用單單一個(gè)pip install命令,即可在Python環(huán)境中讓它運(yùn)行起來。
DuckDB可以直接攝取采用CSV、JSON或Parquet格式的數(shù)據(jù)。為了提高效率,還可以根據(jù)鍵(比如按年和按月)將生成的數(shù)據(jù)庫劃分為多個(gè)物理文件。查詢起來與任何其他基于SQL的關(guān)系數(shù)據(jù)庫相似,但擁有額外的內(nèi)置特性,比如能夠獲取數(shù)據(jù)的隨機(jī)樣本或構(gòu)造窗口函數(shù)。
DuckDB還有一小批實(shí)用的擴(kuò)展,包括全文搜索、Excel導(dǎo)入/導(dǎo)出、直接連接到SQLite和PostgreSQL、Parquet文件導(dǎo)出以及支持許多常見的地理空間數(shù)據(jù)格式和類型。
3.Optimus
最繁瑣的工作之一就是清理和準(zhǔn)備數(shù)據(jù),用于以DataFrame為中心的項(xiàng)目。Optimus是一種一體化工具集,可用于加載、探索和清理數(shù)據(jù),以及將數(shù)據(jù)寫回眾多數(shù)據(jù)源。
Optimus可以使用Pandas、Dask、CUDF(及Dask + CUDF)、Vaex或Spark作為底層數(shù)據(jù)引擎。數(shù)據(jù)可以從Arrow、Parquet、Excel、各種常見的數(shù)據(jù)庫源或平面文件格式(比如CSV和JSON)加載,并保存成這些格式。
數(shù)據(jù)操作API類似Pandas,但添加了.rows()和.cols()訪問器,以便易于執(zhí)行對數(shù)據(jù)框排序、按列值篩選、根據(jù)標(biāo)準(zhǔn)更改數(shù)據(jù)或根據(jù)某些標(biāo)準(zhǔn)縮小操作范圍之類的操作。Optimus還隨帶處理器,用于處理常見的實(shí)際數(shù)據(jù)類型,比如電子郵件地址和URL。
Optimus可能存在的一個(gè)問題是,它仍在積極開發(fā)中,但上一次正式發(fā)布是在2020年。這意味著它可能不像您堆棧中的其他組件那樣是最新的。
4.Polars
如果您花費(fèi)大量時(shí)間來處理DataFrame,并且對Pandas的性能限制感到沮喪,不妨使用Polars。這個(gè)面向Python的DataFrame庫提供了類似Pandas的便捷語法。
不過與Pandas不同的是,Polars使用了一個(gè)用Rust編寫的庫,可以直接最大限度地利用您的硬件。您不需要使用特殊語法來利用并行處理或SIMD等提升性能的功能,都是自動(dòng)可以利用的。就連像從CSV文件讀取這樣的簡單操作也更快了。
Polars還提供了即時(shí)和延遲執(zhí)行模式,因此查詢可以立即執(zhí)行,也可以延遲到需要時(shí)執(zhí)行。它還提供了流式API,用于增量處理查詢,不過許多函數(shù)還不能使用流式API。而Rust開發(fā)人員可以使用pyo3制作自己的Polars擴(kuò)展。
5.Snakemake
數(shù)據(jù)科學(xué)工作流很難建立,更難以一致的、可預(yù)測的方式建立。Snakemake的創(chuàng)建就是為了實(shí)現(xiàn)這一點(diǎn):在Python中自動(dòng)建立數(shù)據(jù)分析機(jī)制,同時(shí)確保其他人都能得到與您相同的結(jié)果。許多現(xiàn)有的數(shù)據(jù)科學(xué)項(xiàng)目都依賴Snakemake。數(shù)據(jù)科學(xué)工作流中的不定因素越多,您就越有可能受益于用Snakemaker自動(dòng)化處理工作流。
Snakemake工作流類似GNU make工作流:您用規(guī)則定義想要?jiǎng)?chuàng)建的東西,這些規(guī)則定義了它們接受什么、輸出什么以及執(zhí)行什么命令來做到這一點(diǎn)。工作流規(guī)則可以是多線程的(假設(shè)這會(huì)給它們帶來好處),配置數(shù)據(jù)可以從JSON/YAML文件通過管道導(dǎo)入。您還可以在工作流中定義函數(shù)來轉(zhuǎn)換用于規(guī)則中的數(shù)據(jù),并將在每個(gè)步驟采取的操作寫入到日志。
Snakemake作業(yè)旨在可移植——它們可以部署到任何Kubernetes管理的環(huán)境中,或部署到特定的云環(huán)境中,比如Google Cloud Life Sciences或AWS上的Tibanna。工作流可以被“凍結(jié)”,以使用一些具體的軟件包,并且任何成功執(zhí)行的工作流都可以自動(dòng)生成單元測試,并加以存儲(chǔ)。若是長期存檔,您可以將工作流存儲(chǔ)為打包文件(tarball)。
原文標(biāo)題:5 newer data science tools you should be using with Python,作者:Serdar Yegulalp