Polars數據聚合與旋轉實戰教程

在這篇博文中,我們的目標是解決數據愛好者提出的一個常見問題:如何有效地從Polars DataFrame中創建匯總視圖,以便在不同時間段或類別之間輕松進行比較。我們將使用一個實際的數據集示例來探索實現這一目標的各種方法。

Polars簡介

Polars 是一個用 Rust 編寫的高性能數據處理庫,用于 Python 和 R 等語言。它在處理大型數據集時能夠提供高效的數據處理能力,并且具有類似于 Pandas 的數據處理接口,方便數據科學家和分析師使用。
在這里插入圖片描述

性能優勢

并行計算:Polars 能夠利用多核處理器進行并行計算。例如,在進行數據聚合操作(如計算列的平均值、總和等)或者數據篩選操作時,它可以將任務分配到多個核心上同時執行,大大提高了計算速度。相比傳統的數據處理庫,在處理大規模數據時這種并行計算的優勢更加明顯。

高效的內存管理:它對內存的使用非常高效,通過優化數據存儲結構和算法,減少了不必要的內存占用。例如,在處理包含大量重復數據或者稀疏數據的數據集時,Polars 能夠以更緊湊的方式存儲數據,從而節省內存資源,并且能夠更快地進行數據讀寫操作。

編譯時優化:由于是用 Rust 編寫,在編譯階段就可以進行許多性能優化。Rust 的編譯器能夠對代碼進行諸如消除冗余計算、優化循環等操作,使得生成的機器碼在執行時能夠更高效地處理數據。

適用場景

大數據處理:在處理海量數據(如日志數據、物聯網數據等)時,Polars 的高性能和高效內存管理能夠發揮巨大優勢,快速地進行數據清洗、轉換和分析。

數據科學和分析:無論是進行探索性數據分析、數據建模還是數據可視化的前期數據處理,Polars 都可以作為一個高效的數據處理工具,幫助數據科學家更快地獲取數據洞察。

數據管道構建:在構建數據管道時,需要對數據進行一系列的轉換和處理操作。Polars 的高效性和豐富的數據操作方法使其成為構建數據管道的有力工具,可以確保數據在不同處理階段的快速流動和處理。

數據聚合與旋轉案例

為了說明聚合和旋轉技術,讓我們考慮一個簡單的數據集。該數據集在幾個月內跟蹤不同渠道的發送和唯一id。這是我們初始數據集的樣子:

import polars as pl
df = pl.DataFrame({"Channel": ["X", "X", "Y", "Y", "X", "X", "Y", "Y", "X", "X", "Y", "Y", "X", "X", "Y", "Y"],"ID": ["a", "b", "b", "a", "e", "b", "g", "h", "a", "a", "k", "a", "b", "n", "o", "p"],"Month": ["1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2"]
})

在這里插入圖片描述

轉換目標

我們的目標是聚合數據并計算值,例如每個通道和每個月的唯一id數量和發送總數,并以一種方便進行月與月比較的方式顯示它們。

所需的格式是數據透視表,顯示不同的聚合功能,如“唯一ID”和“總發送”,每月作為列:

| Channels | agg_func    | 1 | 2 |
|----------|-------------|---|---|
| X        | Uniques ID  | 3 | 3 |
| X        | Total sends | 4 | 4 |
| Y        | Uniques ID  | 4 | 3 |
| Y        | Total sends | 4 | 4 |

實現轉換

  • 使用PivotAggregate 函數

使用polar實現這一目標的強大方法是利用pivot函數與聚合函數相結合來生成所需格式。下面將深入介紹如何有效地執行這些操作。

pv = df.pivot(on="Month",values="ID",aggregate_function=pl.concat_list(pl.element().n_unique().alias("value"),pl.element().count().alias("value"))
).with_columns(agg_func=["Uniques ID","Total sends"]).explode(pl.exclude("Channel"))
pv

該腳本在“Month”列上執行旋轉操作,其中多個聚合函數連接在一個列表中。將結果展開,以便分離每個聚合值,輸出結果如下:

shape: (4, 4)
┌─────────┬─────┬─────┬─────────────┐
│ Channel ┆ 1   ┆ 2   ┆ agg_func    │
│ ---     ┆ --- ┆ --- ┆ ---         │
│ str     ┆ u32 ┆ u32 ┆ str         │
╞═════════╪═════╪═════╪═════════════╡
│ X       ┆ 3   ┆ 3   ┆ Uniques ID  │
│ X       ┆ 4   ┆ 4   ┆ Total sends │
│ Y       ┆ 4   ┆ 3   ┆ Uniques ID  │
│ Y       ┆ 4   ┆ 4   ┆ Total sends │
└─────────┴─────┴─────┴─────────────┘
  • 使用多個Pivot 函數

