Redash có lợi thế là query từ nhiều nguồn nhưng phân tích không ngon được như Jupyter. Và ngược lại, Jupyter không query ngon như Redash, nhưng phân tích lại ngon hơn. Và thế là 1 cái task được sinh ra với nội dung "mày hãy tìm cách quện 2 chúng nó lại với nhau".👏

Sếp thương tình quăng cho cái hình đính kèm cái task. 

Task có nhiêu đấy nhưng mà tìm tài liệu không có ra, ngay cả tìm bằng tiếng Anh. Cho nên là hôm nay viết cái blog be bé như con cò để làm tư liệu cho các bạn để khi search đến hai từ khóa này. Chứ blog không có gì cao siêu đâu.

Trước tiên là tìm hiểu sơ 2 chúng nó là gì rồi hãy học cách cấu hình. Ha!

Jupyter

Jupyter Notebook là một ứng dụng web nguồn mở cho phép bạn viết code trực tiếp trên trển rồi thực thi ra kết quả và có thể trực quan hóa bằng cách mô phỏng dưới dạng bảng hay biểu đồ.

Hình minh họa lấy từ trang chủ Jupyter (viết credit chứ không lại bảo ăn cắp)

Để biết nó là gì cụ thể hơn thì vào trang chủ của nó đọc ha.

Redash

Ngắn gọn súc tích, thì nó kết nối và query từ nhiều nguồn data xây dựng thành dashboard và cũng có thể mô phỏng dưới nhiều hình thức như bảng hay biểu đồ.

Cái này tốn phí nha =)) →trang chủ

Jupyter + Redash

Đầu tiên, vào Redash lấy API key

Chú ý: là lấy API của tài khoản các bạn nhé. Tại vì trong từng query của Redash cũng có API (ban đầu mình lấy từ đây, nên warning nhẹ để đừng dại như mình)

Có API rồi thì cài thư viện RedashDynamicQuery cho Jupyter

Ngoài ra ví dụ của mình cần thêm các thư viện:

Pandas - công cụ phân tích data hịn hò của Python

Json - thao tác với json

Plotly - hỗ trợ xây dựng biểu đồ

from redash_dynamic_query import RedashDynamicQuery
import pandas as pd
import json

redash = RedashDynamicQuery(
endpoint='{địa chỉ redash}',
apikey='{API key}',
)

query_id = {id của query}
bind = {
    #Parameters để lọc điều kiện
}

#Lấy kết quả
result = redash.query(query_id, bind)
res = result['query_result']['data']

#parse Json
res_format_json = json.dumps(res, indent=4, separators=(',', ': '))

print(res_format_json)

chạy ngon lành cành me thì sẽ ra kết quả như sau:

Đến đây coi như xong việc trình bày.

Phần dưới là hiển thị thành bảng hay biểu đồ cho các bạn dễ hình dung

result = redash.query(query_id, bind)
res = result['query_result']['data']

#jsonファイルを作成し、クエリ結果を出力
f = open('output.json', 'w')
json.dump(res['rows'], f)

#変換したいjsonファイルを読込
df = pd.read_json("output.json")

#csvファイルに変換
df.to_csv("output.csv")
csv_data = pd.read_csv('output.csv')

#表形式で出力
csv_data = pd.read_csv('output.csv')
csv_data[['フォーマット日付', 'Label', 'Value']]
`
#表形式で出力
csv_data = pd.read_csv('output.csv')
csv_data[['history_date', '\u76ee\u6a19AAU', '\u5b9f\u7e3eAAU']]

months = csv_data['history_date'].values.tolist()
months = [x for x in months if str(x) !='nan']
months = [str(round(x)) for x in months]

#グラフを整形
fig = go.Figure()
fig.add_trace(go.Bar(
    x=months,
    y=csv_data['\u76ee\u6a19AAU'].values.tolist(),
    name='\u76ee\u6a19AAU',
    marker_color='indianred'
))
fig.add_trace(go.Bar(
    x=months,
    y=csv_data['\u5b9f\u7e3eAAU'].values.tolist(),
    name='\u5b9f\u7e3eAAU',
    marker_color='lightsalmon'
))

fig.update_layout(barmode='group', xaxis_tickangle=0)
fig.show()
`

Tổng kết

Đấy, xong rồi. Hi vọng bài này sẽ hữu ích cho các bạn.

Hẹn gặp lại ở các bài tiếp theo.