作者 | 俊欣

来源 | 关于数据分析与可视化

今天我们用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 制作数据大屏,超简单相关推荐

  1. 3000 字推荐一个可视化神器,50 行 Python 代码制作数据大屏

    作者 | 俊欣 来源 | 关于数据分析与可视化 今天小编给大家分享一个制作数据大屏的工具,非常的好用,100行左右的Python代码就可以制作出来一个完整的数据大屏,并且代码的逻辑非常容易理解. Py ...

  2. pyecharts+flask制作数据大屏-进阶

    去年整理了个pyecharts+flask制作数据大屏的基础版,事情比较多,一直没时间进一步完善.这篇进阶版是基于上篇的基础上,说明如何实现一个功能完整的数据大屏. 注:本人对CSS和JS并不熟悉,只 ...

  3. Python制作可视化大屏(东京奥运会)

    目录 文章目录 前言 一.数据爬取 二.数据预处理 三.Pyecharts可视化 3.1 2020东京奥运会各国金牌分布图 3.2 2020东京奥运会奖牌榜详情 3.3 2020东京奥运会中国各项目获 ...

  4. python制作数据化大屏_可视化大屏经验分享

    最近在实际项目中积累了一些经验,以及看到很多大神们的分享,不断学习和丰富关于大屏设计的特点及数据可视化的表达方式.以下经验来自于多处资源,希望对有这方面需求的同学有所帮助. 大屏显示的一些特点: 1. ...

  5. 如何从0-1制作数据大屏,我用大白话给你解释清楚了

    好莱坞大片<摩天营救>中有这么一个场景: 你可以看见反派大boss在屏幕上随便点点,就能看到每个角落的具体情况,不禁让人惊呼:满满的高科技! 其实这背后就是咱们今天要讲的数据可视化:把相对 ...

  6. 50 行 Python 代码制作一个数据大屏

    今天给大家分享一个制作数据大屏的工具,非常的好用,100行左右的Python代码就可以制作出来一个完整的数据大屏,并且代码的逻辑非常容易理解. PywebIO介绍 Python当中的PywebIO模块 ...

  7. PywebIO 轻松制作一个数据大屏,代码只需100行

    今天我给大家分享一个制作数据大屏的工具,非常的好用,100行的Python代码就可以制作出来一个完整的数据大屏,并且代码的逻辑非常容易理解. PywebIO介绍 Python当中的PywebIO模块可 ...

  8. 15分钟构建超低成本数据大屏:DataV + DLA

    为什么80%的码农都做不了架构师?>>>    第一步:准备低成本存储的业务数据和DLA表 OSS(https://www.aliyun.com/product/oss)是云上低成本 ...

  9. 数据大屏可视化2-超全的基础图形模板(基础模版)

    内容整理于网络,因为忘了之前是从那几篇文章中整理的了,所以转载的连接不知道填啥,如果作者有看到的话,可以联系下我,谢谢 注意:所有带有import random的都是生成随机数展示的,如果有需要研究对 ...

最新文章

  1. mysql被拖垮_说几个拖垮系统的小细节!
  2. 使用ionic cordova build android --release --prod命令打包报错解决方法
  3. Java高并发编程:活跃性危险
  4. Response缓冲区
  5. [wikioi]奇怪的梦境
  6. 运用大数据助力大发展
  7. 【Flink】FLink SQL TableException: Table sink doesn‘t support consuming update changes which is
  8. java遍历字符串_Java后端开发算法基础面试题分享,你离大厂也许就差这份面试题
  9. submit和button的区别
  10. C#串口编程测试收发
  11. win10命令行快捷键
  12. 第五十三回 关云长义释黄汉升  孙仲谋大战张文远
  13. 计算机学硕专硕的区分,跟大家说说学硕、专硕、如何区别以及涉及到的一些政策问题...
  14. FFMPEG,vlc介绍和视频直播,obs(zz)
  15. 喜羊羊与灰太狼java_java swing实现喜羊羊与灰太狼推箱子游戏附带视频开发教程...
  16. 站在两个世界的边缘——知无崖
  17. windows常用命令及相关命令
  18. QT QML 与C++ 混合编程
  19. Introduction to SPM statistics
  20. 前端开发需要学什么?

热门文章

  1. 学习Python往哪个方向发展好
  2. java培训:Java的十大算法
  3. 偷看日历?9款 APP 涉嫌过度获取权限
  4. h5 和native 交互那些事儿
  5. 9.spark core之共享变量
  6. Scala和范畴论 -- 对Monad的一点认识
  7. postgresql中COPY的用法
  8. sql server时间转换
  9. 达观数据于敬:个性化推荐系统实践
  10. Linux指令--文件和目录属性