for (i,individu) in iris.iterrows(): # pour chaque individu de iris,... if pd.isnull(individu["petal_width"]): #... on teste 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"] Y = a*X + b iris.loc[i,"sepal_width"] = Y 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))
print(iris.loc[lignes_modifiees])
Me retourne :
On a complété sepal_width par 1.785341431491813 a partir de l'espece:setosa et de petal_width=1.0023435676326218
---------------------------------------------------------------------------TypeError Traceback (most recent call last)
<ipython-input-20-473bf2debd47> in <module> 12 b = coeffs["cas 1"]['b'] 13 X = individu["petal_length"]---> 14Y = a*X + b
15 iris.loc[i,"petal_width"]= Y # on remplace la valeur manquante par Y 16 lignes_modifiees.append(i)TypeError: can't multiply sequence by non-int of type 'float'
Par ailleurs, j'en profite pour remercier @Nicolas Rangeon pour le cours, car il est super bien fait. Le côté "Jamie" des vidéos est top pour apprendre les maths de façon claire. C'est pour le moment mes cours préférés dans le parcours Data Analyst > peu d'erreurs, très organisé, très clair...
Le choix du a chapeau fait qu'on obtient pas la meme droite de regression linéaire en partant de y = ax + b ou x = ax + b pourtant on peut obtenir la meme droite si on choisit |a| chapeau comme Sy/Sx ou E(|Y-E(Y)|) / E(|X-E(X)|). Pour le signe on multiplie par signe(Sxy)
Ces choix sont corrects car on peut factoriser |a| dans les expression et on voit un 1 dans ce qui reste. De plus si on part de y=ax + b puis de x=a'y+b' <=> y=x/a'-b'/a' et qu'on prend la racine carré de a/a' on obtient Sy/Sx qui fait la part entre les 2 choix (partir de y ou de x avec le choix connu de a).
Je ne comprends pas pourquoi tu as inséré le lien d'un chapitre, ni ton message ; est-ce un commentaire sur le cours ?
Par ailleurs, je ne sais pas si c'est pareil pour toi, mais je n'ai que des "maths processing error" sur le texte de la page que tu as partagée (j'ai bouclé le cours il y a plus d'une semaine, ce n'était pas comme ça).
In the linear regression chapter, when I call an element from the coeffs matrix I get a list, then my equation Y=ax +b doesn't work. How can I get a value/float?
coeffs = {
"cas 1" : {'a': [] , 'b':[]},
"cas 2" : {'a': [] , 'b':[]},
"cas 3" : {'a': [] , 'b':[]},
"cas 4" : {'a': [] , 'b':[]},
}
Thanks
- Edité par FelipeGonzalezGarzon 23 avril 2021 à 3:43:14
Si vous allez comparer les valeurs de sepal_width dans le jeu de données du cours avec les valeurs réelles (in r `data(iris)` et in python `from sklearn.datasets import load_iris` vous constaterez qu’ils sont tous fausses . (la valeur maximale de sw est alentour 2.5). Il n'y a pas des valeurs nulles non plus.
J'ai finalement résolu mon problème, en fait les coefs du code sont entre crochets, ce qui créé une liste et non une valeur. Quand on les appelle plus loin, il faut donc ajouter [0] juste après ['a'] ou ['b'] (cf mes deux dernières lignes).
@FelipeGonzalezGarzon I think our issue was about the same. The coefs were indeed a sequence because they're in between hooks [], hence when you call them later on, you need to specify which value inside the list you're calling. Look at the bottom two lines of my code below:
for (i,individu) in iris.iterrows(): # pour chaque individu de iris,... if pd.isnull(individu["petal_width"]): #... on teste si individu["petal_width"] est nul. a = coeffs["cas 1"]['a'][0] b = coeffs["cas 1"]['b'][0]
Edit : il faut remplacer l'entièreté des crochets donc tout ce qu'on ici : [...]. Et intégrer la valeur directement, sans crochet, pour ne pas avoir mon erreur. Felipe, you juste need to replace the hooks with the values from Question3, without any hook.
à propos du chapitre "Analysez deux variables quantitatives par régression linéaire", le code de l'étape préliminaire m'a retourné une erreur:
"TypeError: unsupported operand type(s) for -: 'str' and 'datetime.datetime'"
de ce que j'ai compris, j'ai donc ajouter une ligne de code pour convertir le string en datetime dans la boucle:
for i,row in courses.iterrows():
row["date_operation"] = pd.to_datetime(row["date_operation"])
days = (row["date_operation"]-last_date).days
if days == 0:
r.append(r[-1])
else:
r.append(days)
last_date = row["date_operation"]
Comme je débute en python, je ne sais pas vraiment si ça convient mais en faisant un scatter plot pour vérifier j'obtiens bien le même nuage de points que dans le cours entre montant et attente.
j'imagine que ce qui compte c'est que ça marche...
à propos du chapitre "Analysez deux variables quantitatives par régression linéaire", le code de l'étape préliminaire m'a retourné une erreur:
"TypeError: unsupported operand type(s) for -: 'str' and 'datetime.datetime'"
de ce que j'ai compris, j'ai donc ajouter une ligne de code pour convertir le string en datetime dans la boucle:
for i,row in courses.iterrows():
row["date_operation"] = pd.to_datetime(row["date_operation"])
days = (row["date_operation"]-last_date).days
if days == 0:
r.append(r[-1])
else:
r.append(days)
last_date = row["date_operation"]
Comme je débute en python, je ne sais pas vraiment si ça convient mais en faisant un scatter plot pour vérifier j'obtiens bien le même nuage de points que dans le cours entre montant et attente.
j'imagine que ce qui compte c'est que ça marche...
voila. si ça peut aider quelqu'un.
Salut!
Normalement le code possède justement une ligne pour cela, juste au-dessus de ce que tu as copié ?
# calcul de la variable attente
r = []
last_date = dt.datetime.now() #ici
for i,row in courses.iterrows():
days = (row["date_operation"]-last_date).days
if days == 0:
r.append(r[-1])
else:
r.append(days)
last_date = row["date_operation"]
courses["attente"] = r
courses = courses.iloc[1:,]
de mon côté je n'ai pas eu de problème avec ce bout de code
pas tout à fait car la ligne avant construit bien "last_date" en format datetime mais l'élément que l'on convoque pour la soustraction ( row["date_operation"]) reste un string.
l'erreur apparait toujours lorsque je copie-colle le code. ma ligne permet donc juste de transformer le string en datetime avant de soustraire pour obtenir days.
en remontant le fil du forum, j'ai vu que quelqu'un d'autre avait eu le même pblm. par contre, je ne sais pas pourquoi ça a fonctionné pour toi. Mais tant mieux, tu me diras.
C'est ce que j'ai compris, en tout cas. qui sait...
Concernant le projet 1 qui porte sur les données d'éducation de la Banque mondiale.
J'ai supprimé les colonnes un certain nombre de colonnes.
Mais ce que je n'arrive pas à saisir c'est comme constitué mon tableau étant donné que mes variables (j'en ai sélectionné 5) sont en lignes et, de plus, ce sont des données temporelles.
En somme, je dois "inverser" le jeu de données pour retrouver mes variables en colonnes au lieu de les avoir en lignes.
Et je ne comprend pas la forme que devrait avoir mon tableau une fois cela fait compte tenu que ce sont des données temporelles;
un tableau pour chaque année avec tous les pays ? ou bien un tableau pour chaque pays avec toutes les années ?
Je rencontre un problème quand j'essaie d'appliquer le code relatif à la courbe de Lorenz sur un autre jeu de données (néanmoins similaire à celui proposé dans le cours).
Quand je copie le code fourni __dans le cours__, j'ai l'erreur suivante: "division by zero".
Quand j'applique le code fourni __dans le notebook__, le graphe résultant est vide.
Dans le cours, l'explication est surtout centrée sur ce que sont la courbe et l'indice de Gini, et moins sur ce que fait le code, du coup, je ne sais que modifier pour obtenir le résultat voulu.
J'ai aussi eu des problèmes avec la courbe de Lorenz de ce cours, j'ai tenté d'en trouver d'autres formules, mais rien ne fonctionnait. En revenant sur la formule du cours ça a fini par marcher...
Ton erreur peut peut-être venir d'un négatif quelque part dans tes données (ou ton code), ou bien parce que tu as des Null dans ta donnée.
Tu peux éventuellement envoyer ton code, ou des captures d'écran pour que ce soit plus facile d'échanger.
Sinon regarde en ligne les erreurs comme la tienne
J'ai quelques notions de statistique, mais là je dois dire que vous m'avez complètement perdue dans toutes ses informations et j'ai l'impression de m'y connaitre encore moins que quand j'ai commencé ce cours.
Je trouve qu'il y a trop de formules mathématiques (qui ne nous seront pas très utiles étant donné que l'on utilise que des fonctions déjà existantes) et pas assez d'interprétation et d'exemple d'interprétation de tous ses indicateurs. Je m'explique : dans une analyse, pour quelle raison il serait utile de calculer la variance en plus de l'écart-type et pas juste l'écart-type ? Puisque de ce que j'ai compris, seul l'écart-type porte l'information de l'intensité de la dispersion d'une variable. Dans cette optique, si la variance empirique corrigée est plus pertinente dans une analyse que la variance empirique, pourquoi mettre en avant la variance empirique ? Quelle information apporte l'écart absolu moyen en plus de l'écart-type et quelle différence d'interprétation faire entre l'écart à la moyenne et l'écart à la médiane dans une analyse ? Et pleins d'autres questions de ce style.
En clair, avec ce cours, je pourrais dire : la variance de X donne 10 par exemple, mais je ne saurais pas ce que cela signifie pour ma variable, quelles informations cela donne et je trouve ça dommage, parce que c'est que l'on attend de nous au final : apporter une information claire et compréhensible par tous sur un jeu de donnée, et non pas apporter une information mathématique accessible uniquement aux matheux...
Je donne ici surtout des exemples pour les mesures d'analyse univariée, mais je parle aussi pour l'analyse bivariée.
Il y a donc dans l'écriture SCT = SCE + SCR une hypothèse qui permet de négliger le terme "epsilon"
J'ai beau relire le cours je ne vois pas, ou ne trouve pas ce qui permet de négliger "epsilon", or je suis convaincu que l'explication est dans le cours.
pour ma part j'aurais simplement ignoré les points extrêmes d'abscisse 0 et n, comme lorenz[0] = 0 et lorenz[-1] = lorenz[n] = 1 j'aurais fait le calcul de cette façon:
× 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.
Apprendre, apprendre et apprendre encore
Blandine GEORGELIN
Étudiante en formation Data Scientist