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

Projeto Machine Leaning - Calcular quantil e retornar nova serie de dados

Pessoal no projeto do curso de machine learning em determinada parte é solicitado para que criemos uma função que recebe uma serie de dados e um p que indica o quantil.

Essa função tem de retornar uma nova serie com os valores 0 e 1, aonde 0 é pra quem estava a baixo do quantil e 1 pra quem estava acima.

Sendo assim meu codigo ficou da seguente forma:

def top_p(serie, p = 0.75):

quant = np.quantile(serie, p)
print("quantile encontrado", quant)
y = pd.Series()
for i in serie:
  if serie[i-1] > quant:
    y = y.append(pd.Series([1]))
  else:
    y = y.append(pd.Series([0]))    
return y

A serie de dados que é utilizada para testar essa função é a seguinte:

pd.Series([1, 2, 3, 4, 5, 6, 7 , 8, 9, 10])

Até ai o código funciona perfeitamente, mas caso um desses valores deixe de ser um valor inteiro, por exemplo:

pd.Series([1, 2, 3.4, 4, 5, 6, 7 , 8, 9, 10])

E o codigo deixa funcionar. Os dados reais que eu tenho de utilizar nessa função não são dados inteiros e não estou conseguindo encontrar solução para o problema.

1 resposta
solução!

Olá Pablo, boa tarde!

O problema está nesta linha:

 if serie[i-1] > quant:

Como a Series armazena os índices em um objeto do tipo RangeIndex, só aceita inteiros .

Você pode usar a solução abaixo para evitar este problema:

for s in serie.values:
    if s > quant:
        y = y.append(pd.Series([1]))
    else:
        y = y.append(pd.Series([0]))

Espero ter ajudado e bons estudos!