微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

显示 Seaborn 回归线计算的便捷方式

如何解决显示 Seaborn 回归线计算的便捷方式

我正在寻找一种方便的方法显示 Seaborn regplot 中回归线的计算。我在 Jupyter Notebook 中使用 Python。

在查看其他一些 stackoverflow 帖子后,我的理解是您无法直接显示图中使用的 fit_reg 计算。

相反,我找到了使用 from scipy import stats 模块的建议。 但是,这似乎对我不起作用:

from scipy import stats

#Read frame and create array of scores
read_frame = pd.DataFrame([each])
dates = list(read_frame.keys())
stock = dates.pop(0)
stock = each[stock]
stock_score = []
for key in dates:
    score = read_frame[key].to_list()
    stock_score.extend(score)

# y = dates,x = stock_score
slope = stats.linregress(dates,stock_score)
print(slope)

#[EDIT] Added data used for calculation.
# dates: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
# stock_score: [0.06933703703703704,0.07373142857142856,0.12000285714285716,0.1634861111111112,0.1726382978723404,0.548125,0.04427257383966246,0.08823866666666677,0.039461915367483294,-0.03524617834394902,0.033837903225806445,0.023088636363636363,-0.25486666666666663,0.07539999999999997,0.08250487804878054]

我收到的输出,以及显示我的数据点的图。

# Output
LinregressResult(slope=nan,intercept=nan,rvalue=nan,pvalue=nan,stderr=nan)

Plotted regression line for example stock

我想要做的是以一种方便的方式获得回归线的计算。

以下是使用的整个代码段(包括要绘制的代码)。

# Scatterplot with regressionline for each stock

import seaborn as sns
from scipy import stats

colors = ['black','red','yellow','blue','green','orange','purple','pink','brown','coral','teal','navy','grey','violet','maroon']
ctr = 0
for each in new_stock_scores:
    read_frame = pd.DataFrame([each])
    dates = list(read_frame.keys())
    stock = dates.pop(0)
    stock = each[stock]
    stock_score = []
    for key in dates:
        score = read_frame[key].to_list()
        stock_score.extend(score)
    
    #Regression line
    slope = stats.linregress(dates,stock_score)
    print(slope)

    #Regression plot
    sns.set(style="whitegrid")
    sns.set_context("paper")
    ax = sns.regplot(x = dates,y = stock_score,color = colors[ctr],ci = None)
    ax.set_title(stock,weight ='bold').set_fontsize('16')
    ax.set(xticks = dates)
    ax.set(xlabel = 'Date',ylabel = 'score')
    plt.xlim(0,16)
    plt.show()
    ctr += 1

解决方法

我似乎无法重现您的问题

import scipy.stats as sps

dates = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
stock_score = [0.06933703703703704,0.07373142857142856,0.12000285714285716,0.1634861111111112,0.1726382978723404,0.548125,0.04427257383966246,0.08823866666666677,0.039461915367483294,-0.03524617834394902,0.033837903225806445,0.023088636363636363,-0.25486666666666663,0.07539999999999997,0.08250487804878054]

linreg = sps.linregress(dates,stock_score)

print(linreg)

print('slope',linreg.slope)

给予

LinregressResult(slope=-0.014006090719584158,intercept=0.19498288977241957,rvalue=-0.38523447967018376,pvalue=0.1561897736602469,stderr=0.009305431260444107,intercept_stderr=0.08460610819916589)

slope -0.014006090719584158

您可以尝试检查您的 scipy 版本

import scipy
print(scipy.__version__)

1.6.1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。