Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Distribuição de Frequêcia
Teoria
Uma distribuição de frequência é uma forma de organizar e resumir dados, mostrando a 
frequência (ou seja, quantas vezes) com que cada valor ou intervalo de valores aparece em um 
conjunto de dados.
Imagine que você tem uma lista de estaturas dos alunos da sua turma. Em vez de olhar para 
todas as estaturas individualmente, uma distribuição de frequência te ajuda a ver rapidamente:
• Quantos alunos têm cada estatura específica (por exemplo, 3 alunos têm 156 cm, 
5 alunos têm 160 cm, etc.)
• Quantos alunos caem em determinados intervalos de estatura (por exemplo, 5 
alunos têm entre 150-154 cm, 9 alunos têm entre 154-158 cm)
Ela é fundamental para entender a estrutura e o padrão dos seus dados, identificando valores 
comuns, incomuns, a dispersão dos dados e possíveis tendências. Pode ser apresentada em 
tabelas, gráficos de barras (histogramas) ou gráficos de pizza.
Conjunto de dados para exemplo
Teminologias:
• Classe: Intervalos de variação da variável é resentados simbolicamente por "i".
• Limite de classe: É o limite inferior (l) e superio (L) da classe.
– Exemplo: l = 150 e L = 158
• Amplitude de um intervalo de classe (hi): é a diferença entre o limite superior e o 
limite inferior de uma classe em uma distribuição de frequência agrupada.
– hi = Li - li (154 - 150 = 4).➡️�
• Amplitude total da distribuição (AT): é a diferença entre o maior e o menor valor 
de um conjunto de dados:
– AT = Lmax - Lmin (173 - 150 = 23)➡️�
• Amplitude amostral: é diferença entre o valor máximo e o valor mínimo 
observados em um conjunto de dados amostrais (AA).
– AA = Xmax - Xmin (173 - 150 = 23)➡️�
• Ponto médio de uma classe: é o valor que representa o centro de um determinado 
intervalo de classe em uma distribuição de frequência agrupada.
– Xi = (Li + li) / 2 (158 + 154) / 2 = 156cm➡️�
• Frequência: é o número de vezes que um determinado valor aparece em um 
conjunto de dados. Existem diferentes tipos de frequência:
– Frequência Absoluta (fi): É o número puro de ocorrências de um valor ou 
de uma classe.
• f1 = 5
– Frequência Relativa (fr): É a proporção de ocorrências de um valor ou 
classe em relação ao total de observações. Geralmente é expressa como uma 
porcentagem ou um decimal.
• fr = (fi / Total de Observações) * 100 (5 / 40) * 100 = 12,5➡️�
– Frequência Acumulada (Fi): É a soma das frequências de um valor ou 
classe com as frequências de todos os valores ou lasses anteriores. Ela 
mostra quantas observações estão abaixo ou são iguais a um determinado 
valor/classe.
– Frequência Relativa Acumulada (Fr): É a soma das frequências relativas 
de um valor ou classe com as frequências relativas de todos os valores ou 
classes anteriores. Mostra a porcentagem acumulada de observações até 
aquele ponto.
Determinar o número de classes
A formar mais utilizada para determinar o número de classe é a utilização da Fórmula de Sturges
k = 1 + 3.33 * log(n)
1 + 3.33 * log(40)
1 + 3.33 * 1.6
k = 6.28
Onde:
• k é o número de classes (o resultado deve ser arredondado para o número inteiro mais 
próximo).
• n é o número total de observações (o tamanho da sua amostra ou população de dados).
• log é o logaritmo na base 10.
Determinar a amplitude do intervalo de classe
h = AA / k
h = (173 - 150) / 6
h = 23 / 6
h = 4 -> (3,83) sempre arrendodar para cima
Assimitria
Quando os dados em um histograma estão mais para um lado do que para o outro, isso significa 
que a distribuição dos dados é assimétrica ou enviesada (skewed).
• Se os dados estão mais concentrados no lado esquerdo e a 'cauda' do gráfico se 
estende para a direita, dizemos que a distribuição tem assimetria positiva (ou 
enviesada à direita). Isso indica que a maioria dos valores é menor, mas existem 
alguns valores maiores que 'esticam' a distribuição para a direita.
• Se os dados estão mais concentrados no lado direito e a 'cauda' do gráfico se estende 
para a esquerda, dizemos que a distribuição tem assimetria negativa (ou enviesada 
à esquerda). Isso indica que a maioria dos valores é maior, mas existem alguns 
valores menores que 'esticam' a distribuição para a esquerda.
Bibliotecas e Dados
import pandas as pd
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules
/usr/local/lib/python3.12/dist-packages/jupyter_client/session.py:203: 
DeprecationWarning: datetime.datetime.utcnow() is deprecated and 
scheduled for removal in a future version. Use timezone-aware objects 
to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
 return datetime.utcnow().replace(tzinfo=utc)
