[Vis] Redash Dashboard 應用(下)|資料視覺化

Ichi Tsai
Ichi’s Dev Blog
Published in
6 min readJun 10, 2018
join 不同 data source,以 json 和 google spreadsheet 為例

這系列會提到以下幾個主題:

  1. 用 docker-compose 快速架好 local 版本的 Redash (https://github.com/getredash/redash/blob/master/docker-compose.production.yml)
  2. 設定好寄信功能以便邀請使用者,也可以用來重設密碼
  3. 用 Python code 做到不同類型 DB, e.g., 一個是 json, 另一個是 Google Spreadsheet 的 table join
  4. 手邊有個 json 檔的分析方法

這篇會提到 3, 4 點,不過順序會換成先「分析 json」再做「不同 data source join」。(1, 2 點由這裡去)

1. Json 檔 query 與整理

情境:

:「手邊有一份 json, 從別的系統 export 的,有 6 萬筆資料,該怎麼撈我要的欄位做 filter 然後分析?」

下意識的答案當然是開 jupyter notebook 寫 python 囉~但如果這檔案是定期從別的系統 export 出來,每次都要去做一樣的事情、弄成 dashboard 呈現,那這邊可以考慮 Redash 喔~

Redash 裡寫 python 搞懂它的 API 後,基本上就很開掛了,唯一的缺點是 bug 很難 de,error message 都只有回傳一個很隱晦的也不知道錯哪行,但新版的介面有 output 執行 log 了終於(撒花)至少可以用 print 大法。

步驟:

  1. 新增一個 python data source(如果他不在你的選單內可以參考上篇
  2. 設定中的 modules to import 記得用逗號隔開且不能有空格(有去看他原始碼只有寫了 split 沒有再做 strip,所以 request, math 就會壞掉喔~)
  3. 用 request query json 的位址然後開始做 parsing
  4. 給一個 result dictionary, 以 add_result_row 來加入每筆想要的資料
  5. 最後以 add_result_column 選取想要的欄位並設定資料型態
  6. 按下 run 執行
  7. 呈現資料表格的旁邊可以新增 visualization 分頁,進去就可以用點選跟拖拉的方式製作圖表
    (在 3 開頭的版本 scatter plot 系列都會異常的慢,但 4 開頭版本有改善)
step 1, 2
step 3, 4, 5
step 7

2. Join 不同 data source

終於要來介紹首圖的故事了。但這邊不會細講怎麼新增一個 Google Spreadsheet data source,請參考投影片

情境

:「我們現在有某某資料放在 MSSQL,但相關的另一個資料在 MongoDB捏,怎麼 join?」

嘿嘿,這邊要介紹 Redash 提供的 get_query_result ,可以從之前建立的 table 繼續走下去,很清楚的在 code 裡面留下資料處理流程。

其實 Redash 裡面會把資料整理成 {'rows': [], 'columns': []} 這樣的格式,這樣的結構可以從每個 query 裡都可以點出的 show api key 這個功能拿到 json 的版本,為了清楚看懂結構我放到 online json viewer(截圖都在下方)

所以用 get_query_result 接回來的資料只要 access rows 這個 key 就會是 raw data,每個 row 裡面是這樣的:{欄位名稱1: 值, 欄位名稱2: 值} ,例如:{“recclass”: “L5”, “name”: “Aachen”, “nametype”: “Valid”, “reclat”: “50.775000”, “year”: “1880”, “mass”: “21”, “fall”: “Fell”, “reclong”: “6.083330”, “id”: “1”, “population”: null}

所以不難發現前半部分介紹的 add_result_row 是怎麼個運作方式。

步驟

  1. 找出想要 join 的 query id 們,在 url 上
  2. get_query_result 把結果接回來
  3. 做 python dictionary 的處理(總之是想辦法 mapping 到另一個,example code 附在下圖,也有 gist
  4. add_result_column新增想要 show 在 table 的欄位
以 api query 回來的資料
example api calls
https://gist.github.com/tsaiichi/71b496e2c3ad58ec036f3a6fe1730812

總結

五月系列活動的時候因為時間因素沒有限定大家要以 python 寫出圖表,因此得到了像是:「既然這些圖可以用 Excel 做出來那為什麼要寫 python?」

  1. 資料量:如果開 Excel 要去泡一杯咖啡上個廁所等它開起來,那真的很浪費時間
  2. 重複的事情:我曾經聽過有人的工作是必須在每個月的某一天,花一整天去執行跟上個月的某一天一樣的步驟,然後跑出報表(可能有人會寫巨集來解決就是了)這樣也真的很可怕
  3. 資訊透明度:在 Redash 上的 query 是可以分享的,也可以 fork,也就是說可以很清楚明白資料的來源,以及資料怎麼被處理,同時也只會有一種版本。用 Excel 大家互相 email 更新版本,最後各自都有一個版本不知道哪個才是對的,也很可怕…

如果沒有以上的情境,而且需求只是要畫一個 bar chart 又有時間壓力,建議大家可以選用最熟悉的工具即可。
但上述問題是一個很基本的會碰到資料生命週期的情境,所以也不是很難遇到的事情,這邊就用這系列推薦 Redash 這個工具給大家參考囉!

系列其他文章連結

--

--

Ichi Tsai
Ichi’s Dev Blog

A proactive and helpful individual who values integrity above all else. Have both backend engineering experience and project management skills.