百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

Pandas和Streamlit对时间序列数据进行可视化过滤

liuian 2025-01-12 16:24 51 浏览



介绍

我们每天处理的数据最多的类型可能是时间序列数据。基本上,使用日期,时间或两者同时索引的任何内容都可以视为时间序列数据集。在我们工作中,可能经常需要使用日期和时间本身来过滤时间序列数据。根据任何其他形式的索引过滤dataframe是一件相当麻烦的任务。尤其是当日期和时间在不同的列中时。

幸运的是,我们有Pandas和Streamlit在这方面为我们提供帮助,并且可以方便的创建和可视化交互式日期时间过滤器。我认为我们大多数人对Pandas应该有所了解,并且可能会在我们的数据生活中例行使用它,但是我觉得许多人都不熟悉Streamlit,下面我们从Pandas的简单介绍开始

在处理Python中的数据时,Pandas可以说是最敏捷,高效,灵活,健壮,有弹性工具。这个强大的工具包使您能够而只需几行代码即可操纵,转换以及尤其是可视化dataframe中的数据。在此应用程序中,我们将使用Pandas从CSV文件读取/写入数据,并根据选定的开始和结束日期/时间调整数据框的大小。流光

Streamlit是一个纯粹的Python API,它允许你创建机器学习应用程序。其实远不止这些。Streamlit是一个web框架,他将一个准端口转发代理服务器和一个前端UI库混合在一起。简单地说,你可以为了各种目的开发和部署无数的web应用程序(或本地应用程序)。对于我们的应用程序,我们将使用Streamlit为我们的时间序列数据渲染一个交互式滑动过滤器,该数据也将即时可视化。

python包

import pandas as pd
import streamlit as st
import datetime
import re
import base64

如果你需要安装上面的任何一个包,请使用"pip install",例如以下命令

pip install streamlit

数据集

我们将使用随机生成的数据集,它有一个日期、时间和值的列,如下所示。


日期格式如下:

YYYYMMDD

而时间格式为:

HHMM

可以使用任何其他格式来格式化日期时间,但是您必须确保按照后续部分中的说明在脚本中声明它。

日期时间过滤器

为了实现我们的过滤器,我们将使用以下函数作为参数— message和df,它们与滑块小部件显示的消息以及需要过滤的原始dataframe相对应。

def df_filter(message,df):

        slider_1, slider_2 = st.slider('%s' % (message),0,len(df)-1,[0,len(df)-1],1)

        while len(str(df.iloc[slider_1][1]).replace('.0','')) < 4:
            df.iloc[slider_1,1] = '0' + str(df.iloc[slider_1][1]).replace('.0','')
            
        while len(str(df.iloc[slider_2][1]).replace('.0','')) < 4:
            df.iloc[slider_2,1] = '0' + str(df.iloc[slider_1][1]).replace('.0','')

        start_date = datetime.datetime.strptime(str(df.iloc[slider_1][0]).replace('.0','') + str(df.iloc[slider_1][1]).replace('.0',''),'%Y%m%d%H%M%S')
        start_date = start_date.strftime('%d %b %Y, %I:%M%p')
        
        end_date = datetime.datetime.strptime(str(df.iloc[slider_2][0]).replace('.0','') + str(df.iloc[slider_2][1]).replace('.0',''),'%Y%m%d%H%M%S')
        end_date = end_date.strftime('%d %b %Y, %I:%M%p')

        st.info('Start: **%s** End: **%s**' % (start_date,end_date))
        
        filtered_df = df.iloc[slider_1:slider_2+1][:].reset_index(drop=True)

        return filtered_df

首先,我们将调用Streamlit slider小部件,文档如下所示。

streamlit.slider(label, min_value, max_value, value, step)

参数如下

label (str或None) -一个短标签,向用户解释这个滑块的用途。

min_value(支持的类型或无)—最小允许值。如果值是一个int型,默认为0,如果是float型,默认为0.0,如果是date/datetime, time. value - timedelta(days=14)。最小时间

max_value(支持的类型或None) -最大允许值。如果值是int类型,默认值为100,如果是float类型,默认值为1.0,如果是date/datetime, time,则value + timedelta(days=14)。max if a time

value(一个支持的类型或一个元组/支持的类型列表或None) -滑块第一次呈现时的值。如果在这里传递一个包含两个值的元组/列表,则会呈现一个带有上下边界的范围滑块。例如,如果设置为(1,10),滑块将在1到10之间有一个可选择的范围。默认为min_value。

