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


推薦閱讀:
相关文章