比 Excel 更強大,Python 的可視化庫 Altair 入門

優質文章,第一時間送達!

比 Excel 更强大,Python 的可视化库 Altair 入门

數據轉化成更直觀的圖片,對於理解數據背後的真相很有幫助。如果你有這方面的需求,而且還在使用Python,那麼強烈推薦你試一試Altair。

Altair是一個專為Python編寫的可視化軟件包,它能讓數據科學家更多地關注數據本身和其內在的聯繫。

比 Excel 更强大,Python 的可视化库 Altair 入门

Altair由華盛頓大學的數據科學家Jake Vanderplas編寫,目前在GitHub上已經收穫超過3000星。

最近,Medium上一位小姐姐Parul Pandey分享了Altair的入門教程,希望對從事數據科學的用戶有幫助。

使用教程

Parul以汽車數據為例,將一個汽車數據集“cars”載入到Altair中。

cars中包含汽車的生產年份、耗油量、原產國等9個方面的數據,後面將對這些內容進行可視化處理。

安裝和導入Altair軟件包

除了安裝Altair和它的依賴軟件外,還需要安裝其他前端工具,比如Jupyter Notebook、JupyterLab、Colab等等。

Parul小姐姐推薦安裝JupyterLab:

$ pip install -U altair vega_datasets jupyterlab

需要注意的是,由於Altair的教程文檔中還包含vega數據集,因此也需要一併安裝上。

接著在終端中輸入:jupyter lab,就能在你的瀏覽器中自動打開它啦。

在代碼開頭別忘了導入Altair:

<code>

import altair as alt

/<code>

完成以上準備工作,我們就可以開始繪圖了

開始繪製圖表

Altair中的基本對象是Chart,它將數據框作為單個參數。你可以這樣定義它:

<code>

chart = alt.Chart(cars)

/<code>

Chart有三個基本方法:數據(data)、標記(mark)和編碼(encode),使用它們的格式如下:

<code>

alt.Chart(data).mark_point.encode(

encoding_1='column_1',

encoding_2='column_2',

# etc.

)

/<code>

數據顧名思義,直接導入cars數據集即可。標記和編碼則決定著繪製圖表的樣式,下面著重介紹這兩部分。

標記可以讓用戶在圖中以不同形狀來表示數據點,比如使用實心點、空心圓、方塊等等。

如果我們只調用這個方法,那麼所有的數據點都將重疊在一起:

比 Excel 更强大,Python 的可视化库 Altair 入门

這顯然是沒有意義的,還需要有

編碼來指定圖像的具體內容。常用的編碼有:

x: x軸數值

y: y軸數值

color: 標記點顏色

opacity: 標記點的透明度

shape: 標記點的形狀

size: 標記點的大小

row: 按行分列圖片

column: 按列分列圖片

以汽車的耗油量為例,把所有汽車的數據繪製成一個一維散點圖,指定x軸為耗油量:

<code>

alt.Chart(cars).mark_point.encode(

x='Miles_per_Gallon'

)

/<code>
比 Excel 更强大,Python 的可视化库 Altair 入门

但是使用mark_point會讓所有標記點混雜在一起,為了讓圖像更清晰,可以替換成棒狀標記點mark_tick:

<code>

alt.Chart(cars).mark_tick.encode(

x='Miles_per_Gallon'

)


/<code>
比 Excel 更强大,Python 的可视化库 Altair 入门

以耗油量為X軸、馬力為Y軸,繪製所有汽車的分佈,就得到一張二維圖像:

<code>

alt.Chart(cars).mark_line.encode(

x='Miles_per_Gallon',

y='Horsepower'

)


/<code>
比 Excel 更强大,Python 的可视化库 Altair 入门

給圖表上色

前面我們已經學會了繪製二維圖像,如果能給不同組的數據分配不同的顏色,就相當於給數據增加了第三個維度。

<code>

alt.Chart(cars).mark_point.encode(

x='Miles_per_Gallon',

y='Horsepower',

color='Origin'

)


/<code>
比 Excel 更强大,Python 的可视化库 Altair 入门

上面的圖中,第三個維度“原產國”是一個離散變量。

使用顏色刻度表,我們還能實現對連續變量的上色,比如在上圖中加入“加速度”維度,顏色越深表示加速度越大:

