且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何在python中将***拟合线应用于时间序列

更新时间:2023-11-25 18:36:40

当我将***拟合线应用于时间序列数据时,我会创建一条间隔均匀的线来表示日期以简化回归.所以我使用 np.linspace() 来创建一组等于日期数的间隔.

When I apply a best fit line to time series data, I create an evenly spaced line that represents the dates to simplify the regression. So I use np.linspace() to create a set of intervals equal to the number of dates.

from io import StringIO
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

data = StringIO("""

date   value
24-Jan-16   0.786
25-Feb-16   0.781
29-Apr-16   0.786
15-May-16   0.761
16-Jun-16   0.762
04-Sep-16   0.783
22-Oct-16   0.797

""")

df = pd.read_table(data, delim_whitespace=True)

# To read from csv use:
# df = pd.read_csv("/path/to/file.csv")

df.loc[:, "date"] = pd.to_datetime(df.loc[:, "date"], format="%d-%b-%y")

y_values = df.loc[:, "value"]
x_values = np.linspace(0,1,len(df.loc[:, "value"]))
poly_degree = 3

coeffs = np.polyfit(x_values, y_values, poly_degree)
poly_eqn = np.poly1d(coeffs)
y_hat = poly_eqn(x_values)

plt.figure(figsize=(12,8))
plt.plot(df.loc[:, "date"], df.loc[:,"value"], "ro")
plt.plot(df.loc[:, "date"],y_hat)
plt.title('WSC-10-50')
plt.ylabel('NDVI')
plt.xlabel('Date')
plt.savefig("NDVI_plot.png")

输出: