Realizar Muestreo Estratificado en Pandas

Preet Sanghavi 21 junio 2023
  1. Muestreo estratificado en estadística
  2. Realizar Muestreo Estratificado en Pandas
Realizar Muestreo Estratificado en Pandas

El siguiente tutorial le enseñará cómo realizar un muestreo estratificado en pandas en un marco de datos.

Muestreo estratificado en estadística

El muestreo estratificado es una estrategia para obtener muestras representativas de la población. La separación de la población en grupos homogéneos llamados estratos y el muestreo aleatorio de datos de cada estrato disminuye el sesgo en la selección de la muestra.

Cuando los valores medios de cada estrato difieren, en Estadística se emplea un muestreo estratificado. El muestreo estratificado se usa con frecuencia en el aprendizaje automático para construir conjuntos de datos de prueba para evaluar modelos, principalmente cuando un conjunto de datos es extenso y desigual.

Realizar Muestreo Estratificado en Pandas

El primer paso para realizar el muestreo estratificado sería importar la biblioteca Pandas.

import pandas as pd

Aprendamos ahora los pasos involucrados en el muestreo estratificado.

  1. Separar la población en estratos. La población se clasifica en estratos según características comparables en esta etapa, y cada individuo debe pertenecer exactamente a un estrato.
  2. Determinar el tamaño de la muestra. Necesitamos decidir si nuestra muestra será grande o pequeña en esta etapa.
  3. Muestrear aleatoriamente cada estrato. El muestreo desproporcionado, en el que el tamaño de la muestra de cada estrato es igual independientemente del tamaño de su población, o el muestreo proporcional, en el que el tamaño de la muestra de cada estrato es proporcional al tamaño de su población, se utiliza para seleccionar muestras aleatorias de cada estrato.

Ahora consideraremos una muestra y realizaremos un muestreo estratificado desproporcionado y proporcionado. De 10 estudiantes, tomaremos una muestra de 6 estudiantes según sus calificaciones.

Primero creemos un marco de datos de muestra para trabajar. Aquí tomaremos 4 columnas, que incluyen nombre, identificación, grado y categoría.

Crearemos este marco de datos utilizando el siguiente código.

students = {
    "Name": [
        "sanay",
        "shivesh",
        "rutwik",
        "preet",
        "yash",
        "mann",
        "pritesh",
        "hritesh",
        "raj",
        "tarun",
    ],
    "ID": ["001", "002", "003", "004", "005", "006", "007", "008", "009", "010"],
    "Grade": ["A", "A", "C", "B", "B", "B", "C", "A", "A", "A"],
    "Category": [2, 3, 1, 3, 2, 3, 3, 1, 2, 1],
}
df = pd.DataFrame(students)
print(df)

Producción :

      Name   ID Grade  Category
0    sanay  001     A         2
1  shivesh  002     A         3
2   rutwik  003     C         1
3    preet  004     B         3
4     yash  005     B         2
5     mann  006     B         3
6  pritesh  007     C         3
7  hritesh  008     A         1
8      raj  009     A         2
9    tarun  010     A         1

Vale la pena señalar que el 50 por ciento de los niños están en el grado A, el 30 por ciento en el grado B y el 20 por ciento en el grado C. Ahora realizaremos un muestreo desproporcionado, creando una muestra de 6 estudiantes.

Para un muestreo desproporcionado, separe a los estudiantes en grupos según su grado, es decir, A, B, C, luego use la función de muestra para muestrear 2 estudiantes de cada grupo de grado al azar. Hacemos esto usando el siguiente código.

df.groupby("Grade", group_keys=False).apply(lambda x: x.sample(2))

Producción :

      Name   ID Grade  Category
0    sanay  001     A         2
7  hritesh  008     A         1
5     mann  006     B         3
4     yash  005     B         2
2   rutwik  003     C         1
6  pritesh  007     C         3

Para un muestreo proporcional, separe a los estudiantes en grupos según su calificación, es decir, A, B, C, luego tome una muestra aleatoria de cada grupo según el porcentaje de población usando Pandas groupby(). El tamaño total de la muestra es del 60% de la población (0,6).

Realizamos esto usando el siguiente código.

df.groupby("Grade", group_keys=False).apply(lambda x: x.sample(frac=0.6))

Producción :

      Name   ID Grade  Category
7  hritesh  008     A         1
9    tarun  010     A         1
0    sanay  001     A         2
3    preet  004     B         3
5     mann  006     B         3
6  pritesh  007     C         3

Por lo tanto, podemos realizar con éxito un muestreo proporcionado y desproporcionado en un marco de datos en Pandas utilizando los enfoques anteriores.

Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

Artículo relacionado - Pandas Statistics