Mediano rotolante in Python
-
14-11-2019 - |
Domanda
Ho alcuni dati di borsa in base ai valori chiusi giornalieri.Devo essere in grado di inserire questi valori in una lista di Python e ottenere una mediana per le ultime 30 chiuse.C'è una biblioteca Python che fa questo?
Soluzione
Hai preso in considerazione pandas ?Si basa su numpy
e può associare automaticamente i timestamp con i tuoi dati e scarta le date sconosciute finché lo riempiono con numpy.nan
.Offre anche un grafico piuttosto potente tramite MATPLOTLIB.
Fondamentalmente è stato progettato per l'analisi finanziaria in Python.
Altri suggerimenti
In Pure Python, avendo i tuoi dati in un elenco di Python a
, potresti fare
median = sum(sorted(a[-30:])[14:16]) / 2.0
.
(questo presuppone che a
abbia almeno 30 articoli.)
Usando il pacchetto Numpy, è possibile utilizzare
median = numpy.median(a[-30:])
. non è il mediano solo il valore medio in un intervallo ordinato?
Quindi, supponendo che la tua lista sia stock_data
:
last_thirty = stock_data[-30:]
median = sorted(last_thirty)[15]
.
Ora hai solo bisogno di ottenere errori off-by-one trovati e fissi e gestire anche il caso di stock_data
che è inferiore a 30 elementi ...
Proviamo qui un po ':
def rolling_median(data, window):
if len(data) < window:
subject = data[:]
else:
subject = data[-30:]
return sorted(subject)[len(subject)/2]
.