时间:2023-07-05 16:30:01 | 来源:网站运营
时间:2023-07-05 16:30:01 来源:网站运营
没想到,Python 还可以制作 Web 可视化页面!:本文转发来自:# 安装streamlitpip install streamlit -i https://mirror.baidu.com/pypi/simple/# 安装Plotly Expresspip install plotly_express==0.4.0 -i https://mirror.baidu.com/pypi/simple/# 安装xlrdpip install xlrd==1.2.0 -i https://mirror.baidu.com/pypi/simple/
因为我们的数据文件是xlsx格式,最新版的xlrd,只支持xls文件。 所以需要指定xlrd版本为1.2.0,这样pandas才能成功读取数据。 命令行终端启动网页。# 命令行终端打开文件所在路径cd Excel_Webapp# 运行网页streamlit run app.py
成功以后会有提示,并且浏览器会自动弹出网页。 import pandas as pdimport streamlit as stimport plotly.express as pxfrom PIL import Image# 设置网页名称st.set_page_config(page_title='调查结果')# 设置网页标题st.header('2020年调查问卷')# 设置网页子标题st.subheader('2020年各部门对生产部的评分情况')
导入相关的Python包,pandas处理数据,streamlit用来生成网页,plotly.express则是生成图表,PIL读取图片。 # 读取数据excel_file = '各部门对生产部的评分情况.xlsx'sheet_name = 'DATA'df = pd.read_excel(excel_file, sheet_name=sheet_name, usecols='B:D', header=3)# 此处为各部门参加问卷调查人数df_participants = pd.read_excel(excel_file, sheet_name=sheet_name, usecols='F:G', header=3)df_participants.dropna(inplace=True)# streamlit的多重选择(选项数据)department = df['部门'].unique().tolist()# streamlit的滑动条(年龄数据)ages = df['年龄'].unique().tolist()
读取Excel表格数据,并且得出年龄分布以及部门情况,一共是有5个部门。 # 滑动条, 最大值、最小值、区间值age_selection = st.slider('年龄:', min_value=min(ages), max_value=max(ages), value=(min(ages), max(ages)))# 多重选择, 默认全选department_selection = st.multiselect('部门:', department, default=department)
结果如下。 # 根据选择过滤数据mask = (df['年龄'].between(*age_selection)) & (df['部门'].isin(department_selection))number_of_result = df[mask].shape[0]# 根据筛选条件, 得到有效数据st.markdown(f'*有效数据: {number_of_result}*')# 根据选择分组数据df_grouped = df[mask].groupby(by=['评分']).count()[['年龄']]df_grouped = df_grouped.rename(columns={'年龄': '计数'})df_grouped = df_grouped.reset_index()
得到数据便可以绘制柱状图了。# 绘制柱状图, 配置相关参数bar_chart = px.bar(df_grouped, x='评分', y='计数', text='计数', color_discrete_sequence=['#F63366']*len(df_grouped), template='plotly_white')st.plotly_chart(bar_chart)
使用plotly绘制柱状图。 # 添加图片和交互式表格col1, col2 = st.beta_columns(2)image = Image.open('survey.jpg')col1.image(image, caption='Designed by 小F / 法纳斯特', use_column_width=True)col2.dataframe(df[mask], width=300)
得到结果如下。 # 绘制饼图pie_chart = px.pie(df_participants, title='总的参加人数', values='人数', names='公司部门')st.plotly_chart(pie_chart)
结果如下。 关键词: