一种自适应异常数据点消除方法

news2024/11/27 22:38:10

1.问题

在现实生活中,采集到的信号,会有一些噪点需要去除,否则这部分数据在比如时域空间直接进行分析时就会遇到非常难以厘清的逻辑要处理,各种异常。 肉眼看去,那些噪点是清清楚楚的。如何去除呢?

这里给出我的这种异常数据点的筛除算法最终的执行效果(滤除异常数据点后的数据参见下图中,点状图中红色的smooth之后的曲线),可以看到,它的效果是很好的。

 

2.处理逻辑

2.1.析取错误数据点

#析取所有的异常数据点
def output_flaw_data_byLOF(data, ratio = 5):
    x = np.arange(1,len(data));
    diff_ar = [];
    sum  = 0;
    for i in x:
        dumb = abs(data[i] - data[i-1]);
        diff_ar.append(dumb);
        sum = sum + dumb;
    diff_average = sum/(len(data)-1)

    flaw_pt = [];
    sum2 = 0;
    for i in x:
        dumb = abs(data[i] - data[i-1]);
        if(dumb >= ratio*diff_average):
            flaw_pt.append(i-1);
        else:
            sum2 = sum2 + dumb;
    diff_average_remove_flaws = sum2/(len(data)-len(flaw_pt)-1);
    return (flaw_pt, diff_average, diff_average_remove_flaws);

看看我们都做了什么:

我们首先取了整个数据集,点与点之间的差值;abs后,取平均 => diff_average;

然后,我们依次扫描这个区间,如果发现某个区间出现了异常数据点,我们就把前一个点,计入flow_pt数组,然后输出。

最终的输出参数中,我们给出了两个数据:有可能有问题的数据点,以及当前我们采集到的数据点的平均差值。

2.2.抹掉错误数据点

抹掉的时候,需要根据前后数据点的趋势来尝试逆推,用插值法插出缺失的数据点,差值简单期间,使用了线性差值法:

#针对异常数据点,逐一抹平
def smooth_sample_data_byLOF(data_origin, ratio = 5):
    data = data_origin.copy();
    cnts = 5;
    while(True):
        (flaw_pt, diff_average, diff_average_remove_flaws) = output_flaw_data_byLOF(data, ratio);
        if(abs(diff_average_remove_flaws - diff_average)/diff_average)<1: break;
        else:
            cnts = cnts -1;
            if(cnts <=0):
                break;
            else:
                continue;
    dealed = [];
    for x in flaw_pt:
        if(x in dealed): continue;
        else:
            ref_pts_prev = [];
            i = x;
            while(i>0):
                i = i-1;
                if(not(i in flaw_pt)):
                    ref_pts_prev.append(i);
                    if(len(ref_pts_prev)>=2):
                        break;
                    else:
                        continue;
                else:
                    continue;
            ref_pts_post = [];
            i = x;
            while(i<len(data)):
                i = i+1;
                if(not(i in flaw_pt)):
                    ref_pts_post.append(i);
                    if(len(ref_pts_post)>=2):
                        break;
                    else:
                        continue;
                else:
                    continue;
            
            if(len(ref_pts_prev)!=0) and (len(ref_pts_post)!=0):
                dx = (ref_pts_post[0] - ref_pts_prev[0]);
                dy = data[ref_pts_post[0]] - data[ref_pts_prev[0]];
                ref_y = data[ref_pts_post[0]];
                ref_x = x - ref_pts_post[0];
                data[x] = ref_y + dy/dx*ref_x;
            else:
                if(len(ref_pts_prev)==0):
                    dx = (ref_pts_post[1] - ref_pts_post[0]);
                    dy = data[ref_pts_post[1]] - data[ref_pts_post[0]];
                    ref_y = data[ref_pts_post[0]];
                    ref_x = x - ref_pts_post[0];
                    data[x] = ref_y + dy/dx*ref_x;
                else:
                    dx = (ref_pts_prev[1] - ref_pts_prev[0]);
                    dy = data[ref_pts_pre[1]] - data[ref_pts_prev[0]];
                    ref_y = data[ref_pts_prev[0]];
                    ref_x = x - ref_pts_prev[0];
                    data[x] = ref_y + dy/dx*ref_x;
    return data;

受益的同志,别忘了留个言,这个问题困扰我好久,今天总算近乎一劳永逸地解决了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速搭建自己的跑腿服务平台:开源跑腿系统源码分享

在现代社会&#xff0c;人们生活节奏加快&#xff0c;很多时候需要在短时间内完成各种任务&#xff0c;如购物、送货等。这就催生了跑腿服务的兴起。跑腿服务平台为用户提供一站式服务&#xff0c;让用户可以轻松地找到可靠的跑腿服务&#xff0c;并实现便捷快速的服务体验。 …

基于Java线上旅行信息管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

12. 100ASK-V853-PRO开发板 MIPI屏测试指南

100ASK-V853-PRO开发板 MIPI屏测试指南 硬件要求&#xff1a; 100ASK-V853-PRO开发板四寸MIPI屏 软件要求&#xff1a; 固件下载地址&#xff1a;链接&#xff1a;百度网盘 提取码&#xff1a;sp6a 固件位于资料光盘中的10_测试镜像/2.测试4寸MIPI屏/v853_linux_100ask_uar…

分布式文件存储相关概念

分布式文件存储 1 常见专业术语 1.1 备份技术 出于数据恢复的目的而创建的一份额外的数据副本 分类&#xff1a;直接连接备份&#xff0c;网络连接备份&#xff0c; 脱局域网备份&#xff0c;脱服务器备份 在线备份&#xff0c;离线备份&#xff0c;近线备份 ①冷备份 冷备份…

ORC与Parquet压缩分析

ORC与Parquet压缩分析 date&#xff1a;2023年6月14日 文章目录 ORC与Parquet压缩分析压测环境数据schema 数据实验压缩结果文件使用建议附录编译hadoop-lzo编译前提编译程中出现的错误结果文件 file-compress.jar源码ReadWriterOrc类NativeParquet类FileUtil类 压测环境 OS&a…

管理类联考——逻辑——真题篇——第四章 完型填空

第四章 完型填空 第一节 真题 2020-完型填空- Section I Use of English Directions&#xff1a; Read the following text. Choose the best word (s) for each numbered blank and mark A, B, C or D on the ANSWER SHEET. (10 points) Being a good parent is, of cour…

如何成为一名专业云渗透测试工程师

前言 很多人不知道网络安全发展前景好吗&#xff1f;学习网络安全能做什么&#xff1f;现在行业有哪些热门岗位&#xff1f;今天为大家解答下。 从宏观层面来看&#xff0c;新基建成为中国经济热词&#xff0c;政府和企业业务上云全面提速&#xff0c;随着云计算技术的快速发…

联想创新开放日:计算引领+AI赋能,联想超十项绿色技术重磅亮相

6月14日&#xff0c;联想2023年创新开放日精彩继续&#xff0c;六大主题的展览、多场圆桌论坛等活动吸引了络绎不绝的观众。聚焦ESG领域&#xff0c;本次联想创新开放日专门设立ESG零碳领航站和相关主题的圆桌论坛。期间&#xff0c;ESG展区还专门展示了联想温水水冷技术、智慧…

MM32F3273G8P火龙果开发板MindSDK开发教程20 - letter shell 的移植

MM32F3273G8P火龙果开发板MindSDK开发教程20 - letter shell 的移植 1、Letter Shell 犹如linux下的命令行&#xff0c;或者更像是uboot下的命令行&#xff0c;可以输入命令&#xff0c;执行相对应的函数。 2、Letter Shell移植&#xff08;GCC 环境&#xff09; 解压后&am…

虹科干货 | BI软件如何实时连接本地Excel?—以HK-Domo商业智能工具为例

由于资源和人才的限制&#xff0c;很多中小微企业目前在数据收集和数据应用上还处于比较落后的阶段&#xff0c;没有合适的方法处理数据。最典型的情况就是通过Excel收集数据&#xff0c;然后频繁的手动生成报告。这样会导致数据质量差&#xff0c;流程重复&#xff0c;还可能增…

读财报丨长期主义指引下,蔚来“下半年月均交付2万+”能否实现?

