Python基于滑动平均思想实现缺失数据填充的方法
作者:Together_CZ 发布时间:2021-10-20 12:36:02
标签:python,滑动平稳思想,缺失数据填充
在时序数据处理过程中,我们经常会遇到由于现实中的种种原因导致获取的数据缺失的情况,这里的数据缺失不单单是指为‘NaN'的数据,比如在AQI数据中,0是不可能出现的,这时候如果数据中出现了0也就是数据缺失了,最近正好在拿一个污染物的数据在做模型分析,中间就遇到了数据缺失值的问题,数据量本身不大,如果直接对缺失值进行丢弃处理的话会进一步减小数据量,所以这里考虑采用数据填充的方法来实现缺失数据的填充。我做了两个版本其中,第一个版本很简单可以不看,主要是简单实现以下效果。具体实现如下:
#!usr/bin/env python
#encoding:utf-8
from __future__ import division
'''
__Author__:沂水寒城
功能: python 基于滑动平均思想实现简易的缺失数据填充
'''
def zeroDataFill(one_all_list):
'''
对于0数据处理,简单实现版本,可忽略
'''
res_list=[]
for i in range(len(one_all_list)):
if one_all_list[i]!=0:
res_list.append(one_all_list[i])
else:
if i==0:
for j in range(1,len(one_all_list)):
if one_all_list[j]!=0:
res_list.append(one_all_list[j])
break
elif i==len(one_all_list)-1:
res_list.append(int(sum(res_list[-3:-1])/2))
else:
tmp=0
for j in range(i,len(one_all_list)):
if one_all_list[j]!=0:
tmp=one_all_list[j]
break
now=(res_list[i-1]+tmp)/2
res_list.append(int(now))
print res_list
return res_list
def dataProcessing(one_all_list,num=7):
'''
对于时间序列数据中的 0 进行处理,采用滑动平均的方法来填充(默认时间为一周)
'''
nozero_list=[one for one in one_all_list if one!=0]
before_avg,last_avg=sum(nozero_list[:num])/num,sum(nozero_list[-1*num:])/num
res_list=[]
for i in range(len(one_all_list)):
if one_all_list[i]!=0:
res_list.append(one_all_list[i])
else:
tmp=int(num/2)+1
if i<=tmp:
res_list.append(int(before_avg))
elif i>=len(one_all_list)-tmp:
res_list.append(int(last_avg))
slice_list=one_all_list[i-tmp:i+tmp+1]
res_list.append(int(sum(slice_list)/(num-1)))
print res_list
return res_list
if __name__=='__main__':
one_all_list=[0,12,3,5,1,5,7,8,4,0,12,14,0,0,45,34,67,43,0,9,1,0]
zeroDataFill(one_all_list)
dataProcessing(one_all_list,num=7)
结果如下:
[12, 12, 3, 5, 1, 5, 7, 8, 4, 8, 12, 14, 29, 37, 45, 34, 67, 43, 26, 9, 1, 17]
[5, 12, 3, 5, 1, 5, 7, 8, 4, 12, 14, 45, 34, 67, 43, 30, 33, 9, 1, 30, 8]
来源:https://blog.csdn.net/Together_CZ/article/details/85000866
0
投稿
猜你喜欢
- 1、使用好处提高性能:由于减去了大量新建终止线程的费用,重用了线程资源;适用场景:适用于处理大量突发请求或需要大量线程完成任务,但实际任务处
- plt.plot()函数各参数解析plt.plot()函数的作用是绘制折线图,它的参数有很多,常用的函数参数如下:plt.plot(x,y,
- 没有多大变动,主要是返回错误信息,以便调用函数部分可以alert出来。据说可以用正则表达式校验,下次再研究下。//-------------
- 1. 常用模块# 连接数据库connect()函数创建一个新的数据库连接对话并返回一个新的连接实例对象PG_CONF_123 = {
- 我们在日常开发中,我们经常会面对复杂的子系统,其中包含许多相互关联的类和接口。直接使用这些类和接口可能会导致代码的复杂性增加,使得系统难以维
- python代码有一行标黄鼠标放在标黄的代码行会显示This code is unreachable(此代码无法访问)def do_teln
- 本文实例讲述了Python基于回溯法子集树模板解决马踏棋盘问题。分享给大家供大家参考,具体如下:问题将马放到国际象棋的8*8棋盘board上
- 原作者:Jonathan 翻译:charlee原文:http://f6design.com/journal/2006/10/21/the-v
- 这篇论坛文章(赛迪网技术社区)主要介绍了数据仓库基本报表制作过程中的SQL写法,详细内容请参考下文:在数据仓库的基本报表制作过程中,通常会使
- 一、无镜像安装 pip install 库名打开命令提示符【win + r】,输入cmd,在命令提示窗口输入pip install 库名,
- 前言1.装饰器本质是一个语法糖,是对被装饰方法或类进行的功能扩充,是一种面向切面的实现方法2.装饰器可以分成方法装饰器和类装饰器,他们的区别
- 1 图1第一个图是蚊香,感兴趣的小伙伴可以自己尝试在python中用turtle库绘制一下。具体代码如下:#画蚊香import turtle
- <table border="1" cellpadding="0&quo
- 本文实例讲述了php文件缓存类用法。分享给大家供大家参考。具体如下:<?php/** * 简单的文件缓存类 * */class XZC
- 1. 什么是虚拟环境?虚拟环境的意义,就如同 虚拟机 一样,它可以实现不同环境中Python依赖包相互独立,互不干扰。举个例子吧。假设我们的
- 1. 停应用层的各种程序。 2. 停oralce的监听进程: $lsnrctl stop 3. 在独占的系统用户下,备份控制文件: SQL&
- 1.Python代码import cx_Oracletns=cx_Oracle.makedsn('127.0.0.1',
- python 根据正则表达式提取指定的内容正则表达式是极其强大的,利用正则表达式来提取想要的内容是很方便的事。 下面演
- 1 输出大写字母、小写字母、大小写字母、数字、大小写字母和数字1.1输出小写:找到小写a(97)到z(122)的的ASCII码,然后转义为字
- 1. auth模块auth模块是对登录认证方法的一种封装,本身就是一个对象,可以获取用户的详细信息,有了auth模块可以验证登录信息是否存在