Quand nos annonces prennent l’R

Cette présentation fait suite au tools in action que nous avons donné à Devoxx cette année. L’objectif étant de montrer l’intérêt de R pour découvrir, nettoyer puis enrichir nos données avec des approches de type machine learning.

Chez Car&Boat Media, grâce au site de dépot d’annonces de véhicules d’occasions lacentrale.fr, nous avons à notre disposition plus de 280 000 annonces en publication. Nous souhaitons dans cette présentation vous montrer ce que l’on peut faire très facilement avec R pour découvrir, manipuler et jouer avec la donnée en partant d’un simple dump de ces annonces.

Pour illustrer cela de façon concrète nous allons élaborer un modèle simple de prédiction de prix de vente d’un véhicule (algo supervisé), un équivalent de la cote automobile.

Ensuite nous formerons des groupes de données proches en utilisant un algo non supervisé cette fois (kmeans) pour définir des catégories de véhicules.

Partie 1 : découverte du dataset

Nous avons obtenu un dump au format CSV de toutes les annonces en cours de publication, nous allons l’explorer pour déterminer ce que nous allons pouvoir en faire.

  • Chargement du fichier csv :
cars <- read.csv("finalcars.csv", sep=",", header=TRUE)

Nous créeons ainsi le dataframe cars, structure composée de lignes et de colonnes, que l’on peut assimiler à une table en BDD relationelle.

  • A quoi ressemblent nos premières lignes :
head(cars)

##    brand model                                   version yearModel mileage
## 1 ABARTH   500      1.4 16V T-JET 595 50EME ANNIVERSAIRE      2014     500
## 2 ABARTH   500                      1.4 16V T-JET ABARTH      2012   46750
## 3 ABARTH   500                   1.4 16V TURBO T-JET 140      2012   52250
## 4 ABARTH   500 1.4 16V TURBO T-JET 160CH 595 TURISMO BVR      2012    8800
## 5 ABARTH   500 1.4 16V TURBO T-JET 160CH 595 TURISMO BVR      2013   17850
## 6 ABARTH   500 1.4 16V TURBO T-JET 160CH 595 TURISMO BVR      2013    6911
##   gearbox energy doors powerDin priceNew price
## 1       1      1     3   999999        0 31990
## 2       2      1     3      134        0 13500
## 3       2      1     2   999999        0 14500
## 4       1      1     3      140        0 20690
## 5       1      1     2      140        0 19990
## 6       1      1     2      160        0 21980

  • Quels sont les types de données de notre dataframe :
str(cars)

## 'data.frame':    258320 obs. of  11 variables:
##  $ brand    : Factor w/ 132 levels "ABARTH","AC",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ model    : Factor w/ 1135 levels "100","100 NX",..: 109 109 109 109 109 109 109 109 109 109 ...
##  $ version  : Factor w/ 43125 levels "","''UP''","-2 1.5 DCI  70 CONFORT EXPRESSION",..: 7996 7997 8002 8003 8003 8003 8003 8001 8498 8498 ...
##  $ yearModel: Factor w/ 198 levels " ''S LINE'' QUATTRO",..: 125 123 123 123 124 124 125 124 119 119 ...
##  $ mileage  : Factor w/ 84146 levels "0","0.00","1",..: 52249 49920 53890 77243 23567 65389 33182 44183 44914 52964 ...
##  $ gearbox  : int  1 2 2 1 1 1 1 2 2 2 ...
##  $ energy   : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ doors    : int  3 3 2 3 2 2 3 3 3 3 ...
##  $ powerDin : int  999999 134 999999 140 140 160 999999 134 135 135 ...
##  $ priceNew : int  0 0 0 0 0 0 0 0 18300 18300 ...
##  $ price    : num  31990 13500 14500 20690 19990 ...

Un Factor est un type de donnée R équivalent à une enumération dans d’autre langage. Cela permet entre autre d’optimiser l’espace occupé en mémoire. Par défaut, au chargement, R détecte ce type de données.

  • Que trouve-t-on globalement comme données colonne par colonne :
summary(cars)

