J'ai un tableau de base numpy de base (appelé timeseries, et donné ci-dessous). Les valeurs juste au-dessus de 0 représentent généralement de mauvaises valeurs (idéalement, elles auraient été Nan'd mais hélas ...), et donc je veux les retirer du tableau. Mon problème est que pour d'autres instances de timeseries, ces valeurs autour de 0 pourraient être plausibles. Pour info, les valeurs sont des mesures de température de surface de la mer et si les mesures ont été prises à proximité ou dans des régions polaires, une valeur proche de 0 est plausible.Supprime les valeurs incorrectes mais plausibles du tableau numpy
Ma question est la suivante: y a-t-il une façon intelligente de supprimer ces points de données? J'ai pensé à utiliser np.diff pour essayer de localiser les «changements d'étapes» dans les données, mais je ne semble pas aller nulle part. J'ai aussi pensé à utiliser des statistiques, comme une fenêtre sur la valeur moyenne des timeseries, mais comme les valeurs sont bimodales, cela ne fonctionnera pas; par exemple, dans le cas ci-dessous, la valeur moyenne serait d'environ 9 - ce qui n'est pas représentatif de la vraie moyenne (c'est-à-dire avec les mauvaises données supprimées)) - une fenêtre autour de cette valeur supprimerait toutes les bonnes valeurs.
array([[ 17.7804203 ],
[ 0.08901367],
[ 0.08901367],
[ 0.08901367],
[ 0.08901367],
[ 17.7335453 ],
[ 17.72670937],
[ 17.72670937],
[ 17.75502968],
[ 17.81459999],
[ 17.89565468],
[ 17.98159218],
[ 0.08901367],
[ 0.08901367],
[ 0.08901367],
[ 0.08901367],
[ 0.08901367],
[ 0.08901367],
[ 0.08901367],
[ 0.08901367],
[ 0.08901367],
[ 0.08901367],
[ 0.08901367],
[ 17.9210453 ]], dtype=float32)
Sans informations de modèle a priori, il n'y a pas grand chose à faire. Et ce modèle-info n'est pas déclaré formellement. Donc cet exemple a plus ou moins 2 pics (ma formulation est mauvaise/informelle, imaginez une ligne numérique et il y a beaucoup de points à une valeur d'axe x, et d'autres à une autre valeur d'axe x). Est-ce toujours le cas? Celui autour de zéro est constant. Est-ce toujours le cas? Si oui; peut-être utiliser un cluster 1d pour obtenir ces 2 valeurs (moyennes); Vérifiez ensuite la variance des deux (en utilisant les informations de classe issues de la classification) et jetez toutes les valeurs de la classe avec la variance inférieure. – sascha
vous avez essentiellement besoin d'un algorithme 1D [clustering] (http://scikit-learn.org/stable/modules/clustering.html) pour classer vos données bimodales (multimodales). Je suis un fan particulier de [DBSCAN] (http://scikit-learn.org/stable/modules/clustering.html#dbscan) pour ne pas avoir besoin de savoir combien de groupes existent à l'avance, et être capable de s'identifier dans un cluster les membres primaires et les valeurs aberrantes. – Aaron
Merci pour les suggestions. Une idée que j'ai eu est de trouver des valeurs de répétition inférieures à 0,1 (car la mauvaise valeur semble être la même dans un tableau donné). Il suffit ensuite de supprimer ces valeurs au cas par cas. Mais ce n'est toujours pas une solution parfaite – InitialConditions