从Seaborn Boxplot中提取异常值

时间:2018-12-12 03:24:59

标签: python matplotlib seaborn boxplot

绘制Seaborn Boxplot后,是否可以提取所有离群值?例如,如果我要为以下数据绘制箱形图

      client                total
1      LA                     1
2      Sultan                128
3      ElderCare              1
4      CA                     3
5      More                  900

在绘制箱线图后,我希望看到以下记录作为异常值返回。

2      Sultan                128
5      More                  900

2 个答案:

答案 0 :(得分:1)

Seaborn使用matplotlib处理异常值计算,这意味着将关键参数whis传递到ax.boxplot上。此处记录了负责计算的特定功能:https://matplotlib.org/api/cbook_api.html#matplotlib.cbook.boxplot_stats。您可以使用matplotlib.cbook.boxplot_stats来计算而不是提取异常值。以下代码段向您展示了计算及其与海底图的相同之处:

import matplotlib.pyplot as plt
from matplotlib.cbook import boxplot_stats
import pandas as pd
import seaborn as sns

data = [
    ('LA', 1),
    ('Sultan', 128),
    ('ElderCare', 1),
    ('CA', 3),
    ('More', 900),
]
df = pd.DataFrame(data, columns=('client', 'total'))
ax = sns.boxplot(data=df)
outliers = [y for stat in boxplot_stats(df['total']) for y in stat['fliers']]
print(outliers)
for y in outliers:
    ax.plot(1, y, 'p')
ax.set_xlim(right=1.5)
plt.show()

enter image description here

答案 1 :(得分:0)

下面的代码将为您提供一系列离群值,使用它们可以从数据框中提取值。

from matplotlib.cbook import boxplot_stats  
boxplot_stats(df.colname).pop(0)['fliers']