Superset中的pandas
Superset的後端是基於Python的,用到了Flask、Pandas、SqlAlchemy。【1】
- Flask AppBuilder(鑒權、CRUD、規則)
- Pandas(分析)
- SqlAlchemy(資料庫ORM)
梳理一下Pandas在數據可視化過程中的作用。
1、DataFrame
Superset採用Model/View結構,數據可視化的功能是View的一個組成部分,代碼在superset/viz.py中。
BaseViz::get_df用於獲取pandas::DataFrame。
框中的self.datasource.query(query_obj)從資料庫查詢數據,在如下的輸出中可以看到,df是pandas的DataFrame類型,self.datasource是sqla.models.SqlaTable類型。
--------------------------------------------------------------
2、數據可視化組件的初始化
Superset採用nvd3來實現數據可視化,viz.py中的BaseViz類是可視化的基類。
BaseViz由Superset::explore_json函數初始化的(在superset/views/core.py中)。
explore_json→get_viz
-----------------------------------------------------------------
datasource = ConnectorRegistry.get_datasource(
datasource_type, datasource_id, db.session) viz_obj = viz.viz_types[viz_type](datasource,
form_data=form_data, )3、pandas在時間序列中的應用
在時間序列(time series)圖中,Superset提供了【移動平均法】等基於移動時間窗口的展示方式:
這部分功能用到了pandas計算移動平均數等函數,下述代碼展示了Superset實現類似處理的思路,在指定類型的圖表的get_data函數中,
用pandas的函數實現特殊處理:
NVD3TimeSeriesViz::get_data
...
if rolling_type in (mean, std, sum) and rolling_periods:
if rolling_type == mean: df = pd.rolling_mean(df, int(rolling_periods), min_periods=0) elif rolling_type == std: df = pd.rolling_std(df, int(rolling_periods), min_periods=0) elif rolling_type == sum: df = pd.rolling_sum(df, int(rolling_periods), min_periods=0)附:
Pandas的基本功能:
pandas hello world程序 - 知乎專欄移動平均法:
Moving Average: What it is and How to Calculate it參考:
【1】[原]解密Airbnb 自助BI神器:Superset 顛覆 Tableau
推薦閱讀: