Partage
  • Partager sur Facebook
  • Partager sur Twitter

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

    4 juin 2019 à 11:41:29

    Bonjour à tous.

    Je suis au début du cours  ' Téléchargez et nettoyer les données'. Je n'arrive pas à avoir le tableau quand j'écris print(data) comme indiqué.

    J'ai bien installé et vérifier que python fonctionnait via une formule mathématique simple comme suggéré. J'ai bien importé dans un dossier sur Jupiter le code proprocessing ainsi que le fichier operations.csv issu du dossier de données de base donnée sur le site.

    Des idées ? merci.

    • Partager sur Facebook
    • Partager sur Twitter
      24 juin 2019 à 8:51:11

      Bonjour,

      c'est plutôt un retour qu'une question

      dans la partie

      Représentez la distribution empirique d'une variable,

      j'ai une erreur dans la mise en forme graphique des données:

      import matplotlib.pyplot as plt
      import pandas as pd
      from collections import Counter
      
      
      
      data = pd.read_csv("operations_enrichies.csv", parse_dates=[1,2], sep=",", decimal=",", dayfirst=True)
      #print (data)
      print ("Début des mise ne forme")
      
      # VARIABLE QUALITATIVE
      # Diagramme en secteurs
      data["categ"].value_counts(normalize=True).plot(kind='pie')
      print ("CHargement des catégories de dépenses")
      # Cette ligne assure que le pie chart est un cercle plutôt qu'une éllipse
      plt.axis('equal') 
      #plt.show() # Affiche le graphique
      
      # Diagramme en tuyaux d'orgues
      data["categ"].value_counts(normalize=True).plot(kind='bar')
      #plt.show()
      
      # VARIABLE QUANTITATIVE
      # Diagramme en bâtons
      data["quart_mois"].value_counts(normalize=True).plot(kind='bar',width=0.1)
      #plt.show()
      
      # Histogramme
      data["montant"].hist(density=True)
      #plt.show()
      # Histogramme plus beau
      data[data.montant.abs() < 100]["montant"].hist(density=True,bins=20)
      plt.show()


      Avec l'erreur :

       TypeError: bad operand type for abs(): 'str'

      En y regardant de plus près , l'erreur semble venir de la dernière partie:

      # Histogramme plus beau
      data[data.montant.abs() < 100]["montant"].hist(density=True,bins=20)
      plt.show()

      Me disant qu'on ne peut pas faire la valeur absolue d'un string (normal), j'essaye de convertir la donnée préalablement en 'int'.

      # Histogramme plus beau
      data[int(data.montant).abs() < 100]["montant"].hist(density=True,bins=20)
      plt.show()

      Mais j'ai une erreur :

      TypeError: cannot convert the series to <class 'int'>

      J'y comprend que la conversion d'un objet en 'int' n'est pas possible parce qu'il s'agit d'un objet,  j'essaye donc de convertir la partie de l'objetpar astype(int) que trouvé sur un site

      # Histogramme plus beau
      data[data.montant.astype(int).abs() < 100]["montant"].hist(density=True,bins=20)
      plt.show()

      Cette fois j'ai une erreur plus facile à comprendre

      ValueError: invalid literal for int() with base 10: '7.5'

      J'y comprend que ce n'est pas un 'int' mais un 'float' puisqu'il y a une virgule dans le nombre

      # Histogramme plus beau
      data[data.montant.astype(float).abs() < 100]["montant"].hist(density=True,bins=20)
      plt.show()

      BINGO CA MARCHE !!

      A toute fins utiles, bon codage à tous

      • Partager sur Facebook
      • Partager sur Twitter
        25 juin 2019 à 17:42:21

        Rebonjour,

        pas beaucoup d'activité sur ce forum mais comme il s'agit toujours de ce cours, à moins que je ne me trompe, je rajoute un message.

        for cat in data["categ"].unique():
            subset = data[data.categ == cat]
            print("-"*20)
            print(cat)
            print("moy:\n",subset['montant'].mean())
            print("med:\n",subset['montant'].median())
            print("mod:\n",subset['montant'].mode())
            print("var:\n",subset['montant'].var(ddof=0))
            print("ect:\n",subset['montant'].std(ddof=0))
            subset["montant"].hist()
            plt.show()
            subset.boxplot(column="montant", vert=False)
            plt.show()

        avec cela j'ai une erreur de type :

        KeyError: "None of [Index(['montant'], dtype='object')] are in the [columns]"

        J'ai pu résoudre ce problème de la sorte :

        plt.boxplot(subset['montant'].astype(float), vert=False)

        Voilà si ça peut servir


        • Partager sur Facebook
        • Partager sur Twitter
          29 juillet 2019 à 13:58:34

          Bonjour cher tous.

          J'ai une inquiètude sur les données manquantes. Au faite, dans le cours, le prof s'est appuyer sur un jeu de données toute petite c'est a dire qui ne contient pas assez d'individu et donc il est facile ici de detecter nos variables qui contiennent des données manquantes.

          J'ai decouvert que pour savoir les colonnes qui ont des données manquantes, il faut faire "data.isnull().sum()". data represente la variable dont nous avons stocker notre dataset.

          Maintenant j'aimerais savoir comment detecter les lignes qui contiennent des données manquantes. J'ai essayé de creer un sous-echantillon qui contiendrait les données qui manquent de valeurs mais sans succes.

          Merci de bien vouloir m'eclaircir ce point.

          • Partager sur Facebook
          • Partager sur Twitter
            30 juillet 2019 à 23:17:29

            Bonjour,

            Je rencontre cette erreur quand j'essaye de mettre mes données au bon format.

            ---------------------------------------------------------------------------
            TypeError                                 Traceback (most recent call last)
            <ipython-input-59-d7f006edafff> in <module>
                 64 last_val = balance[-1]
                 65 balance = [0] + balance[:-1]
            ---> 66 balance = balance - last_val + LAST_BALANCE
                 67 data["solde_avt_ope"] = balance
                 68 
            
            TypeError: unsupported operand type(s) for -: 'list' and 'str

            Je mouline sans trouver de solution

            Merci de  votre aide

            • Partager sur Facebook
            • Partager sur Twitter
              1 août 2019 à 11:26:54

              Bonjour,

              S'il vous plait comment installer Anaconda sous Windows 10? J'y arrive pas depuis.

              Merci

              • Partager sur Facebook
              • Partager sur Twitter
                12 août 2019 à 23:48:52

                Wouhou y'a quelqu'un ?


                julien1872 a écrit:

                Bonjour,

                Je rencontre cette erreur quand j'essaye de mettre mes données au bon format.

                ---------------------------------------------------------------------------
                TypeError                                 Traceback (most recent call last)
                <ipython-input-59-d7f006edafff> in <module>
                     64 last_val = balance[-1]
                     65 balance = [0] + balance[:-1]
                ---> 66 balance = balance - last_val + LAST_BALANCE
                     67 data["solde_avt_ope"] = balance
                     68 
                
                TypeError: unsupported operand type(s) for -: 'list' and 'str

                Je mouline sans trouver de solution

                Merci de  votre aide



                • Partager sur Facebook
                • Partager sur Twitter
                  15 octobre 2019 à 15:30:35

                  Bonjour Nicolas et cher(e)s collègues,

                  Je suis sur le Parcours DA depuis le mois d'août....

                  Tout d'abord merci pour ton cours qui nous donne énormément de précisions, mais me concernant j'ai besoin de plus sur la Courbe de Lorenz ;)

                  Car généralement les explications sur le web se rapportent toujours à la répartition des richesse d'un Pays, ça ok j'ai capté le truc...

                  Mais j'ai un doute sur la compréhension de la Courbe de Lorenz dans le cadre analyse business.

                  En quelques mots, c'est une représentation graphique permettant de visualiser la distribution d'une variable au sein d'une population.

                  Mais comment doit-on nommer l'abscisse et l'ordonnée ?

                  Par exemple, sur le projet 4 si je réalise une courbe de Lorenz sur la variable "prix" (dans le cadre de la vente de produits culturels chez un retailer),

                  en mettant pour abscisse "Prix produits" et comme ordonnée "Fréquence cumulée des ventes", suis-je pertinent ?

                  Autre question, pouvons-nous faire une courbe de Lorenz avec par exemple avec en x la variable "âge clients" et y "prix paniers moyens" ?

                  Normalement non, mais comme on me la suggéré je souhaiterais vérifier si c'est vraiment réalisable.

                  Moi je pense que nous pouvons faire une courbe de Lorenz sur la variable "âge clients", avec en x "Âges clients" et en y "Cumule des âges " 

                  Merci d'avance pour votre aide !

                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 novembre 2019 à 2:03:43

                    Bonjour,  j'ai un problème à la lecture de mon fichier .cvs, ne pouvant pas récup mes relevés de comptes qu'en pdf je les ai telecharger en pdf puis enregistré en .txt et ensuite en .csv .  

                    voici mes codes et les erreurs qui s'affichent:

                    import pandas as pd 
                    data=pd.read_csv("C:/Users\Barbara/Desktop/Raph/MOOC/Nettoyer_jeu_donnees/operations.csv", header = True , sep = ";", dec = ",")
                    data
                    ---------------------------------------------------------------------------
                    TypeError                                 Traceback (most recent call last)
                    <ipython-input-5-e57fd1a30e59> in <module>
                     1 import pandas as pd
                    ----> 2data=pd.read_csv("C:/Users\Barbara/Desktop/Raph/MOOC/Nettoyer_jeu_donnees/operations.csv", header = True , sep = ";", dec = ",")
                     3 data
                    
                    TypeError: parser_f() got an unexpected keyword argument 'dec'
                    J'ai bien vérifié mon document ça donne bien un tableur séparé en colonnes par des ";" où les "," sont pour les nb décimaux. 
                    Je me suis dit peut-être que python interprète mal les dates "10/09/2019" donc je me suis dit je vais  spécifié la  colonne date... Mais voilà 
                    import pandas as pd 
                    data=pd.read_csv("C:/Users\Barbara/Desktop/Raph/MOOC/Nettoyer_jeu_donnees/operations.csv",parse_dates=[0], dayfirst=True, header = True , sep = ";", dec = ",")
                    data
                    TypeError                                 Traceback (most recent call last)
                    <ipython-input-7-d690a72f4d6e> in <module>
                     1 import pandas as pd
                    ----> 2data=pd.read_csv('C:/Users/Barbara/Desktop/Raph/MOOC/nettoyer_jeu_donnees/operations.csv', parse_dates=[0],dayfirst=True , header = True, sep = ';', dec=',')
                     3 data
                    
                    TypeError: parser_f() got an unexpected keyword argument 'dec'
                    Peut-être que le problème ne vient pas de là mais du coup je sais pas trop...
                    voici un extrait de mon fichier, mon bloc note .txt
                    DATE ;LIBELLE;DEBIT; CREDIT ;
                    09/05/2019; VERSEMENT ;;51,81;
                    09/05/2019;CB RETRAIT DU  GAB TOURS GIRAUD;50;;
                    09/05/2019;PRLV SEPA HFP -HARMONIE FONCTION PUBLIQUE 10 05 19;32,54;;
                    10/05/2019;CB BRETON BREWING C ;4,2; ;
                    10/05/2019;CB BRETON BREWING C ;4,2; ;
                    10/05/2019;CB BRETON BREWING C 09 05 19 10 05 19;6; ;
                    10/05/2019;CB BRETON BREWING C 09 05 19 10 05 19;8; ;
                    10/05/2019;CB LE BERGERAC 09 05 19 10 05 19;8,6;; 
                    10/05/2019;CB PASTA DI MAMA 09 05 19 10 05 19;9;;
                    13/05/2019;CB LA COQUINIERE 10 05 19 13 05 19;4,6;;
                    13/05/2019;CB RELAY 341842SC 12 05 19 13 05 19;8,6;;
                    13/05/2019;CB LE DU BELLAY 10 05 19 13 05 19;8,6;;
                    13/05/2019;CB RETRAIT DU 11 05 TOURS RABELAIS 1 13 05 19;60;;
                    14/05/2019;CB PIZZAGELO 13 05 19 14 05 19;7,5;;
                    15/05/2019;CB AUCHAN SUPER SC 14 05 1915 05 19;8,47;;
                    15/05/2019;CB RETRAIT DU 14 05 TOURS COLBERT FRAIS RETRAIT  15 05 19;31,05;;
                    16/05/2019;CB SPEED BURGER 15 05 19 16 05 19;16,4;;
                    16/05/2019;CB LE DU BELLAY 15 05 19 16 05 19;8,6;;
                    17/05/2019;CB SPEED BURGER 16 05 19 17 05 19;17;;
                    17/05/2019;CB GIRAUDEAU MARKET 16 05 19 17 05 19;1,5;; 
                    et  .csv (j'ai vérifié et revérifié  il n'y a aucune cellules vides, ni de ","   ";"  ou    "." dans la colonnes libellé)

                    Si quelqu'un pouvait m'aider, je ne comprends pas trop les deux erreurs indiquées par python 

                    Merci bien

                    -
                    Edité par RaphaëlBitoun 3 novembre 2019 à 2:05:28

                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 novembre 2019 à 7:27:05

                      Bonjour,

                      le problème vient de tes paramètres dans la lecture du CSV.

                      Python te dis exactement ce qui ne vas pas ici:

                      TypeError: parser_f() got an unexpected keyword argument 'dec'

                       le type d'erreur: parser_f(), autrement dit la fonction qui lit et traite un fichier

                      got an unexpected keyword argument: autrement dit dans les arguments que tu as mis, il y en a un qu'il ne reconnait pas.

                      'dec' : c'est exactement celui là qu'il ne connait pas.

                      Si on regarde de plus près ton code:

                      data=pd.read_csv("C:/Users\Barbara/Desktop/Raph/MOOC/Nettoyer_jeu_donnees/operations.csv", header = True , sep = ";", dec = ","

                      tu as mis pour argument:
                      - le fichier
                      - le header
                      - le caractère de séparation
                      - ce que tu penses être l'argument de définition des nombres décimaux 'dec'
                      Cependant un petit tour dans la documentation de la fonction pd.read_csv (puisque c'est celle là que tu appelles) nous indique toutles arguments possible et notamment :

                      decimal : str, default ‘.’

                      Character to recognize as decimal point (e.g. use ‘,’ for European data).

                      Autrement dit pour définir le séparateur décimal il faut utilisé le mot clef 'decimal' et non 'dec' comme tu l'as fait.

                      Essai donc de changer les 'dec' par des 'decimal', je pense que ça devrait régler ton problème

                      pour information, la doc sur pd.read_csv: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 novembre 2019 à 15:19:22

                        Bonjour merci pour la réponse.

                        J'ai un petit problème pour la dernière étape pour la colonne jour_sem 

                        #Creation des autres variables :
                        data["annee"] = data["date_operation"].map(lambda d: d.year)
                        data["mois"] = data["date_operation"].map(lambda d: d.month)
                        data["jour"] = data["date_operation"].map(lambda d: d.day)
                        data["jour_sem"] = data["date_operation"].map(lambda d: d.day_name)
                        data["jour_sem_num"] = data["date_operation"].map(lambda d: d.weekday()+1)
                        data["weekend"] = data["jour_sem"].isin(WEEKEND)
                        data["quart_mois"] = [int((jour-1)*4/31)+1 for jour in data["jour"]]
                        
                        print(data[:10])
                           date_operation                                    libelle  montant  \
                        0      2019-05-09                                  VERSEMENT    51.81   
                        1      2019-05-09            CB RETRAIT DU  GAB TOURS GIRAUD   -50.00   
                        2      2019-05-09  PRLV SEPA HFP HARMONIE FONCTION PUBLIQUE    -32.54   
                        3      2019-05-10                       CB BRETON BREWING C     -4.20   
                        4      2019-05-10                       CB BRETON BREWING C     -4.20   
                        5      2019-05-10                       CB BRETON BREWING C     -6.00   
                        6      2019-05-10                        CB BRETON BREWING C    -8.00   
                        7      2019-05-10                            CB LE BERGERAC     -8.60   
                        8      2019-05-10                          CB PASTA DI MAMA     -9.00   
                        12     2019-05-13                CB RETRAIT  TOURS RABELAIS    -60.00   
                        
                            solde_avt_ope       categ            type    tranche_depense    sens  \
                        0          332.64       AUTRE        VIREMENT  (pas une dépense)  credit   
                        1          384.45     RETRAIT         RETRAIT             grosse   debit   
                        2          334.45   ASSURANCE     PRELEVEMENT             grosse   debit   
                        3          301.91     SORTIES  CARTE BANCAIRE            moyenne   debit   
                        4          297.71     SORTIES  CARTE BANCAIRE            moyenne   debit   
                        5          293.51     SORTIES  CARTE BANCAIRE            moyenne   debit   
                        6          287.51     SORTIES  CARTE BANCAIRE            moyenne   debit   
                        7          279.51  CIGARETTES  CARTE BANCAIRE            moyenne   debit   
                        8          270.91       REPAS  CARTE BANCAIRE            moyenne   debit   
                        12         261.91     RETRAIT         RETRAIT             grosse   debit   
                        
                            annee  mois  jour                                           jour_sem  \
                        0    2019     5     9  <bound method Timestamp.day_name of Timestamp(...   
                        1    2019     5     9  <bound method Timestamp.day_name of Timestamp(...   
                        2    2019     5     9  <bound method Timestamp.day_name of Timestamp(...   
                        3    2019     5    10  <bound method Timestamp.day_name of Timestamp(...   
                        4    2019     5    10  <bound method Timestamp.day_name of Timestamp(...   
                        5    2019     5    10  <bound method Timestamp.day_name of Timestamp(...   
                        6    2019     5    10  <bound method Timestamp.day_name of Timestamp(...   
                        7    2019     5    10  <bound method Timestamp.day_name of Timestamp(...   
                        8    2019     5    10  <bound method Timestamp.day_name of Timestamp(...   
                        12   2019     5    13  <bound method Timestamp.day_name of Timestamp(...   
                        
                            jour_sem_num  weekend  quart_mois  
                        0              4    False           2  
                        1              4    False           2  
                        2              4    False           2  
                        3              5    False           2  
                        4              5    False           2  
                        5              5    False           2  
                        6              5    False           2  
                        7              5    False           2  
                        8              5    False           2  
                        12             1    False           2  

                        et à l'enregistrement dans les cellules de la colonne jour_sem sur le fichier .csv 

                        <bound method Timestamp.day_name of Timestamp('2019-05-09 00:00:00')>

                        du coup la colonne weekend est toujours FALSE. Quelqu'un peut m'indiquer d'où provient le problème?

                        Merci



                        -
                        Edité par RaphaëlBitoun 6 novembre 2019 à 15:50:04

                        • Partager sur Facebook
                        • Partager sur Twitter
                          6 novembre 2019 à 17:39:14

                          Bonjour,

                          je vois que tu as mis:

                          data["jour_sem"] = data["date_operation"].map(lambda d: d.day_name)
                          or dans les autres lignes le format après le lambda est de type d.day.VARIABLE
                          essaye avec le code suivant à la place:
                          data["jour_sem"] = data["date_operation"].map(lambda d: d.day.name)
                          J'ai juste remplacé le underscore par un point comme sur les autres arguments
                          • Partager sur Facebook
                          • Partager sur Twitter
                            7 novembre 2019 à 14:58:29

                            Bonjour j'ai effectivement recopié le code day_name comme dans le cours. 

                            Quand j'essaye avec ta modif d.d.day.name :

                            # Creation des autres variables
                            data["annee"] = data["date_operation"].map(lambda d: d.year)
                            data["mois"] = data["date_operation"].map(lambda d: d.month)
                            data["jour"] = data["date_operation"].map(lambda d: d.day)
                            data["jour_sem"] = data["date_operation"].map(lambda d: d.day.name)
                            data["jour_sem_num"] = data["date_operation"].map(lambda d: d.weekday()+1)
                            data["weekend"] = data["jour_sem"].isin(WEEKEND)
                            data["quart_mois"] = [int((jour-1)*4/31)+1 for jour in data["jour"]]
                            
                            print(data[:10])
                            ---------------------------------------------------------------------------
                            AttributeError                            Traceback (most recent call last)
                            <ipython-input-23-3967a41e30c3> in <module>
                             3 data["mois"] = data["date_operation"].map(lambda d: d.month)
                             4 data["jour"] = data["date_operation"].map(lambda d: d.day)
                            ----> 5data["jour_sem"] = data["date_operation"].map(lambda d: d.day.name)
                             6 data["jour_sem_num"] = data["date_operation"].map(lambda d: d.weekday()+1)
                             7 data["weekend"] = data["jour_sem"].isin(WEEKEND)
                            
                            ~\Anaconda3\lib\site-packages\pandas\core\series.py in map(self, arg, na_action)
                             3823         dtype: object
                             3824         """
                            -> 3825new_values = super()._map_values(arg, na_action=na_action)
                             3826         return self._constructor(new_values, index=self.index).__finalize__(self)
                             3827 
                            
                            ~\Anaconda3\lib\site-packages\pandas\core\base.py in _map_values(self, mapper, na_action)
                             1298 
                             1299         # mapper is a function
                            -> 1300new_values = map_f(values, mapper)
                             1301 
                             1302         return new_values
                            
                            pandas\_libs\lib.pyx in pandas._libs.lib.map_infer()
                            
                            <ipython-input-23-3967a41e30c3> in <lambda>(d)
                             3 data["mois"] = data["date_operation"].map(lambda d: d.month)
                             4 data["jour"] = data["date_operation"].map(lambda d: d.day)
                            ----> 5data["jour_sem"] = data["date_operation"].map(lambda d: d.day.name)
                             6 data["jour_sem_num"] = data["date_operation"].map(lambda d: d.weekday()+1)
                             7 data["weekend"] = data["jour_sem"].isin(WEEKEND)
                            
                            AttributeError: 'int' object has no attribute 'name'

                            J'ai recherché sur interne et j'ai remplacé par  weekday_name:

                            data["jour_sem"] = data["date_operation"].map(lambda d: d.weekday_name)

                            et cela marche correctement même si j'ai ce message.

                            C:\Users\Barbara\Anaconda3\lib\site-packages\ipykernel_launcher.py:5: FutureWarning: `weekday_name` is deprecated and will be removed in a future version. Use `day_name` instead
                              """



                            -
                            Edité par RaphaëlBitoun 7 novembre 2019 à 15:11:44

                            • Partager sur Facebook
                            • Partager sur Twitter
                              11 novembre 2019 à 14:18:40

                              Bonjour, je suis bloqué un peu plus loin dans le chapitre, au moment de créer la variable 'attente'.

                              Quand je rentre le code du cours, voici le message d'erreur :

                              import datetime as dt
                              
                              # Selection du sous-échantillon
                              courses = data[data.categ == "COURSES"]
                              
                              # On trie les opérations par date
                              courses = courses.sort_values("date_operation")
                              
                              # On ramène les montants en positif
                              courses["montant"] = -courses["montant"]
                              
                              # calcul de la variable attente
                              r = []
                              last_date = dt.datetime.now()
                              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:,]
                              
                              # on regroupe les opérations qui ont été effectués à la même date
                              # (courses réalisées le même jour mais dans 2 magasins différents)
                              a = courses.groupby("date_operation")["montant"].sum()
                              b = courses.groupby("date_operation")["attente"].first()
                              courses = pd.DataFrame({"montant":a, "attente":b})
                              ---------------------------------------------------------------------------
                              TypeError                                 Traceback (most recent call last)
                              <ipython-input-13-e83bdac1c1d1> in <module>
                               14 last_date = dt.datetime.now()
                               15 for i,row in courses.iterrows():
                              ---> 16days = (row["date_operation"]-last_date).days
                               17     if days == 0:
                               18         r.append(r[-1])
                              
                              TypeError: unsupported operand type(s) for -: 'str' and 'datetime.datetime'

                              Quelqu'un peut-il m'expliquer ce message d'erreur? 

                              Est_ce lié au fait que last_date  prenne ces valeurs :

                              last_date = dt.datetime.now()
                              print(last_date)
                              2019-11-11 14:56:41.562563

                              Tandis que les valeurs contenues dans 'date_operation" prennent cette forme : 

                              2019-05-08 sans l'heure et les secondes à coté?.

                              Merci

                              -
                              Edité par RaphaëlBitoun 11 novembre 2019 à 14:59:30

                              • Partager sur Facebook
                              • Partager sur Twitter
                                13 novembre 2019 à 14:47:16

                                Bonjour, 

                                J'ai réussi à résoudre le problème en modifiant un peu le code du cours comme ceci : 

                                import datetime as dt
                                
                                # Selection du sous-échantillon
                                courses = data[data.categ == "COURSES"]
                                
                                # On trie les opérations par date
                                courses = courses.sort_values("date_operation")
                                
                                # On ramène les montants en positif
                                courses["montant"] = -courses["montant"]
                                
                                # calcul de la variable attente
                                r = []
                                last_date = (dt.date.today())
                                for i,row in courses.iterrows():
                                    date_string = (row['date_operation'])
                                    my_date=dt.date.fromisoformat(date_string)
                                    days= (my_date - last_date).days
                                    if days == 0:
                                        r.append(r[-1])
                                    else:
                                        r.append(days)
                                    last_date=my_date
                                courses["attente"] = r
                                courses = courses.iloc[1:,]
                                
                                # on regroupe les opérations qui ont été effectués à la même date
                                # (courses réalisées le même jour mais dans 2 magasins différents)
                                a = courses.groupby("date_operation")["montant"].sum()
                                b = courses.groupby("date_operation")["attente"].first()
                                courses = pd.DataFrame({"montant":a, "attente":b})
                                courses
                                
                                import statsmodels.api as sm
                                import numpy as np
                                Y = courses['montant']
                                X = courses[['attente']]
                                X = X.copy() # On modifiera X, on en crée donc une copie
                                X['intercept'] = 1.
                                result = sm.OLS(Y, X).fit() # OLS = Ordinary Least Square (Moindres Carrés Ordinaire)
                                a,b = result.params['attente'],result.params['intercept']
                                
                                # afficher la droite de regression (Y=a.X+B+e)
                                plt.plot(courses.attente, courses.montant, "o") # affiche le diagramme de dispersion
                                plt.plot(np.arange(15),[a*x+b for x in np.arange(15)]) #np.arrange(15) créé une liste de nombres entiers allant de 0 à 14. Pour chacune de ces 15 valeurs
                                #on calcule les coordonnées grâce à la formule [a*x+b for x in np.arange(15)]. On vient donc de crééer une série de points tous alignés sur la droite d'équartion y=ax+b, la ligne 2 affiche tous ces points, en les rilants entre eux
                                plt.xlabel('attente')
                                plt.ylabel('montant')
                                plt.show()
                                print("a = ", a)
                                print("b = ", b)

                                Ce qui me donne :



                                Petite question ? Etant donné que la droite est décroissante, est ce qu'il y a un problème avec mon code ? 

                                Autre question est ce normal que la droite ne se prolonge pas jusqu'au dernier point? Est-ce une valeur aberrante? Si oui comment pourrais-je coder pour enlever cette valeur (ce n'est pas la ligne suivante qui est censée enlever les valeurs aberrantes?)

                                result = sm.OLS(Y, X).fit() # OLS = Ordinary Least Square (Moindres Carrés Ordinaire)
                                

                                Merci

                                -
                                Edité par RaphaëlBitoun 13 novembre 2019 à 17:53:38

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  28 novembre 2019 à 17:37:21

                                  Bonjour.

                                  Est-il possible d'avoir une explication sur une portion de code du chapitre "Téléchargez les données" ?

                                  Code fourni pour le calcul de la variable solde_avt_op :

                                  # creation de la variable 'solde_avt_ope'
                                  data = data.sort_values("date_operation")
                                  amount = data["montant"]
                                  balance = amount.cumsum()
                                  balance = list(balance.values)
                                  last_val = balance[-1]
                                  balance = [0] + balance[:-1]
                                  balance = balance - last_val + LAST_BALANCE
                                  data["solde_avt_ope"] = balance

                                  Que fait exactement cette ligne (notamment l'utilisation de [0]):

                                  balance = [0] + balance[:-1]

                                   Merci pour l'aide.

                                  Jérome

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    23 janvier 2020 à 22:55:12

                                    Bonjour Je voulais savoir s'il y avait une fonction permettant de calculer la fonction de répartition empirique ?

                                    Je l'ai calculée de la façon suivante mais peut être qu'il existe plus simple/efficace ?

                                    y = data[data.montant.abs() &lt; 100].montant
                                    y_sort = np.sort(y)
                                    
                                    nbins = 20
                                    x = np.linspace(y.min(), y.max(), nbins)
                                    F_emp = [np.argmax(y_sort &gt; xi) for xi in x]
                                    

                                    Merci

                                    -
                                    Edité par ladgalen 23 janvier 2020 à 22:56:29

                                    • 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é.
                                    • Editeur
                                    • Markdown