Médiane roulante en python
-
14-11-2019 - |
Question
J'ai des données boursières basées sur les valeurs de clôture quotidiennes.Je dois pouvoir insérer ces valeurs dans une liste Python et obtenir une médiane pour les 30 dernières clôtures.Existe-t-il une bibliothèque Python qui fait cela ?
La solution
Avez-vous envisagé pandas?C'est basé sur numpy
et peut automatiquement associer des horodatages à vos données et ignorer toutes les dates inconnues tant que vous les remplissez avec numpy.nan
.Il propose également des graphiques assez puissants via matplotlib.
Fondamentalement, il a été conçu pour l'analyse financière en python.
Autres conseils
En Python pur, avoir vos données dans une liste Python a
, vous pourriez faire
median = sum(sorted(a[-30:])[14:16]) / 2.0
(Cela suppose a
contient au moins 30 éléments.)
En utilisant le package NumPy, vous pouvez utiliser
median = numpy.median(a[-30:])
la médiane n'est-elle pas simplement la valeur moyenne dans une plage triée ?
donc, en supposant que votre liste soit stock_data
:
last_thirty = stock_data[-30:]
median = sorted(last_thirty)[15]
Il ne vous reste plus qu'à trouver et corriger les erreurs ponctuelles et également à gérer le cas de stock_data
étant inférieur à 30 éléments...
essayons ça un peu ici :
def rolling_median(data, window):
if len(data) < window:
subject = data[:]
else:
subject = data[-30:]
return sorted(subject)[len(subject)/2]