使用3σ准则对java列表中的数据进行清洗
在开发中会遇到一个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列表中的数据进行清洗相关推荐
- pandas使用query函数查询dataframe指定数据列的内容(数值)不包含在特定列表中的数据行(not contain in list)
pandas使用query函数查询dataframe指定数据列的内容(数值)不包含在特定列表中的数据行(select rows which column values are not containe ...
- pandas使用query函数查询dataframe指定数据列的内容(数值)包含在特定列表中的数据行(select rows which column values contain in list)
pandas使用query函数查询dataframe指定数据列的内容(数值)包含在特定列表中的数据行(select rows which column values contained in a li ...
- 如何向列表中添加数据值(管理员篇)
如何向列表中插入数据?这是一个很简单的问题.那么我的这两篇文章主要是对各种方法的总结,如果有朋友有不同的意见,请指正. 首先,我们来看一下列表(自定义列表,列表名称:Jobs). 列名 类型 注释 T ...
- android 在自定义的listview(有刷新加载项)列表中,数据过少时不能铺满整个屏幕时,header和footer同时显示问题...
android 在自定义的listview(有刷新加载项)列表中,数据过少时,当刷新时,加载项也会显示,这是很头疼的一个问题,查阅了一些资料,总结了一个比较不错的方法: 原来代码: 1 @Overr ...
- java 缓冲区中的数据存入缓冲区中_java8中NIO缓冲区(Buffer)的数据存储详解|chu...
java8新特性NIO缓冲区(Buffer)的数据存储. ByteBuffer,CharBuffer,ShortBuffer,IntBuffer,LongBuffer,FloatBuffer, Dou ...
- python如何从列表中提取数据_Python 从列表中取值和取索引的方法
如下所示: name_list["zhangsan","lisi","wangwu"] #1.取值 print(name_list[0]) ...
- java for 获取索引_获取Java列表中的对象索引
我的(Android)Java程序中有一个字符串列表,我需要获取列表中对象的索引.问题是,我只能找到有关如何查找对象的第一个和最后一个索引的文档.如果我的列表中有3个或更多相同的对象怎么办?我怎样才能 ...
- java 护照校验,Java应用中的数据校验
翻译:叩丁狼教育吴嘉俊 [译者注:这篇文章是开源项目CUBA Platform的作者,在这篇文章中,作者阐述了CUBA平台中关于数据校验的设计思想和使用方式,可以作为大家在设计数据校验方面一个比较好的 ...
- 解析列表中的数据python_将html数据解析成python列表进行操作
我会采取完全不同的方法.我们使用LXML来抓取html页面 我们切换的原因之一是因为BS有一段时间没有被维护,或者我应该说是更新了.在 在我的测试中,我运行了以下内容import requests f ...
最新文章
- 专访 | 微软首席数据科学家谢梁:从经济学博士到爬坑机器学习,这十年我都经历了啥?
- Python带下划线的变量或函数命名详细介绍
- 跟我学 Java 8 新特性之 Stream 流(二)关键知识点
- /proc 虚拟文件系统(实例)
- MVC设计模式-学习笔记
- C盘不能新建文件的问题解决办法
- Android内核开发 Linux C编程调用内核模块设备驱动
- centos 6.3+mysql+5.6+nginx 1.5.8
- 用c语言库函数进行排序
- 《大话数据结构》参考
- 分享一个巨好用的 HTTP 命令行宝藏工具
- CentOS 7迁移Tencent OS 2.4 tk
- 中国银联正式开展非标商户管理试点工作 将严打“大商户模式”
- 福昕 取消高亮 等注释
- 光华股份深交所上市:市值51亿 应收账款余额超5亿
- DDOS与DDOS追踪的介绍
- 计算机科学数学科目,计算机科学与技术考研考哪些科目 备考技巧有哪些
- 电路邱关源学习笔记——2.22.3电路的等效变换和串并联
- 基于Java毕业设计音乐管理系统源码+系统+mysql+lw文档+部署软件
- 如何在Cisco Packet Tracer中创建2个路由器虚拟局域网
热门文章
- 基于verilog的火焰检测系统的FPGA实现
- android局域网聊天毕业设计,Android基于wifi模块的局域网聊天以及文件传输app
- LT2611UX-LVDS转HDMI2.0转换器,支持高达6Gbps的数据速率
- 如何从 MySQL 读取 100w 数据进行处理
- 苹果禁止使用热更新,警告事件
- 计算机科学与教育学报,基于专业认证的计算机科学与技术专业持续改进研究-高等教育研究学报.PDF...
- 我是怎么拿到华为社招面试offer的?(内含面试真题分享)
- 关于使用工具包,应用程序中发生了无法处理的异常。如果单击“继续”,应用程序忽略错误尝试继续运行。点击退出,应用程序将会“关闭”。异常来自HRESULT:0x80040228的错误问题!
- FPGA笔记1——Verilog语法
- 利用map()函数,把用户输入的不规则的英文名字,变为首字母大写,其他小写。