Pular para o conteúdo

Como usar a função np.random.normal no Python?

[

Como obter números aleatórios distribuídos normalmente com o NumPy

A distribuição normal é uma das distribuições de probabilidade mais úteis, pois modela muitos fenômenos naturais muito bem. Com o NumPy, é possível criar amostras de números aleatórios a partir da distribuição normal.

Essa distribuição também é chamada de distribuição Gaussiana ou simplesmente de curva em forma de sino. A última dica sobre a forma da distribuição quando ela é plotada:

A distribuição normal é simétrica em torno de seu pico. Devido a essa simetria, a média da distribuição, frequentemente denotada por μ , está nesse pico. O desvio padrão, σ , descreve a dispersão da distribuição.

Se algumas amostras são distribuídas normalmente, então é provável que uma amostra aleatória tenha um valor próximo à média. Na verdade, cerca de 68% de todas as amostras estão dentro de um desvio padrão da média.

É possível interpretar a área sob a curva no gráfico como uma medida de probabilidade. A área colorida escura, que representa todas as amostras menores que um desvio padrão da média, corresponde a 68% da área total sob a curva.

Neste tutorial, você aprenderá como usar a biblioteca NumPy do Python para trabalhar com a distribuição normal e, mais especificamente, como criar números aleatórios distribuídos normalmente. Ao longo do caminho, você conhecerá o gerador de números aleatórios (RNG) do NumPy e como garantir que seja possível trabalhar com aleatoriedade de maneira reprodutível.

Também verá como visualizar distribuições de probabilidade com o Matplotlib e histogramas, bem como o efeito da manipulação da média e do desvio padrão. O teorema do limite central explica a importância da distribuição normal. Ele descreve como a média de qualquer experimento ou medida repetida se aproxima da distribuição normal.

Como aprenderá, é possível fazer uma análise estatística poderosa com o código Python correto. Para obter o código deste tutorial, clique no link abaixo:

Shell

Terminal window
$ python -m pip install numpy matplotlib scipy

Além de obter o NumPy, você instalou o Matplotlib e o SciPy, então está pronto para começar.

Como usar o NumPy para gerar números aleatórios distribuídos normalmente

Python

import numpy as np
rng = np.random.default_rng()
rng

O RNG pode gerar números aleatórios de várias distribuições, incluindo a distribuição normal. Para gerar números normalmente distribuídos, use a função random.normal():

Python

import numpy as np
# Gerando 100 números aleatórios normalmente distribuídos com média 0 e desvio padrão 1
samples = np.random.default_rng().normal(0, 1, 100)
print(samples)

Neste exemplo, np.random.default_rng().normal(0, 1, 100) gera 100 números aleatórios normalmente distribuídos, com média 0 e desvio padrão 1. Os valores resultantes são armazenados na variável samples.

Plotando seus números normalmente distribuídos

Depois de gerar seus números normalmente distribuídos, você provavelmente gostaria de plotá-los para visualizar a distribuição. O Matplotlib é a biblioteca perfeita para essa tarefa.

Para plotar um histograma dos seus números, utilize a função hist() do Matplotlib:

Python

import numpy as np
import matplotlib.pyplot as plt
# Gerando 1000 números aleatórios normalmente distribuídos com média 0 e desvio padrão 1
samples = np.random.default_rng().normal(0, 1, 1000)
# Plotando o histograma dos números gerados
plt.hist(samples, bins=30)
plt.title("Distribuição Normal")
plt.xlabel("Valores")
plt.ylabel("Frequência")
plt.show()

Neste exemplo, plt.hist(samples, bins=30) gera um histograma dos números normalmente distribuídos armazenados na variável samples, com 30 bins para agrupar os valores. Os rótulos dos eixos x e y e um título são adicionados ao gráfico. Por fim, plt.show() exibe o gráfico.

Especificando a média e o desvio padrão

Ao trabalhar com a distribuição normal, é possível especificar tanto a média quanto o desvio padrão desejados para os números gerados. A função np.random.normal() permite fazer isso:

Python

import numpy as np
# Gerando 500 números aleatórios normalmente distribuídos com média 5 e desvio padrão 2
samples = np.random.normal(5, 2, 500)
print(samples)

Nesse exemplo, np.random.normal(5, 2, 500) gera 500 números aleatórios normalmente distribuídos, com média 5 e desvio padrão 2. Esses valores são armazenados na variável samples.

Trabalhando com números aleatórios no NumPy

Além da geração de números aleatórios normalmente distribuídos, o NumPy oferece muitas outras funcionalidades para trabalhar com números aleatórios.

Por exemplo, é possível gerar inteiros aleatórios dentro de um intervalo específico utilizando a função np.random.randint():

Python

import numpy as np
# Gerando 10 inteiros aleatórios entre 1 e 100
random_ints = np.random.randint(1, 101, 10)
print(random_ints)

Nesse caso, np.random.randint(1, 101, 10) gera 10 inteiros aleatórios entre 1 e 100. Os valores resultantes são armazenados na variável random_ints.

Iterar em direção à normalidade com o Teorema do Limite Central

Uma das propriedades mais interessantes da distribuição normal é o Teorema do Limite Central. Esse teorema afirma que a média de uma amostra grande o suficiente de medidas independentes de uma população qualquer se aproxima de uma distribuição normal.

Python

import numpy as np
import matplotlib.pyplot as plt
# Simulando a média de uma amostra grande de valores aleatórios uniformemente distribuídos
means = []
for i in range(10000):
sample = np.random.uniform(0, 1, 100)
means.append(np.mean(sample))
# Plotando o histograma das médias amostrais
plt.hist(means, bins=30)
plt.title("Distribuição das Médias Amostrais")
plt.xlabel("Média")
plt.ylabel("Frequência")
plt.show()

Neste exemplo, um loop é usado para simular a média de uma amostra grande de valores aleatórios uniformemente distribuídos. A cada iteração do loop, uma amostra de 100 valores aleatórios uniformemente distribuídos é gerada, e a média dessa amostra é calculada e adicionada à lista means. Essas médias amostrais são então plotadas em um histograma para visualizar a distribuição resultante.

Conclusão

Neste tutorial, você aprendeu como usar o NumPy para gerar números aleatórios distribuídos normalmente. Você viu como criar amostras de números aleatórios normalmente distribuídos, bem como como especificar a média e o desvio padrão desejados. Também aprendeu a visualizar distribuições de probabilidade com o Matplotlib e a entender o Teorema do Limite Central.

A distribuição normal desempenha um papel fundamental na estatística e na modelagem de muitos fenômenos naturais. Ao dominar as técnicas de geração e manipulação de números aleatórios normalmente distribuídos, você terá uma poderosa ferramenta em seu kit de ferramentas de análise de dados.

Agora você pode começar a explorar por conta própria e aplicar essas técnicas em seus próprios projetos de Python!