IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

fichier csv et python


Sujet :

Calcul scientifique Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut fichier csv et python
    Bonjour
    Mon problème est simple lorsque je lance ce programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    import matplotlib.pyplot as plt ; import numpy as n
    
    
    #### Coordonnées des points en fonction du temps  ####
    fic = open("Mouvement_NH.csv",'r')                #
    donnee=fic.readlines()                               #
    x=[] ; y=[] ; dt = 10*86400 # 10 jours entre 2 points#
    for point in donnee :                                #
        point=point.split() # chaque point est un triplet#
        if point[0][0].isnumeric():  #
            x.append(float(point[1].replace(',','.')))   #
            y.append(float(point[2].replace(',','.')))   #
    ######################################################
    ###  Calcul de vx, vy et v pour le vecteur vitesse ###
    vx=[] ; vy=[] ; v=[]                               #
    for i in range(1,len(x)-1):                          #
        vx.append((x[i+1]-x[i-1])/(2*dt))                #
        vy.append((y[i+1]-y[i-1])/(2*dt))                #
        v.append((vx[-1]**2+vy[-1]**2)**0.5)             #
    ######################################################
    ##  Calcul de ax et ay pour le vecteur accélération ##
    ax=[] ; ay=[]  ; a=[]                                #
    for i in range(1,len(vx)-1):                         #
        ax.append((vx[i+1]-vx[i-1])/(2*dt))              #
        ay.append((vy[i+1]-vy[i-1])/(2*dt))              #
        a.append((ax[-1]**2+ay[-1]**2)**0.5)             #
    ######################################################
    
    
    ########  Tracé des champs de vecteurs:  #############
    vec_v=plt.quiver(x[1:-1],y[1:-1],vx,vy,color="green")#
    plt.quiverkey(vec_v,X=0.7, Y=1.05, U=5e4,label='V')  #
                                                         #
    vec_a=plt.quiver(x[2:-2],y[2:-2],ax,ay,color="blue") #
    plt.quiverkey(vec_a,X=0.2, Y=1.05, U=1e-2,label='a') #
                                                         #
    plt.plot(x,y,"ro") ; plt.axis('equal')               #
    plt.show()                                           #
    ######################################################
    ###########     Traitement statistique     ###########
    v = n.array(v) ; a = n.array(a) # données sous numpy #
    v_moy=n.mean(v) ; a_moy = n.mean(a) # Moyennes       #
    k=a_moy*149e9/v_moy**2                               #
    ####  Calcul des incertitudes U sur a, v et k : ######
    U_v=n.std(v,ddof=1)/(len(vx)**0.5)                   #
    U_a=n.std(a,ddof=1)/(len(a)**0.5)                    #
    U_k = (k*((2*U_v/v_moy)**2+(U_a/a_moy)**2)**0.5)     #
    #### Affichage des résultats statistiques :    #######
    plt.text(-0.5e11,0,
        "V = ("+str(int(v_moy/1e2)/10) +chr(177)
        +str(int(U_v/1e2)/10)+")km/s\n"+
    
    
        "a = ("+ str(int(a_moy*1e5)/1e2)+chr(177)
        +str(int(U_a*1e5)/1e2)+')mm/s²\n'+
    
    
        "k = ("+ str(int(k*100)/100)+chr(177)
        +str(int(U_k*100)/100)+")")
    Python ne semble pas reconnaître mes variables x et y (ligne en rouge ci-dessus). j'ai pourtant nommé dans excel (et regressi) les colonnes comme ils se doivent mais quelques chose (de bête, certainement) doit m'échapper. Je précise que que je suis novice en la matière.
    Merci par avance

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il faudrait avoir un exemple de la variable 'point'. Si elle est une liste de 3 valeurs numériques, la 1ère est atteinte par 'point[0]' et non 'point[0][0]'. Mais si cette 1ère valeur est numérique, le 'point[0][0]' devrait générer une erreur. Si c'est une chaîne, on obtient son 1er caractère qui n'est pas numérique. Il faudrait donc obtenir une valeur numérique par conversion en entier ou flottant, et modifier la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if point[0].isnumeric():
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour et merci pour l'aide.
    j'ai donc remplacé comme suggéré mais maintenant, rien ne s'affiche dans le graphe. Du coup je me demande si mon fichier excel converti en csv est bien fait? J'ai trois colonnes, toutes numériques x, y et dt:

    x y dt
    m m s
    0,001057785 -0,00035327 0
    -0,042642379 -0,04996529 0,04
    -0,058937355 -0,077362973 0,08
    -0,071528927 -0,10698209 0,12
    -0,078935734 -0,13882264 0,16
    -0,082639138 -0,170663191 0,2
    -0,083379819 -0,203984697 0,24
    -0,077454373 -0,234344291 0,28
    -0,070047566 -0,266184842 0,32
    -0,05449327 -0,296544436 0,36
    -0,039679656 -0,322461163 0,4
    -0,019681276 -0,346156457 0,44
    0,003279827 -0,369111272 0,48
    0,029203652 -0,38762322 0,52
    0,058090201 -0,403173256 0,56
    0,086236069 -0,412799469 0,6
    0,115863298 -0,420204248 0,64
    0,14771257 -0,422425682 0,68
    0,179561841 -0,420944726 0,72
    0,20844839 -0,415761381 0,76
    0,238075619 -0,406875646 0,8
    0,265480806 -0,392806566 0,84
    0,291404632 -0,377997007 0,88
    0,314365734 -0,359485059 0,92
    0,335845475 -0,338751678 0,96
    0,352881132 -0,314315906 1
    0,368435428 -0,289139657 1,04
    0,378064277 -0,261001496 1,08
    0,386952446 -0,23138238 1,12
    0,39139653 -0,202503741 1,16
    0,39139653 -0,172884624 1,2
    0,388433807 -0,143265508 1,24
    0,383249042 -0,115867825 1,28
    0,372138831 -0,088470142 1,32
    0,359547259 -0,062553415 1,36
    0,343252283 -0,038858121 1,4
    0,324735265 -0,017384262 1,44
    0,302514843 0,00334912 1,48
    0,278813059 0,020380112 1,52
    0,253629914 0,033708714 1,56
    0,226965408 0,043334927 1,6
    0,198078859 0,051480185 1,64
    0,16845163 0,055923052 1,68
    0,141046443 0,055923052 1,72

    merci

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par fmarioli Voir le message
    mais maintenant, rien ne s'affiche dans le graphe. Du coup je me demande si mon fichier excel converti en csv est bien fait? J'ai trois colonnes, toutes numériques x, y et dt:
    Pour vérifier que vous retrouvez bien dans les listes x et y ce que vous attendez, vous pouvez faire print(x), print(y) et comparer.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Salut, ta première colonne est apparemment celle des x et la seconde, celle des y...
    donc il faudrait faire plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     x.append(float(point[0].replace(',','.')))   #
     y.append(float(point[1].replace(',','.')))   #
    Avec tes valeurs :
    Nom : Clipboard01.jpg
