Olá, Marcel, tudo bem?
Sou eu de novo! hehehehe
Então, o método value_counts()
é responsável por contar a quantidade de vezes que determinada categoria aparece.
Quando estivermos trabalhando com valores numéricos, podemos utilizar o value_counts()
com o parâmetro bins
e passando a quantidade de intervalos que queremos dividir nossos dados. Entretanto, se desejarmos realizar separações manuais e mais personalizadas, podemos usar o método pd.cut()
para selecionar os intervalos fazendo cortes neles de acordo com o que desejamos.
O professor utilizou alguns parâmetros nesse método para que possamos construir a nossa tabela de frequências de maneira satisfatória. Vou explicar abaixo cada parâmetro e se ficar alguma dúvida me avisa, tá?
Para o exemplo da aula, utilizamos o pd.cut()
passando para ele, com nossos dados (parâmetro x), a coluna dados["Renda"]
, o parâmetro bins = 17
para dividirmos os dados em 17 intervalos e o parâmetro include_lowest = True
para considerarmos os valores mais à esquerda também (caso haja casos de valor 0). Já o parâmetro sort= False
no value_counts()
faz com que a nossa tabela de frequências não seja ordenado pela quantidade de valores em um dado intervalo, e sim de maneira crescente em relação aos intervalos. Então, nosso código seguiu esse formato:
Código:
pd.value_counts(
pd.cut( x = dados['Renda'], bins = 17, include_lowest = True),
sort = False )
Apresentando a saída:
(-200.001, 11764.706] 75594
(11764.706, 23529.412] 1022
(23529.412, 35294.118] 169
(35294.118, 47058.824] 19
(47058.824, 58823.529] 16
(58823.529, 70588.235] 5
(70588.235, 82352.941] 4
(82352.941, 94117.647] 1
(94117.647, 105882.353] 6
(105882.353, 117647.059] 0
(117647.059, 129411.765] 1
(129411.765, 141176.471] 0
(141176.471, 152941.176] 0
(152941.176, 164705.882] 0
(164705.882, 176470.588] 0
(176470.588, 188235.294] 0
(188235.294, 200000.0] 3
Name: Renda, dtype: int64
O output encontrado no seu exemplo tem como primeira coluna os intervalos das rendas e como segunda coluna a quantidade de registros que se encontram naquele intervalo.
Porque temos um intervalo negativo?
Usando o método describe podemos verificar, como esperado, que não existem valores negativos de renda. Ela varia de 0 até 200.000.
count 76840.000000
mean 2000.383199
std 3323.387730
min 0.000000
25% 788.000000
50% 1200.000000
75% 2000.000000
max 200000.000000
Name: Renda, dtype: float64
Então, o que explica esse intervalo negativo?
O método pd.cut()
possui um parâmetro chamado right
que por padrão é True
, e esse parâmetro indica se os bins
devem incluir a ponta dos dados mais à direita ou não, ou seja, se fixamos o último valor como o valor máximo do intervalo (logo, não são aceitos intervalos acima de 200.000) ou distribuímos os nossos dados com o primeiro valor à esquerda como o mínimo (logo, não são aceitos intervalos abaixo de 0).
Como podemos corrigir para não existir valores negativos como nosso intervalo?
Esse problema é facilmente ajustado. Nós só precisamos adicionar o parâmetro right=False
no método pd.cut()
. Assim o nósso código seria da seguinte forma:
pd.value_counts(
pd.cut(x = dados['Renda'], bins = 17, include_lowest = True, right = False),
sort = False )
Com a saída:
[0.0, 11764.706) 75594
[11764.706, 23529.412) 1022
[23529.412, 35294.118) 169
[35294.118, 47058.824) 19
[47058.824, 58823.529) 16
[58823.529, 70588.235) 5
[70588.235, 82352.941) 4
[82352.941, 94117.647) 1
[94117.647, 105882.353) 6
[105882.353, 117647.059) 0
[117647.059, 129411.765) 1
[129411.765, 141176.471) 0
[141176.471, 152941.176) 0
[152941.176, 164705.882) 0
[164705.882, 176470.588) 0
[176470.588, 188235.294) 0
[188235.294, 200200.0) 3
Name: Renda, dtype: int64
Note que agora os intervalos mais à esquerda são fechados "[" e os mais à direita são abertos ")".
Espero ter ajudado e qualquer dúvida é só chamar!
Forte abraço!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!