0
votes

Comment traiter différentes séries chronologiques de longueur variable avec des pandas?

J'ai une matrice de données dans laquelle chaque ligne considérée comme série temps mais de longueur différente. C'est comme ça que cela ressemble à:

Voici à quelle vitesse p>

in Texte: P>

0 1 2 3 4 5 6 7 8 9 P>

0 12 32 45 67 89 54 23.0 56.0 78.0 98.0 P>

1 34 76 34 89 34 3 Nan Nan Nan Nan P>

2 76 34 54 12 43 78 56.0 Nan Nan Nan P>

3 76 56 45 23 43 45 67.0 76.0 67.0 8.0 P>

4 87 9 9 0 89 90 6.0 89.0 Nan Nan P>

5 23 90 90 90 32 23 34 56.0 9.0 56.0 87.0 P>

6 23 56 34 3 5 8 7.0 6.0 98.0 NAN P>

7 32 23 34 6 65 78 67.0 87.0 89.0 87.0 P>

8 12 23 34 32 43 67 45.0 Nan Nan Nan P>

9 343 76 56 7 8 9 4.0 5.0 8.0 68.0 P> blockQuote>

J'avais essayé de lire des données à l'aide de Pandas avec code: p> xxx pré>

alors je veux passer chaque ligne de Datamatrix au modèle d'analyse de Datamatrix qui générera une seule valeur pour chaque fois à chaque foiseries et après avoir passé toutes les horaires, je vais obtenir un vecteur de fonctionnalité. P>

J'avais essayé d'implémenter à l'aide du code ci-dessous: P>

features=[]
for i,j in timeseries.iterrows():
    row=timeseries.iloc[i]
    model=AR(row.values)
    model_fit=model.fit()
    yhat=model_fit.predict(len(row),len(row))
    features.append(yhat)
fvector=pd.DataFrame(features)
print(fvector)


4 commentaires

S'il vous plaît ne postez pas d'images de vos données, partagez les données réelles pouvant être copiées.


Fait, merci pour la suggestion.


Remplissez les valeurs manquantes avant d'appliquer le modèle. Beaucoup de modèles de série de temps ne fonctionnent pas avec des valeurs manquantes comme NANS.


Non, je ne peux pas interpoler ou imputer les données de toute façon ... est-il possible d'analyser chaque rangée de manière autonome afin que NAN ne soit pas marqué par des pandas?


3 Réponses :


0
votes

Vous devez supprimer les nans et les remplacer avec 0 ou quelque chose d'autre:

timeseries.fillna(0, inplace=True)
print(timeseries)
features=[]
for i,j in timeseries.iterrows():
    row=timeseries.iloc[i]
    model=AR(row.values)
    model_fit=model.fit()
    yhat=model_fit.predict(len(row),len(row))
    features.append(yhat)
fvector=pd.DataFrame(features)
print(fvector)

            0
0  100.704274
1    0.000000
2    0.000000
3  -23.468840
4   19.943124
5   37.442981
6    5.771667
7  105.138431
8    0.000000
9  237.903666


1 commentaires

Impossible de remplacer NAN avec une valeur. Est-il possible que je lisais les valeurs de chaque rangée jusqu'à ce que NAN se produise?



0
votes

Votre exemple ne présente pas tous les détails nécessaires, par ex. tu as écrit rien sur ar .

Comme je l'ai compris, votre logiciel se plaint de Nan valeurs dans certaines lignes, Donc, vous devriez:

  • Éliminer Nan Valeurs de chaque ligne,
  • Seulement après ce processus.

    Un autre détail, cette fois-ci concernant la vitesse d'exécution, est que si vous ithétiez les lignes, alors:

    • La deuxième valeur de contrôle de la boucle contient déjà la ligne actuelle,
    • Ainsi, il n'ya pas de point de le lire à nouveau par index.

      Modifiez votre code faire quelque chose comme ci-dessous: xxx

      bien sûr, impression est uniquement à des fins de démonstration. Déposez-le dans la version cible de votre code.

      Je doute sur la question de la substitution NAN avec des zéros (comme proposé dans l'autre réponse) est la bonne approche, car il est susceptible de "gâter" quelque chose dans votre modèle.

      Edit

      Si vous souhaitez traiter uniquement la partie "initiale" de la ligne actuelle, c'est-à-dire jusqu'à la première nan (à l'exclusion), comme vous l'avez demandé dans votre commentaire, Remplacez l'appel à drowna () avec: xxx

      pour vérifier comment cela fonctionne, remplacez par E.G. le dernier nan dans la ligne avec index 1 avec une valeur finie et observe le résultat de cette ligne.


1 commentaires

Est-il possible que je lisais les valeurs de chaque rangée jusqu'à ce que NAN se produise? Et si oui, quelle sera l'approche d'elle?



0
votes

Vous pouvez utiliser numpy et entrer les valeurs manquantes comme np.nan . Ensuite, vous pouvez lire les données sous forme de tableau numpy, transposez-la (car dans Pandas, une série chronologique est censée être une colonne plutôt qu'une rangée), jeté sur un fichier de données, définissez un DateTimeindex et le prenez à partir de là.

Par exemple: xxx xxx

pour plus de détails, voir "href =" https://pandas.pydata.org/pandas-docs/ stable / user_guide / tisseries.html "rel =" NOFOollow NOREFERRER "> Documentation de la série chronologique Pandas.

Si la fonction de modèle n'accepte vraiment aucune valeur manquante, vous devrez peut-être deviner quelque chose. Cela affectera bien sûr la fiabilité du modèle. Voir le Documentation Pandas , en particulier sur DF.FLAD () , et le Article Wikipedia sur l'imputation .

Vous pouvez également extraire une seule série chronologique sans les valeurs manquantes de la trame de données ci-dessus, au cas où cela convient à votre modèle. Par exemple. la deuxième colonne: xxx xxx


0 commentaires