另一種方法(手動但有效)是為每個想要應用的聚合函數執行單獨的樞軸:

pl.concat([df.pivot(on="Month",values="ID",aggregate_function=agg_func).with_columns(pl.lit(agg_func_name).alias("agg_func"))for agg_func, agg_func_name in [(pl.element().n_unique(), "Uniques ID"), (pl.element().count(), "Total sends")]
])

數據結果如下:

shape: (4, 4)
┌─────────┬─────┬─────┬─────────────┐
│ Channel ┆ 1   ┆ 2   ┆ agg_func    │
│ ---     ┆ --- ┆ --- ┆ ---         │
│ str     ┆ u32 ┆ u32 ┆ str         │
╞═════════╪═════╪═════╪═════════════╡
│ X       ┆ 3   ┆ 3   ┆ Uniques ID  │
│ Y       ┆ 4   ┆ 3   ┆ Uniques ID  │
│ X       ┆ 4   ┆ 4   ┆ Total sends │
│ Y       ┆ 4   ┆ 4   ┆ Total sends │
└─────────┴─────┴─────┴─────────────┘
  • 旋轉之前分組

或者,你可以首先使用group_by操作,在pivot之前基于“Month”和“Channel”預聚合數據:

(df.group_by("Month","Channel").agg(pl.col("ID").n_unique().alias("Uniques ID"),pl.col("ID").count().alias("Total sends")).unpivot(index=["Month","Channel"], variable_name="agg_func").pivot(on="Month", values="value")
)

總結

使用這些方法,可以在polar中有效地轉換和匯總大型數據集,從而提高你的數據分析能力。無論是使用聚合列表的pivot函數,還是執行多個pivot以提高清晰度,這些策略都可以增強輸出的可讀性和可用性,特別是在處理大容量數據時。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62856.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62856.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62856.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2024154讀書筆記|《帶著詩歌上街去》——我不長葉子,不開花,也不必要什么結果

2024154讀書筆記|《帶著詩歌上街去》——我不長葉子🌿,不開花🌼,也不必要什么結果 《帶著詩歌上街去》作者隔花人,作者很有巧思,在拍攝的照片上做詩,詩不是很有感覺,但是在墻上、風景…

建立基于TCP的客戶端和服務端

函數介紹: 1.socket() 作用:創建套接字 domain: AF_INET:IPv4 Internet 協議族。AF_INET6:IPv6 Internet 協議族。AF_UNIX:Unix 域協議族,用于在同一臺主機上的進程間通信。 type: SOCK_STREAM&#xff1a…

CNCF云原生生態版圖-分類指南(三)- 運行時

CNCF云原生生態版圖-分類指南(三)- 運行時 CNCF云原生生態版圖-分類指南三、運行時(Runtime)(一)云原生存儲(Cloud Native Storage)1. 是什么?2. 解決什么問題&#xff1…

機器學習經典算法

機器學習經典算法學習和分享。 k近鄰算法 線性回歸 梯度下降法 PCA主成分分析法 多項式回歸 邏輯回歸 支撐向量機SVM 決策樹 隨機森林 評價分類指標

MVC基礎——市場管理系統(三)Clean Architecture

文章目錄 項目地址五、Clean Architecture5.1 user cage driven5.1.1創建CoreBusiness 5.2 創建UseCases5.2.1 創建CategoriesUseCases1. 創建VeiwCategoriesUseCase獲取所有Cagegory 5.2.2. 實現ICategoryRepository接口3. 實現獲取所有Category的方法4. 實現獲取一個Cagegory…

手機上和電腦上都能觀看的翻頁電子書是如何制作的?

想知道手機上和電腦上都能觀看的翻頁電子書是都是如何制作的? 想知道這樣的電子書是怎樣呈現出來的? 那收藏這篇文章,我來跟大家說說該如何實現。 操作方法 一、登錄FLBOOK 二、開始制作,有多種創建方式,分別是&…

ABAP時間戳與日期時間轉換及時區處理

一、時間戳轉換為日期時間 1. 基本轉換 CONVERT TIME STAMP <fs_back>-lastchangedatetime TIME ZONE sy-zonloINTO DATE DATA(lv_date)TIME DATA(lv_time).2. 解決8小時時差問題的方案 方案1&#xff1a;直接使用UTC時區&#xff08;推薦&#xff09; CONVERT TIME …

Java 實現給pdf文件指定位置蓋章功能

Java 實現給pdf文件指定位置蓋章功能 開發中遇到一個需求, 需要給用戶上傳的的pdf文件, 指定位置上蓋公章的功能, 經過調研和對比, 最終確定實現思路. 這里是使用pdf文件中的關鍵字進行章子的定位, 之所以這樣考慮是因為如果直接寫死坐標的話, 可能會出現因pdf大小, 縮放, 蓋章…

