ตารางสถิติสำคัญแบบอินเทอร์แอกทีฟ
การใช้กราฟแสดงข้อมูลในเชิงภาพเป็นวิธีที่ดีในการมองเห็นตัวเลขรวมได้อย่างรวดเร็ว แต่บางครั้งก็จำเป็นต้องแสดงข้อมูลในเชิงตัวเลขมากกว่าที่กราฟทั่วไปจะรองรับได้
หัวหน้าฝ่ายการเงินของบริษัทอีคอมเมิร์ซ ซึ่งเป็นหนึ่งในผู้มีส่วนได้ส่วนเสียหลัก ได้ยินเรื่องผลงานที่ยอดเยี่ยมของคุณ และเขาต้องการดูตัวเลขในรูปแบบตาราง มากกว่าในรูปแบบกราฟ เขาจึงขอให้สร้างแดชบอร์ดที่แสดงสถิติรวมในรูปแบบตาราง พร้อมกับถามว่าจะเพิ่มความสามารถแบบอินเทอร์แอกทีฟที่เหนือกว่า Excel สเปรดชีตเดิมของเขาได้บ้างไหม
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การสร้างแดชบอร์ดด้วย Dash และ Plotly
คำแนะนำการฝึกหัด
- กำหนดออบเจ็กต์
money_fmtสำหรับจัดรูปแบบสกุลเงิน USD ใต้บรรทัดที่9โดยใช้ฟังก์ชันและพารามิเตอร์ style ที่เหมาะสม - เพิ่ม formatter
money_fmtให้กับคอลัมน์'Total Sales ($)'ในcolumn_defsใต้บรรทัดที่15
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
from dash import Dash, dcc, html, Input, Output, callback
import plotly.express as px
import pandas as pd
from dash_ag_grid import AgGrid
ecom_sales = pd.read_csv('/usr/local/share/datasets/ecom_sales.csv')
logo_link = 'https://assets.datacamp.com/production/repositories/5893/datasets/fdbe0accd2581a0c505dab4b29ebb66cf72a1803/e-comlogo.png'
key_stats_tb = ecom_sales.groupby(['Country','Major Category', 'Minor Category'])['OrderValue'].agg(['sum', 'count', 'mean']).reset_index().rename(columns={'count':'Sales Volume', 'sum':'Total Sales ($)', 'mean':'Average Order Value ($)'})
# Set up the money object
money_fmt = {
"____": (
"""params.value.toLocaleString(
'en-US', {style: '____', currency: '____'})""")}
# Add the formatter to the relevant column
column_defs = [
{"field": "Major Category"},
{"field": "Total Sales ($)", "____": ____},
{"field": "Average Order Value ($)"},
{"field": "Sales Volume"}]
grid = AgGrid(
columnDefs=column_defs,
rowData=key_stats_tb.to_dict("records"))
app = Dash()
app.layout = [
html.Img(src=logo_link, style={'margin':'30px 0px 0px 0px'}),
html.H1('Sales Aggregations'),
html.Div([
html.H2('Key Aggregations'),
grid],
style={'width':'850px', 'height':'750px', 'margin':'0 auto'})
]
if __name__ == '__main__':
app.run(debug=True)