Dash 是一个开源的 Python 库,用于快速开发交互式 web 应用程序。它基于 Flask 和 Plotly,能够帮助开发者轻松地将 Python 中的数据分析、科学计算和可视化结果嵌入到网页中。本文将带你从零开始,深入了解 Dash Python 框架,并通过实战案例教程,让你能够独立开发自己的 Dash 应用程序。
一、Dash 简介
Dash 是一个强大的库,它允许开发者使用 Python 和 Flask 构建数据驱动的 web 应用。以下是 Dash 的一些主要特点:
- 组件丰富:Dash 提供了丰富的内置组件,如仪表板、图表、输入框、复选框等,满足各种开发需求。
- 易于集成:Dash 可以轻松地与 Pandas、NumPy、Matplotlib、Seaborn、Plotly 等数据分析库集成。
- 跨平台:Dash 可以在 Windows、macOS 和 Linux 等操作系统上运行。
二、环境搭建
在开始之前,确保你已经安装了以下软件:
- Python 3.5 或更高版本
- Anaconda 或 Miniconda
- Jupyter Notebook(可选)
安装完上述软件后,使用以下命令安装 Dash:
pip install dash
三、基础教程
3.1 创建第一个 Dash 应用
以下是一个简单的 Dash 应用示例:
import dash
import dash_core_components as dcc
import dash_html_components as html
app = dash.Dash(__name__)
app.layout = html.Div([
html.H1('Hello Dash!'),
dcc.Dropdown(
options=[
{'label': 'Option 1', 'value': '1'},
{'label': 'Option 2', 'value': '2'}
],
value='1'
),
html.Div(id='output-container')
])
if __name__ == '__main__':
app.run_server(debug=True)
3.2 使用组件
在上面的例子中,我们使用了 Dropdown 组件来创建一个下拉列表。你可以通过修改 options 和 value 参数来定制下拉列表的外观和行为。
3.3 数据绑定
Dash 使用回调函数来处理用户交互。以下是一个简单的例子,展示如何将下拉列表的值与输出容器中的文本绑定:
@app.callback(
dash.dependencies.Output('output-container', 'children'),
[dash.dependencies.Input('my-input', 'value')]
)
def update_output(value):
return 'You entered "{}"'.format(value)
四、实战案例
4.1 数据可视化
在这个案例中,我们将使用 Dash 创建一个简单的仪表板,展示全球 COVID-19 确诊病例数据。
首先,安装所需的库:
pip install dash pandas plotly
然后,使用以下代码创建 Dash 应用:
import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
import plotly.graph_objs as go
app = dash.Dash(__name__)
# 加载数据
data = pd.read_csv('https://covid19.who.int/WHO-COVID-19-global-data.csv')
app.layout = html.Div([
dcc.Graph(
id='covid-19-graph',
figure={
'data': [
go.Scatter(
x=data['Date'],
y=data['New_cases'],
mode='lines+markers',
name='New_cases'
)
],
'layout': go.Layout(
title='Global COVID-19 New Cases',
xaxis={'title': 'Date'},
yaxis={'title': 'New Cases'}
)
}
)
])
if __name__ == '__main__':
app.run_server(debug=True)
运行上述代码后,你将看到一个包含全球 COVID-19 确诊病例数据的仪表板。
4.2 数据交互
在这个案例中,我们将使用 Dash 创建一个交互式仪表板,允许用户根据国家选择不同的数据系列。
首先,安装所需的库:
pip install dash pandas plotly
然后,使用以下代码创建 Dash 应用:
import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
import plotly.graph_objs as go
app = dash.Dash(__name__)
# 加载数据
data = pd.read_csv('https://covid19.who.int/WHO-COVID-19-global-data.csv')
app.layout = html.Div([
dcc.Dropdown(
id='country-selector',
options=[{'label': row['Country'], 'value': row['Country']} for index, row in data.iterrows()],
value=data['Country'].unique()[0]
),
dcc.Graph(
id='covid-19-graph',
figure={
'data': [
go.Scatter(
x=data['Date'],
y=data['New_cases'],
mode='lines+markers',
name='New_cases'
),
go.Scatter(
x=data['Date'],
y=data['New_deaths'],
mode='lines+markers',
name='New_deaths'
)
],
'layout': go.Layout(
title='COVID-19 New Cases and New Deaths by Country',
xaxis={'title': 'Date'},
yaxis={'title': 'New Cases/Deaths'},
updatemenus=[
dict(
buttons=list([
dict(
args=[{'visible': [True, True]}],
label='Cases',
method='update'
),
dict(
args=[{'visible': [False, True]}],
label='Deaths',
method='update'
)
]),
direction='down',
showactive=True,
),
]
)
}
)
])
@app.callback(
dash.dependencies.Output('covid-19-graph', 'figure'),
[dash.dependencies.Input('country-selector', 'value')]
)
def update_graph(country):
filtered_data = data[data['Country'] == country]
return {
'data': [
go.Scatter(
x=filtered_data['Date'],
y=filtered_data['New_cases'],
mode='lines+markers',
name='New_cases'
),
go.Scatter(
x=filtered_data['Date'],
y=filtered_data['New_deaths'],
mode='lines+markers',
name='New_deaths'
)
],
'layout': go.Layout(
title='COVID-19 New Cases and New Deaths by Country',
xaxis={'title': 'Date'},
yaxis={'title': 'New Cases/Deaths'},
updatemenus=[
dict(
buttons=list([
dict(
args=[{'visible': [True, True]}],
label='Cases',
method='update'
),
dict(
args=[{'visible': [False, True]}],
label='Deaths',
method='update'
)
]),
direction='down',
showactive=True,
),
]
)
}
if __name__ == '__main__':
app.run_server(debug=True)
运行上述代码后,你将看到一个交互式仪表板,允许用户选择不同的国家,并查看该国的新冠病毒确诊病例和死亡病例数据。
五、总结
通过本文的学习,你应当已经对 Dash Python 框架有了初步的了解,并能够创建简单的交互式 web 应用程序。随着你对 Dash 的深入学习和实践,相信你将能够开发出更多具有实际应用价值的项目。祝你在 Dash 的世界里一路顺风!
