再見,視覺化!你好,Pandas!

Python資料科學發表於2020-10-16

image

來源:Python資料科學
作者:東哥起飛

Python做資料分析離不開pandaspnadas更多的承載著處理和變換資料的角色,pands中也內建了視覺化的操作,但效果很糙。

因此,大家在用Python做資料分析時,正常的做法是用先pandas先進行資料處理,然後再用MatplotlibSeabornPlotlyBokeh等對dataframe或者series進行視覺化操作。

但是說實話,每個視覺化包都有自己獨特的方法和函式,經常忘,這是讓我一直很頭疼的地方。

好訊息來了!從最新的pandas版本0.25.3開始,不再需要上面的操作了,資料處理和視覺化完全可以用pandas一個就全部搞定。

pandas現在可以使用PlotlyBokeh作為視覺化的backend,直接實現互動性操作,無需再單獨使用視覺化包了。

下面我們一起看看如何使用。

1. 啟用backend

importpandas之後,直接使用下面這段程式碼啟用backend,比如下面要啟用plotly

pd.options.plotting.backend = 'plotly'

目前,pandas的backend支援以下幾個視覺化包。

  • Plotly
  • Holoviews
  • Matplotlib
  • Pandas_bokeh
  • Hyplot

2. Plotly backend

Plotly的好處是,它基於Javascript版本的庫寫出來的,因此生成的Web視覺化圖表,可以顯示為HTML檔案或嵌入基於Python的Web應用程式中。

下面看下如何用plotly作為pandas的backend進行視覺化。

如果還沒安裝Plotly,則需要安裝它pip intsall plotly。如果是在Jupyterlab中使用Plotly,那還需要執行幾個額外的安裝步驟來顯示視覺化效果。

首先,安裝IPywidgets

pip install jupyterlab "ipywidgets>=7.5"

然後執行此命令以安裝Plotly擴充套件。

jupyter labextension install jupyterlab-plotly@4.8.1

示例選自openml.org的的資料集,連結如下:

資料連結:https://www.openml.org/d/187

這個資料也是Scikit-learn中的樣本資料,所以也可以使用以下程式碼將其直接匯入。

import pandas as pd
import numpy as np

from sklearn.datasets import fetch_openml

pd.options.plotting.backend = 'plotly'

X,y = fetch_openml("wine", version=1, as_frame=True, return_X_y=True)
data = pd.concat([X,y], axis=1)
data.head()

該資料集是葡萄酒相關的,包含葡萄酒型別的許多功能和相應的標籤。資料集的前幾行如下所示。

image

下面使用Plotly backend探索一下資料集。

繪圖方式與正常使用Pandas內建的繪圖操作幾乎相同,只是現在以豐富的Plotly顯示視覺化效果。

下面的程式碼繪製了資料集中兩個要素之間的關係。

fig = data[['Alcohol', 'Proline']].plot.scatter(y='Alcohol', x='Proline')
fig.show()

image

如果將滑鼠懸停在圖表上,可以選擇將圖表下載為高質量的影像檔案。
image

我們可以結合Pandasgroupby函式建立一個條形圖,總結各類之間Hue的均值差異。

data[['Hue','class']].groupby(['class']).mean().plot.bar()

image

class新增到我們剛才建立的散點圖中。通過Plotly可以輕鬆地為每個類應用不同的顏色,以便直觀地看到分類。

fig = data[['Hue', 'Proline', 'class']].plot.scatter(x='Hue', y='Proline', color='class', title='Proline and Hue by wine class')
fig.show()

image

3. Bokeh backend

Bokeh是另一個Python視覺化包,也可提供豐富的互動式視覺化效果。Bokeh還具有streaming API,可以為比如金融市場等流資料建立實時視覺化。

pandas-Bokeh的GitHub連結如下:

https://github.com/PatrikHlob...

老樣子,用pip安裝即可,pip install pandas-bokeh

為了在Jupyterlab中顯示Bokeh視覺化效果,還需要安裝兩個新的擴充套件。

jupyter labextension install @jupyter-widgets/jupyterlab-manager
jupyter labextension install @bokeh/jupyter_bokeh

下面我們使用Bokeh backend重新建立剛剛plotly實現的的散點圖。

pd.options.plotting.backend = 'pandas_bokeh'

import pandas_bokeh
from bokeh.io import output_notebook
from bokeh.plotting import figure, show

output_notebook()
p1 = data.plot_bokeh.scatter(x='Hue', 
                              y='Proline', 
                              category='class', 
                              title='Proline and Hue by wine class',
                              show_figure=False)
show(p1)

關鍵語句就一行程式碼,非常快捷,互動式效果如下。

image

Bokeh還具有plot_grid函式,可以為多個圖表建立類似於儀表板的佈局,下面在網格佈局中建立了四個圖表。

output_notebook()

p1 = data.plot_bokeh.scatter(x='Hue', 
                              y='Proline', 
                              category='class', 
                              title='Proline and Hue by wine class',
                              show_figure=False)

p2 = data[['Hue','class']].groupby(['class']).mean().plot.bar(title='Mean Hue per Class')

df_hue = pd.DataFrame({
    'class_1': data[data['class'] == '1']['Hue'],
    'class_2': data[data['class'] == '2']['Hue'],
    'class_3': data[data['class'] == '3']['Hue']},
    columns=['class_1', 'class_2', 'class_3'])

p3 = df_hue.plot_bokeh.hist(title='Distribution per Class: Hue')

df_proline = pd.DataFrame({
    'class_1': data[data['class'] == '1']['Proline'],
    'class_2': data[data['class'] == '2']['Proline'],
    'class_3': data[data['class'] == '3']['Proline']},
    columns=['class_1', 'class_2', 'class_3'])

p4 = df_proline.plot_bokeh.hist(title='Distribution per Class: Proline')

pandas_bokeh.plot_grid([[p1, p2], 
                        [p3, p4]], plot_width=450)

可以看到,視覺化的部分都是在pandasdataframe基礎上一行程式碼搞定,最後plot_grid完成佈局。
image

4. 總結

在內建的Pandas繪圖功能增加多個第三方視覺化backend,大大增強了pandas用於資料視覺化的功能,今後可能真的不需再去學習眾多視覺化操作了,使用pandas也可以一擊入魂!


原創不易,來波點贊支援。

本篇首發於我的原創公眾號:Python資料科學,歡迎關注。
個人網站:http://www.datadeepin.com/

相關文章