Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

dataframe (dúvida básica)

oi amigos, na aula vídeo https://cursos.alura.com.br/course/introducao-python-pandas/task/41000 deparei me com um probleminha aqui.

"Rapidamente perceberemos alguns problemas: percebemos que o desvio padrão (std) apresenta uma variação muito grande no caso de Botafogo, o mesmo ocorre para Barra da Tijuca. No caso de valor máximo, perceberemos valores estranhos também; segundo a tabela, existem imóveis disponíveis em Botafogo com a locação de 4500000.0."

ok, mas se meu dataframe tiver milhões de linhas, como saberei qual std apresenta maior variação? Qual comando uso para encontrar os maiores std na serie ?

obrigado !!!

4 respostas

Olá, Otto! Tudo bom?

No método pd.DataFrame.describe() o std apresentado representa uma função interna do Pandas para calcular o Desvio Padrão, e matematicamente falando, o desvio padrão é a raiz quadrada da média de cada distância à média do conjunto elevado ao quadrado. É descrita pela equação:

Imagem com fundo branco contendo uma escrita de uma fórmula matemática do desvio-padrão da população. Na equação, a letra grega sigma é igual começa_raiz_quadrada, começa_divisão, começa_numerador, começa_somatório de abre_parênteses incógnita x sobrescrito i menos letra grega mi, fecha_parênteses elevado ao quadrado finaliza_somatório, finaliza_numerador, inicia_denominador incógnita N finaliza_denominador, finaliza_divisão, finaliza_raiz_quadrada. Abaixo da fórmula, nós temos as descrições das incógnitas. Onde a letra grega sigma representa o desvio padrão da população. A incógnita N representa o tamanho da população, a incógnita X sobrescrito i representa cada valor da população, e a letra grega mi representa a média da população.

O Desvio-padrão é uma medida de dispersão que nós informa se os dados de um conjunto são muito dispersos entre si, ou se seguem uma tendência de uma distribuição normal.

Em um Dataframe com milhões de linhas, ainda teríamos a mesma única informação a cerca de todo o conjunto, um número que, em média, representa a dispersão em torno da média do conjunto.

Mas podemos ainda verificar se, por exemplo, um dado está distante demais média fazendo uma comparação entre o valor da média e quantos múltiplos do desvio-padrão são necessários para chegar até o valor.

Então quando o instrutor olha para o desvio-padrão, o valor médio e o valor máximo, é possível perceber que o valor máximo é maior que a média somada a três vezes o valor do desvio padrão.

valor_maximo >= valor_medio + 3 * desvio_padrao

E se o cenário análisado fosse uma distribuição normal, isso seria considerado um número muito alto.

Então junto ao fator de serem mais de 4.5 milhões para alocação no aluguel, utilizando as médidas de dispersão ainda verificamos que o conjunto de dados é disperso, e que o valor máximo realmente representa um possível outlier.

Vão existir outros métodos para olhar com mais calma para possíveis outliers e metodologias gráficas para entender melhor cada conjunto de dados.

Se ainda tiver alguma dúvida, estou por aqui. Ótimos estudos e grande abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

oi Marcus! Como vai, amiguinho? por exemplo, o dataframe abaixo é exibido com esses pontinhos no meio. Minha dúvida é qual comando posso usar para saber quais bairros tem maior std ? Como faço para ter essa visualização completa do dataframe para que eu possa detectar os maiores std ? Muito grato pela sua atenção!!! abração

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

solução!

Olá, Otto! Vou muito bem, obrigado!

O método pd.DataFrame.describe() te retorna um objeto do tipo pd.DataFrame, então isso significa que essa resposta que é mostrada na tela também pode ser tratada como uma tabela do Pandas, e nós só precisamos armazená-la em uma variável e depois utilizar.

Nós podemos armazená-la fazendo:

df_descricao = grupo_bairro['Valor'].describe().round(2)
df_descricao

E podemos verificar que realmente é um objeto pd.DataFrame do Pandas usando o comando:

type(df_descricao)

Saída:

pandas.core.frame.DataFrame

E agora que nós temos um Dataframe do Pandas, nós podemos tratar, por exemplo, a coluna mean (ou a std) e obter os maiores valores de média ordenando o DataFrame por esta coluna. E para ordenar DataFrames utilizamos o método pd.DataFrame.sort_values(), com o parâmetro asceding = False para ir do maior para o menor, em ordem decrescente. Da seguinte maneira

df_descricao['mean'].sort_values(ascending = False)

E a saída esperada é:

Bairro
Ipanema            9352.00
Botafogo           8791.83
Leblon             8746.34
Barra da Tijuca    7069.55
Copacabana         4126.68
Flamengo           4113.53
Tijuca             2043.52
Name: mean, dtype: float64

Desse modo, você consegue ter uma lista ordenada dos bairros com os maiores valores observados.

Essa ainda é uma opção que mostra tela reduzida para Datasets muito grandes, mas você pode também alterar a opção de limite de visualização das linhas do Pandas e imprimir a tabela inteira, o que não é recomendável. Para isso, utilize o comando:

with pd.option_context('display.max_rows', None, 'display.max_columns', None):  # more options can be specified also
    print(df)

Se ainda tiver alguma dúvida, estou por aqui. Ótimos estudos e grande abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

oi, Marcos sua explicação foi excelente! Agradeço muito pela sua atenção!! um forte abraço, amigo!