Partage
  • Partager sur Facebook
  • Partager sur Twitter

[COURS] Nettoyez et décrivez votre jeu de données

    2 avril 2021 à 10:47:44

    Bonjour à tous !

    J'ai une question au sujet de l'exercice https://openclassrooms.com/fr/courses/4525266-decrivez-et-nettoyez-votre-jeu-de-donnees/6772101-entrainez-vous-a-realiser-des-analyses-bivariees

    L'énoncé parle de "pistes" pour comparer ses résultats, mais il n'y a pas de document ou de lien fourni ?

    Où pouvons-nous trouver les réponses ?(je retente ma question, je vois que @CharlotteDarribere l'a déjà posté en août..

    J'ai une erreur à l'exécution du dernier bout de code, par rapport à l'équation ;

    coeffs = {
        "cas 1" : {'a': [0.38599421003086465] , 'b':[0.5092683365300003]},
        "cas 2" : {'a': [1.7875014940283396] , 'b':[1.4593274917352779]},
        "cas 3" : {'a': [0.6992505959712975] , 'b':[1.0377429413261892]},
        "cas 4" : {'a': [0.9735704312621848] , 'b':[0.8094893720788445]},
    }
    lignes_modifiees = []

    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...

    • Partager sur Facebook
    • Partager sur Twitter
      19 avril 2021 à 17:13:55

      Bonjour, j'avais d'abord mit ce message dans un autre endroit...

      https://openclassrooms.com/fr/courses/4525266-decrivez-et-nettoyez-votre-jeu-de-donnees/4774671-analysez-deux-variables-quantitatives-par-regression-lineaire

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

      Ce sont donc de meilleurs choix ? 

      • Partager sur Facebook
      • Partager sur Twitter
        19 avril 2021 à 19:12:51

        Bonjour Axel,

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

        • Partager sur Facebook
        • Partager sur Twitter
          20 avril 2021 à 17:10:52

          Oui, c'est un commentaire, je me demande si il y un meilleur choix pour a chapeau.
          • Partager sur Facebook
          • Partager sur Twitter
            23 avril 2021 à 3:20:22

            Hi Nicolas,

            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

            • Partager sur Facebook
            • Partager sur Twitter
              27 avril 2021 à 18:14:18

              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.
              • Partager sur Facebook
              • Partager sur Twitter
                6 mai 2021 à 11:42:29

                Salut à tous !

                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:

                coeffs = {
                    "cas 1" : {'a': [0.38599421003086465] , 'b':[0.5092683365300003]},
                    "cas 2" : {'a': [1.7875014940283396] , 'b':[1.4593274917352779]},
                    "cas 3" : {'a': [0.6992505959712975] , 'b':[1.0377429413261892]},
                    "cas 4" : {'a': [0.9735704312621848] , 'b':[0.8094893720788445]},
                }
                lignes_modifiees = []

                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.

                -
                Edité par HéloïseGalfré 6 mai 2021 à 16:17:32

                • Partager sur Facebook
                • Partager sur Twitter
                  6 mai 2021 à 13:10:36

                  Edit : Je me suis trompé de forum

                  -
                  Edité par AubrydeLongcamp 6 mai 2021 à 13:32:18

                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 juin 2021 à 11:24:57

                    Bonjour,

                    à 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.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 juin 2021 à 10:10:39

                      adneneguessoum1 a écrit:

                      Bonjour,

                      à 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

                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 juin 2021 à 12:46:30

                        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...

                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 juin 2021 à 14:33:54

                          Bonjour,

                          Vraiment je suis perdu; si vous pouviez m'aider.

                          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 ?

                          Le dataset se présente comme suit :

                          886930 rows × 70 columns

                          Entrée [50]:
                          data = data.drop(['Country Code', '1970', '1971', '1972', '1973', '1974', '1975', '1976', '1977', '1978',
                           '1979', '1980', '1981', '1982', '1983', '1984', '1985', '1986', '1987',
                           '1988', '1989', '1990', '1991', '1992', '1993', '1994', '1995', '1996',
                           '1997', '1998', '1999', '2000', '2001', '2002', '2003', '2004', '2005',
                           '2006', '2007', '2008', '2009', '2035', '2040', '2045',
                           '2050', '2055', '2060', '2065', '2070', '2075', '2080', '2085', '2090',
                           '2095', '2100', 'Unnamed: 69' ], axis=1)
                          Entrée [51]:
                          data.head()
                          Out[51]:
                           Country NameIndicator NameIndicator Code20102011201220132014201520162017202020252030
                          0 Arab World Adjusted net enrolment rate, lower secondary, ... UIS.NERA.2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
                          1 Arab World Adjusted net enrolment rate, lower secondary, ... UIS.NERA.2.F NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
                          2 Arab World Adjusted net enrolment rate, lower secondary, ... UIS.NERA.2.GPI NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
                          3 Arab World Adjusted net enrolment rate, lower secondary, ... UIS.NERA.2.M NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
                          4 Arab World Adjusted net enrolment rate, primary, both sex... SE.PRM.TENR 85.211998 85.24514 86.101669 85.51194 85.320152 NaN NaN NaN NaN NaN NaN
                          Entrée [




                          • Partager sur Facebook
                          • Partager sur Twitter
                            19 juillet 2021 à 13:21:09

                            Bonjour,

                            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. 

                            Merci d'avance!

                            • Partager sur Facebook
                            • Partager sur Twitter
                              26 juillet 2021 à 12:11:14

                              Un excellent cours que j'aimerais apprendre
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Apprendre, apprendre et apprendre encore

                                10 août 2021 à 17:34:22

                                Bonjour NadyrRezk,

                                Bon c'est un peu tard, mais il fallait simplement utiliser le pivot, dans le cours Découvrez les librairies Python, Manipulez vos dataframes.



                                Bonjour Olivia OliviaVolpi1

                                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 :)

                                -
                                Edité par HéloïseGalfré 10 août 2021 à 17:38:24

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  10 septembre 2021 à 15:52:50

                                  Bonjour, il faut ajouter des parenthèses à "day_name" :  d.day_name( )

                                  le reste ça va

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    3 novembre 2021 à 11:11:51

                                    Bonjour,

                                    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. 

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Blandine GEORGELIN

                                    Étudiante en formation Data Scientist

                                      17 mars 2022 à 9:17:35

                                      Bonjour à tous,

                                      C'est à propos de la partie ANOVA

                                      J'ai voulu comprendre la formule SCT = SCE + SCR sur de petits exemples et en faisant les calculs à l'aide d'un tableur.

                                      A ma grande surprise il y a des cas où l'égalité est fausse

                                      En repartant de SCT = Somme(yi _ ymoy)² je me suis rendu compte que Mathématiquement l'égalité est SCT = SCE + SCR + epsilon 

                                      avec epsilon = 2 * Somme(y - ymodel)*(ymodel - ymoy)    (je l'appel epsilon arbitrairement)

                                      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.

                                      Merci pour votre aide

                                      Dominique

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        28 mars 2022 à 17:42:32

                                        Bonjour,

                                        Dans le cours "Familiarisez-vous avec les mesures de concentration" on propose le calcul de l'indice de Gini en prenant la demi-valeur des extrêmes:

                                        AUC = (lorenz.sum() -lorenz[-1]/2 -lorenz[0]/2)/n
                                        S = 0.5 - AUC
                                        gini = 2*S
                                        gini

                                        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:

                                        AUC = (lorenz[:-1].sum())/(n-1)

                                        C'est à dire la moyenne de ces n-1 valeurs.

                                        Qu'en dites-vous ?

                                        Francis

                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        [COURS] Nettoyez et décrivez votre jeu de données

                                        × 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