segunda-feira, 28 de janeiro de 2013

Data Frame - R and Python

Para acessar alguns dados com R, e poder realizar operações, utilizamos a função data.frame podendo agrupando fatores entre outras operações. Em Python a coisa pode ser bastante parecida e com diversas funcionabilidades do pacote Pandas [1] para Python.

Digamos uma tabela da seguinte maneira:
ID sp1 sp2 sp3
C1   1   3   2
C1   3   2   0
C1   2   1   1
C2   2   4   0
C2   1   3   1
C3   0   3   4
C3   2   1   2

#! /usr/bin/R
> dados = read.table('dados.txt', header=T)
> dados
  ID sp1 sp2 sp3
1 C1   1   3   2
2 C1   3   2   0
3 C1   2   1   1
4 C2   2   4   0
5 C2   1   3   1
6 C3   0   3   4
7 C3   2   1   2

> attach(dados)

# transformando a coluna ID em fator.
> dados$ID <- data-blogger-escaped-colunas="" data-blogger-escaped-dados.="" data-blogger-escaped-dados="" data-blogger-escaped-das="" data-blogger-escaped-de="" data-blogger-escaped-factor="" data-blogger-escaped-uma="" data-blogger-escaped-ver=""> dados$sp1
[1] 1 3 2 2 1 0 2

# para fazer uma média, por exemplo, utilizando o fator ID.
> xsp1 <- data-blogger-escaped-mean="" data-blogger-escaped-sp1="" data-blogger-escaped-tapply="" id=""> xsp1
 C1  C2  C3 
2.0 1.5 1.0 

Para fazer isso em Python, você poderia usar o numpy, simplesmente, ou usar as elegantes ferramentas do "pandas". Para quem vem do R, o Pandas é uma forma fácil de se entender com dados tabelados e cheios de fatores.
>>> import pandas as pd
>>> dados = pd.read_table('dados.txt',sep=" ")
>>> dados
   ID  sp1  sp2  sp3
0  C1    1    3    2
1  C1    3    2    0
2  C1    2    1    1
3  C2    2    4    0
4  C2    1    3    1
5  C3    0    3    4
6  C3    2    1    2

# Acessar somente uma das colunas.
>>> dados['sp1']
0    1
1    3
2    2
3    2
4    1
5    0
6    2
Name: sp1

# Para fazer a média, com a função groupby
>>> dados.groupby('ID').sp1.mean()
ID
C1    2.0
C2    1.5
C3    1.0
Name: sp1

# Ainda é possível fazer várias coisas com o objeto dados (que agora é um DataFrame).
# Por exemplo, pegar a média e a variância, ordenados por ID.
>>> dados.groupby('ID').sp1.agg(['mean', 'var'])
    mean  var
ID           
C1   2.0  1.0
C2   1.5  0.5
C3   1.0  2.0

Até mais.
[1] http://pandas.pydata.org/

segunda-feira, 10 de dezembro de 2012

Latitude e Longitude - Ice cover - NSIDC

Aproveitando o tempo de recesso sem postagens, vou falar um pouquinho de como fiz para construir as matrizes de lat e long, dos dados de gelo do NSIDC, com as dicas da Claudinha Parise.

Os dados estão em formato binário, como integer e armazenados de 4 em 4 bytes (em Little endian)[1]. Não sei se o matlab chegaria a dar problemas com isso, mas em Python é bom especificar. ("<" Little Endian; ">" Big Endian); o "i" é de integer, "u" seria de string(unicode)[2]. Essa foi a dica do Irber; pois eu tava usando dtype = 'uint32', pensando somente na questão dos 4 bytes e esquecendo do "little endian".

Dessa forma, baixa-se o dado de latitude para o hemisferio sul [aqui] e divide-se por 100000 para ter os graus decimais. Mesmo procedimento para a Longitude.

import numpy as np
f = open('pss25lats_v2.dat','rb')
lat = np.fromfile(f, dtype='<i4')/100000.
lat = lat.reshape(332,316)
f.close()


[1] http://nsidc.org/data/polar_stereo/tools_geo_pixel.html

