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 é:
| UF | Sexo | Idade | Cor | Anos de Estudo | Renda | Altura |
|---|
| 0 | 11 | 0 | 23 | Parda | 12 | 800 | 1.60381 |
| 1 | 11 | 1 | 23 | Branca | 12 | 1150 | 1.73979 |
| 2 | 11 | 1 | 35 | Parda | 15 | 880 | 1.76044 |
| 3 | 11 | 0 | 46 | Branca | 6 | 3500 | 1.78316 |
| 4 | 11 | 1 | 47 | Parda | 9 | 150 | 1.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 |
|---|
| Parda | 46.753 |
| Branca | 41.4042 |
| Preta | 10.9201 |
| Indígena | 0.464602 |
| Amarela | 0.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:
| Cor | Renda |
|---|
| Amarela | 0.957903 |
| Branca | 55.4507 |
| Indígena | 0.342088 |
| Parda | 35.3758 |
| Preta | 7.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 é:
| Cor | Renda |
|---|
| Parda | 46.753 | 35.3758 |
| Branca | 41.4042 | 55.4507 |
| Preta | 10.9201 | 7.87349 |
| Indígena | 0.464602 | 0.342088 |
| Amarela | 0.458095 | 0.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!