Capítulo 9

Í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 numpy as np

import matplotlib
matplotlib.use('Agg')
%matplotlib inline
import matplotlib.pyplot as plots
plots.style.use('fivethirtyeight')

 

Aleatoriedade

Nos capítulos anteriores, desenvolvemos habilidades necessárias para fazer descrições perspicazes de dados. Cientistas de dados também precisam ser capazes de entender a aleatoriedade. Por exemplo, eles precisam ser capazes de atribuir indivíduos a grupos de tratamento e controle aleatoriamente e, em seguida, tentar dizer se quaisquer diferenças observadas nos resultados dos dois grupos são simplesmente devido à atribuição aleatória ou genuinamente devido ao tratamento.

Neste capítulo, começamos nossa análise da aleatoriedade. Para começar, usaremos Python para fazer escolhas aleatórias. No numpy, há um sub-módulo chamado random que contém muitas funções que envolvem seleção aleatória. Uma dessas funções é chamada choice. Ela escolhe um item aleatoriamente de um array, e é igualmente provável escolher qualquer um dos itens. A chamada da função é np.random.choice(array_name), onde array_name é o nome do array de onde se fará a escolha.

Assim, o código a seguir avalia treatment com 50% de chance e control com 50% de chance.

two_groups = make_array('treatment', 'control')
np.random.choice(two_groups)
Out[1]: ‘treatment’

 

A grande diferença entre o código acima e todo o outro código que executamos até agora é que o código acima não sempre retorna o mesmo valor. Ele pode retornar treatment ou control, e não sabemos de antemão qual ele escolherá. Podemos repetir o processo fornecendo um segundo argumento, o número de vezes para repetir o processo.

np.random.choice(two_groups, 10)
Out[2]: array([‘control’, ‘control’, ‘treatment’, ‘treatment’, ‘control’,
‘control’, ‘control’, ‘control’, ‘control’, ‘control’], dtype=’
<U9
‘)

 

Uma questão fundamental sobre eventos aleatórios é se eles ocorrem ou não. Por exemplo:

  • Um indivíduo foi designado para o grupo de tratamento ou não?
  • Um jogador vai ganhar dinheiro ou não?
  • Uma pesquisa fez uma previsão precisa ou não?

Uma vez que o evento ocorreu, você pode responder “sim” ou “não” a todas essas perguntas. Em programação, é convencional fazer isso rotulando declarações como True ou False. Por exemplo, se um indivíduo foi designado para o grupo de tratamento, então a declaração “O indivíduo foi designado para o grupo de tratamento” seria True. Caso contrário, seria False.

Booleans e Comparação

Em Python, valores Booleanos, nomeados em homenagem ao lógico George Boole, representam a verdade e assumem apenas dois valores possíveis: True e False. Quer os problemas envolvam aleatoriedade ou não, os valores Booleanos surgem mais frequentemente de operadores de comparação. Python inclui uma variedade de operadores que comparam valores. Por exemplo, 3 é maior que 1 + 1.

3 > 1 + 1
Out[3]: True

 

O valor True indica que a comparação é válida; Python confirmou esse simples fato sobre a relação entre 3 e 1+1. O conjunto completo de operadores de comparação comuns está listado abaixo.

Comparação Operador Exemplo True Exemplo False
Menor que < 2 < 3 2 < 2
Maior que > 3 > 2 3 > 3
Menor ou igual <= 2 <= 2 3 <= 2
Maior ou igual >= 3 >= 3 2 >= 3
Igual == 3 == 3 3 == 2
Diferente != 3 != 2 2 != 2

 

Note os dois sinais de igual == na comparação para determinar a igualdade. Isso é necessário porque Python já usa = para significar atribuição a um nome, como vimos. Não pode usar o mesmo símbolo para um propósito diferente. Portanto, se você quiser verificar se 5 é igual a 10/2, precisa ser cuidadoso: 5 = 10/2 retorna uma mensagem de erro porque Python assume que você está tentando atribuir o valor da expressão 10/2 a um nome que é o numeral 5. Em vez disso, você deve usar 5 == 10/2, que avalia para True.

5 = 10/2
Out[4]: File ”
<ipython-input-5-e8c755f5e450>”, line 1
5 = 10/2
^
SyntaxError: can’t assign to literal

 

5 == 10/2
Out[5]: True

 

Uma expressão pode conter várias comparações, e todas elas devem ser verdadeiras para que a expressão inteira seja True. Por exemplo, podemos expressar que 1+1 está entre 1 e 3 usando a seguinte expressão.

1 < 1 + 1 < 3
Out[6]: True

 

A média de dois números está sempre entre o número menor e o número maior. Expressamos essa relação para os números x e y abaixo. Você pode tentar valores diferentes de x e y para confirmar esta relação.

x = 12
y = 5
min(x, y) <= (x+y)/2 <= max(x, y)
Out[7]: True

 

Comparando Strings

Strings também podem ser comparadas, e sua ordem é alfabética. Uma string mais curta é menor que uma string mais longa que começa com a string mais curta.

'Dog' > 'Catastrophe' > 'Cat'
Out[8]: True

 

Vamos voltar à seleção aleatória. Lembre-se do array two_groups que consiste em apenas dois elementos, treatment e control. Para ver se um indivíduo designado aleatoriamente foi para o grupo de tratamento, você pode usar uma comparação:

np.random.choice(two_groups) == 'treatment'
Out[9]: True

 

Como antes, a escolha aleatória não será sempre a mesma, então o resultado da comparação também não será sempre o mesmo. Dependerá se treatment ou control foi escolhido. Com qualquer célula que envolva seleção aleatória, é uma boa ideia executar a célula várias vezes para ter uma ideia da variabilidade no resultado.

Comparando um Array e um Valor

Lembre-se de que podemos realizar operações aritméticas em muitos números em um array de uma vez. Por exemplo, make_array(0, 5, 2)*2 é equivalente a make_array(0, 10, 4). De maneira semelhante, se compararmos um array e um valor, cada elemento do array será comparado a esse valor, e a comparação resultará em um array de Booleanos.

tosses = make_array('Tails', 'Heads', 'Tails', 'Heads', 'Heads')
tosses == 'Heads'
Out[10]: array([False, True, False, True, True])

 

O método numpy count_nonzero avalia o número de elementos diferentes de zero (ou seja, True) da matriz.

np.count_nonzero(tosses == 'Heads')
Out[11]: 3

← Capítulo 8.4 – Unindo Tabelas por Colunas Capítulo 9.1 – Declarações Condicionais →