F.1 Programmation python pour le paléomagnétisme

Original: http://magician.ucsd.edu/Essentials/WebBookse126.html


Ce matériel a été écrit pour aider les étudiants commencent leur propre écriture de code et de comprendre ce qui est sous le capot dans le progiciel de compagnon, PmagPy.
Bien qu’il y a beaucoup de logiciels libres disponibles pour tracer et analyser les données paléomagnétiques, il est important de comprendre comment ces programmes fonctionnent, ce que les calculs sont en fait et ce qu’ils signifient. Il n’y a pas de meilleur moyen d’apprendre ce que d’écrire votre propre code. Vous pouvez bien vous retrouver en utilisant l’un des excellents produits disponibles parce qu’ils sont plus faciles ou plus « joli », mais vous avez encore besoin de comprendre ce que font les programmes. Dans ce livre, on vous demandera de faire des tracés à la main et d’écrire certains programmes rudimentaires pour tracer et analyser les données. Nous encouragent l’utilisation de Python et prendre ici les début les étapes pour vous aider à apprendre.
Ce chapitre vous ne pouvez pas apprendre everthing sur la programmation en Python. Au lieu de cela, il est conçu pour vous aider au moins être en mesure de comprendre le code python dans le package PmagPy et peut-être vous déplacer dans la direction d’utiliser Python vous-même.
Python est un langage de script (comme le basic, Matlab et Perl). Langues comme fortran et C obtenir « compilés » en code binaire lisible par machine et courir plus vite, alors que les langages de script obtenir interprétés par le système d’exploitation ligne par ligne. Python peut incorporer un code binaire compilé dans sa forme la plus sophistiquée, mais les programmes que nous allons écrire seront tous « interprétées ». Cela signifie que Python est plus lent que fortran ou C. Cependant, ce que vous perdez au moment de l’exécution, vous gagnez en temps humain. Il est beaucoup plus rapide à écrire des programmes en Python que dans toute autre langue que nous connaissons.
Python est flexible, disponible gratuitement, multiplateforme, largement utilisé et bien documenté et beaucoup plus facile à lire et à apprendre que Perl. Il a beaucoup de numérique ou de visualisation 3D des outils statistiques s’améliore tout le temps. Et c’est gratuit. Le paquet de fortran 77 de pmag populaire qui fut un compagnon à un ouvrage (Tauxe, 1998) a été traduit en Python, sorte de paléomagnétisme, c’est un très bon choix et la seule multi-plateforme, logiciels complets paquet autour.
Python peut être pénible à installer (mais ne peut donc tous les autres environnements de programmation). Il y a quelques recettes qui fonctionnent pour Mac OS (au moins pour 10.4 et 10.5) et pour Windows. Ces recettes et les ingrédients sont disponibles sur le site Web :
Magician.ucsd.edu/~ltauxe
suivant les liens à la page d’Installation de Python.
Dans Windows, trouver la fenêtre d’invite de commande en cliquant sur le bouton Démarrer et en suivant tous les programmes accessoires. Sous Mac OS, vous pouvez utiliser le programme terminal.app dans les Applications : Commodités. Sur les machines Linux ou Unix, utilisez un terminal X, démarré avec la commande xterm.
Une fois que Python est installé et que vous avez trouvé votre ligne de commande, vous remarquerez une « invite ». L’invite peut varier pour différentes machines et ne peut commencer par un ‘ > (Windows), (c-shell) ‘%’ ou un ‘$’ (bash). Nous allons utiliser un « $» ou « % » pour indiquer l’invite dans cet ouvrage. Pour la survie * NIX, reportez-vous à l’annexe F.2. Après l’invite de commandes, tapez : python pour démarrer l’interpréteur de commandes interactif de python. [En outre, le symbole ctrl-D veut dire maintenez enfoncée la touche CTRL enfoncée tout en tapant la lettre « d ». Sur les machines Windows, vous devrez peut-être remplacer une lettre « c » pour obtenir le même effet. ]
Tout le monde devrait maintenant avoir la >>> invite de commandes. Voici une transcription d’une session d’interpréteur python qui devrait donner l’intrigue illustré à la Figure F.1.
python $
EPD avec Py2.5 (4.0.30002)http://www.enthought.com/epd

