timeseries拟合了trend python中的值

timeseries拟合了trend python中的值,python,pandas,time-series,statsmodels,trend,Python,Pandas,Time Series,Statsmodels,Trend,我在一个名为price\u data的数据框中有来自雅虎财经的每日股价数据 我想在此添加一列,提供Adj Close列的时间序列趋势拟合值 以下是我使用的数据结构: In [41]: type(price_data) Out[41]: pandas.core.frame.DataFrame In [42]: list(price_data.columns.values) Out[42]: ['Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close

我在一个名为
price\u data
的数据框中有来自雅虎财经的每日股价数据

我想在此添加一列,提供
Adj Close
列的时间序列趋势拟合值

以下是我使用的数据结构:

In [41]: type(price_data)
Out[41]: pandas.core.frame.DataFrame

In [42]: list(price_data.columns.values)
Out[42]: ['Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']

In [45]: type(price_data.index)
Out[45]: pandas.tseries.index.DatetimeIndex
用Python语言实现这一点的最简洁的方法是什么


另一方面,以下是用R语言实现的

all_time_fitted <- function(data)
{
    all_time_model  <- lm(Adj.Close ~ Date, data=data)
    fitted_value    <- predict(all_time_model)

    return(fitted_value)
}
又快又脏

# get some data
import pandas.io.data as web
import datetime
start = datetime.datetime(2015, 1, 1)
end = datetime.datetime(2015, 4, 30)
df=web.DataReader("F", 'yahoo', start, end)

# a bit of munging - better column name - Day as integer 
df = df.rename(columns={'Adj Close':'AdjClose'})
dayZero = df.index[0]
df['Day'] = (df.index - dayZero).days

# fit a linear regression
import statsmodels.formula.api as sm
fit = sm.ols(formula="AdjClose ~ Day", data=df).fit()
print(fit.summary())
predict = fit.predict(df)
df['fitted'] = predict

# plot
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8,4))
ax.scatter(df.index, df.AdjClose)
ax.plot(df.index, df.fitted, 'r')
ax.set_ylabel('$')
fig.suptitle('Yahoo')

plt.show()

您能添加一些输入数据样本吗?在问题和中添加样本数据可能很愚蠢,但“拟合值”是什么意思?对于给定的x(日期)值,模型计算的y(调整闭合)的预期值。这是一个参考,谢谢马克,这已经完成了工作。我现在投票赞成,如果明天没有更整洁的解决方案,我会被认为是被接受的。所谓更整洁的解决方案,我指的是使用内置功能来处理时间序列趋势,而不是要求将一天作为一个整数
# get some data
import pandas.io.data as web
import datetime
start = datetime.datetime(2015, 1, 1)
end = datetime.datetime(2015, 4, 30)
df=web.DataReader("F", 'yahoo', start, end)

# a bit of munging - better column name - Day as integer 
df = df.rename(columns={'Adj Close':'AdjClose'})
dayZero = df.index[0]
df['Day'] = (df.index - dayZero).days

# fit a linear regression
import statsmodels.formula.api as sm
fit = sm.ols(formula="AdjClose ~ Day", data=df).fit()
print(fit.summary())
predict = fit.predict(df)
df['fitted'] = predict

# plot
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8,4))
ax.scatter(df.index, df.AdjClose)
ax.plot(df.index, df.fitted, 'r')
ax.set_ylabel('$')
fig.suptitle('Yahoo')

plt.show()