原作者 Parul Pandey
曉查 編譯整理
量子位 出品 | 公眾號 QbitAI
數據轉化成更直觀的圖片,對于理解數據背后的真相很有幫助。如果你有這方面的需求,而且還在使用Python,那么強烈推薦你試一試Altair。
Altair是一個專為Python編寫的可視化軟件包,它能讓數據科學家更多地關注數據本身和其內在的聯系。
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:
import altair as alt
完成以上準備工作,我們就可以開始繪圖了
開始繪制圖表
Altair中的基本對象是Chart,它將數據框作為單個參數。你可以這樣定義它:chart = alt.Chart(cars)
Chart有三個基本方法:數據(data)、標記(mark)和編碼(encode),使用它們的格式如下:
alt.Chart(data).mark_point().encode(encoding_1='column_1',encoding_2='column_2',# etc.)
數據顧名思義,直接導入cars數據集即可。標記和編碼則決定著繪制圖表的樣式,下面著重介紹這兩部分。
標記可以讓用戶在圖中以不同形狀來表示數據點,比如使用實心點、空心圓、方塊等等。
如果我們只調用這個方法,那么所有的數據點都將重疊在一起:
這顯然是沒有意義的,還需要有編碼來指定圖像的具體內容。常用的編碼有:
x: x軸數值
y: y軸數值
color: 標記點顏色
opacity: 標記點的透明度
shape: 標記點的形狀
size: 標記點的大小
row: 按行分列圖片
column: 按列分列圖片
以汽車的耗油量為例,把所有汽車的數據繪制成一個一維散點圖,指定x軸為耗油量:alt.Chart(cars).mark_point().encode(x='Miles_per_Gallon')
但是使用mark_point()會讓所有標記點混雜在一起,為了讓圖像更清晰,可以替換成棒狀標記點mark_tick():
alt.Chart(cars).mark_tick().encode(x='Miles_per_Gallon')
以耗油量為X軸、馬力為Y軸,繪制所有汽車的分布,就得到一張二維圖像:alt.Chart(cars).mark_line().encode(x='Miles_per_Gallon',y='Horsepower')
給圖表上色
前面我們已經學會了繪制二維圖像,如果能給不同組的數據分配不同的顏色,就相當于給數據增加了第三個維度。
alt.Chart(cars).mark_point().encode(x='Miles_per_Gallon',y='Horsepower',color='Origin')
上面的圖中,第三個維度“原產國”是一個離散變量。
使用顏色刻度表,我們還能實現對連續變量的上色,比如在上圖中加入“加速度”維度,顏色越深表示加速度越大:alt.Chart(cars).mark_point().encode(x='Miles_per_Gallon',y='Horsepower',color='Acceleration')
數據的分類與匯總
上面的例子中,我們使用的主要是散點圖。實際上,Altair還能方便地對數據進行分類和匯總,繪制統計直方圖。
相比其他繪圖工具,Altair的特點在于不需要調用其他函數,而是直接在數軸上進行修改。
例如統計不同油耗區間的汽車數量,對X軸使用alt.X(),指定數據和間隔大小,對Y軸使用count()統計數量。
alt.Chart(cars).mark_bar().encode(x=alt.X('Miles_per_Gallon', bin=alt.Bin(maxbins=30)),y='count()')
為了分別表示出不同原產國汽車的油耗分布,前文提到的上色方法也能直方圖中使用,這樣就構成一幅分段的統計直方圖:alt.Chart(cars).mark_bar().encode(x=alt.X('Miles_per_Gallon', bin=alt.Bin(maxbins=30)),y='count()',color='Origin')
如果你覺得上圖還不夠直觀,那么可以用column將汽車按不同原產國分列成3張直方圖:
alt.Chart(cars).mark_bar().encode(x=alt.X('Miles_per_Gallon', bin=alt.Bin(maxbins=30)),y='count()',color='Origin',column='Origin')
交互
除了繪制基本圖像,Altair強大之處在于用戶可以與圖像進行交互,包括平移、縮放、選中某一塊數據等操作。
在繪制圖片的代碼后面,調用interactive()模塊,就能實現平移、縮放:
Altair還為創建交互式圖像提供了一個selection的API:
在選擇功能上,我們能做出一些更酷炫的高級功能,例如對選中的數據點進行統計,生成實時的直方圖。
疊加多個圖層
如果把前面的汽車耗油量按年度計算出平均值:alt.Chart(cars).mark_point().encode(x='Miles_per_Gallon',y='Horsepower',color='Acceleration')
在統計學上,我們還能定義平均值的置信區間,為了讓圖表更好看,可以分別列出三個不同產地汽車的耗油量平均值置信區間:
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)
最后我們可以用圖層API將平均值和置信區間兩幅圖疊加起來: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
更多內容
本文只是介紹了Altair的一些基本使用方法,遠遠不能涵蓋它所有的功能。如果需要了解更多,請參閱GitHub頁說明:
https://github.com/altair-viz/altair
教程原文:
https://medium.com/analytics-vidhya/exploratory-data-visualisation-with-altair-b8d85494795c
— 完 —
誠摯招聘