python - 使用 Numpy 查找和打印数据异常值
问题描述
我想使用 Pandas 和 Numpy 在 csv 数据表列中查找任何异常值。目前我可以在高端获得异常值,但我不确定如何获得最小异常值或“较低”异常值是否有意义。
这是我正在使用的功能:
def detect_outlier(data_1):
outliers = []
threshold = 3
mean_1 = np.mean(data_1)
std_1 = np.std(data_1)
for y in data_1:
z_score = (y - mean_1) / std_1
if np.abs(z_score) > threshold:
outliers.append(y)
return outliers
这将返回 z 分数大于 3(阈值)的异常值,并且可以正常工作。我尝试将阈值更改为 -3 以获得较低光谱上的异常值,但它只返回特定列的所有值。这是否仅表示没有较低的异常值或我做错了什么?我发现的所有问题都与删除异常值有关,但我只想显示任何异常值。
还有一些使用为列提供的函数的异常值返回一个空数组,这是否表示该特定列没有异常值?
数据集太大,无法在此处发布,但如果它可以帮助回答此问题,请点击此处的链接: https ://archive.ics.uci.edu/ml/datasets/Absenteeism+at+work
解决方案
我改变了你的异常逻辑,它适用于一个人为的例子。
在这种情况下,您应该检查原始z_score 是否小于阈值,而不是检查 z_score 的绝对值是否大于阈值。
见下文。
import random
import numpy as np
def detect_outlier(data_1):
outliers = []
threshold = -3
mean_1 = np.mean(data_1)
std_1 = np.std(data_1)
for y in data_1:
z_score = (y - mean_1) / std_1
if z_score < threshold:
outliers.append(y)
return outliers
data = [random.randrange(200,300,1) for i in range(1000)]
data.append(0.01)
result = detect_outlier(data)
print(f'Outlier: {result}')
输出:
Outlier: [0.01]
也有可能您的数据集在分布的负面方面没有极端异常值,但无论如何逻辑都会错过它们。
推荐阅读
- uwp - 哪些真实世界的 UWP 应用使用 AppServices?
- reactjs - 是否可以更改 material-ui TextField 组件的排版样式以使用标题变体?
- r - 使用 rowSum 在 dplyr 中使用正则表达式进行条件突变
- python - Python:如何删除 .ipynb / Jupyter Notebook 的 .html 导出的“In []”和“Out []”?
- python - 将二维数组另存为 txt 文件
- pip - pip 19.3.1 TypeError:“模块”对象不可调用
- r - 在R中应用正则表达式保留逗号
- php - 无法将数据库中的字符串解码为 JSON
- python - kivy 说我有多个同名的屏幕
- javascript - 使用应用引擎服务部署时出现 502 bad gateway