【问题标题】:How to plot a linear regression to a segment of a line with matplotlib如何使用 matplotlib 将线性回归绘制到线段
【发布时间】:2019-07-18 01:11:09
【问题描述】:

我有一些数据用 matplotlib 绘制成 250 点长的线。我可以拟合整个数据集。但是,我希望使用最小二乘法将回归线拟合并绘制到最后 50 个数据点。最好的方法是什么? (下面是我的情节代码。)

j = 0
for line, rank in sortedSymbols:
    series = getattr(self, line)["CLOSE"]
    dates = pd.to_datetime(getattr(self, line)["DATE"]).dt.date
    ax.plot(dates.iloc[-250:], series.iloc[-250:]/series.iloc[-250] * (40+j), label = line)
    j += 10

【问题讨论】:

    标签: python matplotlib statistics


    【解决方案1】:

    有很多不同的方法可以做到这一点。但是,如果没有关于您的数据结构以及您正在寻找什么的更多信息,这是可以完成的一种方法。 np.polyfit()(文档 here)对列表或数组中的顺序数据使用 OLS 回归。

    import numpy as np
    
    j = 0
    for line, rank in sortedSymbols:
        series = getattr(self, line)["CLOSE"]
        dates = pd.to_datetime(getattr(self, line)["DATE"]).dt.date
    
        #Calculate the slope and intercept of fitted curve based on last 50 datapoint using the values 
        #you plotted before with 1 specified for a linear best fit line
        slope, intercept = np.polyfit(dates.iloc[-50:].index,series.iloc[-50:]/series.iloc[-250] * (40+j),1)
    
        #plot the trend line
        ax.plot(dates.iloc[-50:],slope*dates.iloc[-50:].index+intercept,label=line)
    
    
        j += 10
    

    【讨论】:

    • 谢谢,数据结构是通过导入包含股票数据(品种、日期、开盘价、最高价、最低价、收盘价、成交量)的 csv 文件创建的 pandas 数据框,如下所示:df = pd.read_csv (路径+名称)还有其他有用的信息吗?
    • 根据您的日期(如果它们是 datetime 对象),您可能需要转换为数字日期。否则,这应该适用于 pandas 数据框。您可能需要在末尾添加.valuesto_numpy,具体取决于您的版本。
    • .index 为我工作。编辑您的答案以包括在内。 ttfn
    猜你喜欢
    • 2019-02-23
    • 2019-03-08
    • 2021-03-18
    • 2021-10-12
    • 2014-02-20
    • 2022-01-15
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    相关资源
    最近更新 更多