Dash:一个数据仪表板超人的Python库!
搞过数据分析的小伙伴都知道,光把数据分析出来还不够,咋让别人一眼就看懂你的分析结果才是关键。之前我总是用matplotlib画图,要啥自行车就是个静态图片,一点都不酷。后来发现了这个叫Dash 的神器,真是让我相见恨晚啊!
Dash就是Plotly家搞出来的一个Python库,让你不用写一行JavaScript代码就能搞出炫酷的网页仪表板。它把Flask、React.js和Plotly.js这些玩意儿打包在一起,你只要写Python代码就完事了。
来看个最基础的例子:
import dash
from dash import html, dcc
import plotly.express as px
app = dash.Dash(__name__)
# 随便整点数据
df = px.data.iris()
# 画个好看的图
fig = px.scatter(df, x=“sepal_width”, y=“sepal_length”, color=“species”)
app.layout = html.Div([
html.H1(“我的第一个Dash应用”),
dcc.Graph(figure=fig)
])
if __name__ == '__main__':
app.run_server(debug=True)
运行这段代码,浏览器打开http://127.0.0.1:8050,哇塞,一个漂亮的可交互散点图就出来了!
Dash用HTML组件和Core组件来搭页面。HTML组件就是那些div、h1这些网页基本元素,Core组件则是一些现成的花里胡哨的控件。
app.layout = html.Div([
html.Div([
html.H1(“销售数据分析”),
html.P(“点击下面的按钮筛选数据区间:”)
], style={'textAlign':'center'}),
dcc.Dropdown(
options=['全部', '上半年', '下半年'],
value='全部',
id='time-filter'
)
])
温馨提示:style里面的属性名得用驼峰命名,比如textAlign
,不能写成text-align
,不然就报错。
光有静态页面多没劲,Dash最牛的地方是可以加回调函数,让页面能实时响应用户操作:
from dash.dependencies import Input, Output
@app.callback(
Output('graph-id', 'figure'),
Input('time-filter', 'value')
)
def update_graph(selected_time):
# 根据选择的时间筛选数据
if selected_time == '全部':
filtered_df = df
else:
filtered_df = df[df['period'] == selected_time]
return px.line(filtered_df, x='date', y='sales')
这样一来,用户选择不同的时间区间,图表就会自动更新,贼溜!
Dash还能搞定更复杂的交互。比如说,点击图表上的某个点,在旁边显示详细信息:
@app.callback(
Output('click-data', 'children'),
Input('graph-id', 'clickData')
)
def display_click_data(clickData):
if clickData is None:
return “点击图表上的点查看详情”
point = clickData['points'][0]
return f“选中的数据点:x={point['x']}, y={point['y']}”
温馨提示:callback函数里面别写太复杂的计算,不然用户等半天都看不到响应,体验很糟心。
默认的白底黑字看着太素了,加点样式:
app.layout = html.Div([
# 前面的组件...
], style={
'backgroundColor':'#f4f4f4',
'padding':'20px',
'borderRadius':'10px',
'boxShadow':'2px 2px 10px rgba(0,0,0,0.1)'
})
把这些知识点都用起来,就能整出一个特别像那么回事的数据分析仪表板。要是再配上定时更新的数据,那就更专业了!记得多看看Dash的官方文档,里面有特别多现成的例子,改改就能用。
写Python写久了就会发现,数据分析和可视化真是一门艺术,Dash就是帮咱们把这门艺术变得简单点的好帮手。