2009-09-04 16 views
11

Una delle cose che mi occupo di più nella pulizia dei dati sono i valori mancanti. R si occupa di questo bene usando la sua etichetta di dati mancanti "NA". In Python, sembra che dovrò occuparmi di array mascherati che sembrano essere un grave problema da impostare e non sembrano essere ben documentati. Qualche suggerimento su come semplificare questo processo in Python? Questo sta diventando un affare per entrare in Python per l'analisi dei dati. GrazieCome gestisci i dati mancanti usando numpy/scipy?

Aggiornamento È ovviamente passato un po 'di tempo da quando ho esaminato i metodi nel modulo numpy.ma. Sembra che almeno le funzioni di analisi di base siano disponibili per gli array mascherati, e gli esempi forniti mi hanno aiutato a capire come creare array mascherati (grazie agli autori). Mi piacerebbe vedere se alcuni dei più recenti metodi statistici in Python (in fase di sviluppo in GSoC di quest'anno) incorporano questo aspetto, e almeno fa l'analisi del caso completo.

+0

Perché non utilizzare numpy.NaN per identificare i dati mancanti? – Paul

risposta

1

Ho anche messo in discussione il problema con gli array mascherati. Qui ci sono un paio di esempi:

import numpy as np 
data = np.ma.masked_array(np.arange(10)) 
data[5] = np.ma.masked # Mask a specific value 

data[data>6] = np.ma.masked # Mask any value greater than 6 

# Same thing done at initialization time 
init_data = np.arange(10) 
data = np.ma.masked_array(init_data, mask=(init_data > 6)) 
1

array mascherati sono i anwswer, come descrive DpplerShift. Per l'uso rapido e sporco, è possibile utilizzare l'indicizzazione di fantasia con gli array booleani:

>>> import numpy as np 
>>> data = np.arange(10) 
>>> valid_idx = data % 2 == 0 #pretend that even elements are missing 

>>> # Get non-missing data 
>>> data[valid_idx] 
array([0, 2, 4, 6, 8]) 

è ora possibile utilizzare valid_idx come una maschera veloce su altri dati, nonché

>>> comparison = np.arange(10) + 10 
>>> comparison[valid_idx] 
array([10, 12, 14, 16, 18]) 
4

Se si è disposti a prendere in considerazione una biblioteca, panda (http://pandas.pydata.org/) è una libreria costruito sopra NumPy che tra molte altre cose prevede:

allineamento intelligente dei dati e la gestione integrata dei dati mancanti: guadagno etichetta-automatico allineamento basato nt nei calcoli e facilmente manipolare i dati disordinati in una forma ordinata

Sto usando per quasi un anno nel settore finanziario dove manca e dati di male allineata è la norma e che ha reso la mia vita più facile.

0

Vedi sklearn.preprocessing.Imputer

import numpy as np 
from sklearn.preprocessing import Imputer 
imp = Imputer(missing_values='NaN', strategy='mean', axis=0) 
imp.fit([[1, 2], [np.nan, 3], [7, 6]]) 
X = [[np.nan, 2], [6, np.nan], [7, 6]] 
print(imp.transform(X)) 

Esempio da http://scikit-learn.org/

Problemi correlati