Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Incluir a distribuição de frequência no DataFrame

Olá!

Na parte 02 do curso, o instrutor nos ensina como construir a distribuição de frequência após definir a quantidade de intervalos (o k de Sturges).

No DataFrame usado na aula, a tabela já estava pronta (A, B, C.. etc). Considerando que eu tenha um df com diversos valores e queira classificá-los de acordo com o intervalo, como poderia fazer?

Basicamente, tenho um DataFrame com varios preços. O numero de intervalos resultou em 17. Gostaria que esse intervalo fosse incluído no meu DataFrame

A saída esperada seria algo do tipo:

    casa            preco                intervalo        
        A        580.000.000        67.374.999 - 583.333.333
        B        1.700.000.0        1.600.000.0 - 2.108.333.333
        C        600.000.000        67.374.999 - 583.333.333

Como calculei:

## Sturges == k = 1 + (10/3).log n 

n = df.shape[0]
k = int(round(1 + (10/3) * np.log10(n)))
k ##frequency

## k == 17
## Frequency table

## count
frequency = pd.value_counts(
    pd.cut(x = df.price, bins = k, include_lowest = True), sort = False)

## percentage
percentage = pd.value_counts(
pd.cut(x=df.price, bins = k, include_lowest = True), sort = False, normalize = True) *100 

## Formatting Frequency Table
frequency_table = ({'frequency' : frequency, 'percentage' : percentage})

frequency_table = pd.DataFrame(frequency_table)

frequency_table.rename_axis('price', axis = 'columns', inplace = True)
frequency_table

Meu notebook está no GitHub, saída 148 https://github.com/daianeklein/house-rocket-Insights-project/blob/master/House-Rocket-Company.ipynb

O que eu não consegui fazer é o pandas entender que preço é uma coluna:

frequency_table.columns

out [ ]

Index(['frequency', 'percentage'], dtype='object', name='price')

Desculpem o tamanho da pergunta, estou há alguns dias tentando encontrar uma forma de fazer isso. Obrigada!

1 resposta
solução!

Consegui a resposta procurando na documentação. Segue minha solução caso alguém se depare com a mesma situação:

Fiz o reset do índice. Ao transformar as variáveis em um DataFrame, o intervalo calculado pela função cut se transformou no índice. Por esse motivo não estava conseguindo visualiza-lo como uma coluna (falta de atenção besta, mas ok)

frequency_table.reset_index(inplace=True)

Alterei o nome da coluna

frequency_table.rename(columns={'index' : 'range'}, inplace = True)

E inclui no DataFrame "original".

De forma mais rápida e simples:

df['range_price'] = pd.cut(x = df.price, bins = k, include_lowest = True)

onde:

k == cálculo de Sturges

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software