Partage
  • Partager sur Facebook
  • Partager sur Twitter

erreur dans un script python

ValueError: could not convert string to float

    21 décembre 2014 à 11:37:18

    bonjour tout le monde, j’espère que vous êtes tous bien :)

    avant d'entrer dans le vif de mon sujet !!! je veux dire que je suis encore débutant, mais je suis obliger d'apprendre le langage de python le plus vite possible :(

    bon j'ai essayé d'écrire un script de python qui utilise un arbre de décision qui est le suivant :

    import csv as csv 
    import numpy as np
    from sklearn import tree
    # Open up the csv file in to a Python object
    csv_file_object = csv.reader(open('E:/Livres informatique/cours SIRM/S3/Dataming/projet/train.csv', 'rb')) 
    header = csv_file_object.next()  # The next() command just skips the 
                                     # first line which is a header
    data=[]                          # Create a variable called 'data'.
    for row in csv_file_object:      # Run through each row in the csv file,
        data.append(row)             # adding each row to the data variable
    data = np.array(data) 	         # Then convert from a list to an array
    			         # Be aware that each item is currently
                                     # a string in this format
            
    X=data[1:418,0:11]
    Y=data[1:418,1]
        
    clf = tree.DecisionTreeClassifier(criterion='entropy')
    clf = clf.fit(X,Y)

     mais après l’exécution, python notebook m'affiche le message d'erreur suivant :

    SVP, je suis sur le point de perdre ma tête :colere: j'ai besoin de votre aide pour trouver la solution, et merci d'avance

    -
    Edité par Driss EL ALAOUI 21 décembre 2014 à 12:17:59

    • Partager sur Facebook
    • Partager sur Twitter
      21 décembre 2014 à 16:18:21

      L'erreur indique qu'il ne peut convertir une string en float, et plus précisément que cette string est: Cumings, Mrs. John Bradley (Florence Briggs Thayer). En effet ça ne se transforme pas vraiment en float. ;)

      Autre chose, comme tu sembles vouloir lire un fichier csv et le stocker dans un numpy array, tu pourrais utiliser directement la fonction suivante:

      data = np.genfromtxt('E:/Livres informatique/cours SIRM/S3/Dataming/projet/train.csv', dtype=float, delimiter=',', names=True) 
      
      Ceci présuppose que les données sont bel et bien de type float, que le délimiteur est une virgule (et non un point virgule) et que la première ligne contient un header.

      -
      Edité par Dan737 21 décembre 2014 à 16:18:50

      • Partager sur Facebook
      • Partager sur Twitter
        25 décembre 2014 à 21:48:19

        merci Dan737, mais j'ai fait ce que vous m'avez dit et le résultat  une erreur qui est très longue :

        ValueError                                Traceback (most recent call last)
        <ipython-input-4-7abf09b39a6c> in <module>()
              3 from sklearn import tree
              4 # Open up the csv file in to a Python object
        ----> 5 data = np.genfromtxt('E:/Livres informatique/cours SIRM/S3/Dataming/projet/train.csv', dtype=float, delimiter=',', names=True)
              6 
              7 X=data[1::,0:11]
        
        C:\Users\driss\Anaconda\lib\site-packages\numpy\lib\npyio.pyc in genfromtxt(fname, dtype, comments, delimiter, skiprows, skip_header, skip_footer, converters, missing, missing_values, filling_values, usecols, names, excludelist, deletechars, replace_space, autostrip, case_sensitive, defaultfmt, unpack, usemask, loose, invalid_raise)
           1684             # Raise an exception ?
           1685             if invalid_raise:
        -> 1686                 raise ValueError(errmsg)
           1687             # Issue a warning ?
           1688             else:
        
        ValueError: Some errors were detected !
            Line #2 (got 13 columns instead of 12)
            Line #3 (got 13 columns instead of 12)
            Line #4 (got 13 columns instead of 12)
            Line #5 (got 13 columns instead of 12)
            Line #6 (got 13 columns instead of 12)
            Line #7 (got 13 columns instead of 12)
            Line #8 (got 13 columns instead of 12)
            .
            .
            .
            Line #891 (got 13 columns instead of 12)
            Line #892 (got 13 columns instead of 12)


        donc qui ce que signifie tout ça ? et qui ce que je dois faire ? et merci bcp

        • Partager sur Facebook
        • Partager sur Twitter
          26 décembre 2014 à 15:44:58

          Il semblerait que dans l'une de tes lignes tu aies un nombre de colonnes différentes. Toutes les lignes semblent avoir 13 colonnes, mais la ligne 1 n'en a que 12. Tu peux coller ici les 3 premières lignes de ton fichier *.csv?
          • Partager sur Facebook
          • Partager sur Twitter
            27 décembre 2014 à 11:00:22

            Le problème est que ton champs Name contient aussi une virgule. genfromtxt ne sait pas comment procéder, alors que le module csv bien. Donc je te conseille finalement de revenir au module csv pour lire les données et les placer dans un numpy array.

            Je me dois aussi de te proposer d'utiliser l'excellente bibliothèque pandas qui a une fonction read_csv et qui marchera convenablement avec les virgules dans les noms, puisqu'ils sont bien entourés de guillemets.

            Pour en revenir à notre csv (donc sans pandas), il te suffit de lire ton fichier et de convertir correctement chaque colonne dans le bon format dtype.

            data = np.array(data, dtype=np.dtype("i4, i4, i4, S128, S8, i4, i4, i4, S64, f8, S8, S4"))

            Ensuite je ne connais pas sklearn mais j'imagine que tu ne dois pas lui donner des strings, mais des floats. Donc à toi de voir comment faire fonctionner ça.

            -
            Edité par Dan737 27 décembre 2014 à 11:05:27

            • Partager sur Facebook
            • Partager sur Twitter
              27 décembre 2014 à 12:48:30

              merci beaucoup Dan737, je vais tester cette solution, mais c'est quoi ces : "i4, i4, i4, S128, S8, i4, i4, i4, S64, f8, S8, S4" ??

              est ce que ce sont les noms des attributs ( c-à-d les noms des colonnes de fichier csv ) ??

              -
              Edité par Driss EL ALAOUI 27 décembre 2014 à 12:49:44

              • Partager sur Facebook
              • Partager sur Twitter
                27 décembre 2014 à 13:51:30

                Ce sont les types de chaque colonne du numpy array. Voir la doc http://docs.scipy.org/doc/numpy/user/basics.types.html

                -
                Edité par Dan737 27 décembre 2014 à 16:23:55

                • Partager sur Facebook
                • Partager sur Twitter
                  27 décembre 2014 à 15:52:25

                  ah bon, d'accord !!! merci beaucoup Dan737
                  • Partager sur Facebook
                  • Partager sur Twitter

                  erreur dans un script python

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown