当前位置: 首页 > 科技观察

没想到Python也可以制作Web可视化页面!

时间:2023-03-16 19:44:06 科技观察

提到网页,你可能首先想到的是HTML、CSS或JavaScript。这次小F就给大家介绍如何用Python制作数据可视化网页,使用Streamlit库。轻松将Excel数据文件转换成网页供大家在线查看。每当您对Excel文件进??行更改并保存时,网页都可以实时更新,这真是太好了。Streamlit的文档和教程地址如下。https://docs.streamlit.io/en/stable/https://streamlit.io/gallery相关API的使用可以查看文档,里面有详细的解释。工程中有程序、图片、Excel表格数据三个文件。数据如下,某公司年终问卷调查(数据虚构),各生产部门对相关部门工作协作的打分。有效数据总数约为676份,匿名问卷,包括填写问卷者的部门、年龄和等级。最后汇总统计各部门参会人数(右侧数据)。首先我们安装相关的Python库,使用百度源。#installstreamlitpipinstreamlit-ihttps://mirror.baidu.com/pypi/simple/#installPlotlyExpresspipinstallplotly_express==0.4.0-ihttps://mirror.baidu.com/pypi/simple/#installxlrdpipinstallxlrd==1.2.0-ihttps://mirror.baidu.com/pypi/simple/因为我们的数据文件是xlsx格式的,最新版的xlrd只支持xls文件。所以需要指定xlrd版本为1.2.0,这样pandas才能成功读取数据。命令行终端启动网页。#命令行终端打开文件路径cdExcel_Webapp#运行网页streamlitrunapp.py成功后会有提示,浏览器会自动弹出网页。如果没有自动弹出,可以直接访问上图中的地址。结果如下,一个数据可视化网页出来了。目前只能在本地访问查看。如果你想把它放在网上,你可以通过服务器部署它。需要自己去研究了~下面看一下具体的代码。importpandasapdimportstreamlitassstimportplotly.expressaspxfromPILimportImage#设置网页名称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_namesheet_name=sheet_name,usecols='B:D',header=3)#这里的各部门参与问卷人数df_participants=pd.read_excel(excel_file,sheet_namesheet_name=sheet_name,usecols='F:G',header=3)df_participants.dropna(inplace=True)#streamlitmultiplechoice(optiondata)department=df['department'].unique().tolist()#streamlit的slider(年龄数据)ages=df['age'].unique().tolist()读取Excel表格数据,获取年龄分布As以及部门情况,一共有5个部门。为多项选择添加了滑块和数据选项。#滑块,最大值,最小值,区间值age_selection=st.slider('age:',minmin_value=min(ages),maxmax_value=max(ages),value=(min(ages),max(ages)))#多选,默认全选department_selection=st.multiselect('Department:',department,default=department)结果如下。年龄从23岁到65岁,部门包括市场、物流、采购、销售、财务。由于滑块和多选是可变的,所以需要根据过滤条件得到最终的数据。#根据选择筛选数据mask=(df['age'].between(*age_selection))&(df['department'].isin(department_selection))number_of_result=df[mask].shape[0]#根据过滤条件,获取有效数据st.markdown(f'*validdata:{number_of_result}*')#根据选择分组数据dfdf_grouped=df[mask].groupby(by=['score']).count()[['age']]df_groupeddf_grouped=df_grouped.rename(columns={'age':'count'})df_groupeddf_grouped=df_grouped.reset_index()获取数据,然后绘制直方图。#绘制直方图,配置相关参数bar_chart=px.bar(df_grouped,x='score',y='count',text='count',color_discrete_sequence=['#F63366']*len(df_grouped),template='plotly_white')st.plotly_chart(bar_chart)使用plotly绘制直方图。当我们在网页上调整选项时,有效数据和直方图也会随之改变。此外,streamlit还可以给网页添加图片和交互表格。#添加图片和互动表格col1,col2=st.beta_columns(2)image=Image.open('survey.jpg')col1.image(image,caption='DesignedbysmallF/Farner',use_column_width=True)col2.dataframe(df[mask],width=300)得到结果如下。您可以看到表格有一个可以用鼠标滚轮滚动的滑块。最后画个饼图吧!#绘制饼图pie_chart=px.pie(df_participants,title='参与总人数',values='人数',names='公司部门')st.plotly_chart(pie_chart)结果如下。每个部门参与问卷的人数也是一个互动图表。通过取消销售、营销和物流,我们可以看到财务和采购在问卷参与人数中所占的比例。好了,本期分享到此结束,有兴趣的小伙伴可以自行实践学习。