No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

17 Días
9 Hrs
43 Min
53 Seg

Conociendo datasets para manejo de datos faltantes

3/21
Recursos
https://nrvis.com/data/mldata/pima-indians-diabetes.csv

names=[
        "pregnancies",
        "glucose",
        "blood_pressure",
        "skin_thickness",
        "insulin",
        "bmi",
        "diabetes_pedigree_function",
        "age",
        "outcome",
    ]

Aportes 31

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Si depronto alguien lo esta haciendo en jupyter notebook y le sale que no reconoce al comando wget, la libreria urllb puede hacer lo mismo que wget
Primer paso crea la carpeta data
2.

import urllib.request
url = pima_indians_diabetes_url
filename = "./data/pima-indians-diabetes.csv"
urllib.request.urlretrieve(url, filename)

No son buenos los cursos que utilizan deepnote, la herramienta no es tan escalable en un ambiene laboral y el manejo es complejo.

Conociendo nuestro datasets para manejo de datos faltantes

Descarga de archivos mediante una URL en el Notebooks

  • Guardar la url en una variable
nombre_variable = "URL"
  • Utiliza la linea de comandos desde el notebooks para descargar los datos
!wget -O ./data/pima-indians-diabetes.csv { nombre_variable } -q
#!linea de comandos
# wget-comando para descargar datos
# -O 
# ruta para almacenar los datos + nombre
# {URL} 
# -q para que no muestre la descarga

Descarga de varios archivos desde una URL

  • Crea unidades de informacion de los conjuntos de Datos
#Guarda la URL en una variable
base_url = "https://github.com/njtierney/naniar/raw/master/data/"
#Guarda los nombres de los archivos a descargar en una lista 
datasets_names = ("oceanbuoys", "pedestrian", "riskfactors")
#Guarda la extension de los archivos en una variable
extension = ".rda"
  • Descarga y carga los conjuntos de datos en un dataset
datasets_dfs = {} # diccionario para almacenar lor archivos

for dataset_name in datasets_names:

    dataset_file = f"{ dataset_name }{ extension }"
    dataset_output_file = f"./data/{ dataset_file }"
    dataset_url = f"{ base_url }{ dataset_file }"
    
    !wget -q -O { dataset_output_file } { dataset_url } #linea de comando para descargar

    datasets_dfs[f"{ dataset_name }_df"] = pyreadr.read_r(dataset_output_file).get(dataset_name)

datasets_dfs.keys()
  • Incluir el conjunto de datos en nuestro ambiente local
locals().update(**datasets_dfs)
del datasets_dfs
  • Verificar que hayan cargado
oceanbuoys_df.shape, pedestrian_df.shape, riskfactors_df.shape, diabetes_df.shape

Copien y peguen

