【数据可视化】基于Streamlit制作的时间序列数据分析APP(上手简单,附可运行源码)

2023-11-17

基于Streamlit制作的时间序列数据分析APP

1.为什么要使用Streamlit(官网介绍链接

在数据科学领域,一方面,当我们在学习或者实践机器学习算法的时候,需要进行一些参数调整;另一方面,我们也希望将最后的成果通过一种友好的可视化效果呈现出来。

虽然可以通过Django、Flask等技术构建Web App,但是它们对于非专业的编程者来说,初学是困难的。Streamlit是一种快速搭建数据可视化APP的技术。它上手简单,并且能够提供一些操作简单的交互式控件。

2.Streamlit使用简介(官网使用教程

2.1 安装和使用

安装:pip install streamlit

import streamlit as st

Step 1:新建一个app.py文件
Step 2:写下一段代码
Step 3:在终端输入命令:streamlit run app.py
Step 4:然后会在我们的默认浏览器中自动打开一个网址,呈现刚刚编程的内容

2.2 常用API介绍(官方API参考文档

官网上有详细的介绍,在这里仅简单列举一些。

2.2.1 文本显示命令

st.text('Fixed width text')
st.markdown('_Markdown_') 
st.latex(r''' e^{i\pi} + 1 = 0 ''')
st.write('Most objects') 
st.write(['st', 'is <', 3]) 
st.title('My title')
st.header('My header')
st.subheader('My sub')
st.code('for i in range(8): foo()')
* optional kwarg unsafe_allow_html = True

2.2.2 数据显示命令

st.dataframe(my_dataframe)
st.table(data.iloc[0:10])
st.json({'foo':'bar','fu':'ba'})

2.2.3 图表显示命令

st.line_chart(data)
st.area_chart(data)
st.bar_chart(data)
st.pyplot(fig)
st.altair_chart(data)
st.vega_lite_chart(data)
st.plotly_chart(data)
st.bokeh_chart(data)
st.pydeck_chart(data)
st.deck_gl_chart(data)
st.graphviz_chart(data)
st.map(data)

2.2.4 交互控件显示命令

st.button('Hit me')
st.checkbox('Check me out')
st.radio('Radio', [1,2,3])
st.selectbox('Select', [1,2,3])
st.multiselect('Multiselect', [1,2,3])
st.slider('Slide me', min_value=0, max_value=10)
st.select_slider('Slide to select', options=[1,'2'])
st.text_input('Enter some text')
st.number_input('Enter a number')
st.text_area('Area for textual entry')
st.date_input('Date input')
st.time_input('Time entry')
st.file_uploader('File uploader')
st.color_picker('Pick a color')

3.结合实例

因为之前在学习和实践基于时间序列的机器学习预测分析方法,这里的例子正是在前面几篇博客基础上写的。实现得比较简单,仅供参考。
在这里插入图片描述

3.1 读入数据

这里的数据我用的是固定的股价数据,当然在streamlit中提供“上传文件”的命令file_uploader,这样我们就可以选择其他的数据源。

st.subheader('1.读入数据')
df = pd.read_csv('NSE-TATAGLOBAL11.csv')
st.dataframe(df)

在这里插入图片描述

3.2 选择时间序列

通过st.select_slider选择时间序列长度。需要注意的是,我们必须保证滑动条上的每一个数据点都能在源数据集中找到,不然可能会出现错误。

st.subheader('2.选择时间序列')
options = np.array(df['Date']).tolist()

(start_time, end_time) = st.select_slider("请选择时间序列长度:",
     options = options,
     value= ('2016-05-04','2014-06-27',),
 )
st.write("时间序列开始时间:",end_time)
st.write("时间序列结束时间:",start_time)

#setting index as date
df['Date'] = pd.to_datetime(df.Date, format = '%Y-%m-%d')
df.index = df['Date']

df = df[start_time:end_time]
st.dataframe(df)

在这里插入图片描述

3.3 划分训练集

训练集默认大小是选择的数据集的80%,可选区间是50%~90%,间隔10%。

st.subheader('3.训练集划分')
number = st.number_input("请输入训练集所占比例:",min_value=0.5,max_value=0.9,value=0.8,step=0.1)
split = int(number * len(df))
st.write("选择的数据集大小:",len(df))
st.write("训练集大小:",split)
st.write("预测集大小:",len(df)-split)

在这里插入图片描述

3.4 选择预测目标

通过selectbox选择需要预测的目标列。

st.subheader('4.选择预测目标')
type = st.selectbox('请选择预测目标:',('Close','Turnover'))
st.line_chart(df[type])

在这里插入图片描述

3.5 选择预测算法

这里一共用到了5种算法,分别是移动平均线性回归最近邻AutoARIMALSTM,在之前的博客中有详细的介绍。

st.subheader('5.选择机器学习算法')
genre = st.selectbox("请选择时间序列预测算法",
     ('移动平均算法', '线性回归算法', '最近邻算法', 'AutoARIMA算法', 'LSTM算法'))
if genre == '移动平均算法':
    MovingAverage(df, type, split)
elif genre == '线性回归算法':
     LinearRegression(df, type, split)
elif genre == '最近邻算法':
     KNearestNeighbours(df, type, split)
elif genre == 'AutoARIMA算法':
    AutoARIMA(df, type, split)
elif genre == 'LSTM算法':
    LongShortTM(df, type, split)

在这里插入图片描述
选择不同的算法会有不同的预测效果。正如前面几篇博客总结的那样,LSTM在这个数据集上会有比较好的预测效果。
在这里插入图片描述

3.6 其他说明

侧边栏我们可以通过streamlit.sidebar实现

st.sidebar.image('BigDataCenter.jpg',width=300)
st.sidebar.header("预测分析常用机器学习算法简介")
choose = st.sidebar.selectbox("",('移动平均算法','线性回归算法',
                     '最近邻算法','AutoARIMA算法','LSTM算法'))
if choose == '移动平均算法':
    st.sidebar.write('')
    st.sidebar.image('MVPicture.png',width=300)
    st.sidebar.write()
elif choose == '线性回归算法':
    st.sidebar.write()
elif choose == '最近邻算法':
    st.sidebar.write()
elif choose == 'AutoARIMA算法':
    st.sidebar.write()
elif choose == 'LSTM算法':
    st.sidebar.write()

在这里插入图片描述

但是对于下面这种排版格式,streamlit是没有办法直接做到的,但是我们可以将写好的HTML+CSS文件传到streamlit,其中components.html()可以帮助我们做到这一点。
在这里插入图片描述

4.源码下载

代码和数据放在了我的Github上,需要的朋友可以自行下载。
Python:3.8.5
requirements:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【数据可视化】基于Streamlit制作的时间序列数据分析APP(上手简单,附可运行源码) 的相关文章

  • 【Linux之Shell脚本实战】猜拳小游戏shell脚本

    Linux之Shell脚本实战 猜拳小游戏的shell脚本 一 脚本要求 二 检查本地系统环境 1 检查系统版本 2 检查系统内核版本 三 配置脚本注释模板 1 编辑 vimrc 文件 2 检查模板生效情况 四 编辑shell脚本 1 创建
  • 02vue项目如何配置多页面

    vue项目如何配置多页面 前言 因为我们做项目不可能只有一个界面 就简单说最起码的后台页面 登录界面 主页面最基本的加在一起还三个页面 上次所言cli脚手架搭建一个从0到1的项目 只是单页面 cli脚手架虽然能快速的帮我们搭建一个项目 配置
  • mybatis中批量插入的两种方式(高效插入)

    MyBatis简介 MyBatis是一个支持普通SQL查询 存储过程和高级映射的优秀持久层框架 MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装 MyBatis可以使用简单的XML或注解用于配置和原始映射 将

随机推荐

  • 通过ffmpeg将aac格式转换成wav格式

    这是一个很简单的小程序 但也让我这个初学者折腾了好几天 走算是入门了 总结下学习的过程 希望能够初学者能有所帮助 看源代码 首先得让让它跑起来 看了ffmpeg提供源码api example c 很好的入门程序 虽然对视频编解码十分顺利 但
  • Ubuntu下安装Cppcheck源码操作步骤

    Cppcheck是用在C C 中对code进行静态检查的工具 它的源码在 https github com danmar cppcheck 它的License是GPL 3 0 Cppcheck可以检查不通过编译的文件 执行的检查包括 1 自
  • JavaWeb核心技术——Response响应

    目录 1 Response对象 1 1 Response设置响应数据功能介绍 1 2 Respones请求重定向 1 2 1 Response重定向 redirect 一种资源跳转方式 1 2 2 重定向的实现方式 1 2 3 重定向的特点
  • LeetCode题目笔记——2428. 沙漏的最大总和

    文章目录 题目描述 截图 题目描述 题目难度 中等 方法一 遍历 代码 Python 方法一优化 代码 Python 代码 C 总结 题目描述 截图 这个题是上周的周赛里的第二题 当时做的时候只用了最简单的遍历方法 虽然通过了 但是也挺慢的
  • --RabbitMQ的应用场景以及基本原理介绍

    1 背景 RabbitMQ是一个由erlang开发的AMQP Advanved Message Queue 的开源实现 2 应用场景 2 1异步处理 场景说明 用户注册后 需要发注册邮件和注册短信 传统的做法有两种1 串行的方式 2 并行的
  • 中科院分区表_学术科普:汤森路透分区和中科院JCR分区介绍

    2019年中科院分区表更新了 一区共有1946本 二区有3257本 三区3975本 四区一共有5314本 其中 PNAS及Nature Communications重新回到一区 去年在二区 分区表共收录有14492本期刊 把他们全部放在图文
  • Anaconda3中torch.cuda.is_available()返回false的可能解决办法

    1 问题 在CUDA cudnn 已装好 指令 conda install pytorch torchvision torchaudio pytorch cuda 11 7 c pytorch c nvidia 一直转圈 不得已使用pip指
  • 北工大汇编——综合题(1)

    题目要求 统计字符数 从键盘输入一行字符 统计字母 空格 数字 其他宇符的个数 并显示 要求 提示输入一行宇符串 键盘输入宇符串 Enter 键结束输入 并换行显示结果 题目代码 DATAS SEGMENT 此处输入数据段代码 msg DB
  • unity编辑器详细介绍

    你好 欢迎来到UNITY 2021 世界 这里将会详细为您介绍UNITY基本操作工具 目录 一 工具栏 二 菜单栏 1 File 文件 菜单 2 Edit 编辑 菜单 3 Assets 资源 菜单 4 GameObject 游戏对象 菜单
  • Java Scanner nextInt()方法与示例

    扫描器类的nextInt 方法 Scanner Class nextInt method Syntax 句法 public int nextInt public int nextInt int rad nextInt method is a
  • 支撑区块链大规模商用,FISCO BCOS v3.0的那些“黑科技”

    文章转载自CSDN公众号 在2021年度金链盟生态大会上 全新的FISCO BCOS v3 0正式发布 该版本从架构 算法以及安全可控和隐私计算协同等方向进行了全面升级 满足数字经济时代对区块链系统可承载更大规模 更多场景 更广泛参与的产业
  • 光耦基础知识

    1 光耦 光耦合器 optical coupler 英文缩写为OC 亦称光电隔离器或光电耦合器 简称光耦 在电源当中 光耦和TL431一般都是一起出现的 它们组合一起的作用是用来控制初次级反馈环路的稳定 从而实现输出电压的稳定 有插件的 也
  • IPv6地址前缀

    当我们通过ipv6 install 命令在windows XP系统上安装了ipv6协议栈后 我们可以看到原来的网卡多了一个新的地址 ipv6地址 这个地址是基于ipv6无状态自动配置机制设定的 所有无状态自动配置的地址的前缀都是fe80 其
  • Python爬虫实现抓取腾讯视频所有电影-源码【实战必学】

    用python实现的抓取腾讯视频所有电影的爬虫 1 coding utf 8 2 import re 3 import urllib2 4 from bs4 import BeautifulSoup 5 import string time
  • 更改 华为云 yum 源

    更改 华为云 yum 源 1 安装wget yum install y wget 2 备份 mv etc yum repos d CentOS Base repo etc yum repos d CentOS Base repo bak 3
  • Linux 系统编程之select

    Linux 系统编程之select select 允许单个程序监听多个文件描述符 直到一个或者多个文件描述符准备就绪不阻塞系统 常常用于解决阻塞型的程序 相关代码 According to POSIX 1 2001 include
  • Linux之文件上传和下载(两种方式)

    前言 由于工作需要 整理了一下Linux与Windows之间文件的上传和下载方式 一 rz上传 sz下载文件 rz是将Windows系统上的文件上传到Linux下 sz是将Linux系统下的文件上传到Windows下 1 rz案例 输入rz
  • 【STM32】NRF24L01模块的收发调试

    NRF24L01 发送端 c文件 发送端 h文件 接收端 c文件 接收端 h文件 接收端main函数 总结 这里我是用了两块板子来做通信实验 这里我就直接贴发送端和接收端的 c h文件 一个是用标准库写的一个是hal库写的 只是两块板子引脚
  • python 生成随机字符串(数字+字母+特殊字符)

    方法一 usr bin env python coding utf 8 import random import string 第一种方法 seed 1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHI
  • 【数据可视化】基于Streamlit制作的时间序列数据分析APP(上手简单,附可运行源码)

    基于Streamlit制作的时间序列数据分析APP 1 为什么要使用Streamlit 官网介绍链接 在数据科学领域 一方面 当我们在学习或者实践机器学习算法的时候 需要进行一些参数调整 另一方面 我们也希望将最后的成果通过一种友好的可视化