Aula 00 - O que é Python?

Objetivos

  • Introdução à linguagem de programação Python.
  • Exemplos do seu uso para análise exploratória de dados.
  • Utilizar python com uma linguagem "cola."
  • A linguagem Python é:
    • interpretada (não compilada)
    • "Dynamically Typed" (não statically-typed)
    • Orientada à Objetos e/ou Funcional
    • Licença Livre

Instalando python o seu computador (Canopy, EPD, Spyder, PythonXY, etc):

URL=http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh

wget $URL -O miniconda.sh

bash miniconda.sh -b -p $HOME/miniconda

export PATH="$HOME/miniconda/bin:$PATH"

conda update conda

conda config --add ioos

conda info -a

Tipos de objetos


In [ ]:
Sal, Temp = 35.1, 17 # Salinidade e Temperatura

print(type(Sal))
print(type(Temp))

In [ ]:
u, v = 5., -5.
U = u + 1j*v

print(type(U))

msg = 'OO em ação mostrando números reais {0} e imaginários {1}'.format

print(msg(U.real, U.imag))

# Desafio: Calcular o vetor é o ângulo formado por u+iv.

In [ ]:
import numpy as np

np.abs(U), np.rad2deg(np.angle(U))

In [ ]:
False == 0

In [ ]:
True == 1

In [ ]:
True == 2

In [ ]:
False == 1

Strings


In [ ]:
print('Texto simples com "aspas" duplas.\n')

print("'Texto simples com 'aspas' simples.\n")

print("""Texto complexo com quebra
de linha, aspas "duplas" e 'simples'.\n""")

print(r"Texto \n 'cru', ideal para Latex $^\circ$.")

String Methods


In [ ]:
text = "Um bom aluno sempre..."

text.lower(), text.split(), text.replace('aluno', 'estudante')

In [ ]:
print('O valor de pi é {:.2f}'.format(np.pi))
print('O valor de pi é {:.6f}'.format(np.pi))
print('O valor de 10 x pi é {:0.2e}'.format(10*np.pi))

Slicing


In [ ]:
T = [17.4, 18.9, 19.5, 22.1, 23.2]
T[0], T[-1], T[::-1], T[::2]

In [ ]:
T[1:3]

In [ ]:
T[2:]

Alguns métodos de listas:

  • .append
  • .extend
  • .sort
  • .remove
  • .reverse
  • .insert

In [ ]:
lista = list(range(10))
print(lista)

lista.append(10)
print(lista)

lista.insert(4, 11)
print(lista)

lista.sort()
print(lista)

lista.extend(['elemento extra'])
print(lista)

Dicionários


In [ ]:
ctd = dict(S=[35.5, 34.76, 33.2],
           T=[17.4, 18.9, 19.5],
           AOU=[320, 330, 350])


ctd.keys(), ctd.values()

Sets


In [ ]:
set(['joseph', 'maria', 'pedro', 'maria'])

Namespaces

Direto da wikipedia:

A namespace (sometimes also called a name scope) is an abstract container or environment created to hold a logical grouping of unique identifiers or symbols (i.e., names).

O que interessa para nós?

  • Namespaces mantém o código organizado.
  • Evita conflitos gerados por funções de mesmo nome.
  • Torna o código "declarativo" e consequentemente mais legível.

Matlab vs Python (Namespaces)

Matlab:

w1 = window(@gausswin, N, 2.5)
% Opa! O resultados é diferente do que eu esperava. Argh, a minha função
% window está abaixo da original do Matlab no "path".

Python:

from oceans.timeseries import window
w1 = window(N, 2.5, type='gausswin')
# Sem dúvida essa era a que eu queria!

Módulos

Como vocês já notaram, em Python temos que importar (declarar) tudo que vamos utilizar.


In [ ]:
import this

In [ ]:
import math

math.cos(math.pi)

In [ ]:
from math import sin, pi

sin(pi)

In [ ]:
import numpy

numpy.tanh([numpy.pi])

Exemplo prático de ler dados ASCII em Python

  • Nossos dados estão organizados na pasta data/CTD.
  • São arquivos ASCII que podem ser abertos em qualquer editor de texto.
  • Leia o arquivo "leia_me.txt" para maiores descrições do formato dos dados.

In [ ]:
fname = './data/CTD/estacao08.dat'

with open(fname, 'r') as f:
    lines = f.readlines()
    data = lines[0].strip().split()[3:]
    depth = float(data[0])
    lat = float(data[1])
    lon = float(data[2])
    print("Prof.: %s m\nLongitude: %2.4f deg\nLatitude: %2.4f deg" %
          (depth, lon, lat))

In [ ]:
import os
from glob import glob


lista = glob(os.path.join('data', 'CTD', '*.dat'))
lista

In [ ]:
def break_lines(line):
    return [float(num) for num in line.strip().split()]


def get_topo(url='./data/etopo5.nc'):
    etopodata = Dataset(url)
    topoin = etopodata.variables['ROSE'][:]
    lons = etopodata.variables['ETOPO05_X'][:]
    lats = etopodata.variables['ETOPO05_Y'][:]
    topoin, lons = shiftgrid(180., topoin, lons, start=False)
    return topoin, lons, lats

In [ ]:
depth, lat, lon = [], [], []


for fname in lista:
    with open(fname, 'r') as f:
        lines = f.readlines()
        d, la, lo = break_lines(lines[0])[3:]
        lon.append(lo)
        lat.append(la)
        depth.append(d)

In [ ]:
import seawater as sw

dist, angle = sw.dist(lon, lat)

dist = np.r_[0, dist.cumsum()]

In [ ]:
%matplotlib inline
import matplotlib.pyplot as plt

plt.plot(dist, depth)
plt.gca().invert_yaxis()

Matlab vs Python (loops)

Matlab

for k = 1:length(files)
    files(k).name
end

Python

for fname in lista:
    print("%s" % fname)