妙啊!這款 Python 資料視覺化工具強的很!
使用 Altair ,你可以將更多時間專注於資料及其含義,下面我將詳細介紹:
示例
這是一個在 JupyterLab 中使用 Altair 快速視覺化和顯示資料集的示例:
import altair as alt # load a simple dataset as a pandas DataFrame from vega_datasets import data cars = data.cars() alt.Chart(cars).mark_point().encode( x='Horsepower', y='Miles_per_Gallon', color='Origin', )
源自 Vega-Lite 的 Altair 的獨特功能之一是宣告性語法,它不僅具有視覺化功能,還具有互動性。通過對上面的示例進行一些修改,我們可以建立一個連結的直方圖,該直方圖根據散點圖的選擇進行過濾。
import altair as alt from vega_datasets import data source = data.cars() brush = alt.selection(type='interval') points = alt.Chart(source).mark_point().encode( x='Horsepower', y='Miles_per_Gallon', color=alt.condition(brush, 'Origin', alt.value('lightgray')) ).add_selection( brush ) bars = alt.Chart(source).mark_bar().encode( y='Origin', color='Origin', x='count(Origin)' ).transform_filter( brush ) points & bars
安裝方法
Altair需要以下依賴項:
- pandas
- traitlets
- IPython
如果已克隆儲存庫,請從儲存庫的根目錄執行以下命令:
pip install -e .[dev]
如果你不想克隆儲存庫,則可以使用以下命令進行安裝:
pip install git+http://github.com/altair-viz/altair
更多內容詳情,可以檢視github連結
http://github.com/altair-viz/altair
三大操作
接下來,我將詳細地介紹 Altair 如何建立過濾、分組和合並操作的視覺化物件,可以將其用作探索性資料分析過程的一部分。
我們構建兩個資料幀的模擬資料。第一個是餐廳訂單,第二個是餐廳訂單中的商品價格。
# import libraries import numpy as np import pandas as pd import altair as alt import random # mock data orders = pd.DataFrame({ "order_id": np.arange(1,101), "item": np.random.randint(1, 50, size=100), "qty": np.random.randint(1, 10, size=100), "tip": (np.random.random(100) * 10).round(2) }) prices = pd.DataFrame({ "item": np.arange(1,51), "price": (np.random.random(50) * 50).round(2) }) order_type = ["lunch", "dinner"] * 50 random.shuffle(order_type) orders["order_type"] = order_type
首先,我們建立一個簡單的圖來 Altair 語法結構。
alt.Chart(orders).mark_circle(size=50).encode( x="qty", y="tip", color="order_type" ).properties( title = "Tip vs Quantity" )
Altair 基本語法四步曲:
- 將資料傳遞到 Chart 物件,資料可以採用Pandas資料框或指向json或csv檔案的URL字串的形式。
- 選擇視覺化的型別(例如 mark_circle,mark_line 等)。
- encode 編碼函式指定在給定資料幀中要繪製的內容。因此,我們在編碼函式中編寫的任何內容都必須連結到資料幀。
- 使用properties函式指定圖的某些屬性。
考慮這樣一種情況,我們需要建立 pirce 和 tip 值的散點圖,它們位於不同的資料幀中。一種選擇是合併兩個資料幀,並在散點圖中使用這兩列。
Altair提供了一種更實用的方法,它允許在其他資料框中查詢列, 類似 Pandas 的 merge 函式功能相同。
alt.Chart(orders).mark_circle(size=50).encode( x="tip", y="price:Q", color="order_type" ).transform_lookup( lookup="item", from_=alt.LookupData(data=prices, key="item", fields=["price"]) ).properties( title = "Price vs Tip" )
transform_lookup 函式類似於 Pandas 的 merge 函式。用於匹配觀察值的列(即行)將傳遞給lookup引數。fields引數用於從另一個數據幀中選擇所需的列。
我們還可以把過濾元件整合到繪圖中,讓我們繪製價格超過10美元的資料點。
alt.Chart(orders).mark_circle(size=50).encode( x="tip", y="price:Q", color="order_type" ).transform_lookup( lookup="item", from_=alt.LookupData(data=prices, key="item", fields=["price"]) ).transform_filter( alt.FieldGTPredicate(field='price', gt=10) ).properties( title = "Price vs Tip" )
transform_filter 函式用於過濾。FieldGTPredicate處理"大於"的條件。
除了過濾和合並外,Altair 還允許在繪圖之前對資料點進行分組。例如,我們可以建立一個條形圖來顯示每種訂單型別的商品平均價格。此外,我們可以對價格低於20美元的商品執行此操作。
alt.Chart(orders).mark_bar().encode( y="order_type", x="avg_price:Q" ).transform_lookup( lookup="item", from_=alt.LookupData(data=prices, key="item", fields=["price"]) ).transform_filter( alt.FieldLTPredicate(field='price', lt=20) ).transform_aggregate( avg_price = "mean(price)", groupby = ["order_type"] ).properties( height=200, width=300 )
讓我們詳細說明每個步驟:
- transform_lookup:從價格資料框中查找價格。
- transform_filter:過濾價格低於20美元的價格。
- transform_aggregate:按訂單型別對價格進行分組並計算均值。
結論
Altair 與其他常見的視覺化庫的不同之處在於,它可以無縫地將資料分析元件整合到視覺化中,是一款非常實用的資料探索工具。
篩選、合併和分組對於探索性資料分析過程至關重要。Altair 允許在建立資料視覺化時執行所有這些操作。從這個意義上講,Altair也可以視為資料分析工具。如果你感興趣,趕快嘗試一下吧。
- Electron 程序間通訊的四種方式
- 面試官:哥們Go語言的讀寫鎖瞭解多少?
- SpringCloud—架構演變之SpringCloud由來
- 聊聊 Go 如何打包與壓縮檔案
- 保證介面資料安全的十種方案
- 深入理解 Synchronized 的鎖優化
- 如何通過模板模式重構程式碼?
- Go 語言怎麼使用變長引數函式?
- JVM堆外記憶體導致的FGC問題排查
- 五個優秀JavaScript Web 開發框架
- 哪些後端框架對 Web 應用程式開發產生了巨大的影響?
- 網路安全業務異軍突起,微軟修復漏洞的速度卻變慢了
- 分庫分表實戰:追根溯源—一次查詢會經過哪些流程呢?
- 資料湖治理:優勢、挑戰和入門
- 現代JavaScript的高階概念和用法
- 這六個 VS Code 主題你不應該錯過
- 讓技術債務瑟瑟發抖的十個JetBrains外掛
- 用於資料管理的多雲策略有哪些?
- Redis 的記憶體淘汰策略和過期刪除策略,你別再搞混了!
- 美國大廠薪水第二彈!Twitter底薪六位數,Uber虧損仍開出20多萬美元