Aprendendo Python com Estatística
- #Python
Aprender a resolver problemas é tão importante quanto aprender a usar determinada linguagem de programação. Mas você pode muito bem aprender as duas coisas ao mesmo tempo. Áreas como estatística, matemática e física são fontes quase certas de problemas que podem servir de inspiração para o estudante treinar suas habilidades de programação. Por exemplo, neste artigo, vou mostrar como você pode treinar conceitos básicos de Python visualizando um resultado prático do Teorema Central do Limite.
O Teorema Central do Limite permite o estudo de dados que não seguem uma distribuição normal usando, para isso, a ideia de que a distribuição das médias de amostras grandes e aleatórias são aproximadamente normais. Bem, o que isso tem haver com Python. Nada!!! E tudo!!!
Python é uma linguagem muito utilizada em análise dados. Claro, existem outras, como R. Meu foco aqui é Python, quem sabe em outro momento eu faça algo sobre R. Então, é uma boa forma de aprendermos algo sobre Python tentando mostrar o Teorema Central do Limite da prática. O que precisamos fazer:
- Gerar N amostras de tamanho M.
- Calcular as médias das amostras.
- Gerar o histograma das médias.
Para gerarmos as N amostras, demos usar um gerador de números pseudo-aleatórios. O módulo random nos dá essa possibilidade. Para calcular as médias, podemos usar operações comuns da Python, como soma e divisão. É importante frizar que há um jeito muito rápido de se fazer tudo isso usando um módulo chamado numpy combinado com matplotlib, usando poucas linhas de código:
import numpy as np #importo o módulo numpy e o nomeio como np
from matplotlib import pyplot as plt # importo o objeto pyplot e o nomeio de plt.
samples = np.random.rand(100, 100) #gero cem amostras de tamanho 100
means = np.mean(samples, axis = 1) #calcula as médias de cada amostra
plt.hist(means)
plt.show() #no colaboratory, esse comando não é necessário
O gráfico
foi o resultado da execução do exemplo dado. Mas, uma pequena alteração no código, resultando em
import numpy as np #importo o módulo numpy e o nomeio como np
from matplotlib import pyplot as plt # importo o objeto pyplot e o nomeio de plt.
samples = np.random.rand(1000, 100) #gero mil amostras de tamanho 100
means = np.mean(samples, axis = 1) #calcula as médias de cada amostra
plt.hist(means)
plt.show() #no colaboratory, esse comando não é necessário
resulta em um gráfico ainda mais próximo de uma distribuição normal:
Ok, como este artigo é voltado para iniciantes, talvez você não tenha entendido nada do código usado nos primeiros exemplos. Contudo, estes são apenas exemplos de como deve ser a saída do seu código quando você tentar reproduzir este "experimento".
Então, o desafio consiste em você implementar essa demonstração do Teorema Central do Limite sem usar o numpy. A parte de cálculo, você só deveria usar Python com os pacotes embutidos. Já a parte de gŕafico, você pode utilizar matplotlib mesmo. Que habilidades de Python você vai treinar usando este problema:
- A biblioteca random (que vem junto com qualquer distribuição python).
- Operações de laço, pois você precisa somar e dividir.
- Laços, pois você precisa gerar várias amostras.
- Listas, pois você precisa guardar as amostras em algum lugar e cada amostra pode ser uma lista.
Estes são os tijolos básicos de uma solução. Vou postar um pedaço da solução para servir de inspiração:
import random
# Função para gerar uma amostra aleatória de tamanho n
def gerar_amostra(n):
amostra = []
for i in range(n):
amostra.append(random.random())
return amostra
# Gera 100 amostras aleatórias de tamanho 100
amostras = []
for i in range(100):
amostras.append(gerar_amostra(100))
# Imprime as amostras
for amostra in amostras:
print(amostra)