用 Python 制作数据大屏,超简单
作者 | 俊欣
来源 | 关于数据分析与可视化
今天我们用Streamlit
模块来制作一个数据面板,将数据更加直观地呈现给别人观看,整个页面大致如下图所示:
制作工具栏
在页面的左侧是一个工具栏,工具栏中有多个按钮,分别是“About”、“Demo”、“App”以及"Contact"这几个,用来切换到不同的页面。
这里主要是通过streamlit_option_menu
模块来实现的,我们来调用其中的option_menu
函数,我们需要明确里面的几个参数:
menu_title
:工具栏的标题,必填options
: 规定要有哪几个选项栏,必填menu_icon
: 每一个选项卡的图标,非必填default_index
: 默认勾选的选项按钮,一般默认勾选的都是第一个选项按钮styles
: 每个选项按钮的样式
因此我们要制作的数据面板,工具栏部分的代码如下:
with st.sidebar:choose = option_menu("Main Menu", ["About", "Demo","App", "Contact"],icons=['house', 'file-slides','app-indicator','person lines fill'],menu_icon="list", default_index=0,styles={"container": {"padding": "5!important", "background-color": "#fafafa"},"icon": {"color": "orange", "font-size": "25px"},"nav-link": {"font-size": "16px", "text-align": "left", "margin":"0px", "--hover-color": "#eee"},"nav-link-selected": {"background-color": "#02ab21"},})
主页面的设计
About
页面的功能主要是对整个网页的内容、用途做一个简单的介绍,代码逻辑主要是通过if else
来判断,例如当我们点击About
这个选项的时候。
logo = Image.open(r'952.png')
profile = Image.open(r'5052.png')
if choose == "About":col1, col2 = st.columns([0.8, 0.2])with col1: # To display the header text using css stylest.markdown(""" <style> .font {font-size:35px ; font-family: 'Cooper Black'; color: #FF9633;} </style> """, unsafe_allow_html=True)st.markdown('<p class="font">简介</p>', unsafe_allow_html=True)with col2: # To display brand logst.image(logo, width=130)st.write("介绍......")st.image(profile, width=700)
而当我们点击“Demo”这个按钮的时候,该页面的功能主要是通过视频来展示一下该网页的主要功能,播放一段Demo
视频,代码如下:
elif choose=='Demo':st.markdown(""" <style> .font {font-size:25px ; font-family: 'Cooper Black'; color: #FF9633;} </style> """, unsafe_allow_html=True)st.markdown('<p class="font">Watch a short demo of the app...</p>', unsafe_allow_html=True)video_file = open('Demo.mp4', 'rb')video_bytes = video_file.read()st.video(video_bytes)
而当我们点击“App”的时候,则主要展示出来的是整个网页的主要功能了,本案例是通过调用raceplotly
模块来绘制动态可交互的柱状图,如下图所示
我们首先需要上传数据集,然后设置好呈现出来的图表的属性,例如图表的标题、柱状图的柱间距等等,如下图所示。
最后我们来看一下代码,因为篇幅整体有限,这里就先展示一部分代码:
elif choose=='App':#Add a file uploader to allow users to upload their csv filest.markdown(""" <style> .font {font-size:25px ; font-family: 'Cooper Black'; color: #FF9633;} </style> """, unsafe_allow_html=True)st.markdown('<p class="font">Upload your data...</p>', unsafe_allow_html=True) #use st.markdown() with CSS style to create a nice-formatted header/textuploaded_file = st.file_uploader('',type=['csv']) #Only accepts csv file formatif uploaded_file is not None:df=pd.read_csv(uploaded_file) #use AgGrid to create a aggrid table that's more visually appealing than plain pandas datafamegrid_response = AgGrid(df,editable=False,height=300,fit_columns_on_grid_load=True,theme='blue',width=100,allow_unsafe_jscode=True,)updated = grid_response['data']df = pd.DataFrame(updated)st.write('---')st.markdown('<p class="font">Set Parameters...</p>', unsafe_allow_html=True)column_list = list(df)column_list = deque(column_list)column_list.appendleft('-')with st.form(key='columns_in_form'):text_style = '<p style="font-family:sans-serif; color:red; font-size: 15px;">***These input fields are required***</p>'st.markdown(text_style, unsafe_allow_html=True)col1, col2, col3 = st.columns([1, 1, 1])......col4, col5, col6 = st.columns([1, 1, 1])......col7, col8, col9 = st.columns([1, 1, 1])......col10, col11, col12 = st.columns([1, 1, 1])......submitted = st.form_submit_button('Submit')st.write('---')if submitted:raceplot = barplot(df, item_column=item_column, value_column=value_column, time_column=time_column,top_entries=num_items)fig = raceplot.plot(item_label=item_label, value_label=value_label, frame_duration=frame_duration,date_format=date_format, orientation=orientation)fig.update_layout(......)st.plotly_chart(fig, use_container_width=True)
当我们对于该应用的功能有什么不满、有什么建议想要联系开发者的话,点击“Contact”按钮,页面如下图所示
代码如下:
elif choose == "Contact":st.markdown(""" <style> .font {font-size:35px ; font-family: 'Cooper Black'; color: #FF9633;} </style> """, unsafe_allow_html=True)st.markdown('<p class="font">Contact Form</p>', unsafe_allow_html=True)with st.form(key='columns_in_form2',clear_on_submit=True): Name=st.text_input(label='姓名') Email=st.text_input(label='联系方式') Message=st.text_input(label='您想要说的是') submitted = st.form_submit_button('提交')if submitted:st.write('感谢!')
至此整个网站就都完成了,大家可以依次来作为模板制作自己的数据大屏,将数据更加直观地展示出来。
往
期
回
顾
技术
Pandas数据类型概述与转换实战
技术
用Python实现十大经典排序算法
技术
快速实现Resnet残差模型实战
资讯
隐患:神经网络可以隐藏恶意软件
分享
点收藏
点点赞
点在看
用 Python 制作数据大屏,超简单相关推荐
- 3000 字推荐一个可视化神器,50 行 Python 代码制作数据大屏
作者 | 俊欣 来源 | 关于数据分析与可视化 今天小编给大家分享一个制作数据大屏的工具,非常的好用,100行左右的Python代码就可以制作出来一个完整的数据大屏,并且代码的逻辑非常容易理解. Py ...
- pyecharts+flask制作数据大屏-进阶
去年整理了个pyecharts+flask制作数据大屏的基础版,事情比较多,一直没时间进一步完善.这篇进阶版是基于上篇的基础上,说明如何实现一个功能完整的数据大屏. 注:本人对CSS和JS并不熟悉,只 ...
- Python制作可视化大屏(东京奥运会)
目录 文章目录 前言 一.数据爬取 二.数据预处理 三.Pyecharts可视化 3.1 2020东京奥运会各国金牌分布图 3.2 2020东京奥运会奖牌榜详情 3.3 2020东京奥运会中国各项目获 ...
- python制作数据化大屏_可视化大屏经验分享
最近在实际项目中积累了一些经验,以及看到很多大神们的分享,不断学习和丰富关于大屏设计的特点及数据可视化的表达方式.以下经验来自于多处资源,希望对有这方面需求的同学有所帮助. 大屏显示的一些特点: 1. ...
- 如何从0-1制作数据大屏,我用大白话给你解释清楚了
好莱坞大片<摩天营救>中有这么一个场景: 你可以看见反派大boss在屏幕上随便点点,就能看到每个角落的具体情况,不禁让人惊呼:满满的高科技! 其实这背后就是咱们今天要讲的数据可视化:把相对 ...
- 50 行 Python 代码制作一个数据大屏
今天给大家分享一个制作数据大屏的工具,非常的好用,100行左右的Python代码就可以制作出来一个完整的数据大屏,并且代码的逻辑非常容易理解. PywebIO介绍 Python当中的PywebIO模块 ...
- PywebIO 轻松制作一个数据大屏,代码只需100行
今天我给大家分享一个制作数据大屏的工具,非常的好用,100行的Python代码就可以制作出来一个完整的数据大屏,并且代码的逻辑非常容易理解. PywebIO介绍 Python当中的PywebIO模块可 ...
- 15分钟构建超低成本数据大屏:DataV + DLA
为什么80%的码农都做不了架构师?>>> 第一步:准备低成本存储的业务数据和DLA表 OSS(https://www.aliyun.com/product/oss)是云上低成本 ...
- 数据大屏可视化2-超全的基础图形模板(基础模版)
内容整理于网络,因为忘了之前是从那几篇文章中整理的了,所以转载的连接不知道填啥,如果作者有看到的话,可以联系下我,谢谢 注意:所有带有import random的都是生成随机数展示的,如果有需要研究对 ...
最新文章
- mysql被拖垮_说几个拖垮系统的小细节!
- 使用ionic cordova build android --release --prod命令打包报错解决方法
- Java高并发编程:活跃性危险
- Response缓冲区
- [wikioi]奇怪的梦境
- 运用大数据助力大发展
- 【Flink】FLink SQL TableException: Table sink doesn‘t support consuming update changes which is
- java遍历字符串_Java后端开发算法基础面试题分享,你离大厂也许就差这份面试题
- submit和button的区别
- C#串口编程测试收发
- win10命令行快捷键
- 第五十三回 关云长义释黄汉升 孙仲谋大战张文远
- 计算机学硕专硕的区分,跟大家说说学硕、专硕、如何区别以及涉及到的一些政策问题...
- FFMPEG,vlc介绍和视频直播,obs(zz)
- 喜羊羊与灰太狼java_java swing实现喜羊羊与灰太狼推箱子游戏附带视频开发教程...
- 站在两个世界的边缘——知无崖
- windows常用命令及相关命令
- QT QML 与C++ 混合编程
- Introduction to SPM statistics
- 前端开发需要学什么?