import pandas as pd

pd.read_csv('./data/dados_pirata.csv').head()

"""
Explanation: Aula 04 - pandas
Objetivos

Análise séries temporais
Ler, manipular e plotar dados tabulares
Guia de group-by e outras operações tabulares avançadas

Ler um CSV e mostrar apenas o início da tabela.
End of explanation
"""


df = pd.read_csv('./data/dados_pirata.csv',
                 index_col='datahora',
                 na_values=-99999,
                 parse_dates=True).drop('Unnamed: 0', axis=1)

df.tail()

"""
Explanation: O read_csv (e vários outros métodos do pandas) possuí uma infinidade de
opções para ajudar na leitura dos dados.
End of explanation
"""


df.columns = ['{0:0>3}'.format(col.split('_')[1]) for col in df.columns]

df.sort(axis=1, inplace=True)

df.head()

"""
Explanation: Algumas facilidades do pandas é ter labels ricos em informação.  Então vamos renomear as nossas colunas e ordená-las pela profundidade.
End of explanation
"""


df.dropna(how='all', axis=1, inplace=True)
df.head()

desc = df.describe()
desc

"""
Explanation: Outra facilidade é a limpeza da tabela, aqui jogamos fora todos os inválidos
(Not-a-Number) apenas quando todos os valores do eixo 1 (colunas) foram
NaN.
End of explanation
"""


desc.ix['std'] ** 2

%matplotlib inline

ax = df[['001', '100', '180', '500']].plot()

"""
Explanation: Como será a variabilidade desses dados?
End of explanation
"""


df['001'].interpolate().plot()
df['001'].plot()

df['001'].interpolate(method='time', limit=30).plot()
df['001'].plot()

"""
Explanation: Como já havíamos notado antes toda essa série parece ter um gap no mesmo 
lugar (provavelmente uma manutenção do fundeio).  Com o pandas podemos 
facilmente interpolar esse gap para obtermos uma série contínua.
End of explanation
"""


import numpy as np

fig, ax = plt.subplots(figsize=(9, 5))

ax = df.resample('M', how=np.median).plot(ax=ax)

"""
Explanation: Com o pandas vocês podem facilmente "re-amostar" uma série ou tabela
para uma nova frequência temporal.
End of explanation
"""


key = lambda x: x.month

grouped = df.groupby(key)

monthly = grouped.mean()
monthly.shape

fig, ax = plt.subplots(figsize=(9, 5))

ax = monthly.plot(ax=ax)

key = lambda x: x.year

grouped = df.groupby(key)

yearly = grouped.mean()
yearly.shape

fig, ax = plt.subplots(figsize=(9, 5))

ax = yearly.plot(ax=ax)

ax = df.resample('A', how='mean').plot()

for col in df.columns:
    yearly[col] = ((yearly[col] - yearly[col].mean()) /
                   yearly[col].std(ddof=0))

fig, ax = plt.subplots(figsize=(9, 5))

ax = yearly.plot(ax=ax)

yearly.corr()

!head ./data/15t30717.3f1

from datetime import datetime
from pandas import read_table

cols = ['j', 'u', 'v', 'temp', 'sal', 'y', 'mn', 'd', 'h', 'mi']

df = read_table('./data/15t30717.3f1' , delim_whitespace=True, names=cols)
dates = [datetime(*x) for x in
         zip(df['y'], df['mn'], df['d'], df['h'], df['mi'])]
df.index = dates
df.drop(['y', 'mn', 'd', 'h', 'mi', 'j'], axis=1, inplace=True)
df.head()

ax = df['v'].plot()

from oceans import lanc

freq = 1./40  # Hours
window_size = 96+1+96
pad = np.zeros(window_size) * np.NaN

wt = lanc(window_size, freq)
res = np.convolve(wt, df['v'], mode='same')

df['low'] = res
df['high'] = df['v'] - df['low']

ax = df[['low', 'high']].plot(figsize=(9, 3))

"""
Explanation: Group-by months/years (climatology)
End of explanation
"""


import geopandas as gpd

fname = "./data/2013-04-29-Running.geojson"

df = gpd.read_file(fname)

df.plot()

from ctd import DataFrame

cast = DataFrame.from_cnv('./data/CTD_001.cnv.gz', compression='gzip')

cast.head()

fig, ax = cast['t090C'].plot()

"""
Explanation: Pandas e seus irmãos
End of explanation
"""


