quinta-feira, 28 de novembro de 2013

Ciclotux.blogspot.com está desativado!

Deixo aqui o redirecionamento para a continuidade desse bloBs, Python Powered!

CicloTux.org


Se você mantém algum feed desse blog, por favor modifique o seu apontador.

Até mais.

segunda-feira, 18 de novembro de 2013

O amor tambem fala Python

Encontrei uma maneira elegante para dizer " Baixinha, eu te amo!"
Claro que é um tanto Pythonico, mas como o amor pode ser expresso em qualquer linguagem, por que não em Python?
In  [3]: Baixinha(eu[te <3 ])
Out [3]: 'E eh inf!'
Eu digo, "Baixinha eu te amo"

Como eu sou muito amigo do Python... ele já sabe disso e complementa. "E eh infinito"!

Como o mínimo de amor que ela aceita é um <3 , escrevi uma função Python para isso.

import numpy as np

eu = 'eu'
te = 'te'

def Baixinha(val):
    if val < '<3':
        raise ReferenceError
    else:
        return 'E eh %f!' % np.inf

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

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!