import numpy as np
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as mp def get_data_zs(inputfile):
data = pd.read_excel(inputfile, index_col='Id', encoding='gb18030')
data_zs = 1.0 * (data - data.mean()) / data.std()
return data, data_zs def model_data_zs(data, k, b):
model = KMeans(n_clusters=k, n_jobs=4, max_iter=b)
model.fit(data_zs) # 标准化数据及其类别
r = pd.concat(
[data_zs, pd.Series(model.labels_, index=data.index)], axis=1)
# print(r.head())
# 每个样本对应的类别
r.columns = list(data.columns) + [u'聚类类别'] # 重命名表头
return model, r, k def make_norm(model, k):
norm = []
for i in range(k):
norm_tmp = r[['R', 'F', 'M']][
r[u'聚类类别'] == i] - model.cluster_centers_[i]
norm_tmp = norm_tmp.apply(np.linalg.norm, axis=1) # 求出绝对距离
norm.append(norm_tmp / norm_tmp.median()) # 求相对距离并添加
norm = pd.concat(norm)
return norm def draw_discrete_point(threshold):
mp.rcParams['font.sans-serif'] = ['SimHei']
mp.rcParams['axes.unicode_minus'] = False
norm[norm <= threshold].plot(style='go') # 正常点 discrete_points = norm[norm > threshold] # 离散点阈值
discrete_points.plot(style='rs')
# print(discrete_points) for i in range(len(discrete_points)): # 离群点做标记
id = discrete_points.index[i]
n = discrete_points.iloc[i]
mp.annotate('(%s,%0.2f)' % (id, n), xy=(id, n), xytext=(id, n))
mp.xlabel(r'编号')
mp.ylabel(r'相对距离')
mp.show() if __name__ == '__main__':
inputfile = 'data/consumption_data.xls'
threshold = 2 # 离散点阈值
k = 3 # 聚类类别
b = 500 # 聚类最大循环次数
data, data_zs = get_data_zs(inputfile)
model, r, k = model_data_zs(data, k, b)
norm = make_norm(model, k)
draw_discrete_point(threshold)
print('All Done')

显示结果:

python 离群点检测的更多相关文章

  1. 30行Python代码实现人脸检测

    参考OpenCV自带的例子,30行Python代码实现人脸检测,不得不说,Python这个语言的优势太明显了,几乎把所有复杂的细节都屏蔽了,虽然效率较差,不过在调用OpenCV的模块时,因为模块都是C ...

  2. 离群点检测与序列数据异常检测以及异常检测大杀器-iForest

    1. 异常检测简介 异常检测,它的任务是发现与大部分其他对象不同的对象,我们称为异常对象.异常检测算法已经广泛应用于电信.互联网和信用卡的诈骗检测.贷款审批.电子商务.网络入侵和天气预报等领域.这些异 ...

  3. 深度学习 + OpenCV,Python实现实时视频目标检测

    使用 OpenCV 和 Python 对实时视频流进行深度学习目标检测是非常简单的,我们只需要组合一些合适的代码,接入实时视频,随后加入原有的目标检测功能. 在本文中我们将学习如何扩展原有的目标检测项 ...

  4. 【python+opencv】直线检测+圆检测

     Python+OpenCV图像处理—— 直线检测 直线检测理论知识: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进 ...

  5. C#下实现的K-Means优化[1]-「离群点检测」

    资源下载 #本文PDF版下载 C#下实现的K-Means优化[1]-「离群点检测」 前言 在上一篇博文中,我和大家分享了「C # 下实现的多维基础K-MEANS聚类」的[C#下实现的基础K-MEANS ...

  6. Envoy:离群点检测 outlier detection

    outlier detection 在异常检测领域中,常常需要决定新观察的点是否属于与现有观察点相同的分布(则它称为inlier),或者被认为是不同的(称为outlier).离群是异常的数据,但是不一 ...

  7. 解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法

    摘要:本文提出了两个用于无监督的具备可解释性和鲁棒性时间序列离群点检测的自动编码器框架. 本文分享自华为云社区<解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法&g ...

  8. 异常点/离群点检测算法——LOF

    http://blog.csdn.net/wangyibo0201/article/details/51705966 在数据挖掘方面,经常需要在做特征工程和模型训练之前对数据进行清洗,剔除无效数据和异 ...

  9. Python QQ群

    微信公众号:Python中文社区 Python初级技术交流QQ群:152745094Python高级技术交流QQ群:273186166Python网络爬虫组QQ群:206241755PythonWeb ...

随机推荐

  1. linux-基础命令篇-02

    基本命令:--LS 关于显示的颜色含义: 白色:表示普通文件 蓝色:表示目录 绿色:表示可执行文件 红色:表示压缩文件 浅蓝色:链接文件 红色闪烁:表示链接的文件有问题 黄色:表示设备文件 灰色:表示 ...

  2. docker 安装elasticSearch7.0.0

    一.执行命令:docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-n ...

  3. js中for(var key in o ){};用法小记

    o不只可以是对象,key也不只可以是对象中的键. o也可以是一个数组,这时候的key就是数组的下标,从"0"开始,注意下标“0”是个字符串类型. 但是这种循环在 IE8浏览器下 对 ...

  4. 磁盘当前目录下存在文件 c1.txt,其中存放了一段英文文字。请编程实现将c1.txt中英文文字全部转换为答谢字母,并保存到c2.txt中。要求:c2.txt文件前面保存的是c1.txt文案中的原始文字,后面紧跟着的是转换后的文字

    #include"stdio.h"#include"string.h" void main(){ FILE *fp1,*fp2; char ch[1000]=& ...

  5. TP5.0 PHPExcel 数据表格导出导入(原)

    今天看的是PHPExcel这个扩展库,Comporse 下载不下来,最后只能自己去github里面手动下载,但有一个问题就是下载下来的PHPExcel没有命名空间,所以框架里面的use根本引入不进去, ...

  6. python - 闭包,迭代器

    一.第一类对象 1.函数名的运用     函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量     1.函数名的内存地址 def func1(): print('你是谁,你来自哪里 ...

  7. fastjson对象转为json字符串日期格式变为时间戳问题

    今天尝试将map集合转为json对象时遇到一个问题.map中的value为日期格式如"2019-03-01",在使用JSONObject.toJSON(map).toString( ...

  8. luogu1706全排列

    #include<bits/stdc++.h> using namespace std; +]; +]; int search(int k); int print(); int n,num ...

  9. python中一些传参事情

    #一个参数的传参 def hello(a):    print(a+'王彦军你好')hello('hello')''' #2个参数的 def ab(a,b):    print(a+'你好')    ...

  10. 剖析一个用C++写的行情交易系统

    最近hen ci hen ci用C++写完了一整套证券行情系统,但是不是服务沪深交易所的,是给文交所用的.整个系统涵盖了从DBF文件解析开始到客户端展现这一整条逻辑.想来一年多没有更新博客了,所以趁这 ...