# Python para oceanógrafos/Prefácio

O uso de ferramentas computacionais para a aquisição, visualização, análise e interpretação de dados científicos é imprescindível para as ciências dos mares devido o enorme volume de informação disponível. Neste contexto, Python aparece como uma ferramenta moderna, flexível e de baixo custo. O objetivo deste guia é dar uma breve introdução à linguagem de programação Python aplicada à análise de dados oceanográficos através de exemplos práticos e realistas.
Python é uma linguagem de programação de alto nível de uso geral, interpretada, orientada a objetos, cuja filosofia de design enfatiza a leitura de código. Lançada por Guido van Rossum em 1991, possui atualmente um modelo de desenvolvimento comunitário, aberto e gerenciado pela organização sem fins lucrativos Python Software Foundation (PSF). Python não é uma linguagem específica para análise de dados ou estatística. É uma linguagem bastante flexível que pode ser utilizada em diversas aplicações como Internet, processamento de imagens, jogos, etc. Existem inúmeras bibliotecas disponíveis para Python que estendem as funcionalidades da linguagem, dentre elas para uso científico. Aqui focaremos em algumas aplicações oceanográficas.
Planilhas eletrônicas convencionais são ferramentas importantes para a análise de dados e estatística. Entretanto, com um volume de dados extenso a automação no tratamento destes dados pode ser limitada ou até mesmo impossível em tais planilhas. É importante salientar que, independente da ferramenta utilizada, todas elas possuem limitações quanto a sua aplicação a determinados problemas, e Python não é exceção.
A elaboração deste guia foi motivada pela vontade de difundir a linguagem Python como alternativa de qualidade, flexível, livre e gratuita a programas para análise de dados científicos comerciais, como MATLAB$^®$ e IDL$^®$ por exemplo. Todo o conteúdo é baseado em informação amplamente disponível na Internet, tanto nas páginas oficiais do Python quanto nas bibliotecas utilizadas e em fóruns específicos. Quando possível, referências importantes serão indicadas.

## Prerequisitos

Este guia não prevê quaisquer conhecimentos prévios em programação ou na linguagem Python. No entanto um curso introdutório à computação certamente traz grandes benefícios, principalmente quanto à lógica de programação. Think Python dá uma boa introdução de como pensar como um cientista da computação utilizando Python de maneira simples, construtiva e intuitiva. Outra boa referência para desenvolvedores mais experientes é Dive into Python.
Muitos conceitos de programação serão omitidos para manter o texto conciso. Ao invés de descrever estes conceitos, exemplos passo-a-passo ilustram a funcionalidade de diversas aplicações na análise de dados oceanográficos de forma prática e construtiva. Quando apropriado, referências para consulta são indicadas.
Hoje em dia é imprescindível algum conhecimento básico de inglês, principalmente na compreensão de textos. As próprias linguagens de programação são baseadas em inglês e seus principais recursos de documentação disponíveis na Internet são neste idioma. Podem ocorrer casos em que a documentação é internacionalizada e também disponível em português, mas assume-se do leitor algum conhecimento básico de leitura de textos no idioma da Rainha ou do Tio Sam para consultar as referências aqui citadas com naturalidade.

## Os exemplos

Os códigos de exemplo de cada seção são escritos em forma de tutorial, encorajando a construção de aplicativos em etapas e para compreender como os algoritmos funcionam. Os exemplos devem ser acompanhados passo-a-passo e executados de maneira interativa para que você compreenda o funcionamento. Os algoritmos apresentados são simples e podem ser facilmente estendidos de diversas formas de acordo com as particularidades de cada tipo de análise.
Todos os códigos fonte utilizados estão disponíveis em formato digital na página Internet deste guia. Entretanto, recomenda-se que o código seja digitado manualmente para a familiarização com a sintaxe da linguagem e para melhor fixação dos conceitos apresentados.

## Porque Python?

