2.9 清理例外值
1、如何清理來自真實世界的資料集合,并且在可視化之前對資料進行處理呢?
2、首先我們需要了解給定的資料,需要知道例外(outlier)是什么,并且要明白展示什么資料
3、在統計學上,中位數絕對偏差(Median absolute deviation,MAD)是用來描述單變數(包含一個變數)樣本在定量資料中可變性的一種標準,它常用來度量統計分布,因為它會落在一組穩健統計資料中,因此對例外值有抵抗能力
4、那如何用MAD來檢測資料中的例外值,下面是操作步驟
(1)生成 0~1 之間的隨機資料
(2)加入一些例外值
(3)用is_outlier()方法檢測例外值
(4)繪制出兩個資料集合(x和filtered)的圖表,觀察它們的區別
5、代碼實作如下
import numpy as np
import matplotlib.pyplot as plt
"""
清理例外值
"""
def is_outlier(points, threshold=3.5):
"""
如果點是離群值,則回傳帶True的布爾陣列;否則回傳帶False的布爾陣列
:param points:
:param threshold:
:return:
"""
# 變換為向量
if len(points.shape) == 1:
points = points[:, None]
# 計算中值
median = np.median(points, axis=0)
# 沿軸計算微分和
diff = np.sum((points - median) ** 2, axis=1)
diff = np.sqrt(diff)
# 計算MDA()中位數絕對偏差
med_abs_deviation = np.median(diff)
# 計算修正的Z分數
modified_z_score = 0.6745 * diff / med_abs_deviation
# 為每一個例外值回傳一個掩碼
return modified_z_score > threshold
# 隨機資料
x = np.random.random(100)
# 直方圖桶
buckets = 50
# 添加一些例外值
x = np.r_[x, -49, 95, 100, -100]
# 保持內部資料點;
# 在NumPy中,“~”運算子被多載為一個邏輯運算子,作用在布爾陣列上時為取非操作
filtered = x[~is_outlier(x)]
# 繪制直方圖
plt.figure()
# 第一個直方圖除了一個最大的例外值之外什么都沒有
plt.subplot(211)
plt.hist(x, buckets)
plt.xlabel('Raw')
# 第二個直方圖因為剔除掉了例外值,顯示了多樣化的資料
plt.subplot(212)
plt.hist(filtered, buckets)
plt.xlabel('Cleaned')
plt.show()
6、運行測驗

7、簡單說明
第一幅圖除了一個最大的例外值之外什么都沒有,第二幅圖中因為剔除掉了例外值,顯示了多樣化的資料,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/259241.html
標籤:python
上一篇:Python資料分析學習筆記#1
下一篇:送一朵玫瑰花給女朋友
