Traitement des données

I. Lecture et écriture des fichiers

1. Écriture d’un fichier, création

Voici un exemple de code python pour écrire un fichier de données avec header à partir d’une fonction.

# -*- coding: utf-8 -*-

"""
Ecriture d'un fichier de données avec Header
"""

from __future__ import division
from scipy import *
from pylab import *

def U(x):
    return exp(-0.4*x)*cos(2*pi*x)              # Fonction U
x = linspace(0,10,400)                          # Abscisses = Colonne 1
y = U(x)                                        # Ordonnées = Colonne 2

nomFichier = u"fichier_ecriture.txt"            # Nom du fichier à éire
f = open(nomFichier, 'w')                       # Ecriture du fichier

f.write(u"x \t y=f(x) \n")                      # Première ligne = Header 

Npt=len(x)                                      # Boucle for pour ajouter les éléments au fichier
for k in range(Npt):
    f.write(u"%10.3f \t" %x[k])
    f.write(u"%10.3f \n" %y[k])

f.close()




On peut directement le télécharger

2. Lecture d’un fichier

Voici un exemple de code python pour lire un fichier de données avec header et tracer un graphique des données correspondantes.

# -*- coding: utf-8 -*-

"""
Lecture d'un fichier de données avec Header
"""

from __future__ import division
from scipy import *
from pylab import *

f = open(u"fichier_lecture.txt", 'r')           # Ouvre le fichier txt à lire
f.readline()                                    # Saute la première ligne

x_tab = array([])                               # Créations de tableaux vide (à remplir avec les données)
y_tab = array([])

for ligne in f:
    mots = ligne.split()                        # Séparation en ligne
    x = float(mots[0])                          # Mise en mémoire du premier élément de la ligne en cours
    y = float(mots[1])                          # Mise en mémoire du second élément de la ligne en cours
    x_tab = append(x, x_tab)                    # Premier élément de la ligne en cours ajouté dans le tableau x_tab
    y_tab = append(y, y_tab)                    # Second élément de la ligne en cours ajouté dans le tableau y_tab

x_tab = x_tab[::-1]                             # Inverse les éléments lus en ordre décroissant
y_tab = y_tab[::-1]                             # Inverse les éléments lus en ordre décroissant

print x_tab, y_tab                              # Affichage des tableaux complétés avec les éléments du fichier

plot(x_tab, y_tab, 'o')
show()



On peut directement le télécharger et il faudra télécharger le fichier texte correspondant et le placer dans le même répertoire.

3. Utilisation de la librairie pandas

Lire un fichier et réaliser un graphique avec la librairie pandas va encore plus vite. Il faut toutefois que les données soit présentées avec le bon séparateur. Cette méthode est économique en ligne de code.

import pandas as pd                                             # librairie pandas
data = pd.read_csv("modele_data.csv", delimiter=';')            # lecture du fichier de données
print data                                                      # affichage des données
data.plot(x='X',y='Y',kind='scatter',yerr='err_Y')              # graphique des données
show()

On peut directement le télécharger et il faudra télécharger le fichier texte correspondant et le placer dans le même répertoire.

../_images/fichier_lecture_Pandas.png

II. Régressions (linéaire ou non)

1. Méthode directe (Pearson)

Voici un exemple de code python pour réaliser une régression avec une fonction quelconque. On utilise la librairie curve_fit et pearsonr de scipy

# -*- coding: utf-8 -*-

"""
Lecture d'un fichier de données avec Header et fit avec une fonction
"""

"""
# 1. Lecture des données dans le le fichier
"""

from __future__ import division
from scipy import *
from pylab import *

f = open(u"Regression_fonction_Donnee.txt", 'r')           # Ouvre le fichier txt à lire
f.readline()                                    # Saute la première ligne
f.readline()                                    # Saute la seconde ligne
f.readline()                                    # Saute la troisième ligne

t_tab = array([])                               # Créations de tableaux vide (à remplir avec les données)
y_tab = array([])

for ligne in f:
    mots = ligne.split()                        # Séparation en ligne
    t = float(mots[0])                          # Mise en mémoire du premier élément de la ligne en cours
    y = float(mots[2])                          # Mise en mémoire du second élément de la ligne en cours
    t_tab = append(t, t_tab)                    # Premier élément de la ligne en cours ajouté dans le tableau x_tab
    y_tab = append(y, y_tab)                    # Second élément de la ligne en cours ajouté dans le tableau y_tab