[2] http://docs.scipy.org/doc/numpy/user/basics.byteswapping.html

quinta-feira, 1 de novembro de 2012

Loops 'tradicionais'

Meu camarada Irber, relembrando como fazer um loop 'tradicionalista' onde se pegam os índices dos ítens de uma lista ou de um numpy array, usando o enumerate, para pegar o valor e seu "índice".

Buscando, dessa forma, um loop tradicionalista, porém mais pythonico (eu acho).
valores = ([1,3,5,7,9])
for i, value in enumerate(valores):
    print i, value

Out[2]:
0 1
1 3
2 5
3 7
4 9
Sendo o jeito um tanto mais "conservador" e talvez menos pythonico:
for i in xrange(len(valores)):
    print i, valores[i]

Out[4]:
0 1
1 3
2 5
3 7
4 9
Até mais.

sexta-feira, 28 de setembro de 2012

Livros II - Oceanic Sciences and Hydrology

Um livro interessante, sobre Python aplicado às ciências atmosféricas e oceânicas.
A Hands-On Introduction to Using Python in the Atmospheric and Oceanic Sciences
Outro livro bacana é sobre a utilizacão do Python em hidrologia.
Python in Hydrology
Boas leituras.

terça-feira, 31 de julho de 2012

Livro: Estudos Oceanográficos

Está disponível para download o livro:
Estudos Oceanográficos - do instrumental ao prático
Organizado pelo Professor Danilo Calazans - FURG.

Outros livros estão disponíveis no site do Ciências do Mar.

Boas leituras!

sexta-feira, 8 de junho de 2012

Papers - Oceanography and Python


Dando parabéns aos Oceanógrafos pelo "dia do Oceanógrafo", seguem algumas leituras do dia de hoje.

[1] - Geophysical data analysis using Python - Computers & Geosciences (2002)
[2] - OOFɛ: A Python engine for automating regional and coastal ocean forecasts - Environmental Modelling & Software (2011)

Encontrei esse trabalho[1] dos Bascos autores do PyClimate (Jon Sáenz, Juan Zubillaga, Jesús Fernández), falando sobre o pacote PyClimate e a implementação de ferramentas básicas para a oceanografia.

Funções de distribuição de probabilidades (PDF's), método de EOF e SVD, uso de netCDF, como trabalhar com dias julianos nas convenções do Cooperative Ocean/Atmosphere Research Data Service (COARDS), filtros multivariados e outros detalhes.

O segundo trabalho[2] é um pacote de ferramentas para trabalhar com o ROMS automatizar previsões costeiras entre outras coisas. Uma demostração do que já é aplicado no Brasil está aqui: http://oceano.fis.ufba.br/oof/main/forecast.php
Ainda não disponibilizado o código (não sei o porquê ainda), mas ele referencia outras ferramentas da modelagem que integram o FORTRAN, como o a implementação do modelo atmosférico Neelin-Zeng QTCM1 (feito já em python http://www.johnny-lin.com/py_pkgs/qtcm/ ).

Anexos:
[1]
[2]

Boas leituras.

sábado, 5 de maio de 2012

Python pra Oceanógrafos

Aqui vão alguns módulos para trabalhar com dados oceanográficos.

oceans # http://pypi.python.org/pypi/oceans/
seawater # http://pypi.python.org/pypi/seawater/2.0.1
pyclimate # http://www.pyclimate.org/
pyhdf # http://pysclint.sourceforge.net/pyhdf/
pupynere # para trabalhar com netcdf (http://pypi.python.org/pypi/pupynere/1.0.15 )
puppy # http://pypi.python.org/pypi/Puppy/0.1.4
pydap # http://pydap.org/
pandas # http://pandas.pydata.org/
rpy2 # http://rpy.sourceforge.net/
f2py # http://www.scipy.org/F2py
GDAL # http://www.gdal.org/
pyModis # https://github.com/lucadelu/pyModis

E vai o link do wiki_livros, para você que já é experiente no uso... ajuda lá! =]
http://pt.wikibooks.org/wiki/Python_para_oceanógrafos