Partage
  • Partager sur Facebook
  • Partager sur Twitter

Code pourr remplacer valeur manquantes

    16 novembre 2019 à 23:38:38

    Bonjour, j'ai un peu du mal à comprendre un exercice d'open classroom où l'objectif est de remplacer des valeurs dans un dataframe. 

    L'énoncé :

    Voici les 4 lignes contenant des données manquantes :

    Pour chaque individu, la valeur manquante se trouve soit dans la variable petal_width soit dans la variable sepal_width. Dans ces 2 cas, on peut imputer (remplir) ces valeurs grâce aux régressions linéaires que nous avons étudiées précédemment. Ces valeurs seront approchées mais fausses.
    En supposant qu'un individu n'a jamais plus d'une valeur manquante, voici le code qui remplace les valeurs manquantes grâce aux régressions linéaires. Des bouts de code ont été supprimés et remplacés par "[...]" : à vous de les retrouver. 

    coeffs = {
        "cas 1" : {'a': [...] , 'b':[...]},
        "cas 2" : {'a': [...] , 'b':[...]},
        "cas 3" : {'a': [...] , 'b':[...]},
        "cas 4" : {'a': [...] , 'b':[...]},
    }
    lignes_modifiees = []
    
    for (i,individu) in iris.iterrows(): # pour chaque individu de iris,...
        if pd.isnull(individu["petal_width"]): #... on test si individu["petal_width"] est nul.
            a = coeffs["cas 1"]['a']
            b = coeffs["cas 1"]['b']
            X = individu["petal_length"]
            Y = a*X + b
            iris.loc[i,"petal_width"] = Y # on remplace la valeur manquante par Y
            lignes_modifiees.append(i)
            print("On a complété petal_width par {} a partir de petal_length={}".format(Y,X))
            
        if pd.isnull(individu["sepal_width"]):
            espece = individu["species"]
            X = individu["petal_width"]
            [...]
            lignes_modifiees.append(i)
            print("On a complété sepal_width par {} a partir de l'espece:{} et de petal_width={}".format(Y,espece,X))

    Mon code pour le cas versicolor

    # cas 4/ X est la variable petal_width et Y la variable sepal_width, sur le dataframe iris_versicolor
    Y = iris_versicolor['sepal_width']
    X = iris_versicolor[['petal_width']]
    X = X.copy()
    X['intercept'] = 1
    result = sm.OLS(Y,X).fit() 
    a, b = result.params['petal_width'], result.params['intercept']
    # droite de regression 
    plt.plot(iris_versicolor.petal_width, iris_versicolor.sepal_width, "o")
    plt.plot(np.arange(5), [a*x+b for x in np.arange(5)])
    plt.xlabel('petal_width')
    plt.ylabel('sepal_width')
    plt.show()
    print('a =', a )
    print('b =', b )
    print(st.pearsonr(iris_versicolor['petal_width'], iris_versicolor['sepal_width'])[0])



    Quelqu'un peut - il m'aider à comprendre ce qu'il faut faire. Faut-il remplacer les valeurs de coeffs par les valeurs de a et b selon les cas? Par exemple le cas 1 où il manque petal_width, on sait qu'elle a appartient à setosa (voir les valeurs que j'ai trouvé precedemment)?

    coeffs = {
        "cas 1" : {'a': [0.9735704312621843] , 'b':[0.8094893720788445]},
        "cas 2" : {'a': [...] , 'b':[...]},
        "cas 3" : {'a': [...] , 'b':[...]},
        "cas 4" : {'a': [...] , 'b':[...]},

    Et du coup les trois autres cas c'est lorsqu'il va manquer sepal_width et dans ce cas le cas je modifie que cette partie du code : 

    X = individu["petal_width"]
            [...]
            lignes_modifiees.append(i)

    Ces lignes si dans la premiere condition ne bougeront pas?

    if pd.isnull(individu["petal_width"]): #... on test si individu["petal_width"] est nul.
            a = coeffs["cas 1"]['a']
            b = coeffs["cas 1"]['b']

    Je veux être sur d'avoir bien pigé le code . 

    Merci merci



    -
    Edité par RaphaëlBitoun 16 novembre 2019 à 23:52:53

    • Partager sur Facebook
    • Partager sur Twitter
      18 novembre 2019 à 13:49:53

      Bonjour, 

      Quelqu'un pourrait-il m'aider? 

      Merci

      • Partager sur Facebook
      • Partager sur Twitter

      Code pourr remplacer valeur manquantes

      × 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