import as

publicité
III. Python pour la science :
outils et librairies
1. IPython
• L'interpréteur Python de base est un peu limité
pas de cd, ls, rappels de lignes, etc."
• IPython : un interpréteur Python amélioré"
!  complète les commandes, fichiers/dossiers avec Tab"
!  aide intégrée : help plot!
!  affichage numérique et graphique interactif (cf la suite)"
!  raccourcis à la Matlab : cd, ls, pwd, !mkdir, who"
!  ça serait dommage de ne pas s'en servir"
!  v1.0 cette année ! (notebooks etc)"
!  http://ipython.org"
• Astuce : ^d pour quitter"
2. Modules (1)
• les fonctions supplémentaires de python proviennent
de modules!
• module = script python normal avec fonctions, variables,
objets, etc."
• nom du module = nom du fichier"
• Exemple : "
"# fonction “paf” du module “toto.py”"
"import toto"
"toto.paf()"
2. Modules (2)
• En créant ses propres modules, on peut ensuite les
importer"
# mon_module.py
def a_plus_b (a, b):
mon_module.py
return a+b
2. Modules (3)
• plusieurs variantes de l'importation"
Commande"
Appel de fonction"
import mon_module "
mon_module.a_plus_b()"
import mon_module as mon!
mon.a_plus_b()"
from mon_module import a_plus_b"
a_plus_b()"
from mon_module import *"
(à éviter)"
a_plus_b()"
2. Modules (4)
• un module peut contenir d'autres modules"
• Exemple:"
"import scipy.stats
"scipy.stats.nanmean()"
• d'où l'intéret de import ... as ...!
!import scipy.stats as st
"st.nanmean()"
2. Modules (5) : modules standard
• manipulation de chaines, transferts réseaux, serveurs web,
lecture/écriture, analyses variées"
• os: Module pour manipuler des répertoires et fichiers, utile
pour une utilisation "script shell”"
o os.path - manipulation des chemins d'accès"
o os.shutil, filecmp - manipulation des fichiers "
"
Exemple:"
import os"
print os.path.basename() "
3. Modules Scientifiques
Deux modules importants
numpy
matplotlib
• 
• 
Et quelques autres
scipy
netCDF4
Basemap
• 
• 
• 
3.1 numpy
Python standard :
• Ne fait pas les opérations sur les éléments de la liste
• Listes limitées à 1 dimension
• Calculs par boucles, lents
• Peu adapté au travail scientifique
3.1 numpy
• depuis 1995, suite de Numeric/numarray, aujourd’hui à v.1.7"
• type "tableau de type fixe" à n dimensions"
o x = array([0, 1, 2, 3])"
o ou x = r_[0, 1, 2, 3], x = r_[0:4]"
o optimisé pour manipulations numériques"
o très rapide "
• scipy, matplotlib, netCDF, HDF... parlent numpy"
3.1 numpy
• Interactif : ipython –pylab importe tout numpy"
"
"
"
"
"
"
• Dans les scripts : import numpy as np!
3.1 numpy
On indexe numpy comme une liste à n dimensions. "
• x = r_[0:2:0.01]
• x[0], x[50:], x[:-10]
• x[:,:,:,3]
• x[x < 3] = 0
• x=x.T
# transpose
• x=a*b
3.1 numpy : manipulation de tableaux
np.zeros([d1,d2,...])
np.ones([d1,d2,...])
tableaux de 0 ou 1 de dimensions d1,d2...
a1.shape
a1.reshape([...])
Dimensions du tableau a1
redimensionne le tableau a1
np.concatenate(
[a1,a2,...],axis=n)
Concatène des tableaux le long de la dimension n
np.mean(a1), np.std(a1) moyenne, écart-type, min et max du tableau a1
np.min(a1), np.max(a1) axis=n travaille le long de la dimension n
np.sin(), np.cos(), np.tan(), np.transpose(), np.flipud(),
np.tile()...
3.1 numpy sait faire autre chose
• Lecture/écriture simples
o np.loadtxt(), np.savetxt() : ASCII
o np.load(), np.save(): format numpy pour fichiers temporaires
• Interpolation
o  np.interp()
• Histogrammes à 1, 2, n dimensions
o  np.histogram(), np.histogram2d(), np.histogramdd()
• Masked arrays
o  np.ma
3.2 Matplotlib
• Beaucoup de modules Python pour faire des plots"
o PyNGL, Chaco, Veusz, gnuplot, Rpy, Pychart..."
• Matplotlib émerge comme un "standard""
o "all-purpose" plot package, interactif ou publication-ready"
! EPS, PNG, TIFF"
o forte interaction avec numpy, scipy"
o extensible, populaire, stable"
o "Matplotlib tries to make easy things easy and hard things
possible" "
o utilisation "matlab-like" ou orientée objet"
3.2 Matplotlib et Matlab
• matplotlib.pyplot : commandes proche de Matlab
o plot, semilogx, semilogy, pcolor (shading
flat), xlabel, ylabel, title, legend,
hist, figure, axis, subplot, contour,
colorbar, quiver, axes, xlim, ylim,
xticks, yticks...
• interactif : ipython –pylab importe pyplot
• scripts : import matplotlib.pyplot as
plt
3.2 Matplotlib : exemples (1)
• Séries Temporelles simples"
plt.plot(time, y)
Python et matplotlib
comprennent les dates
Matplotlib comprend Latex
plt.plot(x, y)
xlabel('time (s)')
3.2 Matplotlib : exemples (2)
• Séries temporelles de profils verticaux de vent"
3.2 Matplotlib : exemples (3)
• Contours avec labels"
3.2 Matplotlib : exemples (4)
• Histogrammes"
plt.hist()
3.2 Matplotlib : exemples (5)
• time-range plot (pcolor en matlab) avec colorbar"
plt.pcolor(time, z, pr2)
plt.colorbar()
3.2 Matplotlib : exemples
• 3D plots (mplot3d Toolkit)"
3.2 Matplotlib : etc.
• http://matplotlib.sourceforge.net/gallery.html
3.2 Matplotlib : Basemap
• from mpl_toolkits import
• projections : (x, y) <-> (lon, lat)
o plots
o cartes
o contours
o cotes, frontières, géodésie
basemap
3.2 Matplotlib+Basemap : exemple (1)
3.2 Matplotlib + Basemap : exemple (2)
3.3 scipy
• fonctions mathématiques spécialisées
• regroupées par thèmes dans des sous-modules
o ndimage - multi-dimensional image processing
o stats - statistiques
o io - lecture/écriture (netCDF3, ASCII, Matlab)
o signal - signal processing
o interpolate - interpolations n-dimensions linéaires, cubiques,
quadratiques, splines et autres
o linsolve, odeint - linear equation / ordinary differential equations solvers
o fftpack - transformees de Fourier
o integrate...
• Impossible de tout couvrir, Google is your friend
3.4 netcdf4-python
• netCDF 3 ou 4"
• PyNIO, scipy.io, pycdf... marchent aussi"
• Variables netCDF comme des variables Python"
import netCDF4
nc = netCDF4.Dataset('test.nc')
lon = nc.variables[‘longitude’]
print lon.units
Print lon[:], nc.variables[‘latitude’][:]
All together now
#!/usr/bin/env python
import numpy as np
import matplotlib.pyplot as plt
import netCDF4
from mpl_toolkits.basemap import Basemap
nc = netCDF4.Dataset('geo_em.d01.nc')
lat = nc.variables['XLAT_M'][0,:,:]
lon = nc.variables['XLONG_M'][0,:,:]
hgt = nc.variables['HGT_M'][0,:,:]
m = Basemap(projection='lcc',lat_0=-70,lon_0=-60,
width=3000*1000,height=3000*1000)
x, y = m(lon, lat)
m.pcolor(x, y, hgt)
m.drawmapboundary()
m.drawmeridians(color='grey')
m.drawparallels(color='grey')
m.drawcoastlines(color='grey')
plt.colorbar().set_label('Elevation [m]')
plt.savefig('example_basemap.png')
18 lignes de Python"
pour rire : essayer de faire la même chose en Fortran"
Autres modules
• pyhdf - lecture/écriture HDF4
• pyh5, PyTables - lecture/écriture HDF5
• PyNIO - lecture/écriture GRIB1 et 2, HDFEOS
• PyWavelets - transformées en ondelettes
• shapely - géométrie planaire
• GIS-Python - geographic information systems
• SymPy - calcul symbolique à la Mathematica/Maple
• PyClimate - analyses de series climatiques
• ...
Téléchargement