Je veux prédire une valeur à une date future avec une simple régression linéaire, mais je ne peux pas en raison du format de la date.
Voici la trame de données que j'ai:
data_df =
date value
2016-01-15 1555
2016-01-16 1678
2016-01-17 1789
...
y = np.asarray(data_df['value'])
X = data_df[['date']]
X_train, X_test, y_train, y_test = train_test_split
(X,y,train_size=.7,random_state=42)
model = LinearRegression() #create linear regression object
model.fit(X_train, y_train) #train model on train data
model.score(X_train, y_train) #check score
print (‘Coefficient: \n’, model.coef_)
print (‘Intercept: \n’, model.intercept_)
coefs = Zip(model.coef_, X.columns)
model.__dict__
print "sl = %.1f + " % model.intercept_ + \
" + ".join("%.1f %s" % coef for coef in coefs) #linear model
J'ai essayé de convertir la date sans succès
data_df['conv_date'] = data_df.date.apply(lambda x: x.toordinal())
data_df['conv_date'] = pd.to_datetime(data_df.date, format="%Y-%M-%D")
La régression linéaire ne fonctionne pas sur les données de date. Par conséquent, nous devons le convertir en valeur numérique.Le code suivant convertira la date en valeur numérique:
import datetime as dt
data_df['Date'] = pd.to_datetime(data_df['Date'])
data_df['Date']=data_df['Date'].map(dt.datetime.toordinal)
convertir:
1) date de l'index de la trame de données
df = df.set_index('date', append=False)
2) convertir un objet datetime en objet float64
df = df.index.to_julian_date()
exécutez la régression avec la date comme variable indépendante.
La régression de ligne fonctionne sur des données numériques. Le type Datetime n'est pas approprié dans ce cas. Vous devez supprimer cette colonne après l'avoir séparée en trois colonnes distinctes (année, mois et jour).
Lors de l'utilisation
dt.datetime.toordinal
veillez à ce qu'il ne convertisse que les valeurs des dates et ne prenne pas en compte les minutes, les secondes, etc. Pour une réponse complète sur la génération d'ordinaux à partir d'objets datetime complets, vous pouvez utiliser quelque chose comme:
df['Datetime column'],apply(lambda x: time.mktime(x.timetuple()))