2009-09-04 5 views
11

Une des choses que je traite le plus dans le nettoyage des données est les valeurs manquantes. R traite ce bien en utilisant son étiquette de données manquantes "NA". En python, il semblerait que je devrais faire face à des tableaux masqués qui semblent être une douleur majeure à mettre en place et qui ne semblent pas être bien documentés. Des suggestions pour faciliter ce processus en Python? Cela devient un bris d'affaire en passant en Python pour l'analyse de données. MerciComment gérez-vous les données manquantes en utilisant numpy/scipy?

Mise à jour Cela fait évidemment un bout de temps que j'ai regardé les méthodes dans le module numpy.ma. Il semble qu'au moins les fonctions d'analyse de base sont disponibles pour les tableaux masqués, et les exemples fournis m'ont aidé à comprendre comment créer des tableaux masqués (merci aux auteurs). Je voudrais voir si certaines des méthodes statistiques les plus récentes en Python (en cours de développement dans le GSoC de cette année) incorporent cet aspect, et au moins fait l'analyse de cas complète.

+0

Pourquoi ne pas utiliser numpy.NaN pour identifier les données manquantes? – Paul

Répondre

1

Je remets également en question le problème avec les tableaux masqués. Voici quelques exemples:

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

tableaux masqués sont les anwswer, comme décrit DpplerShift. Pour une utilisation rapide et sale, vous pouvez utiliser FancyIndexing avec des tableaux booléens:

>>> 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]) 

Vous pouvez maintenant utiliser valid_idx comme masque rapide sur d'autres données, ainsi

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

Si vous êtes prêt à envisager une bibliothèque, pandas géants (http://pandas.pydata.org/) est une bibliothèque construite au-dessus de numpy qui, entre bien d'autres choses fournit:

alignement de données intelligent et traitement intégré des données manquantes: le gain automatique label- alignement basé nt dans les calculs et facilement manipuler les données en désordre sous une forme ordonnée

Je l'ai utilisé pendant près d'un an dans le secteur financier où les données manquantes et mal alignées est la norme et il a vraiment rendu ma vie plus facile.

0

Voir 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)) 

Exemple de http://scikit-learn.org/

Questions connexes