我是一个新手,对Python和编程一般性知识都不熟悉,请原谅我可能会犯的简单错误或显而易见的错误。
我的目标很简单,就是想将线性趋势(1-d多项式)拟合到一堆时间序列上,以查看斜率是正还是负。目前,我只想让它在一个时间序列上工作。
问题在于:似乎pandas和numpy都无法进行日期回归分析。我的日期并不固定(通常每个月1天但不是同一天),因此不能使用Linear Regression from Time Series Pandas中提出的建议。
我的时间序列CSV文件看起来像:
我的目标很简单,就是想将线性趋势(1-d多项式)拟合到一堆时间序列上,以查看斜率是正还是负。目前,我只想让它在一个时间序列上工作。
问题在于:似乎pandas和numpy都无法进行日期回归分析。我的日期并不固定(通常每个月1天但不是同一天),因此不能使用Linear Regression from Time Series Pandas中提出的建议。
我的时间序列CSV文件看起来像:
StationName, year, month, day, depth, NO3-N, PO4-P, TotP, TotN,
Kvarnbacken (Savaran), 2003, 2, 25, 0.5, 46, 9, 14, 451
Kvarnbacken (Savaran), 2003, 3, 18, 0.5, 64, 15, 17, 310
Kvarnbacken (Savaran), 2003, 3, 31, 0.5, 76, 7, 19, 566
到目前为止,我所拥有的是:
import datetime as dt
from scipy import stats
import numpy as np
# read in station csv file
data = pd.read_csv('Kvarnbacken (Savaran)_2003.csv')
data.head()
# set up dates to something python can recognize
data['date'] = pd.to_datetime(data.year*10000+data.month *
100+data.day, format='%Y%m%d')
我尝试了
slope, intercept, r_value, p_value, std_err = stats.linregress(data.date,
data.TotP)
and got the error TypeError: ufunc add cannot use operands with types dtype('
I also tried
coefP = np.polyfit(data.date, data.TotP, 1)
polyP = np.poly1d(coefP)
ys = polyP(data.date)
print 'For P: coef, poly'
print coefP
print polyP
and got the same error.
I am guessing the easiest way around this is to do something where I just count the days since the first measurement I have and then just do a regression with days_since to the total phosphorous concentration (totP) but I am not sure of the easiest way to do that or if there was another trick.