Pandas 如何从数据集中找到异常值并使用Z分数绘制

Pandas 如何从数据集中找到异常值并使用Z分数绘制,pandas,matplotlib,statistics,seaborn,outliers,Pandas,Matplotlib,Statistics,Seaborn,Outliers,数据集如下所示 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', 'pro

数据集如下所示

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)
这里我需要散点图,带离群点的盒形图,怎么办

如何找到下面的异常值


假设阈值为3,意味着NP.APSZZ评分>阈值将被认为是异常值。p> 基于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')

我们可以做方块图吗?Storeid vs Revenue,Storeid vs Profit你应该自己尝试一下,然后在这里再次发布,如果遇到问题,可以在新的问题中发布。深入研究,但请注意,这有其自己的方式来绘制异常值。如果你这样做了,你可以用scatterNot绘制你自己的异常值,这就是为什么问。不管怎样,谢谢你的回答,我会检查是否遇到问题,我会问这个问题。再次感谢