web-dev-qa-db-fra.com

python régression linéaire prédire par date

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")
10
jeangelj

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)
17
Chandan

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.

3
Siraj S.

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).

1
qmaruf

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()))
0
Thomas Vetterli