step (int/float/timedelta或None)—步进间隔。默认值为1,如果是浮点数则为0.01,如果是date/datetime则为timedelta(days=1),如果是time(或者maxvalue - minvalue < 1 day)则为timedelta(minutes=15)

请注意,我们的滑块将返回两个值,即开始日期时间和结束日期时间值。因此,我们必须使用数组声明滑块的初始值为:

[0,len(df)-1]

我们必须将小部件等同于如下所示的两个变量,即用于过滤dataframe的开始和结束日期时间索引:

slider_1, slider_2 = st.slider('%s' % (message),0,len(df)-1,[0,len(df)-1,1)

还需要从我们的开始/结束时间列中删除任何后面的小数点位,并在时间少于一个小时的情况下添加前面的零,即12:00AM引用为0,如下所示:

while len(str(df.iloc[slider_1][1]).replace('.0','')) < 4:
    df.iloc[slider_1,1] = '0' + str(df.iloc[slider_1][1]).replace('.0','')

然后,我们需要将日期添加到时间中,并以使用datetime可以理解的格式解析我们的datetime。Python中的strptime绑定如下所示:

start_date = datetime.datetime.strptime(str(df.iloc[slider_1][0]).replace('.0','') + str(df.iloc[slider_1][1]).replace('.0',''),'%Y%m%d%H%M%S')

为了显示我们选择的日期时间,我们可以使用strftime函数来重新格式化开始/结束,如下所示:

start_date = start_date.strftime('%d %b %Y, %I:%M%p')

最后,我们将显示选定的日期时间,并将过滤后的索引应用到我们的数据集,如下所示:

st.info('Start: **%s** End: **%s**' % (start_date,end_date)) filtered_df = df.iloc[slider_1:slider_2+1][:].reset_index(drop=True)

Streamlit应用

最后,我们可以将所有内容绑定在一个Streamlit 应用程序的形式中,该应用程序将渲染datetime过滤器、dataframe和折线图,当我们移动滑块时,这些都将即时更新。

if __name__ == '__main__':

    df = pd.read_csv('file_path')

    st.title('Datetime Filter')
    filtered_df = df_filter('Move sliders to filter dataframe',df)

    column_1, column_2 = st.beta_columns(2)

    with column_1:
        st.title('Data Frame')
        st.write(filtered_df)

    with column_2:
        st.title('Chart')
        st.line_chart(filtered_df['value'])

    st.markdown(download_csv('Filtered Data Frame',filtered_df),unsafe_allow_html=True)

您可能会发现将过滤后的dataframe下载为CSV文件非常方便。如果是这样,请使用以下函数在您的Streamlit应用程序中创建一个可下载的文件。

def download_csv(name,df):
    
    csv = df.to_csv(index=False)
    base = base64.b64encode(csv.encode()).decode()
    file = (f'<a href="data:file/csv;base64,{base}" download="%s.csv">Download file</a>' % (name))
    
    return file

这个函数的参数- name和df分别对应于需要转换为CSV文件的可下载文件和dataframe的名称。

最后,运行我们的程序

streamlit run file_name.py

结果

一个交互式仪表板,允许你可视化地过滤你的时间序列数据,并在同一时间可视化它!


本文代码:github/mkhorasani/interactivedatetimefilter

作者:M Khorasani

deephub翻译组

相关推荐

驱动网卡(怎么从新驱动网卡)
驱动网卡(怎么从新驱动网卡)

网卡一般是指为电脑主机提供有线无线网络功能的适配器。而网卡驱动指的就是电脑连接识别这些网卡型号的桥梁。网卡只有打上了网卡驱动才能正常使用。并不是说所有的网卡一插到电脑上面就能进行数据传输了,他都需要里面芯片组的驱动文件才能支持他进行数据传输...

2026-01-30 00:37 liuian

win10更新助手装系统(微软win10更新助手)

1、点击首页“系统升级”的按钮,给出弹框,告诉用户需要上传IMEI码才能使用升级服务。同时给出同意和取消按钮。华为手机助手2、点击同意,则进入到“系统升级”功能华为手机助手华为手机助手3、在检测界面,...

windows11专业版密钥最新(windows11专业版激活码永久)

 Windows11专业版的正版密钥,我们是对windows的激活所必备的工具。该密钥我们可以通过微软商城或者通过计算机的硬件供应商去购买获得。获得了windows11专业版的正版密钥后,我...

手机删过的软件恢复(手机删除过的软件怎么恢复)
手机删过的软件恢复(手机删除过的软件怎么恢复)

操作步骤:1、首先,我们需要先打开手机。然后在许多图标中找到带有[文件管理]文本的图标,然后单击“文件管理”进入页面。2、进入页面后,我们将在顶部看到一行文本:手机,最新信息,文档,视频,图片,音乐,收藏,最后是我们正在寻找的[更多],单击...

2026-01-29 23:55 liuian

一键ghost手动备份系统步骤(一键ghost 备份)

  步骤1、首先把装有一键GHOST装系统的U盘插在电脑上,然后打开电脑马上按F2或DEL键入BIOS界面,然后就选择BOOT打USDHDD模式选择好,然后按F10键保存,电脑就会马上重启。  步骤...

怎么创建局域网(怎么创建局域网打游戏)

  1、购买路由器一台。进入路由器把dhcp功能打开  2、购买一台交换机。从路由器lan端口拉出一条网线查到交换机的任意一个端口上。  3、两台以上电脑。从交换机任意端口拉出网线插到电脑上(电脑设置...

精灵驱动器官方下载(精灵驱动手机版下载)

是的。驱动精灵是一款集驱动管理和硬件检测于一体的、专业级的驱动管理和维护工具。驱动精灵为用户提供驱动备份、恢复、安装、删除、在线更新等实用功能。1、全新驱动精灵2012引擎,大幅提升硬件和驱动辨识能力...

一键还原系统步骤(一键还原系统有哪些)

1、首先需要下载安装一下Windows一键还原程序,在安装程序窗口中,点击“下一步”,弹出“用户许可协议”窗口,选择“我同意该许可协议的条款”,并点击“下一步”。  2、在弹出的“准备安装”窗口中,可...

电脑加速器哪个好(电脑加速器哪款好)

我认为pp加速器最好用,飞速土豆太懒,急速酷六根本不工作。pp加速器什么网页都加速,太任劳任怨了!以上是个人观点,具体性能请自己试。ps:我家电脑性能很好。迅游加速盒子是可以加速电脑的。因为有过之...

任何u盘都可以做启动盘吗(u盘必须做成启动盘才能装系统吗)

是的,需要注意,U盘的大小要在4G以上,最好是8G以上,因为启动盘里面需要装系统,内存小的话,不能用来安装系统。内存卡或者U盘或者移动硬盘都可以用来做启动盘安装系统。普通的U盘就可以,不过最好U盘...

u盘怎么恢复文件(u盘文件恢复的方法)

开360安全卫士,点击上面的“功能大全”。点击文件恢复然后点击“数据”下的“文件恢复”功能。选择驱动接着选择需要恢复的驱动,选择接入的U盘。点击开始扫描选好就点击中间的“开始扫描”,开始扫描U盘数据。...

系统虚拟内存太低怎么办(系统虚拟内存占用过高什么原因)

1.检查系统虚拟内存使用情况,如果发现有大量的空闲内存,可以尝试释放一些不必要的进程,以释放内存空间。2.如果系统虚拟内存使用率较高,可以尝试增加系统虚拟内存的大小,以便更多的应用程序可以使用更多...

剪贴板权限设置方法(剪贴板访问权限)
剪贴板权限设置方法(剪贴板访问权限)

1、首先打开iphone手机,触碰并按住单词或图像直到显示选择选项。2、其次,然后选取“拷贝”或“剪贴板”。3、勾选需要的“权限”,最后选择开启,即可完成苹果剪贴板权限设置。仅参考1.打开苹果手机设置按钮,点击【通用】。2.点击【键盘】,再...

2026-01-29 21:37 liuian

平板系统重装大师(平板重装win系统)

如果你的平板开不了机,但可以连接上电脑,那就能好办,楼主下载安装个平板刷机王到你的个人电脑上,然后连接你的平板,平板刷机王会自动识别你的平板,平板刷机王上有你平板的我刷机包,楼主点击下载一个,下载完成...

联想官网售后服务网点(联想官网售后服务热线)

联想3c服务中心是联想旗下的官方售后,是基于互联网O2O模式开发的全新服务平台。可以为终端用户提供多品牌手机、电脑以及其他3C类产品的维修、保养和保险服务。根据客户需求层次,联想服务针对个人及家庭客户...