ocefpaf / pyrantine

Aulas de Python durante a quarentena
3 stars 6 forks source link

Exercício 03: CTD #12

Open ocefpaf opened 4 years ago

ocefpaf commented 4 years ago

O exercício está no notebook pyrantine/notebooks/02-CTD/02-HW-A.ipynb. Para garantir que vocês tem a última versão do repositório lembrem de executar git pull antes de procurar o notebook.

Quem for completando vai colando o link do gist com o notebook aqui.

lisiheinzen commented 4 years ago

Filipe, apareceu esse erro tanto com o que vc utilizou na aula quanto para o 05001, quando eu tentei rodar

import ctd
cast = ctd.from_cnv(fname)

FileNotFoundError                         Traceback (most recent call last)
<ipython-input-7-7e47a0b20992> in <module>
      1 import ctd
      2 
----> 3 cast = ctd.from_cnv(fname)

C:\Miniconda3\envs\PYCOURSE\lib\site-packages\ctd\read.py in from_cnv(fname)
    347 
    348     """
--> 349     f = _read_file(fname)
    350     metadata = _parse_seabird(f.readlines(), ftype="cnv")
    351 

C:\Miniconda3\envs\PYCOURSE\lib\site-packages\ctd\read.py in _read_file(fname)
     58     extension = fname.suffix.lower()
     59     if extension in [".gzip", ".gz", ".bz2", ".zip"]:
---> 60         contents = _open_compressed(fname)
     61     elif extension in [".cnv", ".edf", ".txt", ".ros", ".btl"]:
     62         contents = fname.read_bytes()

C:\Miniconda3\envs\PYCOURSE\lib\site-packages\ctd\read.py in _open_compressed(fname)
     38         # zipfile!  Also, we ask for the name because it can be different from
     39         # the zipfile file!!
---> 40         zfile = zipfile.ZipFile(str(fname))
     41         name = zfile.namelist()[0]
     42         cfile = zfile.open(name)

C:\Miniconda3\envs\PYCOURSE\lib\zipfile.py in __init__(self, file, mode, compression, allowZip64, compresslevel, strict_timestamps)
   1249             while True:
   1250                 try:
-> 1251                     self.fp = io.open(file, filemode)
   1252                 except OSError:
   1253                     if filemode in modeDict:

FileNotFoundError: [Errno 2] No such file or directory: 'CTD-data\\05001.cnv.zip'
ocefpaf commented 4 years ago

Ele está procurando o arquivo em CTD-data\\05001.cnv.zip. Das duas uma, ou o notebook não está no diretório anterior ao CTD-data ou você precisa fazer o git pull para atualizar a sua cópia do repositório e pegar esse arquivo.

Antes de qq coisa checar o diretório pyrantine/notebooks/02-CTD/CTD-data/ e vê se o arquivo está lá.

lisiheinzen commented 4 years ago

A gente arruma uma coisa e depois vem outro erro hahaha Em:

%matplotlib inline

from matplotlib import style

style.use("seaborn-whitegrid")

down["t090C"].plot_cast()
down["c0S/m"].plot_cast()

Apareceu esse erro:

KeyError                                  Traceback (most recent call last)
C:\Miniconda3\envs\PYCOURSE\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   2645             try:
-> 2646                 return self._engine.get_loc(key)
   2647             except KeyError:

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 'c0S/m'

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
<ipython-input-34-07b0df9173aa> in <module>
      6 
      7 down["t090C"].plot_cast()
----> 8 down["c0S/m"].plot_cast()

C:\Miniconda3\envs\PYCOURSE\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
   2798             if self.columns.nlevels > 1:
   2799                 return self._getitem_multilevel(key)
-> 2800             indexer = self.columns.get_loc(key)
   2801             if is_integer(indexer):
   2802                 indexer = [indexer]

C:\Miniconda3\envs\PYCOURSE\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   2646                 return self._engine.get_loc(key)
   2647             except KeyError:
-> 2648                 return self._engine.get_loc(self._maybe_cast_indexer(key))
   2649         indexer = self.get_indexer([key], method=method, tolerance=tolerance)
   2650         if indexer.ndim > 1 or indexer.size > 1:

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 'c0S/m'
ocefpaf commented 4 years ago

A gente arruma uma coisa e depois vem outro erro hahaha

Normal. Programação no início é uma briga com a sintaxe, depois uma briga com os dados, depois e jogar tudo fora e aprender algo novo.

O erro é `KeyError: 'c0S/m', o que significa que no seu DataFrame do CTD a coluna da condutividade pode ter outro nome, provavelmente por estar em outra unidade.

Faz down.columns para ver os nomes e procura o que parece ser condutividade, depois muda em todos os pontos do notebook.

lisiheinzen commented 4 years ago

https://gist.github.com/lisiheinzen/bfbd998a6d427ddeae9a4d206d5a3eab

Filipe, consegui terminar, mas não sei se está certo porque os gráficos ficaram muito estranhos e teve um que ficou em branco e não entendi o porque (o do unfiltered e filtered). Gostaria de entender quando você puder :)

ocefpaf commented 4 years ago

@lisiheinzen o problema de algumas figuras não aparecer não é culpa sua, é um bug da biblioteca de visualização ao adicionar a legenda. Note que eu mudei como mostrar a legenda na solução de

lines = ax0.get_lines() + ax1.get_lines()
leg = {line: line.get_label() for line in lines}
ax0.legend(leg.keys(), leg.values())

para

ax0.legend(loc="lower left")
ax1.legend(loc="lower right")

na real, se você ainda tiver a versão antiga do ctd, o notebook vai funcionar OK, mas se atualizar vai precisar dessa correção.

Já o problema do unfiltered vs filtered é o intervalo mostrado. No meu exemplo ele é acertado para aqueles dados, vocês precisam re-acertar o intervalo. A melhor forma é mudar para %matplotlib notebook para ter gráficos interativos, escolher o novo intervalo usado zoom na linha, e depois colocar o intervalo no axis. Coloquei um na solução abaixo também, mude de

ax.axis([20870, 20930, 557.5, 559])  # intervalo de zoom antigo

para

ax.axis([23089, 23093, 271.15, 271.50])  # intervalo de zoom novo

Fiz isso de propósito para ver se vocês se davam conta que, com dados diferentes, alguns ajustes seriam necessários. Tem mais um ajuste, relacionado ao #15, que tem a solução abaixo. Vamos ver se você nota e comenta ;-p

https://nbviewer.jupyter.org/gist/ocefpaf/8645f977208efd16f8c7ecaf038cf7e0