Para hacer el Systematic_sample no era necesaria la función extra, solo con la sintaxis de iloc era suficiente, por ejemplo
Systematic_sample = econdata.iloc[::3,:] De los indices desde el primero al ultimo en pasos de 3, y de las columnas todas
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:
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.
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.
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:
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.
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.
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].
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.
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.
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.
Para hacer el Systematic_sample no era necesaria la función extra, solo con la sintaxis de iloc era suficiente, por ejemplo
Systematic_sample = econdata.iloc[::3,:] De los indices desde el primero al ultimo en pasos de 3, y de las columnas todas
En Python, existen varias funciones y módulos que se utilizan para realizar muestreos de datos. Algunas de las funciones más comunes son:
random.sample(): Esta función se utiliza para seleccionar una muestra aleatoria de elementos de una lista o conjunto.
random.choices(): Esta función se utiliza para seleccionar elementos aleatorios de una lista o conjunto, con o sin reemplazo, y con o sin pesos.
pandas.DataFrame.sample(): Esta función se utiliza para seleccionar una muestra aleatoria de un DataFrame de pandas.
numpy.random.randint(): Esta función se utiliza para generar números enteros aleatorios dentro de un rango específico.
numpy.random.rand(): Esta función se utiliza para generar números aleatorios flotantes dentro de un rango específico.
numpy.random.permutation(): Esta función se utiliza para generar una permutación aleatoria de una lista o conjunto.
numpy.random.choice(): Esta función se utiliza para elegir elementos aleatorios de una lista o conjunto, con o sin reemplazo, y con o sin pesos.
Es importante mencionar que todas estas funciones son parte de la librería estandar de python o de paquetes como numpy o pandas, estas funciones son muy utilizadas en el ámbito de análisis de datos, para realizar pruebas estadísticas, evaluar modelos, entre otras.
mi aporte espero les sirva de mucho
columnas ( delgación, perimetro, tipo)
filas ( step:5)

Dejo mi aporte de la lectura del archivo, por si alguien usa deepnote
uploaded = io.open("/work/data/economia-y-turismo-en-el-centro-historico.csv", "rb", buffering=0)
econdata = pd.read_csv(uploaded)
Hola,
Si usan VsCode, teniendo el archivo en la raiz, sólo debes hacer:
econdata= pd.read_csv('economia-y-turismo-en-el-centro-historico.csv')
Me saqué las ganas de hacer hasta el 100 y que vaya de 5 en 5:
def systematic_sampling (econodata,step):
indexes = np.arange(0,101,step=step)
systematic_sample = econodata.iloc[indexes]
return systematic_sample
systematic_sample = systematic_sampling(econodata,5)
systematic_sample
¿Por qué coloca io.BytesIO antes de mencionar el CSV?
Puedes utilizar la libería wget
Primero instalamos la librería:
!pip install wget
Luego importamos y descargamos nuestro archivo y lo nombramos como "datos.csv"
import wget
!wget -O datos.csv https://datos.cdmx.gob.mx/dataset/d19d49ea-8a73-4bf5-910e-81060068bd3f/resource/db7830a7-ee22-408d-bdb3-8054292ed6f8/download/economia-y-turismo-en-el-centro-historico.csv
Y guardamos en una variable "data"
data = pd.read_csv("/content/datos.csv")
Comparto la función incluyendo los parámetros que permiten definir el inicio y el final del muestreo:
def systematic_sampling(econdata, step, start=0, final=len(econdata) ):
indexes = np.arange(start, final, step=step)
systematic_sample = econdata.iloc[indexes]
return systematic_sample
Si por alguna razón les aparece un error como este al tratar de importar el archivo, fijensé de ir a configuración del Chrome, a la parte de las cookies y permitir cookies de terceros en Google Colab.