Extraer muestras representativas de una población es una habilidad fundamental en ciencia de datos, y Python ofrece herramientas prácticas para hacerlo con pocas líneas de código. Aquí se explica paso a paso cómo implementar el muestreo aleatorio simple y el muestreo sistemático usando Pandas, NumPy y datos abiertos reales de la Ciudad de México.
¿Cómo preparar el entorno y los datos para funciones de muestreo?
Antes de escribir cualquier función de muestreo, es necesario importar las librerías que se utilizarán durante todo el ejercicio [0:41]. Las cuatro librerías esenciales son:
- Pandas: manipulación y análisis de datos tabulares.
- NumPy: operaciones numéricas y generación de rangos.
- Random: generación de series aleatorias.
- IO: lectura de archivos externos como bases de datos en formato CSV.
Se recomienda trabajar en Google Colab o Deepnote porque ambas plataformas ya traen estas librerías preinstaladas, lo que evita configuraciones adicionales [0:22].
La base de datos utilizada proviene de datos abiertos de la Ciudad de México (datos.cdmx.gob.mx), específicamente la tabla de "Economía y Turismo en el Centro Histórico" [1:25]. Esta tabla contiene variables como el ID (identificador único), coordenadas geográficas, geoshape (definición del polígono), clave del punto cultural, delegación, tipo de ubicación (mercado, museo, hotel) y nombre del establecimiento [2:42].
Para importar el archivo CSV en Colab se usa from google.colab import files y luego uploaded = files.upload() [1:55]. La lectura se realiza con pd.read_csv(io.BytesIO(uploaded['nombre_archivo.csv'])). Con la función .head() se visualizan los primeros registros y se confirma que la importación fue correcta [2:28].
¿Cómo funciona el muestreo aleatorio simple con sample en Pandas?
El muestreo aleatorio simple consiste en seleccionar registros de forma completamente aleatoria, sin ninguna regla o patrón predefinido [3:22]. Pandas lo hace muy sencillo gracias al método .sample().
¿Cómo extraer un número fijo de registros aleatorios?
Para obtener exactamente ocho registros al azar se escribe [3:40]:
python
aleatorio_8 = econdata.sample(n=8)
aleatorio_8
El parámetro n indica la cantidad de individuos que se desean extraer. Al ejecutarlo, Python selecciona ocho filas al azar. Si se crea una segunda variable con el mismo código, los resultados serán diferentes, lo que confirma la naturaleza aleatoria del método [4:17].
¿Cómo seleccionar una proporción de la población total?
En lugar de definir un número exacto, se puede indicar una fracción de la población. Para extraer el 25% de la tabla [4:55]:
python
prop_25 = econdata.sample(frac=0.25)
prop_25.head()
El parámetro frac reemplaza a n y acepta un valor decimal que representa el porcentaje deseado. Esto resulta útil cuando el tamaño de la muestra debe ser proporcional al total de la población.
¿Cómo implementar el muestreo sistemático con una función personalizada?
El muestreo sistemático se diferencia del aleatorio simple porque utiliza un intervalo regular para seleccionar las observaciones [5:25]. En lugar de elegir al azar, se define una regla: por ejemplo, tomar cada tercer registro.
Como Pandas no tiene un método nativo para esto, se construye una función personalizada [5:45]:
python
def systematic_sampling(data, step):
index = np.arange(0, len(data), step=step)
systematic = data.iloc[index]
return systematic
np.arange(0, len(data), step=step) genera un rango desde cero hasta la longitud total de la tabla, avanzando según el step definido [6:00].
.iloc[index] selecciona las filas ubicadas en esas posiciones.
- La función retorna el subconjunto resultante.
Para ejecutarla con intervalos de tres en tres [6:38]:
python
sistematico = systematic_sampling(econdata, 3)
sistematico
El resultado muestra los registros 0, 3, 6, 9, 12 y así sucesivamente hasta completar la tabla. Se puede modificar el valor inicial cambiando el cero por otro número, o limitar el valor final para cortar en un registro específico, como el cien [7:15].
Una buena práctica al trabajar con notebooks es documentar cada sección con texto antes de escribir el código, para que cualquier persona que revise el archivo entienda qué hace cada bloque [3:10]. ¿Ya probaste cambiar los parámetros de estas funciones con tus propios datos? Comparte tu experiencia en los comentarios.