使用Python分析时序数据集中的缺失数据

大家好,时间序列数据几乎每秒都会从多种来源收集,因此经常会出现一些数据质量问题,其中之一是缺失数据。

在序列数据的背景下,缺失信息可能由多种原因引起,包括采集系统的错误(例如传感器故障)、传输过程中的错误(例如网络连接的故障)或者数据收集过程中的错误(例如数据记录过程中的人为错误)。这些情况经常会在数据集中产生零散和明确的缺失值,对应于采集数据流中的小缺口。

此外,缺失信息也可能由于领域本身的特性而自然产生,从而在数据中形成较大的缺口。例如,某个特征在一段时间内停止采集,从而产生非显性的缺失数据。无论底层原因如何,时间序列中存在缺失数据会对预测和预测模型产生严重的不利影响,并且可能对个人(例如误导的风险评估)和业务结果(例如偏差的业务决策、收入和机会的损失)造成严重后果。

因此,在为建模方法准备数据时,一个重要的步骤是能够识别这些未知信息的模式,因为它们将帮助我们决定处理数据的最佳方法,以提高数据的一致性和效率,可以通过某种形式的对齐校正、数据插值、数据填补,或者在某些情况下,进行逐案删除(即,在特定分析中对具有缺失值的特征省略案例)。进行全面的探索性数据分析和数据剖析是不可或缺的,这不仅有助于理解数据特征,还能就如何为分析准备最佳数据做出明智决策。

在这个实践教程中,我们将探索如何使用新版本ydata-profiling最近推出的功能来解决这些相关问题。本文将使用Kaggle上提供的美国污染数据集(许可证DbCL v1.0),该数据集详细记录了美国各州的NO2、O3、SO2和CO污染物的信息。

ydata-profiling】:https://github.com/ydataai/ydata-profiling

【Kaggle上提供的美国污染数据集】:https://www.kaggle.com/datasets/sogun3/uspollution?resource=download

实践教程:对美国污染数据集进行剖析

为了开始我们的教程,首先需要安装最新版本的ydata-profiling

pip install ydata-profiling==4.5.1

然后就可以加载数据,删除不必要的特征,并专注于我们要研究的内容。为了本例的目的,我们将重点研究亚利桑那州马里科帕县斯科茨代尔站测量的空气污染物的特定行为:

import pandas as pd
 
data = pd.read_csv("data/pollution_us_2000_2016.csv")
data = data.drop('Unnamed: 0', axis = 1) # 删除不必要的索引
 
# 从亚利桑那州,马里科帕县,斯科茨代尔站(站点编号:3003)选择数据
data_scottsdale = data[data['Site Num'] == 3003].reset_index(drop=True)

现在开始对数据集进行剖析,在使用时间序列剖析时,我们需要传递参数tsmode=True,以便ydata-profiling可以识别与时间相关的特征:

# 将'Date Local'改为日期时间格式
data_scottsdale['Date Local'] = pd.to_datetime(data_scottsdale['Date Local'])
 
# 创建概述报告
profile_scottsdale = ProfileReport(data_scottsdale, tsmode=True, sortby="Date Local")
profile_scottsdale.to_file('profile_scottsdale.html')

时间序列概述

输出报告将与我们已经知道的内容一样熟悉,但在体验上有所改进,并新增了时间序列数据的汇总统计:

图片

从概述中可以通过查看所提供的汇总统计数据,从而对该数据集有一个整体的了解:

  • 它包含14个不同的时间序列,每个时间序列有8674个记录值;

  • 该数据集报告了2000年1月至2010年12月的10年数据;

  • 时间序列的平均时间间隔为11小时零7分钟左右。这意味着平均而言每11小时就进行一次测量。

还可以获取数据中所有序列的概览图,可以选择以原始值或缩放值显示:可以很容易地把握序列的总体变化情况,以及正在测量的组分(二氧化氮、臭氧、二氧化硫、一氧化碳)和特征(平均值、第一最大值、第一最大小时、空气质量指数)。

检查缺失数据

在对数据有一个总体了解之后,我们可以关注每个时间序列的具体情况。

在最新版本的ydata-profiling中,分析报告在针对时间序列数据方面进行了大幅改进,即针对“时间序列”和“间隙分析”指标进行报告。这些新功能极大地方便了趋势和缺失模式的识别,现在还提供了具体的汇总统计数据和详细的可视化。

所有时间序列都会呈现不稳定模式,其中在连续测量之间似乎存在某种“跳跃”。这表明存在缺失数据(缺失信息的“间隙”),应该对其进行更仔细的研究,本文以S02 Mean为例来研究。

图片

图片

在研究间隙分析所提供的细节时,可以获得对于已识别间隙特征的信息描述。总体而言,时间序列中有25个间隙,最短间隔为4天,最长为32周,平均为10周。

