1

我目前正在學習如何python的機器學習。當我正在進步時,解釋器檢測到AttributeError,但我沒有看到任何問題。有人可以幫助解決這個錯誤?AttributeError - 即使似乎沒有屬性錯誤

我的代碼:

import pandas as pd 
import quandl, math 
import numpy as np 
import datetime 
import matplotlib.pyplot as plt 
from matplotlib import style 
from sklearn import preprocessing, cross_validation, svm 
from sklearn.linear_model import LinearRegression 

style.use('ggplot') 

quandl.ApiConfig.api_key = '' 

df = quandl.get('EOD/V', api_key = '') 
df = df[['Adj_Open','Adj_High','Adj_Low','Adj_Close','Adj_Volume',]] 
df['ML_PCT'] = (df['Adj_High'] - df['Adj_Close'])/df['Adj_Close'] * 100.0 
df['PCT_change'] = (df['Adj_Close'] - df['Adj_Open'])/df['Adj_Open'] * 100.0 

df = df[['Adj_Close', 'ML_PCT', 'PCT_change', 'Adj_Volume']] 

forecast_col = 'Adj_Close' 

df.fillna(value=-99999, inplace=True) 
forecast_out = int(math.ceil(0.01 * len(df))) 
df['label'] = df[forecast_col].shift(-forecast_out) 

X = np.array(df.drop(['label'], 1)) 
X = preprocessing.scale(X) 
X = X[:-forecast_out] 

df.dropna(inplace=True) 
y = np.array(df['label']) 
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=0.2) 

clf = LinearRegression(n_jobs=-1) 
clf.fit(X_train, y_train) 
confidence = clf.score(X_test, y_test) 
print(confidence) 

X_lately = X[-forecast_out:] 
forecast_set = clf.predict(X_lately) 
print(forecast_set, confidence, forecast_out) 

df['Forecast'] = np.nan 

last_date = df.iloc[-1].name 
last_unix = last_date.timestamp() 
one_day = 86400 
next_unix = last_unix + one_day 

for i in forecast_set: 
    next_date = datetime.datetime.fromtimestamp(next_unix) 
    next_unix += 86400 
    df.loc[next_date] = [np.nan for _ in range(len(df.columns)-1)]+[i] 

df['Adj_Close'].plot() 
df['Forecast'].plot() 
plt.legend(loc = 4) 
plt.xlabel('Date') 
plt.ylabel('Price') 
plt.show() 

錯誤:

C:\Python27\lib\site-packages\sklearn\cross_validation.py:44: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20. 
    "This module will be removed in 0.20.", DeprecationWarning) 
0.989124557421 
(array([ 94.46383723, 93.27713267, 93.15533011, 93.89038799, 
     94.71390166, 95.29332756, 96.23047821, 96.51527839, 
     96.17180986, 96.17575181, 96.68721678, 96.85114045, 
     97.57455941, 97.98680762, 97.32961443, 97.55881174, 
     97.54090546, 96.17175855, 94.95430597, 96.49002102, 
     96.82364097, 95.63098589, 95.61236103, 96.24114818])Traceback (most recent call last):, 0.98912455742140903, 24) 

    File "C:\Users\qasim\Documents\python_machine_learning\regression.py", line 47, in <module> 
    last_unix = last_date.timestamp() 
AttributeError: 'Timestamp' object has no attribute 'timestamp' 
[Finished in 36.6s] 
+3

看來的'數據類型last_date'是已經在'timestamp'中 – ksai

+0

如果你打算把它轉換成UNIX的時候,你可以使用這個https://stackoverflow.com/a/19801863/16959 –

+0

這非常類似於https://stackoverflow.com/questions/43996754/AttributeError的-numpy的-的int64-對象具有-NO-ATT ribute-timestamp-in-python-3-5 – frozen

回答

0

問題是LAST_DATE是大熊貓Timestamp對象,而不是蟒蛇datetime對象。不過,它確實有一個功能,如datetime.timetuple()。試試這個:

假設last_date是UTC,使用此:

import calendar 

... 
last_date = df.iloc[-1].name 
last_unix = calendar.timegm(last_date.timetuple()) 

如果last_date是在您的本地時區,使用此:

import time 

... 
last_date = df.iloc[-1].name 
last_unix = time.mktime(last_date.timetuple()) 
+0

感謝它現在的作品 –

+0

太好了。如果解決了你的問題,請接受答案? – nrlakin

相關問題