Aprender a programar funciones de muestreo en Python te permite extraer subconjuntos representativos de una base de datos sin recorrerla entera. Aquí vas a ver cómo aplicar muestreo aleatorio simple y muestreo sistemático usando Pandas y NumPy sobre datos abiertos reales del gobierno de la Ciudad de México.
¿Qué necesitas para empezar a programar funciones de muestreo en Python?
Antes de escribir código, prepara tu entorno y los datos. La clase trabaja en Colab, pero también puedes usar Jupyter Notebook o Deep Note sin instalar librerías adicionales [00:14].
Las librerías que vas a importar son:
- Pandas, para manipular la tabla.
- NumPy, para operaciones numéricas y rangos.
- Random, porque vas a generar series aleatorias.
- IO, para leer una base de datos externa.
La tabla de trabajo se llama Economía y turismo en el centro histórico, descargada desde datos.cdmx.gob.mx [01:18]. Es un dataset abierto que puedes guardar en tu computadora y cargar al notebook.
¿Qué son los datos abiertos? Son tablas que los gobiernos publican clasificadas por institución o sector para que cualquier persona pueda analizarlas y hasta proponer mejoras de política pública.
¿Cómo cargar un archivo CSV externo en Google Colab?
Para subir el archivo desde tu computadora al notebook usas el módulo files de Colab [02:08]:
python
from google.colab import files
uploaded = files.upload()
Esto abre la ventana para examinar dónde guardaste el archivo. Una vez cargado, lo lees con Pandas usando BytesIO:
python
import pandas as pd
import io
icon_data = pd.read_csv(io.BytesIO(uploaded['icondata.csv']))
icon_data.head()
La función head te muestra los primeros registros. Verás que la indexación inicia en cero, porque Python está programado desde cero [03:30]. Las columnas incluyen el ID, el punto de referencia en dos dimensiones (coordenadas), el geo shape del polígono, la delegación, el perímetro, el tipo de ubicación (mercado, museo, hotel) y el nombre.
¿Cómo se programa un muestreo aleatorio simple en Python?
El muestreo aleatorio simple selecciona registros sin seguir ninguna regla previa. Cada elemento de la población tiene la misma probabilidad de quedar elegido.
Para extraer ocho registros aleatorios usas la función sample de Pandas [04:32]:
python
aleatorio_8 = icon_data.sample(n=8)
aleatorio_8
Si corres este mismo código una segunda vez bajo otro nombre, los ocho registros serán distintos. La primera ejecución devuelve, por ejemplo, los índices 161, 166, 208; la segunda devuelve 174, 220, 108. Esa diferencia confirma que la selección es genuinamente aleatoria [05:19].
¿Cómo extraer una proporción en lugar de un número fijo?
En vez de pedir N individuos, puedes pedir una fracción de la tabla completa con el parámetro frac [06:01]:
python
prop_25 = icon_data.sample(frac=0.25)
prop_25.head()
Esto te devuelve el 25% de la población general elegido al azar. Útil cuando trabajas con datasets grandes y quieres conservar una proporción estable de la muestra respecto al total.
¿Cuándo conviene usar frac en lugar de n en sample? Usa frac cuando te interesa un porcentaje de la población total y n cuando necesitas un número exacto de registros sin importar el tamaño de la base.
¿Cómo programar un muestreo sistemático con Pandas y NumPy?
El muestreo sistemático extrae registros siguiendo un intervalo regular: eliges uno, saltas un número fijo, eliges el siguiente. Para programarlo necesitas definir tu propia función [06:44]:
python
import numpy as np
def systematic_sampling(icon_data, step):
indexes = np.arange(0, len(icon_data), step=step)
systematic_sample = icon_data.iloc[indexes]
return systematic_sample
La función usa np.arange para crear un rango desde cero hasta la longitud total de la tabla, avanzando según el step que le indiques. Después, iloc localiza esas posiciones dentro del DataFrame.
Para llamarla con saltos de tres en tres [07:55]:
python
systematic_sample = systematic_sampling(icon_data, 3)
systematic_sample
El resultado va del índice 0 al 3, al 6, al 9, al 12, y así hasta el final de la tabla. Cumple la regla del intervalo y cubre toda la población de forma ordenada.
¿Puedes modificar el rango del muestreo sistemático?
Sí. El argumento inicial de np.arange no tiene que ser cero y el final no tiene que ser la longitud total. Puedes empezar en otro índice o cortar en el registro 100, por ejemplo [08:38]. Eso te permite enfocar la muestra en un tramo específico de la tabla cuando solo te interesa parte de la población.
Practica cambiando el step, el punto de inicio y el corte final. Cada combinación te da una muestra distinta y te ayuda a entender cómo el intervalo afecta la representatividad.
¿Qué dataset abierto te gustaría analizar con estas funciones? Cuéntame en los comentarios qué tabla vas a explorar y qué tipo de muestreo crees que encaja mejor con tu pregunta de investigación.