base_url = "https://github.com/njtierney/naniar/raw/master/data/"
datasets_names = ("oceanbuoys", "pedestrian", "riskfactors")
extension = ".rda"
**12 de Marzo 2024 (Cargar datasets en Collab)** Despues de casi rendirme y cargar los archivos de una manera muy poco digna de este mundo del código, al final de leer los comentarios y probar varias cosas dí con la solución. Cabe resaltar que no soy un experto y utilizo Collab por lo practico que se me hace la herramienta a diferencia de DeepNote. ```python import urllib.request import requests base_url = "https://github.com/njtierney/naniar/blob/master/data/" datasets_names = ("oceanbuoys", "pedestrian", "riskfactors") extension = ".rda" ```Utilzando urllib.*request* ```python datasets_dfs = {} for data in datasets_names: url = f'{base_url}{data}{extension}?raw=true' filename = f'./{data}{extension}' urllib.request.urlretrieve(url, filename) datasets_dfs[f"{data}_df"] = pyreadr.read_r(f'/content/{filename}').get(data) ```Utilizando requests ```python def download_data(dataset_url, dataset_output_file ): response = requests.get(dataset_url) if response.status_code == 200: with open(f"{dataset_output_file}", "wb") as file: file.write(response.content) print(f"{dataset_url.split('/')[-1]} descargado en {dataset_output_file}") datasets_dfs = {} for dataset_name in datasets_names: dataset_file = f"{ dataset_name }{ extension }" dataset_output_file = f"{ dataset_file }" dataset_url = f"{ base_url }{ dataset_file }?raw=true" #!wget -q -O { dataset_output_file } { dataset_url } download_data(dataset_url, dataset_output_file ) datasets_dfs[f"{dataset_name}_df"] = pyreadr.read_r(f'/content/{dataset_output_file}').get(dataset_name) datasets_dfs.keys() ```Son dos soluciones, al final pueden consultar el diccionario de dataframes y veran que ya tienen los datasets, les adjunto las imagenes. ![](https://static.platzi.com/media/user_upload/image-32a4ad6b-5dde-4bbf-9cd4-d336d637ac3e.jpg) ![](https://static.platzi.com/media/user_upload/image-146751ea-accf-4281-b072-1b9e74b5e4c7.jpg) Saludos.

Comparto como hice para descargar los datasets tanto .csv y .rda desde la url usando el módulo requests:

  • Instalar el modulo requests:
pip install requests
  • Código:
import requests
pima_indians_diabetes_url = "https://nrvis.com/data/mldata/pima-indians-diabetes.csv"
response = requests.get(pima_indians_diabetes_url)
if response.status_code == 200:
    with open(f"./data/{pima_indians_diabetes_url.split('/')[-1]}", "wb") as file:
        file.write(response.content)

Para descargar los demás datasets:

  • Creando unidades de informacioón de los conjuntos de datos:
base_url = "https://github.com/njtierney/naniar/raw/master/data/"
datasets_names = ("oceanbuoys", "pedestrian", "riskfactors")
extension = ".rda"
  • Función para descargar los datasets .rda:

    • Funcion que descarga un dataset dado la url (dataset_url) y ruta relativa del archivo donde se va guardar
    def download_data(dataset_url, dataset_output_file ):
    response = requests.get(dataset_url)
    if response.status_code == 200:
        with open(f"{dataset_output_file}", "wb") as file:
            file.write(response.content)
    print(f"{dataset_url.split('/')[-1]} descargado en {dataset_output_file}")
    
    • Funcion que descarga todos los datasets
    datasets_dfs = {}
    for dataset_name in datasets_names:
     dataset_file = f"{ dataset_name }{ extension }"
    	dataset_output_file = f"./data/{ dataset_file }"
    	dataset_url = f"{ base_url }{ dataset_file }"
    	# !wget -q -O { dataset_output_file } { dataset_url }
    	download_data(dataset_url, dataset_output_file )
    	datasets_dfs[f"{ dataset_name }_df"] = pyreadr.read_r(dataset_output_file).get(dataset_name)
    datasets_dfs.keys()
    

Nota: Para descargar el archivo pima-indians-diabetes.csv con la funcion:

pima_indians_diabetes_url = "https://nrvis.com/data/mldata/pima-indians-diabetes.csv"
download_data(pima_indians_diabetes_url, f"./data/{pima_indians_diabetes_url.split('/')[-1]}")

Me encantan los cursos de Jesús, siempre nos enseña herramientas nuevas en sus cursos. Presenta el contenido del curso y siempre aporta un valor adicional.

Usar variables entre diferentes Notebooks

%store {variable}


Tengo diferentes Notebooks para mantener el orden. No sabia como importar los dataframes entre cada Notebook sin tener que llamarlos cada que empezaba un cuaderno nuevo. Esa fue la solucion que encontre.

Ejemplo:

%store diabetes_df

y ahora solo llamo a la variable en el otro notebook y listo.
Tambien ejecuto este comando a inicio de cada notebook para asegurarme de que las variables se carguen correctamente.

%store -r

Es para refrescar la lista de variables guardadas

Para descargar y cargar varios conjuntos de datos con wget en un bucle for:

datasets_dfs = {}

for dataset_name in datasets_names:

    dataset_file = f"{ dataset_name }{ extension }"
    dataset_output_file = f"./data/{ dataset_file }"
    dataset_url = f"{ base_url }{ dataset_file }"
    
    wget.download(dataset_url, dataset_output_file )
    ##!wget -q -O { dataset_output_file } { dataset_url }

    datasets_dfs[f"{ dataset_name }_df"] = pyreadr.read_r(dataset_output_file).get(dataset_name)

datasets_dfs.keys()

Tengo un error o al parecer la base de datos ya no existe:

hice el duplicate en deepnote pero ya todas las lineas de comando estaban hechas

**Septiembre de 2024:** Versión simplificada para descargar los archivos .rda: ```python datasets_df = {} for dataset_name in datasets_names: temp_rda_file = pyreadr.download_file( f"{base_url}{dataset_name}{extension}?raw=true", f"{dataset_name}{extension}" ) temp_df = pyreadr.read_r(f"./{temp_rda_file}")[dataset_name] datasets_df[f"{dataset_name}_df"] = temp_df datasets_df.keys() ```
Para practicar y aprender cómo manejar datos faltantes, puedes utilizar algunos conjuntos de datos (datasets) populares que tienen valores faltantes de manera intencional o realista. Estos datasets se utilizan frecuentemente para entrenar habilidades de preprocesamiento en ciencia de datos. \### 1. \*\*Titanic (Kaggle)\*\* El famoso conjunto de datos del Titanic incluye información sobre los pasajeros del barco, con características como el nombre, edad, sexo, clase, y si sobrevivieron o no. Algunos campos, como la edad y el puerto de embarque, tienen valores faltantes. \- \*\*Descarga\*\*: \[Titanic Dataset - Kaggle]\(https://www.kaggle.com/c/titanic) \- \*\*Valores faltantes\*\*: `Age`, `Cabin`, `Embarked`. ```python import pandas as pd titanic = pd.read\_csv('titanic.csv') print(titanic.isnull().sum()) ``` \### 2. \*\*Housing Prices (Kaggle)\*\* Este dataset proviene de una competencia de Kaggle sobre predicción de precios de viviendas. Contiene información sobre características de las casas, como el tamaño, el número de habitaciones, el año de construcción, entre otros, y tiene valores faltantes en varias columnas. \- \*\*Descarga\*\*: \[House Prices - Kaggle]\(https://www.kaggle.com/c/house-prices-advanced-regression-techniques) \- \*\*Valores faltantes\*\*: `LotFrontage`, `GarageType`, `GarageYrBlt`, etc. ```python housing = pd.read\_csv('house\_prices.csv') print(housing.isnull().sum()) ``` \### 3. \*\*Air Quality (UCI Machine Learning Repository)\*\* Este dataset contiene información sobre la calidad del aire en Milán, Italia, y tiene muchos valores faltantes debido a fallas en los dispositivos de monitoreo. Se utiliza comúnmente para trabajar con interpolación de datos faltantes y análisis de series temporales. \- \*\*Descarga\*\*: \[Air Quality Dataset - UCI]\(https://archive.ics.uci.edu/ml/datasets/Air+quality) \- \*\*Valores faltantes\*\*: Muchos valores faltantes debido a errores en la captura de datos. ```python air\_quality = pd.read\_csv('AirQualityUCI.csv', sep=';') print(air\_quality.isnull().sum()) ``` \### 4. \*\*Diabetes Dataset (Pima Indians)\*\* Este dataset contiene información sobre pacientes con antecedentes de diabetes y varias características médicas, como el nivel de glucosa en sangre y la presión arterial. Algunos valores son claramente incorrectos o están ausentes, por lo que se utiliza para preprocesar datos médicos. \- \*\*Descarga\*\*: \[Diabetes Dataset - Kaggle]\(https://www.kaggle.com/uciml/pima-indians-diabetes-database) \- \*\*Valores faltantes\*\*: Algunos valores de glucosa, presión arterial y otros son 0, lo cual es un valor incorrecto y representa valores faltantes. ```python diabetes = pd.read\_csv('diabetes.csv') diabetes.replace(0, np.nan, inplace=True) print(diabetes.isnull().sum()) ``` \### 5. \*\*World Happiness Report\*\* Este conjunto de datos contiene indicadores de felicidad mundial, medidos por varios factores como el PIB per cápita, la esperanza de vida, el apoyo social y la percepción de corrupción. Algunos de estos indicadores pueden estar faltantes en algunos países. \- \*\*Descarga\*\*: \[World Happiness Report - Kaggle]\(https://www.kaggle.com/unsdsn/world-happiness) \- \*\*Valores faltantes\*\*: Algunos datos para países están ausentes en columnas como `Social Support`, `Generosity`, etc. ```python happiness = pd.read\_csv('world\_happiness.csv') print(happiness.isnull().sum()) ``` \### 6. \*\*Medical Cost Personal Dataset\*\* Este conjunto de datos contiene información sobre los costos médicos personales según varios factores como la edad, el sexo, el IMC, el número de hijos, el hábito de fumar y la región. Algunos de estos campos pueden contener valores faltantes o no válidos. \- \*\*Descarga\*\*: \[Medical Cost Personal Dataset - Kaggle]\(https://www.kaggle.com/mirichoi0218/insurance) \- \*\*Valores faltantes\*\*: Aunque originalmente no tiene valores faltantes, se puede modificar para introducir valores `NaN` para prácticas de manejo de datos faltantes. ```python medical = pd.read\_csv('insurance.csv') medical\['bmi'] = medical\['bmi'].mask(medical\['bmi'] < 18) print(medical.isnull().sum()) ``` \### 7. \*\*Adult Dataset (Income Prediction)\*\* Este dataset contiene información sobre los ingresos de adultos, junto con detalles como edad, ocupación, estado civil, etc. Tiene varios valores faltantes en categorías como la ocupación y el área de trabajo. \- \*\*Descarga\*\*: \[Adult Dataset - UCI Machine Learning Repository]\(https://archive.ics.uci.edu/ml/datasets/adult) \- \*\*Valores faltantes\*\*: `Workclass`, `Occupation`, `Native-country`. ```python adult = pd.read\_csv('adult.data', header=None) print(adult.isnull().sum()) ``` \--- \### Técnicas para Manejar Datos Faltantes Con estos datasets, puedes aplicar técnicas de manejo de valores faltantes como: \- \*\*Eliminar filas o columnas con `dropna()`\*\*. \- \*\*Rellenar con un valor como `fillna()`\*\*. \- \*\*Interpolar valores faltantes usando `interpolate()`\*\*. \- \*\*Reemplazar valores faltantes con medidas estadísticas (media, mediana, moda)\*\*. Estas prácticas te ayudarán a gestionar correctamente los valores faltantes en tus proyectos de análisis de datos.
Mucho más facil para traer el dataset: recorten la url hasta data y luego usan el método read\_csv() de pandas. Así: ```js pima_indians_diabetes_url = "https://nrvis.com/data" df = pd.read_csv(pima_indians_diabetes_url) df.head(10) ```pima\_indians\_diabetes\_url = "https://nrvis.com/data"
```python datasets_dfs = {} for dataset_name in datasets_names: dataset_file = f"{ dataset_name }{ extension }" dataset_output_file = f"./data/{ dataset_file }" dataset_url = f"{ base_url }{ dataset_file }" #!wget -q -O { dataset_output_file } { dataset_url } dataset_output_file = wget.download(dataset_url,out=dataset_output_file) datasets_dfs[f"{ dataset_name }_df"] = pyreadr.read_r(dataset_output_file).get(dataset_name) datasets_dfs.keys() ````pip install wget==3.2`
```js pip install wget==3.2 ``````js import wget pima_indians_diabetes_url="https://raw.githubusercontent.com/npradaschnor/Pima-Indians-Diabetes-Dataset/master/diabetes.csv" filename = wget.download(pima_indians_diabetes_url,out='./data/pima-indians-diabetespepe.csv') ``````js diabetes_df = pd.read_csv( filepath_or_buffer=filename, # or pima_indians_diabetes_url # sep=",", # names=[ # "pregnancies", # "glucose", # "blood_pressure", # "skin_thickness", # "insulin", # "bmi", # "diabetes_pedigree_function", # "age", # "outcome", #] ) diabetes_df.head(2) ```
Tambien pueden abrir directamente la base de datos desde un URL con la misma funcion pd.read\_csv ```js pima_indians_diabetes_url="https://raw.githubusercontent.com/npradaschnor/Pima-Indians-Diabetes-Dataset/master/diabetes.csv" pd.read_csv(pima_indians_diabetes_url) ```
Actualmente la base de datos Pima Indias Diabetes no se encuentra en el URL mostrado en el video, pero se puede encontrar aquí: La base de datos ya no se encuentra en el URL mostrado en el video, pero la puedes encontrar aquí: ```python pima_imdians_diabetes_url = "https://raw.githubusercontent.com/npradaschnor/Pima-Indians-Diabetes-Dataset/master/diabetes.csv" ``` ```python pima_imdians_diabetes_url = "https://raw.githubusercontent.com/npradaschnor/Pima-Indians-Diabetes-Dataset/master/diabetes.csv" ```

como para ver que va sucediendo…

en mi caso:

import pandas as pd

# Carga el conjunto de datos
file_path = "pima-indians-diabetes.csv"
df = pd.read_csv(file_path)

# Identificación de valores faltantes
missing_values = df.isnull().sum()
print("Valores faltantes por columna:")
print(missing_values)

# Porcentaje de valores faltantes por columna
missing_percentage = (missing_values / len(df)) * 100
print("Porcentaje de valores faltantes por columna:")
print(missing_percentage)

# Tratamiento de valores faltantes (ejemplo: imputación por la media solo en columnas numéricas)
numeric_columns = df.select_dtypes(include='number')  # Filtra solo columnas numéricas
df[numeric_columns.columns] = df[numeric_columns.columns].fillna(df[numeric_columns.columns].mean())

# Muestra las primeras filas del DataFrame con valores faltantes imputados
print("Con valores faltantes imputados por la media:")
print(df.head())

Si alguien tiene problemas al descargar los archivos puede que tengan el mismo problema que tuve yo:

Tuve un problema respecto a la URL de los archivos .rda,
en el video muestra este link:

base_url = "https://github.com/njtierney/naniar/raw/master/data/"

pero a la fecha de hoy 09-06-2023, ahora es

base_url = "https://github.com/njtierney/naniar/blob/master/data/"

cambio el …/raw/… por …/blob/…

ademas tuve que agregar al final del URL ?raw=true
dentro del for que realiza la descarga de la siguiente manera:

dataset_url = f"{ base_url }{ datasets_file }?raw=true"

-q

significa “quiet mode”

Desmenuzando datasets_dfs[f'{dataset_name}_df'] = pyreadr.read_r(dataset_output_file).get(dataset_name):

The given code seems to be loading a dataset from an R data file using the pyreadr library and storing it in a pandas DataFrame.

Let’s break down the code:

  1. datasets_dfs[f'{dataset_name}_df']: This creates a new key-value pair in the datasets_dfs dictionary, where the key is constructed by appending _df to the dataset_name variable. This suggests that datasets_dfs is a dictionary that stores multiple DataFrames, each associated with a specific dataset.

  2. pyreadr.read_r(dataset_output_file): This reads the R data file specified by dataset_output_file using the read_r function from the pyreadr library. The function reads the data file and returns a dictionary-like object containing the data.

  3. .get(dataset_name): This retrieves the value associated with the dataset_name key from the dictionary-like object returned by pyreadr.read_r. It retrieves the specific dataset from the dictionary-like object.

  4. The resulting DataFrame is then assigned to the key in the datasets_dfs dictionary, creating an entry that associates the dataset name with the corresponding DataFrame.

Overall, this code reads an R data file using pyreadr, extracts a specific dataset from the file, and stores it as a pandas DataFrame in the datasets_dfs dictionary under a key named after the dataset.

Tuve problemas en descargar y cargar los datos,para ello use elsiguinete codigo: import wget
import pyreadr

Definir la URL base, los nombres de los datasets y la extensión de los archivos

base_url = "https://github.com/njtierney/naniar/raw/master/data/"
datasets_names = [“oceanbuoys”, “pedestrian”, “riskfactors”]
extension = “.rda”

Definir la carpeta de destino en tu computadora

folder_name = “my_data_folder”

Descargar los datasets y guardarlos en la carpeta de destino

for dataset in datasets_names:
url = base_url + dataset + extension
file_name = f’{dataset}{extension}‘
wget.download(url, f’./{folder_name}/{file_name}’)

Cargar los datasets en dataframes de pandas

datasets_dfs = {}
for dataset_name in datasets_names:
dataset_file = f"{dataset_name}{extension}“
dataset_output_file = f”./{folder_name}/“
datasets_dfs[f”{ dataset_name }_df"] = pyreadr.read_r(f"{dataset_output_file}/{dataset_file}").get(dataset_name)

Verificar que se hayan cargado los datasets correctamente

datasets_dfs.keys() ,cual fue mi error, que antes debía crear la arpeta my_folder en el terminal wsl d linux de la siguinete manera: mkdir -p /home/“tu_nombre”/my_data_folder

Si están trabajando en colab pueden instalar los paquetes usando !pip por ejemplo !pip install …

tuve que poner la clase en 0.5x va mas rapido que el mismo toreto en rapido y furioso 10

Otra alternativa para descargar el archivo de la web sería:

# !pip install wget

import wget 

pima_indians_diabetes_url = "https://nrvis.com/data/mldata/pima-indians-diabetes.csv"
destination = './data/pima-indians-diabetes.csv'

url = wget.download(pima_indians_diabetes_url, destination )

Me esta gustando mucho este curso, pocos de ellos hablan de datos faltantes, que bueno que hicieron uno especializado.

datasets_dfs = {}

for dataset_name in datasets_names:
    dataset_file = f"{ dataset_name }{ extension }"
    dataset_output_file = f"./data/{ dataset_file }"
    dataset_url = f"{ base_url }{ dataset_file }"
    
    !wget -q -O {dataset_output_file} {dataset_url}
    
    datasets_dfs[f"{dataset_name}_df"] = pyreadr.read_r(dataset_output_file).get(dataset_name)
datasets_dfs.keys()