从所呈现的可视化效果中,可以注意到较为“随机”的细条纹代表的是较小的间隙,而较大的间隙似乎遵循着一种重复的模式。这表明我们的数据集中存在两种不同的缺失数据模式。

较小的间隙对应于产生缺失数据的零星事件,很可能是由于采集过程中的错误而发生的,通常可以很容易地对数据进行插值或从数据集中删除。反之,较大的间隙则更为复杂,需要进行更详细的分析,因为它们可能揭示了需要更彻底解决的潜在模式。

在本文的例子中,如果我们调查较大的间隙,实际上会发现它们反映了一个季节性模式:

df = data_scottsdale.copy()
for year in df["Date Local"].dt.year.unique():
    for month in range(1,13):
        if ((df["Date Local"].dt.year == year) & (df["Date Local"].dt.month ==month)).sum() == 0:
            print(f'Year {year} is missing month {month}.')
# Year 2000 is missing month 4.
# Year 2000 is missing month 5.
# Year 2000 is missing month 6.
# Year 2000 is missing month 7.
# Year 2000 is missing month 8.
# (...)
# Year 2007 is missing month 5.
# Year 2007 is missing month 6.
# Year 2007 is missing month 7.
# Year 2007 is missing month 8.
# (...)
# Year 2010 is missing month 5.
# Year 2010 is missing month 6.
# Year 2010 is missing month 7.
# Year 2010 is missing month 8.

正如我们所猜测的那样,时间序列中呈现出一些较大的信息间隙,它们似乎具有重复性,甚至是季节性的:在大多数年份中,从5月到8月(第5至8个月)之间未收集数据。出现这种情况可能是由于不可预测的原因,或者与业务决策有关,例如与削减成本有关的决定,或者仅仅是与天气模式、温度、湿度和大气条件相关的污染物的季节性变化有关。

根据这些发现,我们可以进一步调查为什么会发生这种情况,是否应该采取措施防止今后出现这种情况,以及如何处理我们目前拥有的数据。

思考

本文已经了解到理解时间序列中缺失数据模式的重要性,以及有效的分析方法如何揭示缺失信息的奥秘。无论是电信、医疗、能源还是金融等所有收集时间序列数据的行业,都会在某个时候面临缺失数据的问题,并需要决定处理和从中提取所有可能知识的最佳方法。

通过全面的数据分析,我们可以根据手里拥有的数据特征做出明智而高效的决策:

  • 信息间隙可能是由于采集、传输和收集过程中的零星事件导致的。我们可以通过修复问题以防止其再次发生,并根据间隙的长度进行插值或填补缺失数据。

  • 信息间隙也可能表示季节性或重复性模式。我们可以选择重构我们的流程,开始收集缺失的信息,或者用来自其他分布式系统的外部信息替代缺失的间隙。我们还可以确定检索过程是否失败(也许是在数据工程方面输入错误的查询)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/137707.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Day28力扣打卡

打卡记录 给小朋友们分糖果 II(容斥原理) 链接 大佬的题解 def c2(n: int) -> int:return n * (n - 1) // 2 if n > 1 else 0class Solution:def distributeCandies(self, n: int, limit: int) -> int:return c2(n 2) - 3 * c2(n - limit …

【Opencv】cv::dnn::NMSBoxes()函数详解

本文通过原理和示例对cv::dnn::NMSBoxes()进行解读,帮助大家理解和使用。 原理 cv::dnn::NMSBoxes是OpenCV库中的一个函数,用于在目标检测中处理多个预测框。在目标检测中,模型可能会为同一个物体生成多个预测框&…

Docker的本地镜像发布到阿里云或者私有库步骤

学习笔记来源Docker 本地镜像发布到阿里云 1、生成镜像(使用commit命令) 创建阿里云仓库镜像 阿里云开发者平台 https://promotion.aliyun.com/ntms/act/kubernetes.html 创建仓库镜像 选择控制台,进入容器镜像服务 选择个人实例 命名空…

阿里云国际站:密钥管理服务

文章目录 一、密钥管理服务的概念 二、密钥管理服务的功能 三、密钥管理服务的优势 一、密钥管理服务的概念 密钥管理服务KMS(Key Management Service)是您的一站式密钥管理和数据加密服务平台、一站式凭据安全管理平台,提供简单、可靠、…

【C++】【Opencv】minMaxLoc()函数详解和示例

minMaxLoc()函数 是 OpenCV 库中的一个函数,用于找到一个多维数组中的最小值和最大值,以及它们的位置。这个函数对于处理图像和数组非常有用。本文通过参数和示例详解,帮助大家理解和使用该函数。 参数详解 函数原型…

