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

Desafio Projeto - Criar tabela com distribuição de frequências

Oi gente!

No projeto do curso, gostaria de adicionar uma tabela com a distribuição (%) de cores e renda, assim:

Tabela de frequências

Eu montei essa tabela "na mão", calculando os valores de cada uma das colunas e depois criando o dataframe.

É possível usar o scipy para chegar nesse resultado de forma mais assertiva?

2 respostas
solução!

Olá, Kamilla! Tudo bem? Espero que sim!

Você pode utilizar os métodos do próprio Pandas para fazer essa tabela de frequência relativa. Nós vamos começar utilizando o DataFrame do curso:

import pandas as pd

df = pd.read_csv("dados.csv")

# Código para trocar as variáveis categórias de Cor.
df['Cor']= df['Cor'].replace({0:"Indígena",
                              2:"Branca",
                              4:"Preta",
                              6:"Amarela",
                              8:"Parda",
                              9:"Sem declaração"})

df.head(5)

E a saída esperada é:

UFSexoIdadeCorAnos de EstudoRendaAltura
011023Parda128001.60381
111123Branca1211501.73979
211135Parda158801.76044
311046Branca635001.78316
411147Parda91501.69063


Distribuição Populacional

Para calcular a distribuição populacional nós vamos fazer uma contagem das ocorrências para cada valor em Cor, e depois nós vamos utilizar o parâmetro normalize = True para receber a frequência relativa. Da seguinte maneira:

distribuicao_populacional = df['Cor'].value_counts(normalize = True).to_frame() * 100
distribuicao_populacional

Com a saída esperada:

Cor
Parda46.753
Branca41.4042
Preta10.9201
Indígena0.464602
Amarela0.458095

O método to_frame()foi utilizado para transformar o resultado em um Pandas DataFrame, isso vai facilitar a junção com o próximo resultado.


Distribuição de Renda

Para a distribuição de Renda, nós precisamos primeiro fazer uma operação de agrupamento dos dados através da coluna Cor, e somente depois de ter os dados agrupados por ela, nós podemos calcular a proporção deles com base na renda total.

Para fazer o agrupamento, nós vamos usar o método groupby(), precedido da função de soma. E o resultado disso vai ser normalizado com o valor da soma de todas as rendas. Conforme o código abaixo:

distribuicao_renda = df[['Cor', 'Renda']].groupby('Cor').sum() / sum(df['Renda']) * 100
distribuicao_renda

Que possui saída esperada:

CorRenda
Amarela0.957903
Branca55.4507
Indígena0.342088
Parda35.3758
Preta7.87349

Agora nós temos dois pd.DataFrame com os mesmos índices, podemos utilizar a função pd.concat(), que recebe uma lista de DataFrames e os junta através de linhas ou colunas (parâmetro axis). Então o nosso código fica:

pd.concat([distribuicao_populacional, distribuicao_renda], axis = 1)

E a saída esperada é:

CorRenda
Parda46.75335.3758
Branca41.404255.4507
Preta10.92017.87349
Indígena0.4646020.342088
Amarela0.4580950.957903

Pronto, agora nós temos um procedimento que calcula a mesma tabela para vários valores do seu Dataset :D.

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!

Obrigada Marcus!