Aprende a programar funciones de muestreo en Python usando Pandas y NumPy sobre una base de datos real de la Ciudad de México. Esta guía te muestra cómo aplicar muestreo aleatorio simple y muestreo sistemático paso a paso, ideal si trabajas con análisis de datos y necesitas extraer subconjuntos representativos de una población.
¿Qué necesitas para correr funciones de muestreo en Python?
La preparación del entorno define qué tan rápido puedes saltar al análisis. Te recomiendo usar Colab o DeepNote porque no requieren instalar librerías localmente, aunque también funcionan Jupyter Notebook u otras plataformas.
Las librerías que necesitas importar al inicio son:
- Pandas, para manipular la tabla de datos.
- NumPy, para generar arreglos numéricos.
- Random, para trabajar con series aleatorias.
- IO, para cargar bases de datos externas.
Para este ejercicio se usa una tabla pública de datos.cdmx.gob.mx del sector cultura, llamada Economía y turismo en el centro histórico [01:30]. Cada vez más gobiernos abren sus datos por institución y sector, lo que te permite analizarlos e incluso hacer propuestas con base en ellos.
¿Qué es una base de datos abiertos? Es información publicada por instituciones públicas o privadas, clasificada por sector, que cualquier persona puede descargar para analizar o construir propuestas.
¿Cómo cargar un CSV desde tu computadora a Colab?
La carga local en Colab se hace con un par de líneas que abren un explorador de archivos. Importas el módulo desde google.colab y asignas el resultado a una variable:
python
from google.colab import files
uploaded = files.upload()
Una vez subido el archivo, lo lees con Pandas usando BytesIO para convertir los bytes cargados en algo legible:
python
import pandas as pd
import io
icon_data = pd.read_csv(io.BytesIO(uploaded['icondata.csv']))
icon_data.head()
Con head() ves los primeros registros y haces una exploración descriptiva inicial. La tabla incluye columnas como ID, coordenadas en dos dimensiones, geo shape (definición del polígono), clave única del punto cultural, delegación, perímetro, tipo de ubicación (mercado, museo, hotel) y nombre [03:50].
¿Cómo se programa el muestreo aleatorio simple en Pandas?
El muestreo aleatorio simple selecciona registros sin ningún criterio adicional, dando a cada elemento la misma probabilidad. En Pandas, la función sample() lo resuelve en una sola línea.
Si quieres ocho registros aleatorios:
python
aleatorio_8 = icon_data.sample(n=8)
aleatorio_8
El resultado devuelve ocho filas elegidas al azar, por ejemplo los índices 161, 166 y 208. Si corres el mismo código en otra celda con un nombre distinto, obtendrás índices diferentes como 174, 220 y 108, lo que confirma que la selección es genuinamente aleatoria [06:40].
¿Cuándo conviene usar n y cuándo frac en sample()? Usa n cuando sabes el número exacto de registros que quieres. Usa frac cuando prefieres una proporción de la tabla, por ejemplo frac=0.25 para tomar el 25%.
El muestreo por proporción se ve así:
python
prop_25 = icon_data.sample(frac=0.25)
prop_25.head()
Esto te entrega el 25% de la población total elegido al azar.
¿Cómo funciona el muestreo sistemático en Python?
El muestreo sistemático extrae elementos siguiendo un intervalo regular: eliges uno, saltas un número fijo de posiciones, eliges el siguiente, y así sucesivamente. En código necesitas definir una función propia porque Pandas no la trae nativa.
¿Cómo defines la función de muestreo sistemático?
La función recibe el dataframe y el tamaño del paso, genera los índices con np.arange y filtra el dataframe con iloc:
python
import numpy as np
def systematic_sampling(df, step):
indexes = np.arange(0, len(df), step=step)
systematic_sample = df.iloc[indexes]
return systematic_sample
Luego la llamas indicándole el dataframe y el intervalo. Si quieres tomar un registro de cada tres:
python
systematic_sample = systematic_sampling(icon_data, 3)
systematic_sample
El resultado empieza en el índice 0, salta al 3, al 6, al 9, al 12 y así hasta el final de la tabla [10:20]. La selección sigue una regla matemática estricta, no es azarosa como en el muestreo simple.
¿Puedes cambiar el inicio o el final del muestreo sistemático?
Sí, y aquí viene lo interesante. Puedes modificar el primer parámetro de np.arange para iniciar en un valor distinto de cero, o cambiar el segundo argumento para cortar antes del final. Por ejemplo, si quieres que termine en el registro 100 en lugar de recorrer toda la tabla, sustituyes len(df) por 100. Practica cambiando estos valores para ver cómo se transforma la muestra.
Los dos métodos cubren escenarios distintos: el aleatorio simple sirve cuando quieres pura representatividad estadística, mientras que el sistemático te ayuda cuando necesitas controlar la dispersión de los registros a lo largo de la tabla.
¿Qué tabla de datos abiertos vas a usar para practicar estos muestreos? Comparte tu ejercicio en los comentarios.