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

Python Discussion :

calcul moyenne en python à partir fichier CSV


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2020
    Messages : 2
    Points : 3
    Points
    3
    Par défaut calcul moyenne en python à partir fichier CSV
    Bonjour,

    lors de mon calcul de moyenne, je n'arrive pas à exclure les zéros de mon fichiers.
    voici mon code, je ne trouve pas mon erreur.
    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
     
    import csv
     
    with open('DataToAnalyze.csv') as csv_file:
    	reader = csv.reader(csv_file)
    	average = 0
    	sum = 0
    	row_count = 0
    		for row in reader:
    		for column in row:
    			n=float(column)
    					if n != 0:
    						sum += n
    						row_count += 1
    	average = sum / row_count
    	print('La moyenne est :', average)
    	csv_file.close()
    merci d'avance pour une aide

  2. #2
    Membre régulier
    Homme Profil pro
    Curieux
    Inscrit en
    Avril 2020
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 114
    Points : 85
    Points
    85
    Par défaut
    Bonjour,

    Déjà reprend ton indentation car elle n'est pas fonctionnelle, c'est surprenant que tu n'aies pas de message d'erreur.

    Puis essaye avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import csv
     
    file = 'DataToAnalyze.csv' # 0;10;25;10;25
     
    with open(file, 'r') as file:
        reader = csv.reader(file, delimiter=';')
        datas = [ligne for ligne in reader]
        l = [i for i in datas[0] if i != '0']
        somme = 0
        for data in datas[0]:
            somme = somme + float(data)
        moyenne = somme/len(datas[0])
        file.close()
    print('la moyenne est : ',moyenne)

  3. #3
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    A part l'indentation, je ne vois pas d'erreur.
    average = 0 ne sert à rien au début.
    Pas d'aide par mp.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Si on comprend bien les items de valeur zéro sont exclus du calcul de la moyenne.
    Dans ce cas ton code peut être simplifié comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    data = [[12, 50, 0, 1],
            [5, 5, 10, 0],
            [8, 0, 0, 10]]
    sum_ = 0
    count = 0
    for row in data:
        for col in row:
            sum_ += float(col)
            count += col > 0
     
    average = sum_ / count
    print("Sum: %s, count: %s, average: %s" %(sum_, count, average))

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par VinsS Voir le message
    Dans ce cas ton code peut être simplifié comme ceci:
    Es-tu sur qu'additionner "0" sans le tester soit une optimisation ? Surtout que juste en dessous tu testes quand-même si cette valeur vaut 0.
    Ne vaut-il donc pas mieux la tester (puisque de toute façon le test reste obligatoire) et seulement si la valeur correspond alors l'additionner ? On élimine ainsi une addition parfois inutile...

    Sinon passer par une liste en intension
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    d=tuple(float(c) for row in data for c in row if c != 0)
    average=sum(d)/len(d)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Es-tu sur qu'additionner "0" sans le tester soit une optimisation ? Surtout que juste en dessous tu testes quand-même si cette valeur vaut 0.
    Ne vaut-il donc pas mieux la tester (puisque de toute façon le test reste obligatoire) et seulement si la valeur correspond alors l'additionner ? On élimine ainsi une addition parfois inutile...
    Ce n'est pas une question d'optimisation, tout ce qui simplifie le code est bienvenu.

    Par contre, vérifier avant, ça s'appelle "Look before you leap" et ce n'est pas pythonique.

    Je préfère de loin mon code.

  7. #7
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Si on part d'un CSV, les regex peuvent être sympa pour le tri des 0.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import re
     
    with open("test.csv", 'r') as f:
        numbers = re.findall("[0-9]{2}|[1-9]", f.read())
        print(sum(map(int, numbers))/len(numbers))
    Peut-être est-ce optimisé, je sais pas...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2020
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Python-Création fichier CSV + création de courbes à partir des données
    Par Alex-python38 dans le forum Général Python
    Réponses: 1
    Dernier message: 28/08/2018, 10h14
  2. calcule de temps a partir d'un fichier CSV
    Par AI_LINUX dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 10/05/2015, 18h28
  3. python et fichier .CSV
    Par billyrose dans le forum Général Python
    Réponses: 7
    Dernier message: 22/07/2008, 07h53
  4. Fichier CSV à partir un programme C
    Par Premium dans le forum C
    Réponses: 3
    Dernier message: 25/05/2006, 23h53
  5. Ecrire un fichiers CSV à partir de 3 fichiers Excel
    Par yas2006 dans le forum Documents
    Réponses: 22
    Dernier message: 14/03/2006, 14h10

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