Python 2.5.2 |EPD with Py2.5 4.0.30002 | (r252:60911, Oct 15 2008, 16:58:38)
[GCC 4.0.1 (Apple Computer, Inc. build 5370)] on darwin
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import matplotlib
>>> import pylab
>>> pylab.plot([1,2,3,4])
[<matplotlib.lines.Line2D object at 0x64eb270>]
>>> pylab.show()

Pour tuer l’interprète, fermez la fenêtre de tracé et tapez ctrl-D (ou ctrl-C sur Windows).

EPSfiles/matplotlib.eps
Figure F.1 : Sortie du script de test.
Fonctionnement en mode interprète est parfois pratique, mais retapez le programme à chaque fois est stupide. Scripts Python peuvent être enregistrées dans des fichiers avec une extension .py et exécutées soit en cliquant sur l’icône ou de la ligne de commande dans la fenêtre de terminal. Dans ce qui suit, nous allons créer un script appelé « Bonjour.py ».
Bien sûr, il y a différentes manières de créer et d’exécuter des scripts. Ils sont juste des fichiers ascii, donc n’importe quel éditeur de texte va faire aux fins de la création. Ensuite, le script peut être exécuté via la ligne de commande ou par le biais des interfaces utilisateur graphiques différentes implémentations différentes de Python.
Vous devriez utiliser la Distribution de Enthought Python comme décrit sur la page d’installation. Il y a une interface utilisateur graphique (GUI) appelée IDLE qui est un environnement de programmation Python. Sur une machine Windows dans le menu Démarrer, dans le sous-menu programmes programmes of All, Enthought ajouté un sous-menu Enthought contenant entre autres choses, le GUI de Python ralenti. Sur un Mac, vous le trouverez dans le dossier Applications, dont le nom est basé sur le nom du produit et la version que vous avez installé. Par exemple, « EPD avec Py2.5 4.0.3002 ». Dans tous les cas, démarrer la marche au ralenti. Sous « Fichier », ouvrez une nouvelle fenêtre. Cette fenêtre est un éditeur de texte intelligent vous pouvez écrire vos programmes et les enregistrer (par exemple sur votre bureau, ou à un dossier spécialement désigné). Vous pouvez les exécuter en sélectionnant « module d’exécution » pour le menu exécuter.
Dans la fenêtre, tapez :
imprimer « hello world »
Enregistrez ce script comme « bonjour.py » sur votre bureau et exécutez-le en sélectionnant « Run module » sous le menu exécuter.
Si vous ne souhaitez pas utiliser la marche au ralenti, mais préfèrent travailler dans un éditeur de texte tel que vi sur un * nix machine, vous pouvez accomplir la même chose en tapant ce qui suit :
$ cat > Bonjour.py
#! / usr/bin/env python
imprimer « hello world! » # cette déclaration imprime « hello world »
CNTL-D la fin d’entrée)
$ chmod + x Bonjour.py
$ Bonjour.py
Salut tout le monde!
Notez que la commande chmod + x Bonjour.py rend Bonjour.py exécutable et n’est pas nécessaire pour les utilisateurs inactifs.
Réponse du programme est le gras Bonjour tout le monde!. Quoi que ce soit après une hachure (#) est ignoré comme un commentaire. La première ligne du programme indique juste le système d’exploitation pour chercher son interpréteur python préféré et la deuxième ligne est le programme.
F.1.6 Variables
Il existe plusieurs types de variables en python dont les plus fréquents sont entiers, nombres réels et des chaînes. Ceux-ci peuvent être déclarées chaque fois que vous voulez commencer à les utiliser, comme dans :

>>> number=1
>>> Number=1.0
>>> NUMBER=’1’

print number,Number,NUMBER

1 1.0 ‘1‘
Vous pouvez convertir entre les trois avec, par exemple, int(Number), str(number), float(NUMBER).
Il est souvent pratique de regrouper les variables et constantes. En Fortran, nous utilisons des tableaux avec des indices qui peuvent servir à traiter une cellule particulière. Python est beaucoup plus souple ; Il y a différentes manières de regroupement choses : listes, chaînes, dictionnaires et tuples, entre autres.
La structure de données plus polyvalente est la liste, ce qui est écrit sous forme de collection d’éléments (ils n’ont pas à être du même type) séparées par des virgules entre les crochets.

mylist=[’a’,2.0,’400’,’spam’,42]
# NB:  n’essayez pas de copier / coller de ce fichier pdf,

vous devez le taper en vous-même !
Éléments sont appelés par leur numéro d’index dans la liste, en commençant par 0, donc 42 dans mylist est mylist [4], tandis que mylist [0] est « a ». Éléments de la liste peuvent être triés, supprimés, insérés, tranchés, comptés, concaténés, remplacés, ajoutés à et ainsi de suite. Par exemple, mylist [1] = 26,3 passera mylist [1] de 2.0 à 26,3. La commande len(mylist) renvoie la longueur de la liste, ou 5 dans ce cas. Pour ajouter à la liste :
mylist.append (‘un plus s’il vous plaît”)
qui ajoute la chaîne « un plus s’il vous plaît » comme un cinquième élément dans la liste. La commande « append » est l’une des nombreuses « méthodes » qui peuvent être appliquées aux listes. Méthodes sont juste des choses vous faites avec les objets et pouvez être très fantaisie ou très simple comme « ajouter ». D’autres méthodes incluent : mylist.sort(), qui retourne une liste triée et mylist.insert(1,’new’) colle la chaîne ‘nouveau’ entre ‘a’ et 2.0.
Il est également utile de trancher des listes et des cordes. Pour choisir la morceau mylist qui inclut les deuxième et troisième éléments et mettez-les dans une nouvelle liste :
newlist=mylist[1:3]
Notez comment la liste commence par le premier élément dont l’indice de « 0 », le second, « 1 » et ainsi de suite, et que le découpage est fait avec l’opérateur du côlon avec le dernier indice étant “un trop loin“. Ne demandez pas pourquoi, c’est juste une « fonctionnalité ». Pour obtenir le dernier élément de la liste que nous utilisons :
mylist[-1]
Enfin, pour effectuer une copie d’une liste, nous utilisons :
mycopy=mylist[:]
Il est nécessaire de faire des copies car assimilant une nouvelle liste avec un précédent, on entend les deux sont vraiment la même chose, donc les modifications apportées à la nouvelle liste seront également dans le vieux.
Une autre structure de données très pratique est le dictionnaire. Contrairement aux listes qui sont indexés par des entiers, les dictionnaires sont indexés par « touches ». Les dictionnaires sont rédigés sous forme de paires clé : valeur à l’intérieur d’une paire d’accolades :
telnos={’lisa’:46084, ’lab’:46531,  ’jeff’:44707}
Vous pouvez obtenir « lisas » numéro de téléphone : telnos [“lisa”], qui retourne la valeur : 46084. Pour obtenir une liste de clés pour un dictionnaire donné, nous utilisons simplement la méthode « clés », comme dans : touches = telnos.keys(). Keys est maintenant une liste des touches de telnos. Vous pouvez ajouter des paires clé : valeur supplémentaire en écrivant simplement : telnos [‘jack’] = 23323.
Pour la plupart, python fait des opérations comme vous vous en doutez : addition, + ; soustraction,-; multiplication, * ; Division, / ; exponentiation, ** ; reste, %. Comme dans “C”, il y a des opérateurs = et += qui incrémentent la variable selon la valeur spécifiée. Par exemple :
a=1 # initialize variable a to 1
a+=1 # increment a by 1

is exactly the same thing as:

a=1
a=a+1
et incrémente la variable « a » par 1.
Il y a aussi des valeurs booléennes telles que, ‘true’, ‘false’, ‘et’, ‘ou’ et ‘non’. Les chaînes vides, « faux » et 0 sont « fausses ». « et » et « ou » sont les opérateurs « court-circuit » qui évaluées de gauche à droite, s’arrêtant chaque fois que l’instruction est falsifiée. Comparaisons (<, >,! =, ==, &gt; =, < =) sont à moins de, supérieur à, pas égal à, égal à, supérieur à ou égal à et moins qu’ou égal, respectivement.
Python utilise si, elif et sinon (si pas d’autre) comme des instructions conditionnelles. Voici deux façons de le faire :

n=1
if n<0:
print ’n is less than 0’
elif n== 0: # if it isn’t less than 0, but equal to zero
print ’n equals 0’
else:    # otherwise
print ’n is greater than 0’

Pouvez-vous deviner ce que va faire ce programme ? Vous avez peut-être remarqué que Python n’utilise pas « endif » ou « begin/end » types d’instructions ; au lieu de cela, elle utilise mise en retrait pour indiquer le bloc d’instructions à exécuter à chaque condition. Tout montant d’indentation fera, mais toutes les instructions dans un bloc doivent avoir la même indentation.
Il existe plusieurs autres façons de contrôler le flux du programme : et des boucles. Dans un certain temps boucle, un bloc d’instructions sera répété jusqu’à ce que le tout en état n’est plus remplie. Par exemple :
count=3
while count > 0:
print count
count-=1

3

2

1

Les “boucle” for œuvres de plusieurs façons. Un en comptant vers le haut à un nombre et un autre est en parcourant les éléments dans une liste ou dictionnaire ou un autre objet. Ces deux boucles font exactement la même chose ; ils imprimer les éléments de mylist dans l’ordre :

mylist=[’a’,’hey babe’,42, ’done’]
for i in range(len(mylist)):
print mylist[i]
for item in mylist:
print item

Notez l’utilisation de la mise en retrait pour identifier les blocs d’instructions qui font partie de la boucle. La portée de la fonction génère une liste d’entiers commençant à 0 c’est len(mylist) long.
Sortir des données peut être aussi simple que l’instruction print, que nous l’avons déjà vu. Nous pouvons aussi utiliser une déclaration mise en forme de « écrire » comme dans :

mylist=range(10) # make a list of the integers from 0 to 9
out=open(’myfile’,’w’) # open out for writing
for element in mylist:
# assign each item in mylist to the variable ‘element’ in turn
out.write(’%4.1f  %i\n’%(element,2*element))
#  write out a formatted string with some data
out.close()  # close the file ‘out’ when done

Ici, nous rencontrons la chaîne mise en forme. Les chaînes « %4.1f %i » dit d’écrire un nombre de 4 caractères, avec un caractère à droite du séparateur décimal suivi d’un entier. La barre oblique inversen’est un exemple d’un « escape code ». Celui-ci met en une nouvelle ligne.
La façon la plus simple mais plus ennuyeux pour obtenir des données est d’interroger l’utilisateur :

ans=raw_input(’What number do you want to assign”\
” to the variable “ans”? ’)

Cela entraînera le programme faire une pause jusqu’à ce que quelque chose a été entrée, suivie d’un retour ; ans sera une variable de chaîne de tout ce qui a été entré. Notez également l’utilisation de guillemets. L’ordinateur affichera tout à l’intérieur des guillemets doubles, y compris les guillemets simples. L’instruction aurait pu encore être écrit :

ans = raw_input (“quel numéro vous souhaitez assigner” \
à la variable « ans”? ‘)
Autres façons d’obtenir des données sont à lire à partir d’un fichier, la ligne de commande ou depuis l’entrée standard. Voici un exemple de la façon de lire le contenu du fichier que vous venez de faire dans une liste appelée mylist :

mylist=[]  # define an empty list for appending to.
f=open(’myfile’,’r’) # open myfile for reading
for line in f.readlines():  # reads whole file and steps through line by line.
mylist.append(line)  #  line is read is a string, appended to mylist
print mylist # prints it out

Si la « ligne » est une ligne avec plusieurs variables séparées par un espace et nous voulions les utiliser comme des variables de point flottant, nous pourrions attribuer ces listes comme ceci :
X,Y=[],[]
f=open(’myfile’,’r’)
for line in f.readlines():
record=line.split()  # splits “line” on the spaces into a list: ’record’
X.append(float(record[0])) # appends the first column to X
Y.append(float(record[1]))
print X
print Y

Note that

 split(’\t’)

splits on tabs,

 split(’,’)
se dédouble sur onglets,
split(‘,’)
sur des virgules et ainsi de suite.
Python utilise des fonctions (sous-programmes) comme la plupart des langages de programmation. Une fonction Python a la forme suivante :

def sort_this_list_please(list):   #   note the colon and the argument list.
list.sort()   # makes a sorted list out of the input list.
return list   # returns the sorted list
#    now comes the program that calls the function sort_this_list_please()
mylist=range(10,0, -2)   # makes a list of even integers from 10 to 2.
print sort_this_list_please(mylist)  # sends mylist to sort_this_list, prints

Collections de fonctions peuvent être conservées sous forme de « modules » qui peuvent être importés. Chaque fonction est appelée une « méthode ». Il y a un grand nombre de modules disponibles et vous pouvez également écrire votre propre. Un favori est le module de math qui a des choses utiles comme les racines carrées et de fonctions trigonométriques. Les modules ont leurs propres espaces de noms, donc pour appeler par exemple, la fonction sqrt, nous pouvons faire cela plusieurs façons :import math  # makes the functions in the math module available
print math.sqrt(4)  # prints out the square root of 4.
# Note how sqrt is a method of math

ou :

from math import sqrt  # this brings in the sqrt function by name
print sqrt(4)   # don’t need to type math. in front of the method

ou :
d’importation de maths *
imprimer sqrt(4), pi # ceci imprime math.sqrt(4) et math.pi
Il y a beaucoup de modules qui sont livrés en standard (comme les mathématiques) et beaucoup d’autres qui peut être installés séparément (comme matplotlib et numpy et le pmag modules PmagPy et pmagplotlib. Vous devriez avoir installé matplotlib et numpy déjà si vous avez suivi les instructions. Vous rencontrerez pmag et pmagplotib dans la section sur PmagPy.
F.1.12 Tracer
Il existe de nombreux packages de traçage pour Python. Nous serons avec matplotlib parce qu’il est très puissant, permet de sauver des parcelles dans de nombreux formats, est multiplateforme et facile de commencer, surtout si vous connaissez quelques matlab.
Ici, nous faisons notre première parcelle :

#!/usr/bin/env python
import matplotlib   # imports the matplotlib functions
import pylab # pylab is matplotlibs plotter package
#
X=range(10) # makes a list of integers from 0 to 9
Y=range(0,20,2) # makes a  list of even numbered integers from 0 to 18
pylab.plot(X,Y) # plots the data with a line
pylab.plot(X,Y,’ro’) # plots the data as red circles
pylab.show()  # displays the plot as in Figure 0.3



EPSfiles/plot.eps
Figure F.2 : Sortie de matplotlib programme de traçage.

C’est un avant-goût de ce que peut faire Python. S’il vous plaît de vous prévaloir de l’ample information en ligne disponible :

Pour rappel :
http://docs.python.org/TUT/ [Tutoriel python Excellent.]
http://swc.scipy.org/ [Excellent cours sur « pièces de charpente du logiciel »].
http://matplotlib.sourceforge.net/ [endroit aller pour tutoriel matplotlib, exemples et documentation complète.]
L’apprentissage de Python, de Mark Lutz et David Ascher, o ‘ Reilly Publications, 2003.
[disponible en ligne à http://proquest.safaribooksonline.com:80/0596002815]. Il s’agit d’un merveilleux livre qui vous aidera beaucoup.

Comments are closed.