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)?
× 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.