Muestreo y datos aleatorios en Pandas

Pandas ofrece funciones de muestreo aleatorio enriquecidas, que permiten seleccionar muestras aleatorias del conjunto de datos según los requisitos, y también admite la generación de datos aleatorios.


Muestreo aleatorio

Método sample

Ejemplo

import pandas as pd
import numpy as np

# Crear un conjunto de datos grande
df = pd.DataFrame({
    "ID": range(1, 1001),
    "Valor": np.random.randn(1000)
})

# Seleccionar aleatoriamente 5 filas
print("Selección aleatoria de 5 filas:")
print(df.sample(5))
print()

# Extraer el 30% de los datos
print("Muestreo aleatorio del 30%:")
print(df.sample(frac=0.3))
print()

# Muestreo con reemplazo
print("Muestreo con reemplazo de 5 filas:")
print(df.sample(5, replace=True))

Establecer semilla aleatoria

Ejemplo

import pandas as pd
import numpy as np

# Configurar la semilla aleatoria para asegurar resultados reproducibles
np.random.seed(42)

df = pd.DataFrame({
    "ID": range(1, 11),
    "Valor": np.random.randn(10)
})

print("Usando la semilla aleatoria 42:")
print(df.sample(3))

# Ejecutar nuevamente la misma semilla para obtener los mismos resultados
print("\n"Ejecutando de nuevo la misma semilla:")
np.random.seed(42)
print(df.sample(3))

Generación de datos aleatorios

Ejemplo

import pandas as pd
import numpy as np

# Generar enteros aleatorios
print("Enteros aleatorios [0, 10):")
print(pd.Series(np.random.randint(0, 10, 5)))
print()

# Generar números de punto flotante aleatorios
print("Flotantes aleatorios [0, 1):")
print(pd.Series(np.random.random(5)))
print()

# Generar números aleatorios con distribución normal
print("Distribución normal N(0, 1):")
print(pd.Series(np.random.randn(5)))
print()

# Especificar media y desviación estándar
print("Distribución normal N(10, 2):")
print(pd.Series(np.random.normal(10, 2, 5)))
print()

# Selección aleatoria
choices = ["A", "B", "C", "D"]
print("Selección aleatoria:")
print(pd.Series(np.random.choice(choices, 10)))

División de conjuntos de entrenamiento y prueba

Ejemplo

import pandas as pd
import numpy as np

# Simular un conjunto de datos
df = pd.DataFrame({
    "Característica 1": np.random.randn(100),
    "Característica 2": np.random.randn(100),
    "Objetivo": np.random.choice([0, 1], 100)
})

# Dividir en conjunto de entrenamiento y prueba (80% / 20%)
train = df.sample(frac=0.8, random_state=42)
test = df.drop(train.index)

print(f"Conjunto de entrenamiento: {len(train)} filas")
print(f"Conjunto de prueba: {len(test)} filas")
print()

# Muestreo estratificado (mantener la proporción de la variable objetivo)
print("Muestreo estratificado:")
from sklearn.model_selection import train_test_split
# Se necesita instalar scikit-learn: pip install scikit-learn
# train, test = train_test_split(df, test_size=0.2, stratify=df["objetivo"])
Otras extensiones