Exemplo de Conjunto de Dados
Vamos usar um pequeno conjunto de dados de transações de compras para demonstrar o 
Apriori.
transactions = [
 ['Leite', 'Pão', 'Manteiga', 'Cerveja'],
 ['Pão', 'Manteiga', 'Fraldas', 'Ovos'],
 ['Leite', 'Fraldas', 'Refrigerante'],
 ['Pão', 'Manteiga', 'Fraldas', 'Cerveja'],
 ['Leite', 'Pão', 'Manteiga', 'Fraldas', 'Refrigerante'],
 ['Pão', 'Ovos', 'Cerveja']
]
df_transactions = pd.DataFrame({'Transaction': 
range(len(transactions)), 'Items': transactions})
display(df_transactions)
Preparação dos Dados (One-Hot Encoding)
Para usar o algoritmo Apriori do mlxtend, precisamos converter a lista de transações em um 
formato one-hot encoded, onde cada item é uma coluna e o valor é True se o item estiver na 
transação e False caso contrário.
from mlxtend.preprocessing import TransactionEncoder
te = TransactionEncoder()
te_ary = te.fit(transactions).transform(transactions)
df_encoded = pd.DataFrame(te_ary, columns=te.columns_)
display(df_encoded.head())
Encontrando Conjuntos de Itens Frequentes
Agora vamos aplicar o algoritmo Apriori para encontrar conjuntos de itens com um suporte 
mínimo. Um min_support de 0.5 significa que o itemset deve aparecer em pelo menos 50% 
das transações (3 de 6 neste exemplo).
frequent_itemsets = apriori(df_encoded, min_support=0.5, 
use_colnames=True)
frequent_itemsets['length'] = 
frequent_itemsets['itemsets'].apply(lambda x: len(x))
display(frequent_itemsets)
Gerando Regras de Associação
Com os conjuntos de itens frequentes, podemos agora gerar as regras de associação. Vamos 
filtrar as regras por confiança mínima e lift.
rules = association_rules(frequent_itemsets, metric="confidence", 
min_threshold=0.7)
rules = rules.sort_values(by=['confidence', 'lift'], ascending=[False, 
False])
display(rules)
Interpretando as Regras de Associação
• antecedents: O item ou conjunto de itens que está 'no lado esquerdo' da regra (ex: 
{Pão}).
• consequents: O item ou conjunto de itens que está 'no lado direito' da regra (ex: 
{Manteiga}).
• antecedent support: O suporte do antecedente (quão frequentemente {Pão} 
aparece sozinho).
• consequent support: O suporte do consequente (quão frequentemente {Manteiga} 
aparece sozinho).
• support: O suporte da regra completa (quão frequentemente {Pão, Manteiga} 
aparecem juntos).
• confidence: A probabilidade de comprar o consequente, dado que o antecedente foi 
comprado. Por exemplo, uma confiança de 1.00 para {Pão} -> {Manteiga} significa 
que sempre que Pão é comprado, Manteiga também é comprada.
• lift: Indica a força da associação. Um valor de lift maior que 1 sugere que a 
ocorrência do antecedente aumenta a probabilidade de ocorrência do consequente. Um 
lift de 1.25, por exemplo, significa que comprar Pão torna 1.25 vezes mais provável que 
Manteiga também seja comprada, comparado com a compra de Manteiga de forma 
independente.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import math
data = np.array([160, 165, 167, 164, 160, 166, 160, 161, 150, 152, 
173, 160, 155,
 164, 168, 162, 161, 168, 163, 156, 155, 169, 151, 
170, 164,
 155, 152, 163, 160, 155, 157, 156, 158, 158, 161, 
154, 161, 156, 172, 153])
Ordenação
data = np.sort(data)
data
array([150, 151, 152, 152, 153, 154, 155, 155, 155, 155, 156, 156, 
156,
 157, 158, 158, 160, 160,160, 160, 160, 161, 161, 161, 161, 
162,
 163, 163, 164, 164, 164, 165, 166, 167, 168, 168, 169, 170, 
172,
 173])
minimo = data.min()
maximo = data.max()
print(f'Menor valor: {minimo}')
print(f'Maior valor: {maximo}')
Menor valor: 150
Maior valor: 173
np.unique(data,return_counts=True)
(array([150, 151, 152, 153, 154, 155, 156, 157, 158, 160, 161, 162, 
163,
 164, 165, 166, 167, 168, 169, 170, 172, 173]),
 array([1, 1, 2, 1, 1, 4, 3, 1, 2, 5, 4, 1, 2, 3, 1, 1, 1, 2, 1, 1, 1, 
1]))
plt.bar(data,data)
plt.show()
Número de classes
• k = 1 + 3.3 log n
n = len(data)
k = 1 + 3.3 * np.log10(n)
k
np.float64(6.286797971382276)
k = round(k)
k
6
Amplitude do intervalo
• h = AA / k
• AA = Xmax - Xmin
AA = maximo - minimo
AA
np.int64(23)
h = AA / k
h
np.float64(3.8333333333333335)
h = math.ceil(h)
h
4
Construção da distribuição de frequência
interval = np.arange(minimo, maximo + 2,h)
interval
array([150, 154, 158, 162, 166, 170, 174])
interval1, interval2, interval3, interval4, interval5, interval6 = 
0,0,0,0,0,0
for i in data:
 if i >= interval[0] and i = interval[1] and i = interval[2] and i = interval[3] and i = interval[4] and i = interval[5] and i

Mais conteúdos dessa disciplina