pandas - 如何从数据集中找到异常值并使用 Z 分数绘图
问题描述
数据集如下
store id,revenue ,profit
101,779183,281257
101,144829,838451
101,766465,757565
101,353297,261071
101,1615461,275760
102,246731,949229
102,951518,301016
102,444669,430583
代码如下
import pandas as pd
dummies1 = dummies[['storeid', 'revenue', 'profit']]
cols = list(dummies1.columns)
cols.remove('storeid')
dummies1[cols]
# code to find the z score
for col in cols:
col_zscore = col + '_zscore'
dummies1[col_zscore] = (dummies1[col] - dummies1[col].mean())/dummies1[col].std(ddof=0)
在这里我需要散点图,带异常值的箱线图,怎么做
如何找到异常值如下?
假设threshold is 3
意味着 np.abs(z_score) > threshold 将被视为异常值。
解决方案
根据 z 分数对数据进行切片将为您绘制要绘制的数据。如果您只想找到一个变量是异常值的位置,您可以执行以下操作(例如):
THRESHOLD = 1.5 #nothing > 3 in your example
to_plot = dummies1[(np.abs(dummies1['revenue_zscore']) > THRESHOLD)]
或者,如果任一列可能是异常值,您可以执行以下操作:
to_plot = dummies1[(np.abs(dummies1['revenue_zscore']) > THRESHOLD) |
(np.abs(dummies1['profit_zscore']) > THRESHOLD)]
您对情节不是很具体,但这是一个利用这一点的示例(~
用于反转对正常点的异常值的检测):
fig, ax = plt.subplots(figsize=(7,5))
non_outliers = dummies1[~((np.abs(dummies1['revenue_zscore']) > THRESHOLD) |
(np.abs(dummies1['profit_zscore']) > THRESHOLD))]
outliers = dummies1[((np.abs(dummies1['revenue_zscore']) > THRESHOLD) |
(np.abs(dummies1['profit_zscore']) > THRESHOLD))]
ax.scatter(non_outliers['revenue'],non_outliers['profit'])
ax.scatter(outliers['revenue'],outliers['profit'], color='red', marker='x')
ax.set_ylabel('Profit')
ax.set_xlabel('Revenue')
推荐阅读
- ruby-on-rails - Sidekiq,线程用完 - Rails 离开而不是收获 connection_pool 线程
- ibm-doors - 我无法删除对象...为什么?
- node.js - 我无法将布尔值从我的 nodejs 服务器返回到我的角度服务
- c# - 堆已损坏:调用非托管函数时
- docker - 使用 Open JDK 11 在 Docker 上运行的 Websphere Liberty
- c# - 多数人投票通过相等时失败的字符串
- sql - 在 sql server 上加载 XML 时不显示数据
- java - 为什么我在 Java 中得到 javafx.fxml.LoadException
- kubernetes - Kubernetes Ingress 重定向到一个目录
- git - 在 git ls-remote 中,我如何才能仅在没有提交 ID 的情况下获取分支名称