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

[Dúvida] Sobre a função np.loadtxt no exercício

Dúvida 1: Sobre a função arrange não entendi porque se usa o número 6. Achei que teria que ser 7 pra tirar o último como foi na aula no caso dos números 87 e 88. Pensei assim: "são 6 colunas então vou colocar 7 pra cortar o último número". Usei esse código e deu erro:

import numpy as np
url = 'https://raw.githubusercontent.com/allanspadini/numpy/dados/citrus.csv'
dado = np.loadtxt(url, delimiter=',',usecols=**np.arange(1,7,1),**skiprows=1,dtype=float)

Dúvida 2: Nesse mesmo código na parte do skiprows, vi que na resposta não precisa da parte do dtype, qual seria a função do dtype mesmo?

3 respostas

Olá Filipe! Tudo ok contigo?

Vou tentar esclarecer suas dúvidas sobre o código que você está trabalhando.

Dúvida 1: A função np.arange(1,7,1) está criando uma sequência de números que começa em 1 e vai até 6 (o número 7 não está incluso). Essa sequência é usada para indicar as colunas que você quer carregar do arquivo csv. Se você tem 6 colunas e quer carregar todas elas, exceto a primeira, você deve usar np.arange(1,6,1). Se você tentar usar np.arange(1,7,1), o código vai tentar carregar uma sétima coluna que não existe, e por isso você está recebendo um erro. Mas talvez o erro que você recebeu pode não estar relacionado a isso, se compartilhar o seu erro para nós podermos lhe ajudar melhor fique à vontade.

Dúvida 2: O parâmetro dtype é usado para especificar o tipo de dados que você espera encontrar no arquivo. Se você não o incluir, a função np.loadtxt vai tentar adivinhar o tipo de dados com base no conteúdo do arquivo. No seu caso, como todos os dados são números, você pode omitir o dtype e a função vai assumir que os dados são números. No entanto, se você tivesse dados mistos (por exemplo, números e strings) no arquivo, seria útil especificar o dtype para garantir que os dados sejam lidos corretamente.

Aqui está o código corrigido:

import numpy as np
url = 'https://raw.githubusercontent.com/allanspadini/numpy/dados/citrus.csv'
dado = np.loadtxt(url, delimiter=',',usecols=np.arange(1,6,1),skiprows=1)

Era isso.

Caso precise é só falar.

Espero ter ajudado, abraços e bons estudos!

Oi Renan, agradeço o esclarecimento da dúvida 2. Quanto à dúvida 1, o erro foi exatamente o que você disse sobre o número de colunas:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-4-9d14aa3fcaf2> in <cell line: 3>()
      1 import numpy as np
      2 url = 'https://raw.githubusercontent.com/allanspadini/numpy/dados/citrus.csv'
----> 3 dado = np.loadtxt(url, delimiter=',',usecols=np.arange(1,7,1),skiprows=1,dtype=float)

1 frames
/usr/local/lib/python3.10/dist-packages/numpy/lib/npyio.py in _read(fname, delimiter, comment, quote, imaginary_unit, usecols, skiplines, max_rows, converters, ndmin, unpack, dtype, encoding)
    997 
    998         if read_dtype_via_object_chunks is None:
--> 999             arr = _load_from_filelike(
   1000                 data, delimiter=delimiter, comment=comment, quote=quote,
   1001                 imaginary_unit=imaginary_unit,

ValueError: invalid column index 6 at row 1 with 6 columns

Só ainda não entendi a diferença na resolução desse exercício para o primeiro exercício do curso mostrado na aula. Lá foi usado o número 88 para as colunas em vez do 87. Essa foi a URL raw: https://raw.githubusercontent.com/alura-cursos/numpy/dados/apples_ts.csv Acabei seguindo essa mesma lógica nesse https://raw.githubusercontent.com/allanspadini/numpy/dados/citrus.csv e não deu certo. Qual seria a diferença?

solução!

Olá, Filipe! Tudo ok contigo?

Peço minhas mais sinceras desculpas pela demora em obter um retorno!

Nesse caso o que gerou esse comportamento foi o fato que a coluna que desejávamos excluir do carregamento não era do tipo numérica, ela era do tipo string, isso fez a função só ignorar a primeira coluna de cara, então quando você usou np.arange(1,7,1) gerou um erro.

Isso também é explicado aqui no minuto 4:35 lá é falado que vamos trabalhar somente com valores numéricos.

Era isso, espero ter ajudado!

Abraços e bons estudos!