【Opencv】图像融合addWeighted()函数示例和详解

本文通过原理和示例对addWeighted()函数进行详解,,并通过改变融合系数展示多个结果,帮助大家理解和使用。 目录 函数原理示例权重(0.5,0.5)权重(0.8,0.2)权重&#xff08…

jupyter lab配置列表清单

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

Leetcode_50:Pow(x,n)

题目描述: 实现 pow(x, n) ,即计算 x 的整数 n 次幂函数。 示例 1: 输入:x 2.00000, n 10 输出:1024.00000示例 2: 输入:x 2.10000, n 3 输出:9.26100示例 3: 输入&…

【Linux】第十三站:进程状态

文章目录 一、进程状态1.运行状态2.阻塞状态3.挂起状态 二、具体Linux中的进程状态1.Linux中的状态2.R状态3.S状态4.D状态5.T、t状态6.X状态(dead)7.Z状态(zombie)8.僵尸进程总结9.孤儿进程总结 一、进程状态 在我们一般的操作系统学科中,它…

电子学会2023年9月青少年软件编程(图形化)等级考试试卷(四级)真题,含答案解析

青少年软件编程(图形化)等级考试试卷(四级) 一、单选题(共10题,共30分) 1. 角色为一个紫色圆圈,运行程序后,舞台上的图案是?( )

C++算法:包含三个字符串的最短字符串

涉及知识点 有序集合 字符串 题目 给你三个字符串 a ,b 和 c , 你的任务是找到长度 最短 的字符串,且这三个字符串都是它的 子字符串 。 如果有多个这样的字符串,请你返回 字典序最小 的一个。 请你返回满足题目要求的字符串。…

RGMII回环:IDDR+ODDR+差分接口

目录 一、实验内容二、原理解释三、程序1、顶层文件:2、子模块2.1 oddr模块2.2、iddr顶层模块2.3、iddr子模块 3、仿真4、注意5、下载工程及仿真 一、实验内容 1、通过IDDR和ODDR的方式完成RGMII协议; 2、外部接口使用OBUFDS、IBUFDS转换成差分接口&…

2023/11/12总结

踩坑记录: org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column elm.flavors.id which is …

连通块中点的数量(并查集)

给定一个包含 n 个点(编号为 1∼n)的无向图,初始时图中没有边。 现在要进行 m 个操作,操作共有三种: C a b,在点 a 和点 b 之间连一条边,a 和 b 可能相等;Q1 a b,询问点…

TensorFlow学习笔记--(3)张量的常用运算函数

损失函数及求偏导 通过 tf.GradientTape 函数来指定损失函数的变量以及表达式 最后通过 gradient(%损失函数%,%偏导对象%) 来获取求偏导的结果 独热编码 给出一组特征值 来对图像进行分类 可以用独热编码 0的概率是第0种 1的概率是第1种 0的概率是第二种 tf.one_hot(%某标签…

木疙瘩踩坑日记-容易忽略的一些BUG

在一开始玩家务必很清楚这三个概念 图形:舞台上元素的最小单位。软件自带的以及外部导入的图片默认都是图形!最朴素的元素!可以添加预制动画、关键帧动画、进度动画(软件自带的形状) 元件:一个可以内部封…

阿里云国际站:全球加速GA

文章目录 一、前言 二、阿里云全球加速的概念 三、阿里云全球加速的功能优势 四、阿里云全球加速的原理 五、阿里云全球加速的应用场景 六、写在最后 一、前言 随着互联网的快速发展,网站速度已经成为了用户访问体验的一个重要指标。阿里云加速作为一种新的技…

Web开发:一键复制到剪切板功能实现思路

在很多网页页面中我们都使用到过一键复制内容到剪切板的小功能,那么,具体如何实现呢?下面来讲述基于原生JavaScript API的两种实现思路。 同步方式:document.execCommand 这种方式: ①优点:是最传统的方法…

把字符串转换为整数函数atoi

今天我们来认识一个函数&#xff0c;叫atoi&#xff0c;我们开始研究它吧&#xff01; 1.认识atoi 1.函数功能&#xff1a;将字符串转换为整数 只能将整数字符串转换为整数&#xff0c;不能转换字符字符串 2.头文件&#xff1a;#include<stdlib.h> 3.使用格式&#xff1a…

文件上传 [ACTF2020 新生赛]Upload1

打开题目&#xff0c;发现是一道文件上传题目 随便上传个一句话木马上去 发现网站前端有白名单限制&#xff0c;只能上传含有jpg&#xff0c;png&#xff0c;gif的后缀文件 最开始我想到的做法是先上传htaccess文件&#xff0c;bp修改文件头&#xff0c;上传成功后然后再上传以…