##         brand           model       
##  RENAULT   :45716   CLIO   : 11034  
##  PEUGEOT   :37671   MEGANE :  8459  
##  CITROEN   :37616   308    :  7307  
##  VOLKSWAGEN:16582   C3     :  6410  
##  BMW       :15045   SCENIC :  6015  
##  AUDI      :13808   208    :  5632  
##  (Other)   :91882   (Other):213463  
##                            version         yearModel        mileage      
##  II 1.4 HDI 70 FAP CONFORT     :  1758   2014   :59003   10     :  7924  
##  1.4 HDI FAP 68 ACTIVE 5P      :  1435   2013   :42580   5000   :  1336  
##  1.6 E-HDI FAP 92 ACTIVE 5P    :  1056   2012   :34247   1      :  1133  
##  II 1.2 8V 69 LOUNGE           :   969   2011   :34052   100    :  1046  
##  II 1.6 E-HDI 115 INTENSIVE BV6:   758   2010   :21026   5      :   989  
##  II 1.6 HDI 92 FAP ACTIVE      :   668   2009   :14067   8000   :   831  
##  (Other)                       :251676   (Other):53345   (Other):245061  
##     gearbox             energy           doors           powerDin     
##  Min.   :     0.0   Min.   : 1.000   Min.   : 0.000   Min.   :    -1  
##  1st Qu.:     2.0   1st Qu.: 2.000   1st Qu.: 4.000   1st Qu.:    90  
##  Median :     2.0   Median : 2.000   Median : 5.000   Median :   111  
##  Mean   :    13.7   Mean   : 1.905   Mean   : 4.314   Mean   : 65529  
##  3rd Qu.:     2.0   3rd Qu.: 2.000   3rd Qu.: 5.000   3rd Qu.:   149  
##  Max.   :999999.0   Max.   :11.000   Max.   :11.000   Max.   :999999  
##  NA's   :123        NA's   :7        NA's   :1                        
##     priceNew           price        
##  Min.   :      0   Min.   :      0  
##  1st Qu.:  17200   1st Qu.:   9600  
##  Median :  24000   Median :  13990  
##  Mean   :  26400   Mean   :  17384  
##  3rd Qu.:  31000   3rd Qu.:  20500  
##  Max.   :1076400   Max.   :4190000  
## 
  • Quelles sont les marques présentes :
table(cars$brand)

## 
##         ABARTH             AC          AIXAM     ALFA ROMEO         ALPINA 
##            135             10             74           2541              1 
## ALPINE RENAULT            AMC   ASTON MARTIN           AUDI         AUSTIN 
##              8              2            226          13808             43 
##  AUSTIN HEALEY    AUTOBIANCHI        BELLIER        BENTLEY          BERCE 
##             26              1             10            207              1 
##            BMW        BOLLORE          BUICK       CADILLAC       CASALINI 
##          15045              1              9             76              8 
##       CATERHAM       CHATENET      CHEVROLET       CHRYSLER        CITROEN 
##              8             35           1152            256          37616 
##       CORVETTE          DACIA         DAEWOO            DAF       DAIHATSU 
##             38           2222             29              2             24 
##         DANGEL DE LA CHAPELLE      DE TOMASO          DODGE    DONKERVOORT 
##              3              1              2            251              1 
##   DONNET ZEDEL            DUE        ESTRIMA      EXCALIBUR        FERRARI 
##              1              3              1              6            551 
##           FIAT         FISKER           FORD       FORD USA      GAC GONOW 
##           6403              6           9301            152              3 
##            GME          HONDA      HOTCHKISS         HUMMER        HYUNDAI 
##              1            884              1             54           2941 
##       INFINITI      INNOCENTI            ISO          ISUZU          IVECO 
##            193              5              1            123            417 
##         JAGUAR            JDM      JDM SIMPA           JEEP       KENWORTH 
##            870              1             10            897              1 
##            KIA            KTM           LADA    LAMBORGHINI         LANCIA 
##           2418              8             20            125            650 
##     LAND ROVER          LEXUS         LIGIER        LINCOLN          LOTUS 
##           1342            748             60              7             84 
##       MAHINDRA            MAN    MANDRINOISE        MARQUIS         MARTIN 
##              1              3              2              1              4 
##       MASERATI          MATRA        MAYBACH          MAZDA        MCLAREN 
##            430              1              1           1268             37 
##           MEGA       MERCEDES        MERCURY             MG   MIA ELECTRIC 
##              5          12415              1             93              2 
##       MICROCAR           MINI     MITSUBISHI         MORGAN         MORRIS 
##             43           4462            919             22              2 
##       MULTICAR         NISSAN     OLDSMOBILE           OPEL        PACKARD 
##              1           8279              1           7215              1 
##         PAGANI        PANTHER        PEUGEOT            PGO        PIAGGIO 
##              1              1          37671              2              4 
##       PLYMOUTH        PONTIAC        PORSCHE        RADICAL        RENAULT 
##              3             13           2634              1          45716 
##    ROLLS ROYCE          ROVER           SAAB        SANTANA         SCANIA 
##             84             71            171              5              1 
##           SEAT         SHELBY          SIMCA          SKODA          SMART 
##           3191              2              3           2076           1011 
##         SPYKER      SSANGYONG     STUDEBAKER         SUBARU        SUNBEAM 
##              1            108              3            223              1 
##         Suzuki         SUZUKI          TESLA         TOYOTA        TRIUMPH 
##              1           1289              9           7347             64 
##            TVR        VENTURI         VEZEKO     VOLKSWAGEN          VOLVO 
##              5              1              1          16582           2652 
##      WESTFIELD       WOLSELEY 
##              2              1
  • Visuellement, les marques pour lesquelles nous avons plus de 10 000 véhicules :
pie(subset(table(cars$brand), table(cars$brand)&gt;10000))

Répartition par marques

La commande subset permet de créer un sous-ensemble du dataframe passé en premier argument, en filtrant sur les conditions du second argument.

  • Comment le prix de vente est réparti :
summary(cars$price)

##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##       0    9600   13990   17380   20500 4190000

Prochain épisode : Nettoyage du dataset

Par Philippe Vasconcelos & Nathaniel Richand

Une réflexion sur “Quand nos annonces prennent l’R

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s