gpt4 book ai didi

python - 在 Seaborn Jointplot 上注释异常值

转载 作者:太空狗 更新时间:2023-10-30 00:53:54 24 4
gpt4 key购买 nike

将“tips”数据集绘制为联合图,我想根据“tips”数据框中的索引在图表上标记前 10 个离群值(或前 n 个离群值)。我计算残差(一个点与平均线的距离)以找到异常值。请忽略这种异常值检测方法的优点。我只想根据规范对图表进行注释。

import seaborn as sns
sns.set(style="darkgrid", color_codes=True)

tips = sns.load_dataset("tips")
model = pd.ols(y=tips.tip, x=tips.total_bill)
tips['resid'] = model.resid

#indices to annotate
tips.sort_values(by=['resid'], ascending=[False]).head(5)

enter image description here

tips.sort_values(by=['resid'], ascending=[False]).tail(5)

enter image description here

%matplotlib inline
g = sns.jointplot("total_bill", "tip", data=tips, kind="reg",
xlim=(0, 60), ylim=(0, 12), color="r", size=7)

我如何通过每个点的索引值(最大残差)注释图表上的前 10 个异常值(最大 5 个和最小 5 个残差)以获得此:

enter image description here

最佳答案

您可以使用 matplotlib annotate 创建一个点的注释。这个想法是迭代数据帧并在 "tip""total_bill" 列给定的相应位置放置注释。

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

sns.set(style="darkgrid", color_codes=True)

tips = sns.load_dataset("tips")
model = pd.ols(y=tips.tip, x=tips.total_bill)
tips['resid'] = model.resid

g = sns.jointplot("total_bill", "tip", data=tips, kind="reg",
xlim=(0, 60), ylim=(0, 12), color="r", size=7)

#indices to annotate
head = tips.sort_values(by=['resid'], ascending=[False]).head(5)

tail = tips.sort_values(by=['resid'], ascending=[False]).tail(5)

def ann(row):
ind = row[0]
r = row[1]
plt.gca().annotate(ind, xy=(r["total_bill"], r["tip"]),
xytext=(2,2) , textcoords ="offset points", )

for row in head.iterrows():
ann(row)
for row in tail.iterrows():
ann(row)

plt.show()

enter image description here


请注意,从 pandas 版本 0.20 开始, pandas.ols has been removed .要替换它,可以使用 OLS model来自 statsmodels。相应的行将显示为:

import statsmodels.api as sm
model = sm.OLS(tips.tip, tips.total_bill)
tips['resid'] = model.fit().resid

请注意,结果略有不同(可能是由于权重不同)。

关于python - 在 Seaborn Jointplot 上注释异常值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43010462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com