2009-09-04 14 views
11

Una de las cosas que más trato en la limpieza de datos son los valores perdidos. R trata bien con su etiqueta de datos "NA" que falta. En Python, parece que tendré que lidiar con arreglos enmascarados que parecen ser un gran problema para configurar y no parecen estar bien documentados. ¿Alguna sugerencia para facilitar este proceso en Python? Esto se está convirtiendo en un factor decisivo para pasar a Python para el análisis de datos. Gracias¿Cómo manejas los datos faltantes usando numpy/scipy?

Actualización Obviamente ha pasado un tiempo desde que miré los métodos en el módulo numpy.ma. Parece que al menos las funciones de análisis básicas están disponibles para las matrices enmascaradas, y los ejemplos proporcionados me ayudaron a entender cómo crear matrices enmascaradas (gracias a los autores). Me gustaría ver si algunos de los métodos estadísticos más nuevos en Python (que se están desarrollando en el GSoC de este año) incorporan este aspecto, y al menos hacen el análisis completo del caso.

+0

Por qué no usar numpy.NaN para identificar los datos que faltan? – Paul

Respuesta

1

También me pregunto el problema con las matrices enmascaradas. Aquí hay un par de ejemplos:

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

matrices están enmascarados del anwswer, como se describe DpplerShift. Para el uso rápido y sucio, se puede utilizar la indexación de lujo con matrices booleanas:

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

ahora se puede utilizar valid_idx como una máscara rápida en otros datos, así

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

Si usted está dispuesto a considerar una library, pandas (http://pandas.pydata.org/) es una biblioteca construida sobre numpy que entre otras muchas cosas proporciona:

Alineación inteligente de datos y manejo integrado de datos faltantes: obtener etiqueta automática- Alignme basado nt en los cálculos y manipular fácilmente datos desordenados en una forma ordenada

He estado usando durante casi un año en la industria financiera, donde falta y datos mal alineados es la norma y lo que realmente hacen la vida más fácil.

0

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

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

Cuestiones relacionadas