優質文章,第一時間送達!
數據轉化成更直觀的圖片,對於理解數據背後的真相很有幫助。如果你有這方面的需求,而且還在使用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:
<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數據集即可。標記和編碼則決定著繪製圖表的樣式,下面著重介紹這兩部分。
標記可以讓用戶在圖中以不同形狀來表示數據點,比如使用實心點、空心圓、方塊等等。
如果我們只調用這個方法,那麼所有的數據點都將重疊在一起:
這顯然是沒有意義的,還需要有
編碼來指定圖像的具體內容。常用的編碼有:x: x軸數值
y: y軸數值
color: 標記點顏色
opacity: 標記點的透明度
shape: 標記點的形狀
size: 標記點的大小
row: 按行分列圖片
column: 按列分列圖片
以汽車的耗油量為例,把所有汽車的數據繪製成一個一維散點圖,指定x軸為耗油量:
<code>alt.Chart(cars).mark_point.encode(
x='Miles_per_Gallon'
)
/<code>
<code>alt.Chart(cars).mark_tick.encode(
x='Miles_per_Gallon'
)
/<code>
以耗油量為X軸、馬力為Y軸,繪製所有汽車的分佈,就得到一張二維圖像:
<code>alt.Chart(cars).mark_line.encode(
x='Miles_per_Gallon',
y='Horsepower'
)
/<code>
給圖表上色
前面我們已經學會了繪製二維圖像,如果能給不同組的數據分配不同的顏色,就相當於給數據增加了第三個維度。
<code>alt.Chart(cars).mark_point.encode(
x='Miles_per_Gallon',
y='Horsepower',
color='Origin'
)
/<code>
上面的圖中,第三個維度“原產國”是一個離散變量。
使用顏色刻度表,我們還能實現對連續變量的上色,比如在上圖中加入“加速度”維度,顏色越深表示加速度越大:
<code>alt.Chart(cars).mark_point.encode(
x='Miles_per_Gallon',
y='Horsepower',
color='Acceleration'
)
/<code>
數據的分類與彙總
上面的例子中,我們使用的主要是散點圖。實際上,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>
為了分別表示出不同原產國汽車的油耗分佈,前文提到的上色方法也能直方圖中使用,這樣就構成一幅分段的統計直方圖:
<code>alt.Chart(cars).mark_bar.encode(
x=alt.X('Miles_per_Gallon', bin=alt.Bin(maxbins=30)),
y='count',
color='Origin'
)
/<code>
如果你覺得上圖還不夠直觀,那麼可以用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>
交互
除了繪製基本圖像,Altair強大之處在於用戶可以與圖像進行交互,包括平移、縮放、選中某一塊數據等操作。
在繪製圖片的代碼後面,調用interactive模塊,就能實現平移、縮放:
在選擇功能上,我們能做出一些更酷炫的高級功能,例如對選中的數據點進行統計,生成實時的直方圖。
疊加多個圖層
如果把前面的汽車耗油量按年度計算出平均值:
<code>alt.Chart(cars).mark_point.encode(
x='Miles_per_Gallon',
y='Horsepower',
color='Acceleration'
)
/<code>
在統計學上,我們還能定義平均值的置信區間,為了讓圖表更好看,可以分別列出三個不同產地汽車的耗油量平均值置信區間:
<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>
最後我們可以用圖層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>
教程原文:https://medium.com/analytics-vidhya/exploratory-data-visualisation-with-altair-b8d85494795c
原作者 Parul Pandey
曉查 編譯整理@量子位
閱讀更多 編程派 的文章