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

Dúvida função 'iloc' em nPassageiros

Boa tarde Allan,

Gostaria de saber por que você usou a notação "Tempo = passageiros.iloc[ : , : - 1].values" , mas especificamente o trecho "[ : , : - 1]" da função 'iloc' para pegar os valores da primeira coluna referente aos anos ?

Ou seja, não poderíamos usar 'iloc' diretamente na primeira coluna com o índice 'zero' da seguinte forma :

"Tempo = passageiros.iloc[ : , 0].values" ?

5 respostas

Olá Jayson,

Bem observado esse detalhe, mas se você olhar o resultado de cada um vai perceber que tem uma pequena diferença.

Utilizando o [:, 0] vamos receber uma lista com os valores da coluna 0, já com [:, :-1] vamos receber uma lista de listas com os valores da coluna porque ao utilizar a técnica de slicing (:) o retorno é dentro de uma lista:

# Com [:, 0]
array([1949.        ,
       1949.08333333,
       1949.16666667,
       ...
# Com [:, :-1]
array([[1949.        ],
       [1949.08333333],
       [1949.16666667],
       ...

Essa diferença no formato do resultado vai impactar mais na frente onde é esperado um array de 2 dimensões (2D) no valor de X em regressor.fit()

Espero ter ajudado, qualquer dúvida é só falar!

Olá Lucas,

Muito obrigado pela rápida resposta! Show mesmo!

Muito obrigado também pela riqueza de detalhes na resposta! Isso ajuda muito a entender o que acontece por debaixo dos panos no código.

Realmente eu encontrei um erro quando usei o iloc[ : , 0 ] dizendo que é esperado um array de 2 dimensões como você mencionou no regressor.fit().

E compreendendo mais a fundo, temos um par de coordenadas (x, y) para ponto da curva de regressão sendo 'x' é o 'Tempo' e 'y' é 'nPassageiros', ou seja, temos uma matriz bidimensional com 'x' e 'y', ou 'Tempo' e 'nPassageiros'.

Desta forma, ainda não está claro para mim por que o 'Tempo' ('x') tem ser um array de 2 dimensões ? A variável 'Tempo', neste caso, não tem somente 1 dimensão ?

Como você observou realmente nesse caso temos apenas uma dimensão para o X (o Tempo), mas o fit está preparado para casos gerais onde é possível ter mais de uma dimensão para o X, e utilizando um formato de array podemos ter 1 ou vários elementos.

Por exemplo, em um outro caso temos os dados de idade, sexo, pressão arterial e o IMC de um grupo de pessoas e queremos tentar prever quem vai ter diabetes. Nesse caso temos várias dimensões para o X.

Parabéns pela atenção aos detalhes e pela curiosidade, bons estudos!

solução!

Bom dia Jayson,

Você está correto. O tempo tem somente uma dimensão. A escolha do iloc nesta forma "Tempo = passageiros.iloc[ : , : - 1].values" foi feita para ter um impacto menor nas funções mais pra frente na função predict. Nós temos o tempo que é a variável x (unidimensional) e queremos prever o y. Mas também podemos ter uma variável X com mais colunas (multidimensional). Acredito que seja por isso que a função predict recebe o x no formato escolhido com mais facilidade.

Boa tarde Lucas e Allan,

Muito obrigado realmente pelas excelentes explicações! É essa atenção e empatia que os moderadores e instrutores da Alura têm que nos fazem seguir em frente mesmo com tantas dúvidas que são normais durante os estudos!

Allan, parabéns pela didática do curso! Já favoriteu seus outros cursos na plataforma Alura para fazer.

Forte abraço!