资讯详情

HoRain云--Python交互式数据可视化:Streamlit、Dash与Plotly实战

📅 2026/10/15 14:06:32 | 华诺云谱 👁 阅读
HoRain云--Python交互式数据可视化:Streamlit、Dash与Plotly实战
静态图表不够直观交互式仪表盘才是数据分析的利器。本文对比Streamlit、Dash、Plotly并用Streamlit快速搭建数据分析应用。一、三种方案对比框架特点适合Streamlit极简脚本式快速原型、数据应用Dash基于FlaskReact复杂仪表盘Plotly图表库交互图表二、Streamlit快速入门bash复制下载pip install streamlit plotly pandaspython复制下载# app.py import streamlit as st import pandas as pd import plotly.express as px st.title(销售数据分析) # 侧边栏 st.sidebar.header(筛选条件) city st.sidebar.selectbox(城市, [全部, 北京, 上海, 广州]) date_range st.sidebar.date_input(日期范围) # 数据 st.cache_data def load_data(): return pd.read_csv(sales.csv, parse_dates[date]) df load_data() # 筛选 if city ! 全部: df df[df[city] city] # 指标 col1, col2, col3 st.columns(3) col1.metric(总销售额, f¥{df[amount].sum():,.0f}) col2.metric(订单数, len(df)) col3.metric(客单价, f¥{df[amount].mean():.2f}) # 图表 fig px.line(df.groupby(date)[amount].sum().reset_index(), xdate, yamount, title销售趋势) st.plotly_chart(fig, use_container_widthTrue) # 数据表 st.subheader(原始数据) st.dataframe(df.head(100))运行bash复制下载streamlit run app.py三、Streamlit核心组件python复制下载import streamlit as st # 文本 st.title(标题) st.header(二级标题) st.subheader(三级标题) st.write(普通文本) st.markdown(**加粗** _斜体_) st.code(print(hello), languagepython) st.latex(rE mc^2) # 输入 name st.text_input(姓名) age st.number_input(年龄, min_value0, max_value120) agree st.checkbox(同意) level st.slider(等级, 1, 10, 5) choice st.radio(选择, [A, B, C]) multi st.multiselect(多选, [x, y, z]) file st.file_uploader(上传文件, type[csv, xlsx]) # 布局 col1, col2 st.columns(2) with col1: st.write(左列) with col2: st.write(右列) with st.expander(展开详情): st.write(隐藏内容) tab1, tab2 st.tabs([标签1, 标签2]) with tab1: st.write(内容1) # 状态 if count not in st.session_state: st.session_state.count 0 if st.button(1): st.session_state.count 1 st.write(f计数: {st.session_state.count}) # 进度 import time progress st.progress(0) for i in range(100): time.sleep(0.01) progress.progress(i 1)四、Plotly交互图表python复制下载import plotly.express as px import plotly.graph_objects as go # 折线图 fig px.line(df, xdate, yamount, colorcity, title各城市销售趋势) fig.show() # 柱状图 fig px.bar(df, xcity, yamount, colorcategory, barmodegroup) # 散点图 fig px.scatter(df, xprice, ysales, sizequantity, colorcategory, hover_data[name]) # 饼图 fig px.pie(df, namescategory, valuesamount) # 热力图 fig px.imshow(correlation_matrix, text_autoTrue) # 3D fig px.scatter_3d(df, xx, yy, zz, colorcategory) # 地图 fig px.scatter_mapbox(df, latlat, lonlon, sizevalue, colorcategory, mapbox_styleopen-street-map) # 自定义 fig go.Figure() fig.add_trace(go.Scatter(x[1,2,3], y[4,5,6], modelinesmarkers)) fig.update_layout(title自定义图表, xaxis_titleX, yaxis_titleY)五、Dash入门python复制下载from dash import Dash, dcc, html, Input, Output import plotly.express as px app Dash(__name__) app.layout html.Div([ html.H1(Dash仪表盘), dcc.Dropdown( idcity-dropdown, options[{label: c, value: c} for c in df[city].unique()], valuedf[city].unique()[0] ), dcc.Graph(idsales-graph), ]) app.callback( Output(sales-graph, figure), Input(city-dropdown, value) ) def update_graph(city): filtered df[df[city] city] fig px.line(filtered, xdate, yamount) return fig if __name__ __main__: app.run_server(debugTrue)六、实战股票分析仪表盘python复制下载import streamlit as st import yfinance as yf import plotly.graph_objects as go st.set_page_config(page_title股票分析, layoutwide) st.title( 股票分析仪表盘) # 输入 ticker st.sidebar.text_input(股票代码, AAPL) period st.sidebar.selectbox(周期, [1mo, 3mo, 6mo, 1y, 5y]) # 数据 st.cache_data(ttl300) def get_stock(ticker, period): return yf.Ticker(ticker).history(periodperiod) data get_stock(ticker, period) if not data.empty: # 指标 col1, col2, col3, col4 st.columns(4) current data[Close].iloc[-1] prev data[Close].iloc[-2] change (current - prev) / prev * 100 col1.metric(当前价, f${current:.2f}, f{change:.2f}%) col2.metric(最高, f${data[High].max():.2f}) col3.metric(最低, f${data[Low].min():.2f}) col4.metric(成交量, f{data[Volume].sum():,.0f}) # K线图 fig go.Figure(data[go.Candlestick( xdata.index, opendata[Open], highdata[High], lowdata[Low], closedata[Close] )]) fig.update_layout(titlef{ticker} K线图, xaxis_rangeslider_visibleFalse) st.plotly_chart(fig, use_container_widthTrue) # 成交量 fig2 px.bar(data, xdata.index, yVolume, title成交量) st.plotly_chart(fig2, use_container_widthTrue)七、部署7.1 Streamlit Cloud推送代码到GitHub访问 share.streamlit.io 一键部署。7.2 Dockerdockerfile复制下载FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . EXPOSE 8501 CMD [streamlit, run, app.py, --server.port8501, --server.address0.0.0.0]7.3 Nginx反向代理nginx复制下载location / { proxy_pass http://localhost:8501; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; }八、性能优化python复制下载# 缓存数据 st.cache_data def load_data(): return pd.read_csv(big.csv) # 缓存资源 st.cache_resource def get_model(): return load_ml_model() # 分页 page st.number_input(页码, 1, 100) st.dataframe(df.iloc[(page-1)*100:page*100])九、总结Streamlit适合快速搭建数据应用Dash适合复杂仪表盘Plotly提供丰富交互图表。三者结合能快速交付数据分析产品。推荐新项目优先用Streamlit Plotly。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