没想到,Python还可以制作Web可视化页面!
一谈到Web页面,可能大家首先想到就是HTML,CSS或JavaScript。
本次小F就给大家介绍一下如何用Python制作一个数据可视化网页,使用到的是Streamlit库。
轻松的将一个Excel数据文件转换为一个Web页面,提供给所有人在线查看。
每当你对Excel文件进行更改保存,Web页面还能够实时进行更新,确实挺不错的。
Streamlit的文档和教程地址如下。
https://docs.streamlit.io/en/stable/
https://streamlit.io/gallery
相关的API使用可以去文档中查看,都有详细的解释。
项目一共有三个文件,程序、图片、Excel表格数据。
数据情况如下,某公司年底问卷调查(虚构数据),各相关部门对生产部门在工作协作上的打分情况。
有效数据总计约676条,匿名问卷,包含问卷填写人所属部门,年龄,评分。
最后对各部门参与人数进行汇总计数(右侧数据)。
首先来安装一下相关的Python库,使用百度源。
# 安装streamlit
pip install streamlit -i https://mirror.baidu.com/pypi/simple/# 安装Plotly Express
pip install plotly_express==0.4.0 -i https://mirror.baidu.com/pypi/simple/# 安装xlrd
pip 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 pd
import streamlit as st
import plotly.express as px
from 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)
结果如下。
年龄是从23至65,部门则是市场、物流、采购、销售、财务这几个。
由于滑动条和多重选择是可变的,需要根据过滤条件得出最终数据。
# 根据选择过滤数据
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绘制柱状图。
当我们在网页调整选项时,有效数据和柱状图也会随之变化。
此外streamlit还可以给网页添加图片和交互式表格。
# 添加图片和交互式表格
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)
结果如下。
各部门参加问卷调查的人数,也是一个可以交互的图表。
将销售、市场、物流取消掉,我们就能看出财务和采购参加问卷调查的人数占比情况。
推荐阅读
Pandas处理数据太慢,来试试Polars吧!
懒人必备!只需一行代码,就能导入所有的Python库
绝!关于pip的15个使用小技巧
介绍10个常用的Python内置函数,99.99%的人都在用!
可能是全网最完整的 Python 操作 Excel库总结!
没想到,Python还可以制作Web可视化页面!相关推荐
- Python 的一万种用法:制作 Web 可视化页面
来源 | 法纳斯特 头图 | 下载于ICphoto 一谈到Web页面,可能大家首先想到就是HTML.CSS或JavaScript. 本次小F给大家介绍一下如何用Python制作一个数据可视化网页,使用 ...
- python slice函数画高维图_没想到Python还能画六维图
我们的大脑通常最多能感知三维空间,超过三维就很难想象了.尽管是三维,理解起来也很费劲,所以大多数情况下都使用二维平面. 来自维基百科 不过,我们仍然可以绘制出多维空间,今天就来用 Python 的 p ...
- python gui构造openai api可视化页面
背景:最近chatgpt很火,前几天也想注册体验一下,一顿操作之后,卡在该国家不支持.最后发现自己的代理开在香港,改在漂亮国就行了.虽然有chatgpt可以用,但是小平是自己封装了一个,我不能输.正好 ...
- python做动态课件素材_万万没想到,还能这么玩!用 Python 生成动态 PPT
在工作的过程中,我们会发现那些能够把知识.成果讲透的人很多都会做动态图表. 这篇文章就介绍了 Python 中一种简单的动态图表制作方法,这样生成的动图就可以丰富我们的PPT啦~ 数据暴增的年代,数据 ...
- 用 Python 读取 Excel 自动生成 Web 可视化页面!
大家好,我是Sitin涛哥! 一谈到Web页面,可能大家首先想到就是HTML,CSS或JavaScript. 本次就给大家介绍一下如何用Python制作一个数据可视化网页,使用到的是Streamlit ...
- kafka删除队列_没想到 Kafka 还会这样问,学会这些带你轻松搞定大厂面试!
一.前言 自上次师兄遭受了面试官 「Kafka」 的暴击追问后,回来发奋图强,企图"「吊打面试官」",奈何还是面试官套路深啊,最近的面试,又被问到「知识盲点」了!让我们一起来看看, ...
- Python迎来30岁生日,先驱Pablo Galindo:没想到Python这么流行
公众号 "菜鸟学Python", 设为 "星标" 和30w+一起学Python! 新智元报道 来源:reddit 编辑:key Python 30岁了!就在生日 ...
- 没想到MySQL还会问这些...
文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 在前一阵子,大哥问过我:"你知道MySQL的原子性是怎么保证的吗 ...
- 大西瓜卖了130多个!没想到后面还结出更多惊喜
一.西瓜里有虫 本周赶上了大西瓜的热度,由Nowpaper杨老师在B站直播开发的<合成大西瓜>目前在我们的资源商店上卖出了130+了! 随着购买的人增多,游戏中的BUG也被大家给发现了,一 ...
最新文章
- 爬虫或恶意攻击,如何动态屏蔽IP地址?
- 什么是Karush-Kuhn-Tucker 最优化条件 (KKT 条件) 三个人名 独立发现的最优化条件
- 万能素材库_高中作文经典人物万能素材积累
- pytorch1.0.1_将Spring 3.x和Hibernate 3.x升级到Spring Platform 1.0.1(Spring + hibernate 4.x)
- UVA_11922 Permutation Transformer 【splay树】
- 接入Tinker热修复和踩坑
- CSS DIV Shadow
- mysql定时器每月执行一次_MySQL定时器可以设置执行次数吗
- matlab虚拟现实之V-Realm Builder2复制技巧(修改)
- centos redis make 报错_ubuntu 18.04 搭建 redis 实验环境
- 浅谈 Redis 与 MySQL 的耦合性以及利用管道完成 MySQL 到 Redis 的高效迁移
- amazon s3_在Amazon S3上托管静态网站
- 多速率多传感器数据融合估计(一)
- Aspose.Words从零创建OOXML图表
- ssm使用注解配置多数据源
- 计算机毕业设计Android的手机点名签到学生请假考勤系统(源码+系统+mysql数据库+Lw文档)
- 开放下载 | 2022阿里妈妈技术年刊来啦!
- 浅谈达梦数据库与ORACLE数据库差异点及常用SQL总结
- 创业者该如何选择区块链游戏赛道?
- 【HBase】HBase 过滤器
热门文章
- 编程界的“马太效应”,是什么在阻止你变得更加优秀?
- 微软为何痛失移动操作系统?
- 反思相信谁的评价:一直的坚定的不移的相信自己对自己的评价 相信自己是多么的重要
- matlab比例环节仿真例子,典型环节的MATLAB仿真
- html教程自适应,Html-自适应
- php数据库根据相似度排序,php数组字段相似度排序
- PHP判断变量内容是什么编码(gbk?utf-8) mb_detect_encoding
- python按字节读取文件_Python读取二进制文件
- oracle子查询子查询,Oracle 单行子查询和多行子查询
- java获取本地外网ip地址