<code>

alt.Chart(cars).mark_point.encode(

x='Miles_per_Gallon',

y='Horsepower',

color='Acceleration'

)

/<code>
比 Excel 更强大,Python 的可视化库 Altair 入门

數據的分類與彙總

上面的例子中,我們使用的主要是散點圖。實際上,Altair還能方便地對數據進行分類和彙總,繪製統計直方圖。

相比其他繪圖工具,Altair的特點在於不需要調用其他函數,而是直接在數軸上進行修改。

例如統計不同油耗區間的汽車數量,對X軸使用alt.X,指定數據和間隔大小,對Y軸使用count統計數量。

<code>

alt.Chart(cars).mark_bar.encode(

x=alt.X('Miles_per_Gallon', bin=alt.Bin(maxbins=30)),

y='count'

)


/<code>
比 Excel 更强大,Python 的可视化库 Altair 入门

為了分別表示出不同原產國汽車的油耗分佈,前文提到的上色方法也能直方圖中使用,這樣就構成一幅分段的統計直方圖:

<code>

alt.Chart(cars).mark_bar.encode(

x=alt.X('Miles_per_Gallon', bin=alt.Bin(maxbins=30)),

y='count',

color='Origin'

)


/<code>
比 Excel 更强大,Python 的可视化库 Altair 入门

如果你覺得上圖還不夠直觀,那麼可以用column將汽車按不同原產國分列成3張直方圖:

<code>

alt.Chart(cars).mark_bar.encode(

x=alt.X('Miles_per_Gallon', bin=alt.Bin(maxbins=30)),

y='count',

color='Origin',

column='Origin'

)

/<code>
比 Excel 更强大,Python 的可视化库 Altair 入门

交互

除了繪製基本圖像,Altair強大之處在於用戶可以與圖像進行交互,包括平移、縮放、選中某一塊數據等操作。

在繪製圖片的代碼後面,調用interactive模塊,就能實現平移、縮放:

比 Excel 更强大,Python 的可视化库 Altair 入门

Altair還為創建交互式圖像提供了一個selection的API:

比 Excel 更强大,Python 的可视化库 Altair 入门

在選擇功能上,我們能做出一些更酷炫的高級功能,例如對選中的數據點進行統計,生成實時的直方圖。

比 Excel 更强大,Python 的可视化库 Altair 入门

疊加多個圖層

如果把前面的汽車耗油量按年度計算出平均值:

<code>

alt.Chart(cars).mark_point.encode(

x='Miles_per_Gallon',

y='Horsepower',

color='Acceleration'

)

/<code>
比 Excel 更强大,Python 的可视化库 Altair 入门

在統計學上,我們還能定義平均值的置信區間,為了讓圖表更好看,可以分別列出三個不同產地汽車的耗油量平均值置信區間:

<code>

alt.Chart(cars).mark_area(opacity=0.3).encode(

x=alt.X(‘Year’, timeUnit=’year’),

y=alt.Y(‘ci0(Miles_per_Gallon)’, axis=alt.Axis(title=’Miles per Gallon’)),

y2=’ci1(Miles_per_Gallon)’,

color=’Origin’

).properties(

width=600

)


/<code>
比 Excel 更强大,Python 的可视化库 Altair 入门

最後我們可以用圖層API將平均值和置信區間兩幅圖疊加起來:

<code>

spread = alt.Chart(cars).mark_area(opacity=0.3).encode(

x=alt.X('Year', timeUnit='year'),

y=alt.Y('ci0(Miles_per_Gallon)', axis=alt.Axis(title='Miles per Gallon')),

y2='ci1(Miles_per_Gallon)',

color='Origin'

).properties(

width=800

)

lines = alt.Chart(cars).mark_line.encode(

x=alt.X('Year', timeUnit='year'),

y='mean(Miles_per_Gallon)',

color='Origin'

).properties(

width=800

)

spread + lines

/<code>
比 Excel 更强大,Python 的可视化库 Altair 入门

教程原文:https://medium.com/analytics-vidhya/exploratory-data-visualisation-with-altair-b8d85494795c

原作者 Parul Pandey

曉查 編譯整理@量子位


分享到:


相關文章: