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