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.
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!
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
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
Problemas para compilar. Python.h
Estava encontrando erro (Python.h: No such file or directory), para vários arquivos distintos, dependendo do pacote que ia instalar com o pip.
Fiz uma busca e não encontrei respostas para os pacotes que apresentavam problemas na compilação.
Em específico para a instalação do Pyclimate em uma das máquinas.
Para resolver isso:
Espero que ajude!
Fiz uma busca e não encontrei respostas para os pacotes que apresentavam problemas na compilação.
Em específico para a instalação do Pyclimate em uma das máquinas.
src/JDTime_wrap.c:44:20: fatal error: Python.h: Arquivo ou diretório não encontrado
Para resolver isso:
#!/bin/bash aptitude install python-devInstalará os headers e você poderá compilar normalmente.
Espero que ajude!
sábado, 28 de abril de 2012
Subset MODIS-Aqua (Clorofila-a)
Pegando o gancho com uma postagem [1] que já tinha guardada de um tempo e do pacote pyMODIS [2], resolvi fazer o meu subset de imagens MODIS em Python.
Para esse código, foram testadas apenas imagens L3 de Clorofila-a, já processadas pela agência espacial norte americana (NASA).
Para executar esse código, você precisará de uma imagem: Imagem MODIS de 9km.
Dê um bunzip2 no seu diretório, onde estão as imagens .bz2, para que o código abaixo identifique somente as imagens sem a extensão (.bz2).
Um detalhe, é que abaixo segue como fazer o processo em batelada, mas para o exemplo de uma imagem, já é possível visualizar a coisa.
Diferentemente do post [1], não encontrei dificuldades em utilizar os dados. Logo não fiz uma conversão em ascii e nem utilizei o HDFview.
[1] http://www.trondkristiansen.com/?page_id=479
[2] https://bitbucket.org/tylere/pymodis/overview
Resultando nessa imagem de Clorofila-a
Para esse código, foram testadas apenas imagens L3 de Clorofila-a, já processadas pela agência espacial norte americana (NASA).
Para executar esse código, você precisará de uma imagem: Imagem MODIS de 9km.
Dê um bunzip2 no seu diretório, onde estão as imagens .bz2, para que o código abaixo identifique somente as imagens sem a extensão (.bz2).
Um detalhe, é que abaixo segue como fazer o processo em batelada, mas para o exemplo de uma imagem, já é possível visualizar a coisa.
Diferentemente do post [1], não encontrei dificuldades em utilizar os dados. Logo não fiz uma conversão em ascii e nem utilizei o HDFview.
[1] http://www.trondkristiansen.com/?page_id=479
[2] https://bitbucket.org/tylere/pymodis/overview
#/usr/bin/env python # -*- coding: utf-8 -*- ''' subset_MODIS Programa para Fazer um subset de imagens MODIS Dentro dos limites Lat e Long determinados. Author = Arnaldo Russo e-mail = arnaldorusso@gmail.com ''' from pyhdf.SD import * import numpy as np import matplotlib.pyplot as plt import scipy.io import glob #setting limits to be cut LATLIMS = ([-40, -30]) LONLIMS = ([-40, -30]) indir = '/DATA/database/Images/L3/9km/' outdir = '/DATA/database/Images/L3/resize/' filelist = glob.glob(indir+'A*') nfiles = len(filelist) files = [] for path in filelist: files.append(path[len(indir):]) #remove path name names = [] multi_img = [] for i in range(len(filelist)): A = SD(filelist[i]) a = A.attributes() for k in xrange(0,len(a.keys())): nm = a.keys()[k] names.append(nm.replace(" ","_")) pin = dict(zip(names,a.values()[:])) lon = np.arange(pin['Westernmost_Longitude'],pin['Easternmost_Longitude'],pin['Longitude_Step']) lat= np.arange(pin['Northernmost_Latitude'],pin['Southernmost_Latitude'],-pin['Latitude_Step']) #Get the indices needed for the area of interest ilt = np.int(np.argmin(np.abs(lat-max(LATLIMS)))) #argmin catch the indices ilg = np.int(np.argmin(np.abs(lon-min(LONLIMS)))) #of minor element ltlm = np.int(np.fix(np.diff(LATLIMS)/pin['Latitude_Step']+0.5)) lglm = np.int(np.fix(np.diff(LONLIMS)/pin['Longitude_Step']+0.5)) #retrieve data SDS d = A.datasets() sds_name = d.keys()[0] #name of sds. Dictionary method. sds = A.select(sds_name) #load the subset of data needed for the map limits given P = sds[ilt:(ilt+ltlm),ilg:(ilg+lglm)] P[P==-32767]=np.nan #Rrs_670:bad_value_scaled = -32767s ; P=np.double(P) P=(pin['Slope']*P+pin['Intercept']) LT=lat[ilt+np.arange(0,ltlm-1)] LG=lon[ilg+np.arange(0,lglm-1)] Plg,Plt = np.meshgrid(LG,LT) #Further plots P = np.log(P) #chlorophyll mapping multi_img.append(P) multi_img = np.asarray(multi_img) plt.imshow(P) plt.show() ### Save matrix np.save("multi_img",multi_img) # If you want to share with your Matlab friends Users =] scipy.io.savemat(outdir+'multi_matrix.mat', mdict={'multi_img': multi_img})
Resultando nessa imagem de Clorofila-a
terça-feira, 13 de março de 2012
Ler HDF-EOS de Imagens MODIS com Python
Ler HDF de Imagens MODIS com Python.
Read HDF-EOS with Python
Enfrentei esse problema por um tempo, por conta de como era feito o acesso às variáveis e como elas seriam carregadas.
Usualmente no laboratório as pessoas utilizam o "Matlab's" para estas finalidades e para listar os atributos, dão o comando hdfinfo e para carregar o hdfread.
Pelo que li, as bibliotecas incorporadas para essa finalidade, são desenvolvidas em C. Já que o HDF-EOS é uma extensão da NCSA (National Center for Supercomputing Applications). Dessa forma, o uso do HDF-EOS (Earth Observing System) é uma das formas científicas de se guardar os dados hierarquicamente.
Em Python, existem algumas bibliotecas para essa finalidade.
Testei o gdal(Geospatial Data Abstraction Library)[1] e o pyhdf[2,3]. Ambos são muito simples de serem instalados.
Antes de mostrar como fazer para carregar os dados, programas no bash shell já tem uma importante função na visualização do HDF. O uso do gdalinfo é habilitado pela intalação no proprio linux é o ncdump é uma ferramenta para acesso das informações de NetCDF, mas que funcionou muito bem para o HDF-EOS.
[1] http://www.gdal.org/
[2] http://hdfeos.org/software/pyhdf.php
[3] http://pysclint.sourceforge.net/pyhdf/
Read HDF-EOS with Python
Enfrentei esse problema por um tempo, por conta de como era feito o acesso às variáveis e como elas seriam carregadas.
Usualmente no laboratório as pessoas utilizam o "Matlab's" para estas finalidades e para listar os atributos, dão o comando hdfinfo e para carregar o hdfread.
Pelo que li, as bibliotecas incorporadas para essa finalidade, são desenvolvidas em C. Já que o HDF-EOS é uma extensão da NCSA (National Center for Supercomputing Applications). Dessa forma, o uso do HDF-EOS (Earth Observing System) é uma das formas científicas de se guardar os dados hierarquicamente.
Em Python, existem algumas bibliotecas para essa finalidade.
Testei o gdal(Geospatial Data Abstraction Library)[1] e o pyhdf[2,3]. Ambos são muito simples de serem instalados.
Antes de mostrar como fazer para carregar os dados, programas no bash shell já tem uma importante função na visualização do HDF. O uso do gdalinfo é habilitado pela intalação no proprio linux é o ncdump é uma ferramenta para acesso das informações de NetCDF, mas que funcionou muito bem para o HDF-EOS.
#bash # gdalinfo para listar todas os atributos yepan@waiapi:$ gdalinfo A20100322010059.L3m_MO_CHL_chlor_a_4km.hdf #ncdump yepan@waiapi:$ ncdump -h A20100322010059.L3m_MO_CHL_chlor_a_4km.hdfPara acesso ao HDF, fiz o seguinte, primeiramente com o gdal.
#!/usr/bin/env python import gdal filename = 'A20100322010059.L3m_MO_CHL_chlor_a_4km.hdf' ds = gdal.Open(filename) sds_md = ds.GetMetadata() #lista os atributos com os valores, guardando #em um dicionário. for i in sds_md.iterkeys(): print i,sds_md[i] data = ds.ReadAsArray() data Out: array([[-32767., -32767., -32767., ..., -32767., -32767., -32767.], [-32767., -32767., -32767., ..., -32767., -32767., -32767.], [-32767., -32767., -32767., ..., -32767., -32767., -32767.], ..., [-32767., -32767., -32767., ..., -32767., -32767., -32767.], [-32767., -32767., -32767., ..., -32767., -32767., -32767.], [-32767., -32767., -32767., ..., -32767., -32767., -32767.]], dtype=float32)Se o HDF tiver algum "Subdataset" é possível verificar desse jeito:
#!/usr/bin/env python """ neste caso é um HDF de coordenadas de gelo http://www.iup.uni-bremen.de:8084/amsredata/asi_daygrid_swath/l1a/s6250/grid_coordinates/LongitudeLatitudeGrid-s6250-Antarctic.hdf """ import gdal import gdalnumeric filename = 'LongitudeLatitudeGrid-s6250-Antarctic.hdf' ds = gdal.Open(filename) sds_md = ds.GetMetadata('SUBDATASETS') {'SUBDATASET_1_DESC': '[1328x1264] Longitudes (32-bit floating-point)', 'SUBDATASET_1_NAME': 'HDF4_SDS:UNKNOWN:"LongitudeLatitudeGrid-s6250-Antarctic.hdf":0', 'SUBDATASET_2_DESC': '[1328x1264] Latitudes (32-bit floating-point)', 'SUBDATASET_2_NAME': 'HDF4_SDS:UNKNOWN:"LongitudeLatitudeGrid-s6250-Antarctic.hdf":1'} datakeys = {} datasets = ['SUBDATASET_1','SUBDATASET_2'] datanames = ['Longitudes', 'Latitudes'] for (j,i) in enumerate(datasets): this = {} this['name'] = sds_md[i + '_NAME'] this['description'] = sds_md[i + '_DESC'] this['data'] = gdalnumeric.LoadFile(this['name']) datakeys[datanames[j]] = this.copy() #para ver os dados: datakeys['Longitudes']['data'] datakeys['Latitudes']['data']Quanto ao pyhdf, não me aprofundei ainda nos estudos, mas posso adiantar que ele funcionou para abrir a imagem do MODIS e as coordenadas de gelo também, mas de forma muito mais simples. Vamos lá!
#!/usr/bin/env python from pyhdf.SD import * filename = 'A20100322010059.L3m_MO_CHL_chlor_a_4km.hdf' ds = SD(filename) ds.attributes() #mostra os atributos ds.datasets() Out : {'l3m_data': (('fakeDim0', 'fakeDim1'), (4320, 8640), 5, 0)} data = ds.select('l3m_data') data[:] Out : array([[-32767., -32767., -32767., ..., -32767., -32767., -32767.], [-32767., -32767., -32767., ..., -32767., -32767., -32767.], [-32767., -32767., -32767., ..., -32767., -32767., -32767.], ..., [-32767., -32767., -32767., ..., -32767., -32767., -32767.], [-32767., -32767., -32767., ..., -32767., -32767., -32767.], [-32767., -32767., -32767., ..., -32767., -32767., -32767.]], dtype=float32)Para acessar as coordenadas de dados de gelo:
#!/usr/bin/env python from pyhdf.SD import * filename = 'LongitudeLatitudeGrid-s6250-Antarctic.hdf' ds = SD(filename) ds.datasets() Out: {'Latitudes': (('fakeDim2', 'fakeDim3'), (1328, 1264), 5, 1), 'Longitudes': (('fakeDim0', 'fakeDim1'), (1328, 1264), 5, 0)} lat = ds.select('Latitudes') lat.dimensions() Out: {'fakeDim2': 1328, 'fakeDim3': 1264} #para ver os dados lat[:] #Existe também a função "get", que permite pegar uma porção do dado, para datasets multidimensionais
[1] http://www.gdal.org/
[2] http://hdfeos.org/software/pyhdf.php
[3] http://pysclint.sourceforge.net/pyhdf/
Assinar:
Postagens (Atom)