-
Notifications
You must be signed in to change notification settings - Fork 0
/
amostragem.py
111 lines (79 loc) · 3.5 KB
/
amostragem.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import random
import numpy as np
import pandas as pd
from sklearn.model_selection import StratifiedShuffleSplit
def amostragem_aleatoria_simples(dataset, amostras, seed=None):
return dataset.sample(n=amostras, random_state=seed)
def amostragem_sistematica(dataset, amostras, seed=None):
intervalo = len(dataset) // amostras
random.seed(seed)
inicio = random.randint(0, intervalo)
indices = np.arange(inicio, len(dataset), step=intervalo)
amostra_sistematica = dataset.iloc[indices]
return amostra_sistematica
def amostragem_agrupamento(dataset, amostras, seed=None):
grupos = []
id_grupo = 0
contagem = 0
for _ in dataset.iterrows():
grupos.append(id_grupo)
contagem += 1
if contagem >= amostras:
contagem = 0
id_grupo += 1
dataset['grupo'] = grupos
numero_grupos = len(dataset) // amostras
random.seed(seed)
grupo_selecionado = random.randint(0, numero_grupos)
return dataset[dataset['grupo'] == grupo_selecionado]
def amostragem_estratificada(dataset, amostras, campo, seed=None):
percentual = amostras / len(dataset)
split = StratifiedShuffleSplit(test_size=percentual, random_state=seed)
_, test_index = next(split.split(dataset, dataset['income']))
return dataset.iloc[test_index]
def amostragem_reservatorio(dataset, amostras, seed=None):
tamanho = len(dataset)
stream = np.arange(tamanho)
reservatorio = np.zeros(amostras, dtype=np.int32)
i = 0
for i in range(amostras):
reservatorio[i] = stream[i]
random.seed(seed)
while i < tamanho:
j = random.randrange(i + 1)
if j < amostras:
reservatorio[j] = stream[i]
i += 1
return dataset.iloc[reservatorio]
if __name__ == '__main__':
ds_census = pd.read_csv('datasets/census.csv')
print('\nAmostragem aleatória simples')
df_amostra_aleatoria_simples = amostragem_aleatoria_simples(ds_census, 100)
print(df_amostra_aleatoria_simples.shape)
print(df_amostra_aleatoria_simples)
print('\nAmostragem sistemática')
df_amostra_sistematica = amostragem_sistematica(ds_census, 100)
print(df_amostra_sistematica.shape)
print(df_amostra_sistematica)
print('\nAmostragem por grupos')
df_amostra_agrupamento = amostragem_agrupamento(ds_census, 100)
print(df_amostra_agrupamento.shape)
print(df_amostra_agrupamento['grupo'].value_counts())
print(df_amostra_agrupamento)
print('\nAmostragem estratificada')
df_amostra_estratificada = amostragem_estratificada(ds_census, 100, 'income')
print(df_amostra_estratificada.shape)
print(df_amostra_estratificada['income'].value_counts())
print(df_amostra_estratificada)
print('\nAmostragem de reservatório')
df_amostra_reservatorio = amostragem_reservatorio(ds_census, 100)
print(df_amostra_reservatorio.shape)
print(df_amostra_reservatorio)
print('\nComparativo dos resultados')
print(f"len(ds_census): {len(ds_census)}")
print(f"ds_census['age'].mean(): {ds_census['age'].mean()}")
print(f"df_amostra_aleatoria_simples['age'].mean(): {df_amostra_aleatoria_simples['age'].mean()}")
print(f"df_amostra_sistematica['age'].mean(): {df_amostra_sistematica['age'].mean()}")
print(f"df_amostra_agrupamento['age'].mean(): {df_amostra_agrupamento['age'].mean()}")
print(f"df_amostra_estratificada['age'].mean(): {df_amostra_estratificada['age'].mean()}")
print(f"df_amostragem_reservatorio['age'].mean(): {df_amostra_reservatorio['age'].mean()}")