在开发中会遇到一个List中的个别数据明显的脏数据,比如一组数据为[1,2,8,10,8,5,2,4,6,11,15,1,2,8,10,8,5,2,4,6,11,15,1000,1000]

这里的1000为脏数据,使用3σ准则进行数据清洗

这里我们需要使用apache.commons.math3包

        <dependency><groupId>org.apache.commons</groupId><artifactId>commons-math3</artifactId><version>3.6.1</version></dependency>

在程序代码中引用

import org.apache.commons.math3.stat.StatUtils;
import org.apache.commons.math3.stat.descriptive.moment.StandardDeviation;
import org.apache.commons.math3.stat.descriptive.rank.Median;import com.alibaba.fastjson.JSON;

代码为:

 /*** @Author zhongkai* @Date  2021/2/20 16:31* @Description 3σ准则过滤**/public static List<Double> sigma3Filter(List<Double> data){List<Double> returnList= new ArrayList<>(data);double[] dataA = new double[data.size()];for (int i=0;i<data.size();i++){dataA[i]=data.get(i);}List<Double> outliersList = sigma(dataA,dataA,3);for (double vo:outliersList){if (returnList.contains(vo)){returnList.remove(vo);}}return returnList;}/*** @Author zhongkai* @Date  2021/2/20 14:31* @Description x sigema准则计算* @param data 原始数据数组* @param arr 需要对比的数据数组* @param x sigema的个数 一般使用3σ则x=3 样本数量一般要大于等于30个**/public static List<Double> sigma(double[] data,double[] arr, int x){double avg = StatUtils.mean(data);System.out.println("算数平均值μ:"+avg );//算数平均值StandardDeviation standardDeviation =new StandardDeviation();double stDev = standardDeviation.evaluate(data);System.out.println("标准差σ为:" + stDev);List<Double> outliersList=new ArrayList<>();for (double vo:arr){//判断异常值方法if(Math.abs(vo-avg)>(x*stDev)) {outliersList.add(vo);System.out.println("使用"+x+"σ准则进行过滤,该数组中的"+vo+"属于异常值!");}}return outliersList;}

调用:

    public static void main(String[] args) {double[] data =new double[] {1,2,8,10,8,5,2,4,6,11,15,1,2,8,10,8,5,2,4,6,11,15,1000,1000};//原始数组List<Double> dataList=new ArrayList<>();for (double vo:data){dataList.add(vo);}List<Double> outliersList = sigma3Filter(dataList);System.out.println(JSON.toJSONString(outliersList));}

建议:使用3σ准则过滤时,样本数量最好大于30

使用3σ准则对java列表中的数据进行清洗相关推荐

  1. pandas使用query函数查询dataframe指定数据列的内容(数值)不包含在特定列表中的数据行(not contain in list)

    pandas使用query函数查询dataframe指定数据列的内容(数值)不包含在特定列表中的数据行(select rows which column values are not containe ...

  2. pandas使用query函数查询dataframe指定数据列的内容(数值)包含在特定列表中的数据行(select rows which column values contain in list)

    pandas使用query函数查询dataframe指定数据列的内容(数值)包含在特定列表中的数据行(select rows which column values contained in a li ...

  3. 如何向列表中添加数据值(管理员篇)

    如何向列表中插入数据?这是一个很简单的问题.那么我的这两篇文章主要是对各种方法的总结,如果有朋友有不同的意见,请指正. 首先,我们来看一下列表(自定义列表,列表名称:Jobs). 列名 类型 注释 T ...

  4. android 在自定义的listview(有刷新加载项)列表中,数据过少时不能铺满整个屏幕时,header和footer同时显示问题...

    android  在自定义的listview(有刷新加载项)列表中,数据过少时,当刷新时,加载项也会显示,这是很头疼的一个问题,查阅了一些资料,总结了一个比较不错的方法: 原来代码: 1 @Overr ...

  5. java 缓冲区中的数据存入缓冲区中_java8中NIO缓冲区(Buffer)的数据存储详解|chu...

    java8新特性NIO缓冲区(Buffer)的数据存储. ByteBuffer,CharBuffer,ShortBuffer,IntBuffer,LongBuffer,FloatBuffer, Dou ...

  6. python如何从列表中提取数据_Python 从列表中取值和取索引的方法

    如下所示: name_list["zhangsan","lisi","wangwu"] #1.取值 print(name_list[0]) ...

  7. java for 获取索引_获取Java列表中的对象索引

    我的(Android)Java程序中有一个字符串列表,我需要获取列表中对象的索引.问题是,我只能找到有关如何查找对象的第一个和最后一个索引的文档.如果我的列表中有3个或更多相同的对象怎么办?我怎样才能 ...

  8. java 护照校验,Java应用中的数据校验

    翻译:叩丁狼教育吴嘉俊 [译者注:这篇文章是开源项目CUBA Platform的作者,在这篇文章中,作者阐述了CUBA平台中关于数据校验的设计思想和使用方式,可以作为大家在设计数据校验方面一个比较好的 ...

  9. 解析列表中的数据python_将html数据解析成python列表进行操作

    我会采取完全不同的方法.我们使用LXML来抓取html页面 我们切换的原因之一是因为BS有一段时间没有被维护,或者我应该说是更新了.在 在我的测试中,我运行了以下内容import requests f ...

最新文章

  1. 专访 | 微软首席数据科学家谢梁:从经济学博士到爬坑机器学习,这十年我都经历了啥?
  2. Python带下划线的变量或函数命名详细介绍
  3. 跟我学 Java 8 新特性之 Stream 流(二)关键知识点
  4. /proc 虚拟文件系统(实例)
  5. MVC设计模式-学习笔记
  6. C盘不能新建文件的问题解决办法
  7. Android内核开发 Linux C编程调用内核模块设备驱动
  8. centos 6.3+mysql+5.6+nginx 1.5.8
  9. 用c语言库函数进行排序
  10. 《大话数据结构》参考
  11. 分享一个巨好用的 HTTP 命令行宝藏工具
  12. CentOS 7迁移Tencent OS 2.4 tk
  13. 中国银联正式开展非标商户管理试点工作 将严打“大商户模式”
  14. 福昕 取消高亮 等注释
  15. 光华股份深交所上市:市值51亿 应收账款余额超5亿
  16. DDOS与DDOS追踪的介绍
  17. 计算机科学数学科目,计算机科学与技术考研考哪些科目 备考技巧有哪些
  18. 电路邱关源学习笔记——2.22.3电路的等效变换和串并联
  19. 基于Java毕业设计音乐管理系统源码+系统+mysql+lw文档+部署软件
  20. 如何在Cisco Packet Tracer中创建2个路由器虚拟局域网

热门文章

  1. 基于verilog的火焰检测系统的FPGA实现
  2. android局域网聊天毕业设计,Android基于wifi模块的局域网聊天以及文件传输app
  3. LT2611UX-LVDS转HDMI2.0转换器,支持高达6Gbps的数据速率
  4. 如何从 MySQL 读取 100w 数据进行处理
  5. 苹果禁止使用热更新,警告事件
  6. 计算机科学与教育学报,基于专业认证的计算机科学与技术专业持续改进研究-高等教育研究学报.PDF...
  7. 我是怎么拿到华为社招面试offer的?(内含面试真题分享)
  8. 关于使用工具包,应用程序中发生了无法处理的异常。如果单击“继续”,应用程序忽略错误尝试继续运行。点击退出,应用程序将会“关闭”。异常来自HRESULT:0x80040228的错误问题!
  9. FPGA笔记1——Verilog语法
  10. 利用map()函数,把用户输入的不规则的英文名字,变为首字母大写,其他小写。