Python/Plotly:如何从OLS行中提取“m”和“b”?

2024-09-29 23:33:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Plotlylib可视化我的OLS回归线,并试图从悬停模板中显示的y=mx+b方程中提取“m”和“b”值

这是可视化时它在悬停模板中显示的方式:

enter image description here

使用ols_fcast_fig.data[1].hovertemplate它为我打印出:

'<b>OLS trendline</b><br>Observations = 0.000411 * Date + -603422.036990<br>R<sup>2</sup>=0.952751<br><br>Date=%{x}<br>Observations=%{y} <b>(trend)</b>'

现在,我需要得到0.000411-603422.036990值。但是,我需要以动态的方式获取它们,因为这些值会发生变化(因此不需要使用[#::#]索引位置)。 请让我知道如何以动态方式提取这些值,以便第一个值在“=”之后、在“*”之前,第二个值在“+”之后、在“<br>;'因此,可以在Plotly函数内执行还是不使用正则表达式

谢谢你的帮助


Tags: br模板date可视化方式fig动态方程
2条回答

我不熟悉OLS和Plotly,我认为可能有一种更简单的方法来访问这些值,但只是从文本中提取它们,您可以使用如下regex

import re
text = '<b>OLS trendline</b><br>Observations = 0.000411 * Date + -603422.036990<br>R<sup>2</sup>=0.952751<br><br>Date=%{x}<br>Observations=%{y} <b>(trend)</b>'

numbers = re.findall("(-?\d[\d.]+)", text)
first_value = numbers[0] # 0.000411
second_value = numbers[1] # -603422.036990

请注意,这不适用于科学记数法中的数字,或者如果文本中要提取的数字之前有其他数字(如果需要,可以通过使模式更复杂来解决这两个问题)

不使用正则表达式,您可以执行以下操作

first_value = text.split('Observations = ', 1)[1].split(' ')[0]
second_value = text.split('Date + ', 1)[1].split("<br")[0]

但我反对这种做法,因为它很快就会变得混乱和脆弱

另一种选择是使用parse

n1, n2 = parse.search("<br>Observations = {} * Date + {}<br>", text)

您可以直接访问这些数字,您不需要解析任何字符串

Plotly Express存储statsmodels拟合的结果。签出https://plot.ly/python/linear-fits/#fitting-multiple-lines-and-retrieving-the-model-parameters

对于只有一个方面的简单情况,这将打印两个参数:

import plotly.express as px

df = px.data.tips()
fig = px.scatter(df, x="total_bill", y="tip", trendline="ols")    
fit_results = px.get_trendline_results(fig).px_fit_results.iloc[0]
print(fit_results.params)

相关问题 更多 >

    热门问题