Existem inúmeros motivos para se aprender a programar em Python e mais tantos para não se aventurar nela. A seguir são apresentados alguns dos motivos para iniciar-se nesta linguagem de programação.
Conciso. Código escrito em linguagens dinâmicas, como Python, tende a ser menor que código escrito em outras linguagens `mainstream'. Ou seja, há menos digitação ao testar os exemplos. Mais importante que escrever menos, código sucinto também simplifica a assimilação do algoritmo na mente para realmente compreender seu funcionamento.
Fácil de ler. Pessoas com experiência de programação em outras linguagens são capazes de ler código em Python e compreender o que ele deve fazer.
Extensível. Por padrão, Python vem com inúmeras bibliotecas que estendem a funcionalidade da linguagem, incluindo aquelas para funções matemáticas, manipulação de texto e conexão com a Internet. As demais bibliotecas utilizadas neste guia, como para manipulação de dados e geração de gráficos, são livres e simples de baixar, instalar e utilizar.
Interativo Ao trabalhar com um exemplo, é útil experimentar as funções enquanto elas são escritas, sem ter de escrever outro programa apenas para teste. Python é capaz de executar tanto programas diretamente da linha de comando quanto chamar funções, criar objetos e testar pacotes de forma interativa.
Múltiplos paradigmas. Python suporta estilos de programação orientados a objetos, procedurais ou funcionais.
Múltiplas plataformas e livre. Python possui uma única implementação de referência para as principais plataformas disponíveis e é livre e gratuito para todas elas. Os códigos descritos neste guia funcionam nas plataformas Windows, Linux e Mac sem quaisquer modificações.

## Alternativas

Python não é a única opção de código livre ou gratuita para análise de dados. Qualquer linguagem é capaz de criar uma aplicação e solucionar os problemas que desejamos. No entanto, a melhor escolha depende do esforço necessário para tal solução e a sensação de sucesso obtida com ela. Uma lista com alternativas comerciais e livres pode ser encontrada na página da Wikipédia. Dentre as alternativas gratuitas disponíveis, destacamos as seguintes:
* Octave. É uma linguagem computacional desenvolvida para computação matemática e compatível com MATLAB$^®$. Possui uma interface em linha de comando para a solução de problemas numéricos, lineares e não-lineares. Criado por John W. Eaton, faz parte do projeto GNU.
* Scilab. Software científico para computação numérica semelhante ao MATLAB. Ele fornece um poderoso ambiente computacional aberto para aplicações científicas. Atualmente o projeto é mantido pelo Scilab Consortium.
* R. Linguagem e ambiente de desenvolvimento integrado para cálculos estatísticos e representações gráficas. Foi criada originalmente por Ross Ihaka e por Robert Gentleman. R é uma linguagem e ambiente similar ao S. Embora com importantes diferenças, muitos códigos escritos para S rodam inalterados em R.
* GDL. Implantação livre e código aberto da linguagem de dados interativa IDL$^®$.
* Ocean Data View (ODV). Pacote integrado para a exploração, análise e visualização de perfis ou sequencias de dados oceanográficos ou geo-referenciados.

## Visão geral

Este guia foi dividido em cinco partes para servir como base para um minicurso introdutório à linguagem Python aplicado à oceanografia e com duração de quatro dias. Cada parte é motivada por exemplos de aplicações reais que de fácil compreensão e adaptação.
* Capítulo 1, Engatinhando. Dá instruções de como instalar e executar Python pela primeira vez e explica como executar alguns comandos básicos e um pouco sobre tipos de variáveis. As instruções dadas neste capítulo devem ser seguidas antes do início do curso, para garantir que as necessidades técnicas mínimas sejam satisfeitas e que cada participante tenha todos os aplicativos necessários instalados.
* Capítulo 2, Primeiros passos. Introduz o conceito de funções e bibliotecas. Demonstra operações aritméticas e estatísticas básicas como soma, produto, exponenciação, mínimo, máximo, média e desvio padrão.
* Capítulo 3, Juntando os pedaços. Ilustra os conceitos de operadores lógicos e condicionais e também iterações. Começa a trabalhar com um volume de dados maior e demonstra como carregar e salvar dados de arquivos. Visualiza estes dados pela primeira vez.
* Capítulo 4, Avançando. Mostra exemplos de tratamento básico de dados como média móvel e representações gráficas mais elaboradas.
* Capítulo 5, Fluência. Demonstra recursos mais avançados como análise espectral através da transformada de Fourier e visualização de mapas.

## Referências

Pilgrim, Mark. Dive into Python. Apress, 2004. 413 p.
Downey, Allen. Think Python: How to think like a computer scientist. Green Tea Press, 2008. 214 p.