Capítulo 10.4

Índice

  1. 1. O que é Ciência de Dados?
  2. 2. Causalidade e Experimentos
  3. 3. Progamando em Python
  4. 4. Tipos de Dados
  5. 5. Sequências
  6. 6. Tabelas
  7. 7. Visualização
  8. 8. Funções e Tabelas
  9. 9. Aleatoriedade
  10. 10. Amostragem e Distribuições Empíricas
  11. 11. Testando Hipóteses
  12. 12. Comparando Duas Amostras
  13. 13. Estimação
  14. 14. Por que a Média é Importante
  15. 15. Previsão

from datascience import *
path_data = '../../../assets/data/'
import matplotlib
matplotlib.use('Agg')
%matplotlib inline
import matplotlib.pyplot as plots
plots.style.use('fivethirtyeight')
import numpy as np

 

Amostragem Aleatória em Python

Esta seção resume as formas que você aprendeu para amostrar aleatoriamente usando Python e introduz uma nova forma.

Revisão: Amostragem de uma População em uma Tabela

Se você está amostrando de uma população cujos dados são representados nas linhas de uma tabela, então você pode usar o método sample da tabela para selecionar aleatoriamente as linhas da tabela. Ou seja, você pode usar sample para selecionar uma amostra aleatória de indivíduos.

Por padrão, sample realiza a amostragem aleatória com reposição de forma uniforme. Este é um modelo natural para experimentos de chance, como rolar um dado.

faces = np.arange(1, 7)
die = Table().with_columns('Face', faces)
die
Face
1
2
3
4
5
6

 

Execute a célula abaixo para simular 7 jogadas de um dado.

die.sample(7)
Face
5
3
3
5
5
1
6

 

Às vezes é mais natural amostrar indivíduos aleatoriamente sem reposição. Isso é chamado de amostra aleatória simples. O argumento with_replacement=False permite que você faça isso.

actors = Table.read_table(path_data + 'actors.csv')
actors
Actor Total Gross Number of Movies Average per Movie #1 Movie Gross
Harrison Ford 4871.7 41 118.8 Star Wars: The Force Awakens 936.7
Samuel L. Jackson 4772.8 69 69.2 The Avengers 623.4
Morgan Freeman 4468.3 61 73.3 The Dark Knight 534.9
Tom Hanks 4340.8 44 98.7 Toy Story 3 415
Robert Downey, Jr. 3947.3 53 74.5 The Avengers 623.4
Eddie Murphy 3810.4 38 100.3 Shrek 2 441.2
Tom Cruise 3587.2 36 99.6 War of the Worlds 234.3
Johnny Depp 3368.6 45 74.9 Dead Man’s Chest 423.3
Michael Caine 3351.5 58 57.8 The Dark Knight 534.9
Scarlett Johansson 3341.2 37 90.3 The Avengers 623.4

 

# Amostra aleatória simples de 5 linhas
actors.sample(5, with_replacement=False)
Actor Total Gross Number of Movies Average per Movie #1 Movie Gross
Morgan Freeman 4468.3 61 73.3 The Dark Knight 534.9
Orlando Bloom 2815.8 17 165.6 Dead Man’s Chest 423.3
Cameron Diaz 3031.7 34 89.2 Shrek 2 441.2
Michael Caine 3351.5 58 57.8 The Dark Knight 534.9
Leonardo DiCaprio 2518.3 25 100.7 Titanic 658.7

 

Como amostra fornece a amostra inteira na ordem em que as linhas foram selecionadas, você pode usar métodos de tabela na tabela amostrada para responder a muitas perguntas sobre a amostra. Por exemplo, você pode encontrar o número de vezes que o dado apareceu seis spots, ou o número médio de filmes em que os atores da amostra apareceram, ou se dois atores especificados apareceram na amostra. Você pode precisar de várias linhas de código para obter algumas dessas informações.

Revisão: Amostragem de uma População em uma Matriz

Se você está amostrando de uma população de indivíduos cujos dados são representados como uma matriz, você pode usar a função do NumPy np.random.choice para selecionar aleatoriamente elementos da matriz.

Por padrão, np.random.choice amostra aleatoriamente com reposição.

# As faces de um dado, como um array
faces
Out[1]: array([1, 2, 3, 4, 5, 6])

 

# 7 rolagens do dado
np.random.choice(faces, 7)
Out[2]: array([4, 1, 6, 3, 5, 4, 6])

 

O argumento replace=False permite obter uma amostra aleatória simples, ou seja, uma amostra sorteada aleatoriamente sem reposição.

# Array de nomes dos atores
actor_names = actors.column('Actor')

 

# Amostra simples dos nomes de 5 atores
np.random.choice(actor_names, 5, replace=False)
Out[3]: array([‘Jonah Hill’, ‘Julia Roberts’, ‘Bruce Willis’, ‘Eddie Murphy’,
‘Matt Damon’], dtype='<U18′)

 

Assim como sample, np.random.choice também fornece toda a sequência de elementos amostrados. Você pode usar operações de array para responder a muitas perguntas sobre a amostra. Por exemplo, você pode descobrir qual ator foi o segundo a ser sorteado ou o número de faces do dado que apareceram mais de uma vez. Algumas respostas podem precisar de várias linhas de código.

Amostragem de uma Distribuição Categórica

Às vezes estamos interessados em um atributo categórico de nossos indivíduos amostrados. Por exemplo, podemos estar observando se uma moeda cai com cara ou coroa. Ou podemos estar interessados nos partidos políticos dos eleitores selecionados aleatoriamente.

Nesses casos, frequentemente precisamos das proporções de eleitores amostrados nas diferentes categorias. Se tivermos toda a amostra, podemos calcular essas proporções. A função sample_proportions na biblioteca datascience faz esse trabalho para nós. Ela é feita sob medida para amostragem aleatória com reposição a partir de uma distribuição categórica e retorna as proporções de elementos amostrados em cada categoria.

A função sample_proportions leva dois argumentos:

  • o tamanho da amostra
  • a distribuição das categorias na população, como uma lista ou matriz de proporções que somam 1

Ela retorna uma matriz contendo a distribuição das categorias em uma amostra aleatória do tamanho fornecido, retirada da população. Essa é uma matriz que consiste nas proporções da amostra em todas as diferentes categorias, na mesma ordem em que apareceram na distribuição da população.

Por exemplo, suponha que cada planta de uma espécie tenha flores vermelhas com chance de 25%, flores rosa com chance de 50% e flores brancas com chance de 25%, independentemente das cores das flores de todas as outras plantas. Você pode usar sample_proportions para ver as proporções das diferentes cores entre 300 plantas da espécie.

# Distribuição de espécies de cores de flores:
# As proporções estão na ordem Vermelho, Rosa, Branco
species_proportions = [0.25, 0.5, .25]

sample_size = 300

# Distribuição da amostra
sample_distribution = sample_proportions(sample_size, species_proportions)
sample_distribution
Out[4]: array([0.24333333, 0.50333333, 0.25333333])

 

Como você espera, as proporções na amostra somam 1.

sum(sample_distribution)
Out[5]: 1.0

 

As categorias em species_proportions estão na ordem Vermelho, Rosa, Branco. Essa ordem é preservada por sample_proportions. Se você quiser apenas a proporção de plantas com flores rosas na amostra, você pode usar item:

# Proporção de falores rosas
sample_distribution.item(1)
Out[6]: 0.5033333333333333

 

Você pode usar sample_proportions e operações de array para responder perguntas baseadas apenas nas proporções de indivíduos amostrados nas diferentes categorias. Você não poderá responder perguntas que exijam informações mais detalhadas sobre a amostra, como quais das plantas amostradas tinha cada uma das cores diferentes.

← Capítulo 10.3 – Distribuição Empírica de uma Estatística Capítulo 11 – Testando Hipóteses →