Aller au contenu

Csv titanic programme


Messages recommandés

  • E-Bahut
Posté(e)

Bonjour,

Il y a plusieurs problèmes.

D'abord, il ne faut pas convertir le fichier en liste mais le laisser en dictionnaire car tu perds la notion de correspondance entre la clé et la valeur associée (ce que tu veux faire avec personne['Embarked'], par exemple).

Ensuite, les éléments additionnels dans "open" et "csv.DictReader" me semblent inutiles. Je les ai supprimé et ça marche tel quel.

Enfin, tout ce qui est relatif à "titanic" doit être dans la partie with...

Je te mets sous forme de code ton script avec mes modifications

import csv

# ouverture du fichier csv
with open('titanic.csv') as fichier:
    titanic = csv.DictReader(fichier)
    
    compteurC = 0
    compteurSurvivant = 0
    for personne in titanic:
        if personne['Embarked'] == 'C' :
            if personne['Survived'] == '1': compteurC += 1

print ("Le nombre de survivant ayant embarquer a Cherbourg est de ",compteurC)

Tu peux te passer des restrictions dues au "with" de la façon suivante

import csv

# ouverture du fichier csv
fichier=open('titanic.csv', 'r')

titanic = csv.DictReader(fichier)

fichier.close

compteurC = 0
compteurSurvivant = 0
for personne in titanic:
    if personne['Embarked'] == 'C' :
        if personne['Survived'] == '1': compteurC += 1
print("Le nombre de survivant ayant embarquer a Cherbourg est de "
      ,compteurC)

N.B. : Il fallait aussi mettre C entre guillemets.

Posté(e)
Il y a 23 heures, julesx a dit :

Bonjour,

Il y a plusieurs problèmes.

D'abord, il ne faut pas convertir le fichier en liste mais le laisser en dictionnaire car tu perds la notion de correspondance entre la clé et la valeur associée (ce que tu veux faire avec personne['Embarked'], par exemple).

Ensuite, les éléments additionnels dans "open" et "csv.DictReader" me semblent inutiles. Je les ai supprimé et ça marche tel quel.

Enfin, tout ce qui est relatif à "titanic" doit être dans la partie with...

Je te mets sous forme de code ton script avec mes modifications

import csv

# ouverture du fichier csv
with open('titanic.csv') as fichier:
    titanic = csv.DictReader(fichier)
    
    compteurC = 0
    compteurSurvivant = 0
    for personne in titanic:
        if personne['Embarked'] == 'C' :
            if personne['Survived'] == '1': compteurC += 1

print ("Le nombre de survivant ayant embarquer a Cherbourg est de ",compteurC)

Tu peux te passer des restrictions dues au "with" de la façon suivante

import csv

# ouverture du fichier csv
fichier=open('titanic.csv', 'r')

titanic = csv.DictReader(fichier)

fichier.close

compteurC = 0
compteurSurvivant = 0
for personne in titanic:
    if personne['Embarked'] == 'C' :
        if personne['Survived'] == '1': compteurC += 1
print("Le nombre de survivant ayant embarquer a Cherbourg est de "
      ,compteurC)

N.B. : Il fallait aussi mettre C entre guillemets.

Merci mais maintenant j'ai un autre problème :

def survivantsClasse(classe):
    """
    classe -- '1' , '2' ou '3'

    renvoie la proportion de survivants de la classe demander .
    """
    CClasse = 0 #on crées 2 compteur
    CSurviant = 0
    for i in titanic:
        if i['Pclass'] == 'classe':
            CClasse += 1
            if i['Survived'] == '1':
                CSurviant += 1
    return (CSurviant/CClasse*100)

L'erreur me dit que ça divise par 0 mais je ne vois pas pourquoi.

C'est toujours avec le titanic

  • E-Bahut
Posté(e)

Bonjour,

Inutile de citer l'intégralité de mes messages, ça surcharge pour rien ta réponse. Ne le fais que si tu as quelque chose à commenter dedans, mais même dans ce cas, ne cite que la partie incriminée.

Pour en revenir à ton problème, a priori, il vient de l'instruction if i['Pclass'] == 'classe':, il faut enlever les guillemets
if i['Pclass'] == classe:
mais les mettre dans l'appel
print(survivantsClasse('1'))
par exemple.

Mais !

J'ai fait des essais et ça marche bien avec le script suivant

import csv

# ouverture du fichier csv
fichier=open('titanic.csv', 'r')

titanic = csv.DictReader(fichier)

fichier.close

def survivantsClasse(classe):
    """
    classe -- '1' , '2' ou '3'

    renvoie la proportion de survivants de la classe demander .
    """
    CClasse = 0 #on crées 2 compteur
    CSurviant = 0
    for i in titanic:
        
        if i['Pclass'] == classe:
            CClasse += 1
            if i['Survived'] == '1':
                CSurviant += 1
    return (CSurviant/CClasse*100)

print(survivantsClasse('1'))

Par contre, si je rajoute la partie précédente , ça ne va plus. Pareil, dans le script avec "with", ça ne fonctionne pas non plus. Pour faire cette partie, tu la mets à la suite de l'autre ou tu crées un nouveau script ?

Cela dit, je suis loin d'être un spécialiste de Python, je bricole, quand ça marche, c'est bien, mais quand il y a un problème un peu compliqué, je ne sais pas l'expliquer, donc pas le résoudre.

 

  • E-Bahut
Posté(e)

Bonsoir,

Après différents essais, j'ai constaté, sans pouvoir l'expliquer, cf. mon message précédent, qu'il fallait ré-initiaiiser le fichier .CSV avant chaque appel. Sinon, à la procédure suivante, c'est comme si ce fichier n'existait plus. Un spécialiste ?

En tout cas, ce script avec 2 définitions de fonctions donne les résultats attendus.

import csv

def survivantsEmbarques():
    compteurC = 0
    compteurSurvivant = 0
    for i in titanic:
        if i['Embarked'] == 'C' :
            if i['Survived'] == '1': compteurC += 1
    return compteurC

def survivantsClasse(classe):
    CClasse = 0 #on crées 2 compteur
    CSurviant = 0
    for i in titanic:
        if i['Pclass'] == classe:
            CClasse += 1
            if i['Survived'] == '1':
                CSurviant += 1
    return CSurviant/CClasse*100

# ouverture du fichier csv
fichier=open('titanic.csv')
titanic = csv.DictReader(fichier)
fichier.close

print ("Le nombre de survivant ayant embarqués à Cherbourg est de ",survivantsEmbarques())

# ouverture du fichier csv
fichier=open('titanic.csv')
titanic = csv.DictReader(fichier)
fichier.close

print("Le nombre de survivant par classe est de ",int(survivantsClasse('1')))

Il y a surement une possibilité de passer outre à l'ouverture multiple, mais ça dépasse mes compétences !

Bonne soirée.

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
×
×
  • Créer...
spam filtering
spam filtering