Manejo de datos faltantes
Clase 15 de 32 • Curso de Machine Learning Aplicado con Python
Contenido del curso
Clase 15 de 32 • Curso de Machine Learning Aplicado con Python
Contenido del curso
Andrés Felipe Torres Cano
Jeinner Daniel Báez Mantilla
Edgar Alejandro España Amaya
Loren Johanna Vásquez Rivera
David Leonardo Cañón Clavijo
Loren Johanna Vásquez Rivera
Wilinton Aguirre Ortiz
Usuario anónimo
Isaac Nahaniel Silva Urbina
Damian Arturo Garces Paez
Alberto Gobbi
Diego Martinez
Richard Camilo Saavedra Coneo
Usuario anónimo
Ana Isabel Tamayo López
Ever Andrés Giraldo Ramírez
Johan Smith Valderama Sanchez
Ian Mateo Rodriguez Lopez
Usuario anónimo
Lucas Araujo
Lucas Araujo
Angel Yani Marini
Angel Yani Marini
Jean Paul
Ruben Vazquez Almanza
Darvin Orozco
Usuario anónimo
Jorge Eduardo Romero Amaya
Hans Albeiro Torres Rojas
Arles De Jesus Muñoz Ortiz
Andres Felipe Agudelo Palacios
Usuario anónimo
Usuario anónimo
Daniel Felipe Naranjo Cruz
Juan Diego Garzón Ovalle
Andrea Otero Cano
Jafet López Chaves
Franco Colmenarez
María Alejandra Cañón Mulett
Jafet López Chaves
Erika Julieth Corzo Quintero
Usuario anónimo
Rafael Arango Uribe
Rafael Arango Uribe
William Schnaider Torres Bermon
Usuario anónimo
Usuario anónimo
Alexandra Esteban
Hugo Alexander Gonzalez Bocanegra
Si utilizan Scikit Learn (sklearn) mayor a la versión 0.20, el Imputer cambió de nombre y lo deben importar así:
from sklearn.impute import SimpleImputer imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
Muy buen apunte.
Excelente aporte compañero muchas gracias.
Para los que usan colab y quieren guardar el archivo:
from google.colab import files X.to_csv('x.csv',index=False) files.download('x.csv')
muchas gracias me sirvió bastante, porque con el código suministrado por el profesor no me arrojaba error, pero al ir a la ruta del archivo no aparecía, si sabes porque pasa esto te agradezco.
Hola David, creo que si trabajas desde colab es mejor hacerlo de la forma que indiqué para que el archivo bajara efectivamente al computador.
Para python 3.8
from sklearn.impute import SimpleImputer imputer = SimpleImputer(missing_values= np.nan, strategy = 'mean')
muchas gracias por la ayuda.
Muchas gracias
Para los que les salga el siguiente error:
Cambien el import de la libreria por
from sklearn.impute import SimpleImputer imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
Es un warning, pero muy bueno el aporte.
Con el alerta se puede continuar trabajando, pero por modestia visual si hace falta, gracias Damian por el aporte.
Usando google colab Min: 9 Sec: 30 La función esta depracated -> se soluciona con
from sklearn.impute import SimpleImputer imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
Muchas gracias, funcionó a qué se debe el error? actualización en la libreria?
Excelente! Gracias por el dato!!!!!
Para quienes trabajen en google colab y tengan el siguiente error:
ImportError: cannot import name 'Imputer' from 'sklearn.preprocessing'
Reemplazar
from sklearn.preprocessing import Imputer
Por
from sklearn.impute import SimpleImputer as Imputer
Muchas gracias
Para los que no les funcione el las lineas [88]
Puede que la librería se haya actualizado desde el momento que se grabo la clase
from sklearn.preprocessing import Imputer imputer = Imputer(missing_values=np.nan, strategy = 'mean', axis=1)
Remplazar por lo siguiente
from sklearn.impute import SimpleImputer imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
Para quienes les aparece el warning, al momento de importar la biblioteca de sklearn:
from sklearn.impute import SimpleImputer imputer = SimpleImputer(missing_values= np.nan, strategy = 'mean')
crack
idolo
Una consulta ... ¿alguien notó que al aplicar inputer.fit_transformation aparecen datos que no corresponden con la escala de algunas columnas?
Por ejemplo si se fijan en la row 2, columna title_year del dataframe X aparece el año de la pelicula con un valor exponente +8. Es correcto esto?
https://platzi.com/clases/1178-scikit/8839-manejo-de-datos-faltant-0/?time=968
Saludos Angel
Ya detecte el problema: Al Imputer no se le debe idicar axis=1 como se ve en el vídeo, ya que al hacer esto se esta completando horizontalmente los datos faltantes, en lugar de hacerlo verticalmente.
En el archivo del jupyter esta corregido el error
from sklearn.preprocessing import Imputer imputer = Imputer(missing_values=np.nan, strategy='mean')
En lugar de
from sklearn.preprocessing import Imputer imputer = Imputer(missing_values=np.nan, strategy='mean', axis=1)
Buenisimo muchas gracias!
Tantos años iterando como el diablo, y python me lo resuelve con un “to_Csv” xD
Jajaja! Es cierto... con Python, pero en especial con Pandas, nos olvidamos de BufferReader, etc........
Para los que usamos Google colab sse puede agregar los archivos :
from google.colab import files files.upload() movies = pd.read_csv('peliculas.csv',encoding='utf-8')
Muchas gracias, excelente dato
Para las personas que están utilizando la ultima versión de Anaconda, y que les genere error en el import de Imputer, utilicen este codigo:
from sklearn.impute import SimpleImputer imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
Ok.. funciono bien
Gracias por el aporte
Para lo que tiene una versión más reciente de sklearn el Imputer se hace de la siguiente manera
from sklearn.impute import SimpleImputer imputer = SimpleImputer(missing_values=np.nan, strategy='mean') values = imputer.fit_transform(movies_v2)
para los que usan colab y quieren descargar el archvo x.csv a su maquina local usen este codigo
x.to_csv('x.csv', index=False) files.download('x.csv')```
James, gracias. Ejecutando la primera línea que sugiere, he logrado correr la sentencia, sin embargo, el archivo no ha descargado y cuando ejecuto la 2da línea me dice lo siguiente:
--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-183-ab109fbdc0a7> in <module>() 1 x.to_csv(r'C:\Users\Viviana Ruiz\Drive danfel00@gmail\x.csv',index=False) ----> 2 files.download('x.csv') NameError: name 'files' is not defined
Mi duda radica en que a pesar de haber ejecutado la primera linea que sugiere, no logro ver el archivo descargado en la ruta que indiqué. Para ver ese archivo descargado, es necesario ejecutar la 2da línea que sugiere? Digo porque en la clase el profesor solo llegó hasta la primer línea, por lo que entendería debería ser suficiente.
Gracias.
Para las personas que tengan duda, que en donde aparece el archivo, éste simplemente aparece en la carpeta de jupyter en el lado izquierdo, aparece listo para descargar :)
Con skelearn.preprocessing import Imputer me aparece como deprecated, lo que hice fue cambiarlo por from sklearn.impute import SimpleImputer, y funciona de la misma forma
from sklearn.impute import SimpleImputer imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
Gracias @F34th3R me sirvió
En las features del video no coinciden con el material, en notebook eliminan la variable gross y en el video no lo hacen eso, afecta los resultados finales, no es solo eso hay varias cosas que no cuadran con el material, les sugiero tener cuidado, porque muchos estudiantes siguen paso a paso
opino lo mismo
Estoy de acuerdo, en el vídeo uno se pierde y no entiende por qué el resultado es distinto hasta que no va a mirar el notebook, pero igual se pierda la explicación de esos pasos adicionales.
Comparto el código completo y final del proceso de manejo de datos faltantes en esta sesión de clase.
# Los datos faltantes generan problemas con muchos algoritmos de ML. Es por esto que existen distintas estrategias para lidiar con ellos. help(pd.Series.value_counts) movies_v2.notnull() movies_v2.notnull().apply(pd.Series.value_counts) (movies_v2 != 0).apply(pd.Series.value_counts) available = ((movies_v2 != 0) & (movies_v2.notnull())) available available.all(axis=1).value_counts() mask = available['worldwide_gross'] mask movies_v2 = movies_v2[mask] movies_v2 ((movies_v2 != 0) & (movies_v2.notnull())).worldwide_gross.value_counts() movies_v2 = movies_v2.drop('movie_title',axis=1) movies_v2 = movies_v2.drop('duration',axis=1) movies_v2 = movies_v2.drop('gross',axis=1) movies_v2.head() len(movies_v2) from sklearn.impute import SimpleImputer imputer = SimpleImputer(missing_values=np.nan, strategy='mean') values = imputer.fit_transform(movies_v2) movies_v2.values values values = imputer.fit_transform(movies_v2) X = pd.DataFrame(values) X.columns = movies_v2.columns X.index = movies_v2.index X.head() len(X) X.to_csv('K:\Cursos MINTIC_Platzi\Curso_de_Machine_Learning_Aplicado_con_Python\Archivos de actividades/intermediate_results/X_opening.csv',index=False)
Muchas gracias
en
<movies_v2 = movies_v2.drop('movie_title',axis=1) movies_v2 = movies_v2.drop('duration',axis=1) movies_v2 = movies_v2.drop('gross',axis=1)> ``` no me los identifica me aparece error KeyError Traceback (most recent call last) <ipython-input-164-9cabae975124> in <module>() ----> 1 movies_v2 = movies_v2.drop('movie_title',axis=1) 2 movies_v2 = movies_v2.drop('duration',axis=1) 3 movies_v2 = movies_v2.drop('gross',axis=1) 4 3 frames /usr/local/lib/python3.6/dist-packages/pandas/core/indexes/base.py in drop(self, labels, errors) 5016 if mask.any(): 5017 if errors != "ignore": -> 5018 raise KeyError(f"{labels[mask]} not found in axis") 5019 indexer = indexer[~mask] 5020 return self.delete(indexer) KeyError: "['movie_title'] not found in axis" que puede ser
The imputation strategy:
If “mean”, then replace missing values using the mean along each column. Can only be used with numeric data.
If “median”, then replace missing values using the median along each column. Can only be used with numeric data.
If “most_frequent”, then replace missing using the most frequent value along each column. Can be used with strings or numeric data.
If “constant”, then replace missing values with fill_value. Can be used with strings or numeric data.
You can find more information here: SimpleImputer.
Para los compañeros que le bote error en colab cuando importen el Impute haganlo d esta manera:
from sklearn.impute import SimpleImputer imputer = SimpleImputer(missing_values = np.nan, strategy = 'main')
gracias :)
No me queda claro cómo con el siguiente comando cuenta la cantidad de ceros por cada columna si se esta seleccionando los diferentes a cero
(movies2 !=0).apply(pd.Series.value_counts) #apply aplica la funcion en cada columna```
recuerda que pd.Series.value_counts, entrega una tabla en la cual aparece la cantidad de Falses y True de cada columna, por lo tanto si colocas:
(movies2 ==0).apply(pd.Series.value_counts)
te va aparecer la misma conclusion solo que cambian los True y los False