新能源汽车的互联网属性正在加速消解&#xff0c;工业产品的特质开始贯穿行业始终。 首先是过去几年风头无两的造车新势力&#xff0c;与传统车企在产品层面的边界越来越模糊。与此同时&#xff0c;新能源汽车的利润水平也在大幅下降&#xff0c;趋近燃油车。 行业整体的风格…

计算机组成原理(第三版)唐塑飞 答案 第三章

3.1什么是总线?总线传输有何特点?为了减轻总线的负载,总线上的部件都应具备什么特点&#xff1f; 答&#xff1a; ① 总线是连接多个部件的信息传输线,是个部件共享的传输介质。 ② 总线传输特点:在某一时刻,只允许有一个部件向总线发送信息,而多个部件可以同时从总线上接受相…

20年不变的初心,亚马逊云科技为初创企业的独角兽梦想加速赋能!

廿年初心不改&#xff0c; 为初创企业打造增长飞轮 【全球云观察 &#xff5c; 热点关注】20年前&#xff0c;亚马逊现任CEO Andy Jassy观察到&#xff0c;在亚马逊内部新业务的孵化过程中工程师需要花大量的时间&#xff0c;投入在一些重复性高却不产生附加价值的基础设施建设…

【UE 从零开始制作坦克】1-控制坦克视角

UE版本&#xff1a;4.26 效果 步骤 1. 在虚幻商城中下载如下资产导入到工程中 导入成功后可以在工程中看到如下文件夹 2. 接下来开始制作一下控制坦克视角的逻辑 首先在项目设置中添加轴映射 新建一个蓝图&#xff0c;父类为“WheelVehicle(轮式载具)” 这里就命名为“TankZ…

科一容易忘、容易混的点(二)

注意落石 高速应急车道用途&#xff1a;主要用于发生事故或故障时停车&#xff0c;以及专为救险所用的车道&#xff0c;被誉为高速公路的“生命通道” 注意 注意 扣9份场景&#xff1a; 城市快速路上 违法停车&#xff1b; 注意 交通事故逃逸&#xff0c; 不一定吊销驾驶证&a…

Python的type内置类详解

目录导览 欢迎来到本文Type简介Type的常见用法用法1-获取对象的类型用法2-创建新的类 Type做为元类&#xff08;metaclass&#xff09;元类的作用如何自定义元类 欢迎来到本文 Type简介 在Python中&#xff0c;type是一个内建的类&#xff0c;它是用于表示对象的类型的类。ty…

(九)枚举器和迭代器(2)

一、Enumerator 接口 实现了 IEnumerator 接口的枚举器包含3个函数成员&#xff1a;Current、MoveNext 以及 Reset。 1&#xff09;Current&#xff1a; 返回序列中当前位置项的属性。 只读属性。返回 Object 类型。可以返回对应的可枚举类型。 2&#xff09;MoveNext&…

牛客网基础语法41~50题

牛客网基础语法41~50题&#x1f618;&#x1f618;&#x1f618; &#x1f4ab;前言&#xff1a;今天是咱们第五期刷牛客网上的题目。 &#x1f4ab;目标&#xff1a;熟练用数学知识来解决编程问题&#xff0c;会利用每种循环。 &#x1f4ab;鸡汤&#xff1a;压抑了&#xff0…

8 个身份自动化模版,帮你提升企业身份治理效率

中大型企业的信息化建设已经成为了当前企业的主流趋势。随着日益增长的业务需求&#xff0c;中大型企业的信息系统逐渐发展成为一个拥有众多应用和数据库支撑的复杂体系。由于中大型企业员工众多&#xff0c;部门繁杂&#xff0c;且存在大量员工入、转、调、离等情况&#xff0…

springboot集成quartz

文章目录 前言一、Quartz是什么&#xff1f;难易程度 二、核心思想三、使用步骤1.引入依赖2.创建相应类 总结 前言 引用上一篇博客的说法 springboot整合xxl-job ,集群模式下,定时任务会造成很严重的事故,其次普通的任务也无法做到像xxl-job与Quartz 一样,及时启停,修改等;上一…