【Python数据分析】实验2 数据看板的设计与实现(Streamlit + Plotly 完整教程)
发布时间:2026/10/14 3:24:57 锦皓数字建站
`)
一、实验目的掌握数据看板的基本概念和核心功能学会根据数据特征选择合适的可视化图表独立完成从数据准备到看板搭建的完整流程熟悉 Streamlit Pandas Plotly 的使用二、实验环境操作系统Windows开发工具PyCharmPython 版本3.13核心库Streamlit、Pandas、Plotly、NumPy安装命令bashpip install streamlit pandas plotly numpy三、需求分析与版面设计业务场景电商销售数据看板核心需求展示销售概况总销售额、总订单数、平均客单价、平均评分展示各品类销售对比展示月度销售趋势展示各区域销售占比提供订单明细查询版面布局text┌───────────────────────────────────────┐│ 标题 说明├───────────────────────────────────────┤│ 核心指标卡片 × 4├─────────────────────────────────────┤│ 各品类柱状图 月度趋势折线图├─────────────────────────────────────┤│ 区域占比环形图 订单明细表格└──────────────────────────────────────┘配色主色蓝 #1f77b4、背景浅灰 #f5f7fa、文字深灰蓝 #2c3e50四、数据准备使用 NumPy 生成 2000 条模拟电商销售数据保存为 ecommerce_sales.csv。数据字段订单日期、商品类别、销售区域、销售额、订单量、客户评分预处理剔除空值df.dropna()剔除异常值df[df[‘销售额’] 0]时间标准化pd.to_datetime()派生月份字段用于趋势分析数据生成代码 generate_data.pypythonimportpandasaspdimportnumpyasnp np.random.seed(42)datespd.date_range(2024-01-01,2024-12-31,freqD)categories[电子产品,服装鞋帽,家居用品,食品饮料,图书文具]regions[华东,华南,华北,西南,华中]data[]for_inrange(2000):data.append({订单日期:np.random.choice(dates),商品类别:np.random.choice(categories),销售区域:np.random.choice(regions),销售额:round(np.random.uniform(50,5000),2),订单量:np.random.randint(1,20),客户评分:round(np.random.uniform(3.0,5.0),1)})dfpd.DataFrame(data)df[订单日期]pd.to_datetime(df[订单日期])df[月份]df[订单日期].dt.to_period(M).astype(str)df.to_csv(ecommerce_sales.csv,indexFalse,encodingutf-8-sig)print(f生成{len(df)}条数据)五、看板实现代码 app.pypythonimportstreamlitasstimportpandasaspdimportplotly.expressaspx st.set_page_config(page_title电商销售数据看板,page_icon,layoutwide)st.cache_datadefload_data():dfpd.read_csv(ecommerce_sales.csv)df[订单日期]pd.to_datetime(df[订单日期])returndf dfload_data()st.title( 电商销售数据看板)st.caption(数据来源模拟电商销售数据 | 时间范围2024年全年)st.divider()# 数据概览区st.subheader( 核心指标概览)col1,col2,col3,col4st.columns(4)withcol1:st.metric( 总销售额,f¥{df[销售额].sum():,.0f},12.5%)withcol2:st.metric( 总订单数,f{len(df):,},8.3%)withcol3:st.metric( 平均客单价,f¥{df[销售额].mean():,.0f},3.2%)withcol4:st.metric(⭐ 平均评分,f{df[客户评分].mean():.2f},0.1)st.divider()# 维度统计区 趋势分析区col_left,col_rightst.columns(2)withcol_left:st.subheader( 各品类销售额对比)cat_salesdf.groupby(商品类别)[销售额].sum().reset_index()fig_barpx.bar(cat_sales,x商品类别,y销售额,color商品类别,text_auto.2s)fig_bar.update_layout(showlegendFalse,height400)st.plotly_chart(fig_bar,use_container_widthTrue)withcol_right:st.subheader( 月度销售趋势)monthlydf.groupby(月份)[销售额].sum().reset_index()fig_linepx.line(monthly,x月份,y销售额,markersTrue)fig_line.update_layout(height400)st.plotly_chart(fig_line,use_container_widthTrue)# 占比结构区 明细数据区col_left2,col_right2st.columns(2)withcol_left2:st.subheader( 各区域销售占比)region_salesdf.groupby(销售区域)[销售额].sum().reset_index()fig_piepx.pie(region_sales,names销售区域,values销售额,hole0.4)fig_pie.update_layout(height400)st.plotly_chart(fig_pie,use_container_widthTrue)withcol_right2:st.subheader( 订单明细数据前100条)st.dataframe(df.head(100),use_container_widthTrue,height400)运行命令bashstreamlit run app.py浏览器访问 http://localhost:8501 即可查看看板。六、运行效果七、问题与解决问题 原因 解决方法问题1FileNotFoundError: ecommerce_sales.csv原因数据文件未生成解决方法先运行 generate_data.py问题2PyCharm 中显示空文件原因文件未保存解决方法在终端用 Out-File 写入内容问题3Streamlit 首次启动要求输入邮箱原因首次运行引导解决方法直接按回车跳过八、实验总结通过本次实验我完整实践了数据看板从需求分析 → 数据准备 → 图表搭建 → 看板整合的全流程掌握了使用 Pandas 完成数据生成、清洗、聚合根据数据特征选择柱状图、折线图、饼图、数据卡片等图表使用 Streamlit 的 columns 实现分栏布局遇到路径、文件问题能通过终端定位排查最大体会是数据看板不只是把数据画出来更重要的是从业务视角规划信息层级让数据服务于决策。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。