Affichages : 743
Taille : 81,0 Ko

    Tes vecteurs accélération sont presque centripètes...

  6. #6
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Pour ton problème d'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    fic = open("orbite.csv",'r')
    donnee=fic.readlines()
    dt = 10*86400 # 10 jours entre 2 points#
    x,y=[],[]
     
    for point in donnee :
        point=point.replace('\n','').replace('\r','')
        point=point.split(';')
        x.append(float(point[0].replace(',','.')))
        y.append(float(point[1].replace(',','.')))
    Ceci dit la méthode présentée dans le Bordas n'est pas la plus compacte !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import matplotlib.pyplot as plt ; import numpy as n
    import csv, os, sys
     
    os.chdir(sys.path[0])# pour pointer dans le dossier du fichier source
    #### Coordonnées des points en fonction du temps  ####
    fic = open("orbite.csv",'r')                #
    x=[] ; y=[] ; dt = 10*86400 # 10 jours entre 2 points#
     
    reader = csv.reader(fic,delimiter=';')
    donnees = list( zip(*reader) )
    x= [ float( donnees[0][i].replace(',','.') ) for i in range( len(donnees[0])) ] #on garde la colonne n°1(indice 0) des x
    y= [ float( donnees[1][i].replace(',','.') ) for i in range(len(donnees[1])) ] #on garde la colonne n°2(indice 1) des y
    Bonne deuxième loi de Newton et bon courage pour Kepler !

    Rq: tu as un problème à la fin de ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    '''plt.text(-0.5e11,0,
        "V = ("+str(int(v_moy/1e2)/10) +chr(177)
        +str(int(U_v/1e2)/10)+")km/s\n"+
     
     
        "a = ("+ str(int(a_moy*1e5)/1e2)+chr(177)
        +str(int(U_a*1e5)/1e2)+')mm/s²\n'+
     
     
        "k = ("+ str(int(k*100)/100)+chr(177)
        +str(int(U_k*100)/100)+")")'''
    Je n'ai pas eu le temps de regarder...

Discussions similaires

  1. [Python 2.X] Python : problème lecture de fichier csv
    Par robinooo dans le forum Général Python
    Réponses: 7
    Dernier message: 27/07/2017, 13h13
  2. Réponses: 4
    Dernier message: 26/03/2014, 15h30
  3. [CODE] Python 3.2 : lecture d'un fichier .csv
    Par Monkey B. Goode dans le forum Général Python
    Réponses: 2
    Dernier message: 28/06/2012, 17h45
  4. conversion d'un fichier csv en un tableau python
    Par titou_170 dans le forum Calcul scientifique
    Réponses: 3
    Dernier message: 25/11/2010, 11h40
  5. python et fichier .CSV
    Par billyrose dans le forum Général Python
    Réponses: 7
    Dernier message: 22/07/2008, 07h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo