Visualize Distribuições com o módulo Seaborn.
Seaborn é uma biblioteca que usa o Matplotlib para plotar gráficos. Ele será usado para visualizar distribuições aleatórias.
Roberto Teixeira
Betobyte
Cientista de Dados
CIEDA
cieda.com.br
roberto@cieda.com.br
Carlos Delfino
Arduino
Cientista de Dados
Basicão da Eletrônica
www.carlosdelfino.eti.br
consultoria@carlosdelfino.eti.br
Se você já tiver o Python e o PIP instalados em um sistema, instale-o usando este comando:
pip install seaborn
Se você usa o Jupyter, instale o Seaborn usando este comando:
!pip install seaborn
Distplot significa diagrama de distribuição, toma como entrada uma matriz e traça uma curva correspondente à distribuição de pontos na matriz.
Importe o objeto pyplot do módulo Matplotlib.
import matplotlib.pyplot as plt
Você pode aprender sobre o módulo Matplotlib no curso Python Matplotlib .
Importe o módulo Seaborn em seu código usando a seguinte instrução:
import seaborn as sns
Exemplo:
import matplotlib.pyplot as plt
import seaborn as sns
sns.distplot([0, 1, 2, 3, 4, 5])
plt.show()
Exemplo:
import matplotlib.pyplot as plt
import seaborn as sns
sns.distplot([0, 1, 2, 3, 4, 5], hist=False)
plt.show()
Nota: Usaremos: sns.distplot(arr, hist=False)para visualizar distribuições aleatórias neste tutorial.
A Distribuição Normal é uma das distribuições mais importantes, sendo também chamada de Distribuição Gaussiana em homenagem ao matemático alemão Carl Friedrich Gauss.
Ele se ajusta à distribuição de probabilidade de muitos eventos, por exemplo. Pontuações de QI, batimentos cardíacos etc.
Use o método random.normal() para obter uma distribuição de dados normal.
Possui três parâmetros:
Exemplo:
Gere uma distribuição normal aleatória de tamanho 2x3:
from numpy import random
x = random.normal(size=(2, 3))
print(x)
Exemplo:
Gere uma distribuição normal aleatória de tamanho 2x3 com média em 1 e desvio padrão de 2:
from numpy import random
x = random.normal(loc=1, scale=2, size=(2,3))
print(x)
Exemplo:
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
sns.distplot(random.normal(size=1000), hist=False)
plt.show()
A Distribuição Binomial é uma Distribuição Discreta, que descreve o resultado de cenários binários, por exemplo, lançamento de uma moeda, será cara ou coroa.
Possui três parâmetros:
Distribuição Discreta: A distribuição é definida em um conjunto separado de eventos, por exemplo, o resultado de um sorteio é discreto, pois pode ser apenas cara ou coroa, enquanto a altura das pessoas é contínua, pois pode ser 170, 170,1, 170,11 e assim por diante.
Exemplo:
Dadas 10 tentativas de lançamento de moedas, gere 10 pontos de dados:
from numpy import random
x = random.binomial(n=10, p=0.5, size=10)
print(x)
Exemplo:
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
sns.distplot(random.binomial(n=10, p=0.5, size=1000), hist=True, kde=False)
plt.show()
A principal diferença é que a distribuição normal é contínua, enquanto a binomial é discreta, mas se houver pontos de dados suficientes, será bastante semelhante à distribuição normal com certos loc e escala.
Exemplo:
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
sns.distplot(random.normal(loc=50, scale=5, size=1000), hist=False, label='normal')
sns.distplot(random.binomial(n=100, p=0.5, size=1000), hist=False, label='binomial')
plt.show()
A Distribuição de Poisson é uma Distribuição Discreta .
Ele estima quantas vezes um evento pode acontecer em um determinado tempo. Por exemplo, se alguém come duas vezes por dia, qual é a probabilidade de comer três vezes?
Tem dois parâmetros:
Exemplo:
Gere uma distribuição aleatória 1x10 para a ocorrência 2:
from numpy import random
x = random.poisson(lam=2, size=10)
print(x)
Exemplo:
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
sns.distplot(random.poisson(lam=2,size=1000),kde=False)
plt.show()
A distribuição normal é contínua enquanto Poisson é discreta.
Mas podemos ver que semelhante ao binomial para uma distribuição de Poisson grande o suficiente, ela se tornará semelhante à distribuição normal com certos std dev e média.
Exemplo:
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
sns.distplot(random.normal(loc=50, scale=7, size=1000), hist=False, label='normal')
sns.distplot(random.poisson(lam=50, size=1000), hist=False, label='poisson')
plt.show()
A diferença é muito sutil, pois a distribuição binomial é para tentativas discretas, enquanto a distribuição de Poisson é para tentativas contínuas.
Mas para uma distribuição binomial muito grande ne próxima de zero pé quase idêntica à distribuição de Poisson, tal que n * pé quase igual a lam.
Exemplo:
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
sns.distplot(random.binomial(n=1000, p=0.01, size=1000), hist=False, label='binomial')
sns.distplot(random.poisson(lam=10, size=1000), hist=False, label='poisson')
plt.show()
Usado para descrever a probabilidade em que cada evento tem chances iguais de ocorrer.
Por exemplo, geração de números aleatórios.
Possui três parâmetros:
Exemplo:
Crie uma amostra de distribuição uniforme 2x3:
from numpy import random
x = random.uniform(size=(2, 3))
print(x)
Exemplo:
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
sns.distplot(random.uniform(size=1000), hist=False)
plt.show()
A Distribuição Logística é usada para descrever o crescimento.
Usado extensivamente em aprendizado de máquina em regressão logística, redes neurais etc.
Possui três parâmetros:
Exemplo:
Desenhe amostras 2x3 de uma distribuição logística com média em 1 e stddev 2.0:
from numpy import random
x = random.logistic(loc=1, scale=2, size=(2, 3))
print(x)
Exemplo:
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
sns.distplot(random.logistic(size=1000), hist=False)
plt.show()
Ambas as distribuições são quase idênticas, mas a distribuição logística tem mais área sob as caudas, o que significa que representa mais possibilidade de ocorrência de um evento mais distante da média.
Para valores de escala mais altos (desvio padrão), as distribuições normal e logística são quase idênticas, exceto pelo pico.
Exemplo:
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
sns.distplot(random.normal(scale=2, size=1000), hist=False, label='normal')
sns.distplot(random.logistic(size=1000), hist=False, label='logistic')
plt.show()
A distribuição multinomial é uma generalização da distribuição binomial.
Ele descreve os resultados de cenários multinomiais, diferentemente dos binomiais, onde os cenários devem ser apenas um de dois. Por exemplo, tipo sanguíneo de uma população, resultado da rolagem de dados.
Possui três parâmetros:
Exemplo:
Extraia uma amostra para o lançamento de dados:
from numpy import random
x = random.multinomial(n=6, pvals=[1/6, 1/6, 1/6, 1/6, 1/6, 1/6])
print(x)
Nota: Amostras multinomiais NÃO produzirão um único valor! Eles produzirão um valor para cada pval.
Nota: Como são generalizações da distribuição binomial, sua representação visual e similaridade da distribuição normal é a mesma das distribuições binomiais múltiplas.
A distribuição exponencial é usada para descrever o tempo até o próximo evento, por exemplo, falha/sucesso, etc.
Tem dois parâmetros:
Exemplo:
Desenhe uma amostra para distribuição exponencial com escala 2.0 com tamanho 2x3:
from numpy import random
x = random.exponential(scale=2, size=(2, 3))
print(x)
Exemplo:
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
sns.distplot(random.exponential(size=1000), hist=False)
plt.show()
Relação entre Poisson e Distribuição Exponencial
A distribuição de Poisson lida com o número de ocorrências de um evento em um período de tempo, enquanto a distribuição exponencial lida com o tempo entre esses eventos.
A distribuição do Quiquadrado é usada como base para verificar a hipótese.
Tem dois parâmetros:
Exemplo:
Desenhe uma amostra para distribuição qui-quadrado com grau de liberdade 2 com tamanho 2x3:
from numpy import random
x = random.chisquare(df=2, size=(2, 3))
print(x)
Exemplo:
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
sns.distplot(random.chisquare(df=1, size=1000), hist=False)
plt.show()
A distribuição de Rayleigh é usada no processamento de sinais.
Tem dois parâmetros:
Exemplo:
Extraia uma amostra para distribuição rayleigh com escala de 2 com tamanho 2x3:
from numpy import random
x = random.rayleigh(scale=2, size=(2, 3))
print(x)
Exemplo:
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
sns.distplot(random.rayleigh(size=1000), hist=False)
plt.show()
Na unidade stddev e 2 graus de liberdade rayleigh e chi quadrado representam as mesmas distribuições.
Uma distribuição seguindo a lei de Pareto, ou seja, distribuição 80-20 (20% de fatores causam 80% de resultado).
Tem dois parâmetros:
Exemplo:
Extraia uma amostra para distribuição de Pareto com forma de 2 com tamanho 2x3:
from numpy import random
x = random.pareto(a=2, size=(2, 3))
print(x)
Exemplo:
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
sns.distplot(random.pareto(a=2, size=1000), kde=False)
plt.show()
As distribuições Zipf são usadas para amostrar dados com base na lei de Zipf.
Lei de Zipf: Em uma coleção, o enésimo termo comum é 1/n vezes o termo mais comum. Por exemplo, a 5ª palavra comum em inglês ocorre quase 1/5 da palavra mais usada.
Tem dois parâmetros:
Exemplo:
Desenhe uma amostra para distribuição zipf com parâmetro de distribuição 2 com tamanho 2x3:
from numpy import random
x = random.zipf(a=2, size=(2, 3))
print(x)
Exemplo: de 1000 pontos, mas plotando apenas aqueles com valor < 10 para um gráfico mais significativo.
Exemplo:
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
x = random.zipf(a=2, size=1000)
sns.distplot(x[x<10], kde=False)
plt.show()