t_tab = t_tab[::-1]                             # Inverse les éléments lus en ordre décroissant
y_tab = y_tab[::-1]                             # Inverse les éléments lus en ordre décroissant

plot(t_tab, y_tab, 'o')                    # Graphique des données brutes
xlabel(ur"$t \, (s)$", fontsize=16)            # Label de l'axe des abscisses
ylabel(ur"$y \, (m)$", fontsize=16)        # Label de l'axe des ordonnées

show()
f.close()

"""
# 2. Regression à l'aide d'une fonction déterminée
"""

from scipy.optimize import curve_fit
from scipy.stats import pearsonr

def func(x, a, b):     # Fonction utilisée pour la régression
    return a*sqrt(x)+b

print "Regression de y en fonction de t"
print "**************************************"
popt, pcov = curve_fit(func, t_tab, y_tab)
print "popt", popt
print "pcov", pcov
[A, B] = popt

print " "
print "a=", "%5.2e" %A
sigma_A= sqrt(pcov[0, 0])
print "sigma_a = %5.2e" %sigma_A # Attention normalisation par n-1 dans l'écart type
print "b=", "%5.2e" %B
sigma_B = sqrt(pcov[1, 1])
print "sigma_b = %5.2e" %sigma_B # Attention normalisation par n-1 dans l'écart type
r = pearsonr(t_tab, y_tab)[0]
print "r=", r
print "r^2=", r**2

"""
# 3. Graphique des points et du modèle
"""

t_Mod = linspace(0,60,500)
y_Mod = A*sqrt(t_Mod)+B

plot(t_tab, y_tab, 'o')
plot(t_Mod, y_Mod, '-r')

xlabel(ur"$t \, (s)$", fontsize=16)            # Label de l'axe des abscisses
ylabel(ur"$y \, (m)$", fontsize=16)        # Label de l'axe des ordonnées

show()

On peut directement le télécharger et il faudra télécharger le fichier texte correspondant et le placer dans le même répertoire.

../_images/Regression_fonction.png

2. Méthode avancée (Xi2)

Voici un exemple de code python pour réaliser une régression avec une fonction quelconque. On utilise la librairie pandas pour l’importation des données et la librairie curve_fit pour calculer le Xi2 réduit

# -*- coding: utf-8 -*-

"""
Lecture d'un fichier de données avec Header et fit avec une fonction en utilisant la méthode du xi2 réduit
"""

from __future__ import division
from scipy import *
from pylab import *
from scipy.optimize import curve_fit
import pandas as pd


"""
# 1. Lecture des données du fichier
"""

data = pd.read_csv("Regression_fonction_Xi2_Donnee.csv", delimiter=';')
X = data['x']
Y = data['y']
nDOF = len(X)

plt.plot(X,Y,'o')
show()


"""
# 2. Regression à l'aide d'une fonction déterminée
"""


def flin(x,a,b):								# Choix de la fonction, ici linéaire.
    return a*x+b
sigma_exp = 0.1*Y								# incertitude de 10% de Y, on peut aussi mettre une valeur constante


p, covm = curve_fit(flin, X, Y,sigma=sigma_exp)
a,b = p
yth = flin(X, a, b)
chi2 = sum(((yth - Y)/sigma_exp)**2)
chi2_red = chi2/(nDOF - 2) 
erra, errb = np.sqrt(np.diag(covm)/chi2_red)
print("pente = %.3f +/- %.3f"  %(a, erra))
print("ordonnée origine = %.2f +/- %.2f" %(b, errb))
print("chi2 = %.2f" % chi2)
print("chi2_red = %.3f" % chi2_red)


"""
# 3. Graphique des points et du modèle
"""

fig, ax = plt.subplots(1)
ax.errorbar(X,Y,sigma_exp,fmt='o',label="data")
ax.plot(X,yth,label="fit")
textstr = "y = a*x + b\n\
a = %.2f +/- %.2f \n\
b = %.2f +/- %.2f \n\
chi2_red = %.1f"  %(a,erra,b,errb,chi2_red)
ax.text(0.05, 0.95, textstr, transform=ax.transAxes, fontsize=12, verticalalignment='top')
ax.legend(loc=4)
show()

On peut directement le télécharger et il faudra télécharger le fichier texte correspondant et le placer dans le même répertoire.

../_images/Regression_fonction_Xi2.png