Incertitudes et Python

Incertitudes et Python

Messagede Koubiak » 06 Aoû 2020, 09:08

Bonjour à tous,

Dans le BO il est indiqué 2 capacités numériques concernant les incertitudes.

1- Tracer un histogramme avec intervalles et fréquences. Je le ferai faire aux élèves sur Excel, une ressource de mon académie explique ça très bien (http://spc.ac-amiens.fr/709-constructio ... ramme.html).

2. Simuler à l'aide d'un langage de programmation ...
C'est là où je voudrais utiliser Python.

J'ai trouvé des trucs sympas (mais compliqués) dans le Nathan p.543 et 544.
La partie qui correspond au BO est page 544 mais p.543 une méthode pour calculer moyenne, écart-type, incertitude-type est présentée. Une alternative à la calculatrice.

Mon problème est que je ne comprends pas comment utiliser un fichier de données .txt.
J'imagine bien que je dois le créer. Mais dans quel dossier le sauvegarder pour que Python puisse l'ouvrir. Impossible de trouver malgré mes recherches en ligne. J'ai essayé divers dossiers mais aucun ne convient.
De même, le Nathan propose d'ouvrir le fichier .txt avec la fonction d=np loadtxt alors que toutes mes recherches en ligne proposent plutôt la fonction f = open("zoo.txt", "r").

Auriez-vous une solution ?
Merci.
Koubiak
 
Messages: 51
Inscription: 16 Aoû 2011, 15:08
Académie: Amiens
Poste: Enseignant en Lycée

Re: Incertitudes et Python

Messagede philippe » 06 Aoû 2020, 11:53

philippe
 
Messages: 1061
Inscription: 20 Juin 2010, 08:54
Académie: Besançon
Poste: Je ne souhaite pas renseigner mon poste

Re: Incertitudes et Python

Messagede Koubiak » 10 Aoû 2020, 16:05

Merci pour le lien
Koubiak
 
Messages: 51
Inscription: 16 Aoû 2011, 15:08
Académie: Amiens
Poste: Enseignant en Lycée

Re: Incertitudes et Python

Messagede Bachi-Bouzouk » 10 Nov 2020, 00:48

Il faut utiliser la librairie numpy qui lit un fichier très facilement, pas besoin de fopen ou autre.

Code: Tout sélectionner
import numpy as np
#Lecture du fichier depuis un fichier csv il est possible de changer les colonnes utilisées avec usecols, le délimiteur ou les caractère de commentaires sont également modifiables, il est aussi possible de sauter des lignes avec skip_header
x,x_inc,y,y_inc = np.genfromtxt('data.csv', delimiter=',',usecols=(0,1,2,3),skip_header=0,comments='#',unpack=True)


Ici, je récupère quatre colonnes, x, x_inc, y, y_inc qui correspondent au quatre premières colonnes du fichier csv, tout se fait en une seule ligne avec toutes les options nécessaires là ou le code sus-cité en prend plusieurs dizaines.

Et pour faire ce que vous voulez faire, ça se fait en quelques lignes :
Code: Tout sélectionner
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
Importer un fichier csv et tracer l'histogramme des données

Ce script a été réalisé par Martin Vérot, ENS de Lyon
"""

# Importation des librairies
import numpy as np
import matplotlib.pyplot as plt

# Programme principal
if __name__ == "__main__":
    """
    Variables à initialiser
    """
    filename = 'meca-top.csv'
    #Nombre de paquets
    nbBins=10

    #Lire les valeurs dans le fichier, deuxième colonne par défaut, pas de première ligne,
    y = np.genfromtxt(filename, delimiter=',',usecols=(1),skip_header=0,comments='#',unpack=True)
    #Avec valeur prédéfinies
    #bins,lbin =np.linspace(-0.05,3,nbBins,retstep=True)
    #Avec des valeurs fixées par les données
    bins,lbin =np.linspace(min(y),max(y),nbBins+1,retstep=True)
   
    fig, ax = plt.subplots(1,1,figsize=(8,6))
    #ax.set_xticks(ind+width)
    ax1=plt.subplot(1,1,1)
    #Tracé de l'histogramme
    ax1.hist(y,bins= bins)
    #Légende
    ax1.set_ylabel('Fréquece')
    ax1.set_xlabel('Valeur')
    #Ajout des intervalles de valeur
    #Format des intervalles
    xTickMarks = ['[{:.2f}-{:.2f}['.format(bins[i],bins[i+1]) for i in range(0,nbBins)]
    #Correction pour le dernier intervalle qui comprend la valeur extremum
    xTickMarks[-1]= xTickMarks[-1].replace('[',']',-1)
    #Position des intervalles
    ax1.set_xticks(bins+lbin/2)
    xtickNames = ax1.set_xticklabels(xTickMarks)
    #Rotation des xticks
    plt.setp( xtickNames, rotation=45, fontsize=10)   
    #Figure plus jolie
    plt.tight_layout()
    plt.show()


Screenshot_20201110_014310.png


Si vous voulez faire des paquets dans un intervalle donné, il faut changer la ligne
Code: Tout sélectionner
    bins,lbin =np.linspace(min(y),max(y),nbBins,retstep=True)

par :
Code: Tout sélectionner
bins,lbin =np.linspace(start,end,nbBins,retstep=True)
avec des valeurs de start et end appropriées

Après, pour la partie simulation, tout dépend de ce que vous voulez simuler.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Bachi-Bouzouk
 
Messages: 34
Inscription: 07 Sep 2013, 23:39
Académie: ENS Lyon
Poste: Enseignant à l'Université


Retourner vers Nouvelle Terminale (2020)

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité