互動式儀表板!Python輕鬆完成!⛵

ShowMeAI發表於2022-12-27
互動式儀表板!Python輕鬆完成!⛵

? 作者:韓信子@ShowMeAI
? 資料分析實戰系列https://www.showmeai.tech/tutorials/40
? 本文地址https://www.showmeai.tech/article-detail/410
? 宣告:版權所有,轉載請聯絡平臺與作者並註明出處
? 收藏ShowMeAI檢視更多精彩內容

? 引言

在本篇內容中,ShowMeAI將給大家講解使用 ?ipywidget 模組建立互動式儀表板。

互動式儀表板!Python輕鬆完成!⛵

我們本次用到的資料集是 ?Kaggle 的 CardioGoodFitness,大家可以透過 ShowMeAI 的百度網盤地址下載。

? 實戰資料集下載(百度網盤):公眾號『ShowMeAI研究中心』回覆『實戰』,或者點選 這裡 獲取本文 [41]ipywidgets:使用Python建立互動式儀表板CardioGoodFitness 資料集

ShowMeAI官方GitHubhttps://github.com/ShowMeAI-Hub

首先,我們需要匯入所需的模組。

import pandas as pd
import ipywidgets 
import seaborn as sns
import matplotlib.pyplot as plt

我們先看一下資料變數。資料中包含 2 個連續變數,收入 Income 和英里數 Miles。

互動式儀表板!Python輕鬆完成!⛵

? 看板Demo實現:瞭解Miles的分佈

? 準備工作

?ipywidget 模組包含了很多可用的小部件。在這個演示中,我們將使用下拉框選擇類別資料,以便更好地瞭解里程分佈。我們將選擇箱線圖來繪製每個類別的里程資料。

%matplotlib widget
# Drop down for boxplot variable to be select
drop_down_name = ipywidgets.Dropdown(options=list(df.drop(['Miles','Income'],axis=1).columns),
                                value=list(df.drop(['Miles','Income'],axis=1).columns)[0],
                                description='Columns:',
                                disabled=False)

接下來,我們可以建立一個函式,允許輸入用於繪製英里箱線圖的列名稱。

#selected_vals = column used to plot
def boxplot(selected_vals):
    plt.close('all')
    fig = plt.figure(figsize=(9,5))
    plt.style.use('seaborn')
    sns.boxplot(df[selected_vals],df['Miles'])
    plt.title('Boxplot of miles for' + selected_vals)
    plt.show()

之後,我們需要建立一個 ?layout/佈局,Jupyter 互動式小部件具有一個 layout 屬性,包含了許多影響小部件佈局的 CSS 屬性。

最簡單的自定義是 HBox,它是一個水平佈局的選擇器,而 VBox 代表一個垂直佈局的選擇器。下面是 HBox 或 VBox 佈局的示例。

互動式儀表板!Python輕鬆完成!⛵
互動式儀表板!Python輕鬆完成!⛵

下面我們準備輸入和輸出佈局的顯示。

#layout for filtering 
ui2 = ipywidgets.HBox([drop_down_name])
# link your function to your input 
out2 = ipywidgets.interactive_output(boxplot,
                                     {'selected_vals' : drop_down_name})
# display your box plot
display(ui2,out2)
互動式儀表板!Python輕鬆完成!⛵

上面散點圖的輸入是 x、y 和色調。因為每個變數都是一個選擇,我們使用了下拉框。

? 輸入設計、選項、值和要定義的描述

# dropbox select x axis
drop_down_x = ipywidgets.Dropdown(options=list(df.columns),
                                value=list(df.columns)[0],
                                description='X variable:',
                                disabled=False)
# dropbox select y axis
drop_down_y = ipywidgets.Dropdown(options=list(['Miles','Income']),
                                value=list(['Miles','Income'])[0],
                                description='Y variable:',
                                disabled=False)
# dropbox select category
drop_down_category= ipywidgets.Dropdown(options=list(df.drop(['Miles','Income'],axis=1).columns),
                                value=list(df.drop(['Miles','Income'],axis=1).columns)[0],
                                description='Category:',
                              disabled=False)

? 散點圖繪製

# scatter plot function
def scatter(x,y,category):
    plt.close('all')
    fig = plt.figure(figsize=(9,5))
    plt.style.use('seaborn')
    sns.scatterplot(data=df,x=x,y=y,hue=category)
    plt.title('Scatterplot of ' +x+' versus '+ y)
    #plt.xlabel('Date')
    plt.show()

? 顯示HBox或VBox的選擇器佈局

# display the layout of filtering
ui3 = ipywidgets.HBox([drop_down_x,drop_down_y,drop_down_category])

? 將繪圖與選擇器相關聯

# related the plot link to filtering 
out3 = ipywidgets.interactive_output(scatter,
                                     {'x' : drop_down_x,
                                     'y': drop_down_y,
                                     'category':drop_down_category})

? 顯示選擇後的輸入和輸出

#display the input and output
display(ui3,out3)
互動式儀表板!Python輕鬆完成!⛵

參考資料

推薦閱讀

互動式儀表板!Python輕鬆完成!⛵

相關文章