Objetivos
Ler um CSV
e mostrar apenas o início da tabela.
In [ ]:
import pandas as pd
pd.read_csv('./data/dados_pirata.csv').head()
O read_csv
(e vários outros métodos do pandas) possuí uma infinidade de
opções para ajudar na leitura dos dados.
In [ ]:
df = pd.read_csv('./data/dados_pirata.csv',
index_col='datahora',
na_values=-99999,
parse_dates=True).drop('Unnamed: 0', axis=1)
df.tail()
Algumas facilidades do pandas é ter labels ricos em informação. Então vamos renomear as nossas colunas e ordená-las pela profundidade.
In [ ]:
df.columns = ['{0:0>3}'.format(col.split('_')[1]) for col in df.columns]
df.sort(axis=1, inplace=True)
df.head()
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
.
In [ ]:
df.dropna(how='all', axis=1, inplace=True)
df.head()
In [ ]:
desc = df.describe()
desc
Como será a variabilidade desses dados?
In [ ]:
desc.ix['std'] ** 2
In [ ]:
%matplotlib inline
ax = df[['001', '100', '180', '500']].plot()
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.
In [ ]:
df['001'].interpolate().plot()
df['001'].plot()
In [ ]:
df['001'].interpolate(method='time', limit=30).plot()
df['001'].plot()
Com o pandas vocês podem facilmente "re-amostar" uma série ou tabela para uma nova frequência temporal.
In [ ]:
import numpy as np
fig, ax = plt.subplots(figsize=(9, 5))
ax = df.resample('M', how=np.median).plot(ax=ax)
In [ ]:
key = lambda x: x.month
grouped = df.groupby(key)
monthly = grouped.mean()
monthly.shape
In [ ]:
fig, ax = plt.subplots(figsize=(9, 5))
ax = monthly.plot(ax=ax)
In [ ]:
key = lambda x: x.year
grouped = df.groupby(key)
yearly = grouped.mean()
yearly.shape
In [ ]:
fig, ax = plt.subplots(figsize=(9, 5))
ax = yearly.plot(ax=ax)
In [ ]:
ax = df.resample('A', how='mean').plot()
In [ ]:
for col in df.columns:
yearly[col] = ((yearly[col] - yearly[col].mean()) /
yearly[col].std(ddof=0))
In [ ]:
fig, ax = plt.subplots(figsize=(9, 5))
ax = yearly.plot(ax=ax)
In [ ]:
yearly.corr()
In [ ]:
!head ./data/15t30717.3f1
In [ ]:
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()
In [ ]:
ax = df['v'].plot()
In [ ]:
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']
In [ ]:
ax = df[['low', 'high']].plot(figsize=(9, 3))
In [ ]:
import geopandas as gpd
fname = "./data/2013-04-29-Running.geojson"
df = gpd.read_file(fname)
df.plot()
In [ ]:
from ctd import DataFrame
cast = DataFrame.from_cnv('./data/CTD_001.cnv.gz', compression='gzip')
cast.head()
In [ ]:
fig, ax = cast['t090C'].plot()