ASP.NET Core API + MySql

環境 數據庫&#xff1a; mysql8.0 后端&#xff1a; vs2022 ASP.NET Core API .net 8 前端&#xff1a; Hbuilderx bootstrap 5.3.0 jquery v3.7.1 bootstrap-table 1.23.5 創建項目 添加資源包 AutoMapper Microsoft.EntityFrameworkCore.Tools 8.0.0 Pomelo.EntityFramew…

RFDiffusion 計算鍵角函數get_ang解讀

get_ang 函數&#xff08;kinematics.py包中&#xff09;計算三組原子 a,b,c 所形成的平面角&#xff08;planar angle&#xff09;&#xff0c;即 b 為頂點&#xff0c; a,b,c 所確定的角度。 源代碼&#xff1a; def get_ang(a, b, c):"""calculate planar …

Bananna Pi開源社區聯合矽昌通信打造開源的低成本Wifi5路由器

香蕉派 BPI-Wifi5 路由器采用矽昌SF19A2890S2芯片方案設計。它是一款高性能無線路由器&#xff0c;適用于小微企業、家庭和其他網絡環境。Banana Pi開源社區提供整體解決方案。所有代碼開源&#xff0c;用戶可以在上面自由開發自己的應用。 Banana Pi wifi5 路由器github代碼: …

圖像融合算法筆記2024 CDTNet

目錄 ControlCom-Image-Composition CDTNet-High-Resolution-Image-Harmonization 依賴項: trilinear 推理代碼ok: ControlCom-Image-Composition diffusesion https://github.com/bcmi/ControlCom-Image-Composition CDTNet-High-Resolution-Image-Harmonization

item2 for macos

安裝Item2 brew install iterm2 查看終端類型 cat /etc/shells Mac OS X 10.15 已經將默認的shell從Bash換成了zsh&#xff0c;所以不用安裝&#xff0c;10.15以前的可以使用下面的命令進行安裝 brew install zsh 安裝Oh My ZSH # curl sh -c "$(curl -fsSL https://ra…

https證書生成、linux 生成https證書、nginx 配置https證書

1. 檢查 Certbot 是否已安裝 which certbot 2. 安裝 Certbot 2.1啟用 EPEL 倉庫&#xff08;如果尚未啟用&#xff09;&#xff1a; sudo yum install epel-release 2.2 安裝 Certbot 和 Nginx 插件&#xff1a; sudo yum install certbot python3-certbot-nginx 2.3驗證安…

Pytest-Bdd-Playwright 系列教程(14):Docstring 參數

Pytest-Bdd-Playwright 系列教程&#xff08;14&#xff09;&#xff1a;Docstring 參數 前言一、什么是docstring?二、基本語法三、主要特點四、實際例子五、注意事項六、使用建議總結 前言 在自動化測試的過程中&#xff0c;我們經常需要處理復雜的測試數據或需要輸入多行文…

手機租賃系統開發指南一站式服務流程解析

內容概要 手機租賃系統的開發是一個復雜但有趣的過程&#xff0c;像搭建樂高一樣&#xff0c;只要找到合適的模塊&#xff0c;就能打造出一個賓至如歸的租賃平臺。在這部分&#xff0c;我們將對開發流程的整體結構進行簡要概述&#xff0c;并指出每個環節的重要性。 首先&…

OpenAI 正式賦予 ChatGPT 通過視頻實時與用戶互動的能力

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

深入了解C++中const的用法

文章目錄 一、C中的const如何理解&#xff1f;二、C中的const與C語言中的const有何區別&#xff1f;三、const與指針、引用的結合使用 一、C中的const如何理解&#xff1f; 在C中&#xff0c;const是一個關鍵字&#xff0c;用來表示常量性&#xff0c;意在告訴編譯器某些變量或…

EasyExcel設置表頭上面的那種大標題(前端傳遞來的大標題)

1、首先得先引用easyExcel的版本依賴&#xff0c;我那 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version> </dependency> 2、然后得弄直接的實體類&#xff0c;&…

純血鴻蒙崛起,原生Android挑戰?兩大操作系統巔峰對決,智能設備未來誰主沉浮?

鴻蒙HarmonyOS和原生Android系統雖然在一些方面相似&#xff0c;但在架構、設計理念、API、開發工具等方面存在一些差異。鴻蒙系統的目標是跨設備、分布式的操作系統&#xff0c;強調多設備協同和資源共享&#xff0c;而Android則主要集中在智能手機和移動設備領域。 下面將從…