1
resposta

[Projeto] Desafio Outliers

#Importando programas que vou utilizar
import pandas as pd
import numpy as np



# criando um DataFrame com 30 transações aleatórias
df = pd.DataFrame({
    'ID da transação': range(1, 31),
    'Valor da transação': [100, 200, 150, 500, 300, 913, 250, 400, 200, 150, 
                           200, 200, 400, 300, 150, 301, 805, 300, 400, 250, 
                           150, 100, 500, 600, 200, 350, 100, 250, 800, 250],
    'Data da transação': pd.date_range(start='2022-01-01', end='2022-01-30', freq='D'),
    'Local da transação': ['São Paulo, Brasil', 'Rio de Janeiro, Brasil', 'Belo Horizonte, Brasil', 'São Paulo, Brasil', 
                           'São Paulo, Brasil', 'Nova Iorque, EUA', 'São Paulo, Brasil', 'São Paulo, Brasil', 'São Paulo, Brasil',
                           'Rio de Janeiro, Brasil', 'São Paulo, Brasil', 'São Paulo, Brasil', 'São Paulo, Brasil', 'São Paulo, Brasil',
                           'São Paulo, Brasil', 'São Paulo, Brasil', 'Los Angeles, EUA', 'São Paulo, Brasil', 'São Paulo, Brasil', 'São Paulo, Brasil',
                           'São Paulo, Brasil', 'São Paulo, Brasil', 'São Paulo, Brasil', 'São Paulo, Brasil', 'São Paulo, Brasil', 'São Paulo, Brasil',
                           'São Paulo, Brasil', 'São Paulo, Brasil', 'Miami, EUA', 'São Paulo, Brasil']
})


#Visualizando dados
df


import seaborn as sns
#Visualizando valores fora do padrao
sns.boxplot(x=df['Valor da transação'])

#Dados para analise com boxplot
Q1 = df['Valor da transação'].quantile(0.25)
Q3 = df['Valor da transação'].quantile(0.75)
IQR = Q3 - Q1
limite_inferior = Q1 - 1.5 * IQR
limite_superior = Q3 + 1.5 * IQR


#Criando um filtro
outliers_index =  (df['Valor da transação'] < limite_inferior) | (df['Valor da transação'] > limite_superior)


#As transações fora do comum foram
df[outliers_index]

#Printando
fora_padrao = df['Valor da transação'].nlargest(3).values
print(f'Os valores fora do padrão foram: R${fora_padrao[0]:,.2f}, R${fora_padrao[1]:,.2f}, R${fora_padrao[2]:,.2f}')
1 resposta

Oi, Mateus! Tudo bom?

Excelente! Siga praticando com os desafios e sempre compartilhe conosco.

Você soube aplicar o boxplot do Seaborn para detectar outliers de forma eficiente, aproveitou o conceito de IQR (Intervalo Interquartil) para isolar valores atípicos e entendeu como a visualização dos dados foi essencial para analisar as transações com maior clareza.

Como dica adicional, experimente utilizar o método query() quando precisar aplicar filtros de forma mais legível. Assim:

df.query("`Valor da transação` > @limite_superior")

Resultado: Exibe apenas as transações com valores acima do limite superior.

Com isso, você poderá filtrar os dados com um código mais limpo.

Ícone de sugestão Para saber mais:

Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:

Alguns materiais estão em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!