Campionamento stratificato nei panda (con esempi)


I ricercatori spesso prelevano campioni da una popolazione e utilizzano i dati del campione per trarre conclusioni sulla popolazione nel suo insieme.

Un metodo di campionamento comunemente utilizzato è il campionamento casuale stratificato , in cui una popolazione viene divisa in gruppi e un certo numero di membri di ciascun gruppo vengono selezionati casualmente per essere inclusi nel campione.

Questo tutorial spiega due metodi per eseguire il campionamento casuale stratificato in Python.

Esempio 1: campionamento stratificato utilizzando i conteggi

Supponiamo di avere il seguente DataFrame panda che contiene dati su 8 giocatori di basket di 2 squadre diverse:

 import pandas as pd

#createDataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   'position': ['G', 'G', 'F', 'G', 'F', 'F', 'C', 'C'],
                   'assists': [5, 7, 7, 8, 5, 7, 6, 9],
                   'rebounds': [11, 8, 10, 6, 6, 9, 6, 10]})

#view DataFrame
df

        team position assists rebounds
0 A G 5 11
1 A G 7 8
2 A F 7 10
3 A G 8 6
4 B F 5 6
5 B F 7 9
6 B C 6 6
7 B C 9 10

Il seguente codice mostra come eseguire un campionamento casuale stratificato selezionando casualmente 2 giocatori di ciascuna squadra da includere nel campione:

 df. groupby ('team', group_keys= False ). apply ( lambda x: x.sample (2))

        team position assists rebounds
0 A G 5 11
3 A G 8 6
6 B C 6 6
5 B F 7 9

Si noti che nel campione stratificato sono inclusi due giocatori per ciascuna squadra.

Esempio 2: campionamento stratificato utilizzando le proporzioni

Supponiamo ancora una volta di avere il seguente DataFrame panda che contiene dati su 8 giocatori di basket di 2 squadre diverse:

 import pandas as pd

#createDataFrame
df = pd.DataFrame({'team': ['A', 'A', 'B', 'B', 'B', 'B', 'B', 'B'],
                   'position': ['G', 'G', 'F', 'G', 'F', 'F', 'C', 'C'],
                   'assists': [5, 7, 7, 8, 5, 7, 6, 9],
                   'rebounds': [11, 8, 10, 6, 6, 9, 6, 10]})

#view DataFrame
df

        team position assists rebounds
0 A G 5 11
1 A G 7 8
2 A F 7 10
3 A G 8 6
4 B F 5 6
5 B F 7 9
6 B C 6 6
7 B C 9 10

Tieni presente che 6 degli 8 giocatori (75%) nel DataFrame fanno parte della squadra A e 2 degli 8 giocatori (25%) fanno parte della squadra B.

Il codice seguente mostra come eseguire un campionamento casuale stratificato in modo tale che la proporzione di giocatori nel campione di ciascuna squadra corrisponda alla proporzione di giocatori di ciascuna squadra nel DataFrame più grande:

 import numpy as np

#define total sample size desired
N = 4

#perform stratified random sampling
df. groupby ('team', group_keys= False ). apply ( lambda x: x. sample (int(np. rint (N* len (x)/ len (df))))). sample (frac=1). reset_index (drop= True )

        team position assists rebounds
0 B F 7 9
1 B G 8 6
2 B C 6 6
3 A G 7 8

Si noti che la percentuale di giocatori della squadra A nel campione stratificato (25%) corrisponde alla proporzione di giocatori della squadra A nel DataFrame più grande.

Allo stesso modo, la percentuale di giocatori della squadra B nel campione stratificato (75%) corrisponde alla percentuale di giocatori della squadra B nel DataFrame più grande.

Risorse addizionali

I seguenti tutorial spiegano come selezionare altri tipi di campioni utilizzando i panda:

Come eseguire il campionamento dei cluster in Pandas
Come effettuare un campionamento sistematico tra i panda

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *