La première étape consiste à importer l’ensemble des données sans effectuer de modification au préalabe
Chaque table a été importée avec la fonction fread du package data.table permettant une optimisation du temps de chargement des données en comparaison à la fonction read.csv.
Affichage des premières lignes du dataframe lignesTicket.
## IDTICKET NUMLIGNETICKET IDARTICLE QUANTITE MONTANTREMISE TOTAL
## 1: 190400316260 2 246208 1 0 4.96
## 2: 190400316262 2 33725 1 0 8.25
## 3: 190400316262 3 634497 1 0 5.79
## 4: 190400316262 1 257613 1 0 18.29
## 5: 190400316263 1 257627 1 0 49.92
## 6: 190400316265 1 320054 1 0 6.42
## MARGESORTIE
## 1: 2.37
## 2: 3.63
## 3: 3.63
## 4: 6.21
## 5: 10.42
## 6: 0.67
Summary client :
## IDCLIENT CIVILITE DATENAISSANCE MAGASIN
## Length:845876 MADAME :454862 Length:845876 PRI : 26935
## Class :character MONSIEUR:385647 Class :character SEY : 25967
## Mode :character Mme : 1582 Mode :character VIB : 24640
## Mr : 1710 MOU : 24389
## madame : 1247 SUR : 23784
## monsieur: 828 CLA : 23744
## (Other):696417
## DATEDEBUTADHESION DATEREADHESION DATEFINADHESION VIP
## Length:845876 Length:845876 Length:845876 0:735425
## Class :character Class :character Class :character 1:110451
## Mode :character Mode :character Mode :character
##
##
##
##
## CODEINSEE PAYS
## Length:845876 FR :827365
## Class :character CH : 17845
## Mode :character BE : 235
## DE : 139
## IT : 83
## (Other): 206
## NA's : 3
Summary refArticle :
## CODEARTICLE CODEUNIVERS CODEFAMILLE
## Length:665946 Length:665946 Length:665946
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
## CODESOUSFAMILLE
## Length:665946
## Class :character
## Mode :character
Summary refMagasin :
## CODESOCIETE VILLE LIBELLEDEPARTEMENT
## ALB : 1 Length:67 Length:67
## ALM : 1 Class :character Class :character
## AVI : 1 Mode :character Mode :character
## BAR : 1
## BEA : 1
## BEC : 1
## (Other):61
## LIBELLEREGIONCOMMERCIALE
## Length:67
## Class :character
## Mode :character
##
##
##
##
Summary enteteTickets :
## IDTICKET TIC_DATE MAG_CODE
## Length:6714173 Length:6714173 SSM : 246506
## Class :character Class :character MOB : 221283
## Mode :character Mode :character HEI : 219713
## BEA : 205468
## GEX : 196669
## MOU : 191180
## (Other):5433354
## IDCLIENT TIC_TOTALTTC
## Length:6714173 Min. :-4404.00
## Class :character 1st Qu.: 19.50
## Mode :character Median : 37.60
## Mean : 58.15
## 3rd Qu.: 71.08
## Max. :15355.25
##
Summary lignesTickets :
## IDTICKET NUMLIGNETICKET IDARTICLE
## Length:34105705 Min. : 1.000 Length:34105705
## Class :character 1st Qu.: 2.000 Class :character
## Mode :character Median : 4.000 Mode :character
## Mean : 5.607
## 3rd Qu.: 7.000
## Max. :152.000
## QUANTITE MONTANTREMISE TOTAL
## Min. :-155.000 Min. : -426.942 Min. :-15000.000
## 1st Qu.: 1.000 1st Qu.: 0.000 1st Qu.: 2.820
## Median : 1.000 Median : 0.000 Median : 5.210
## Mean : 1.331 Mean : 0.991 Mean : 9.938
## 3rd Qu.: 1.000 3rd Qu.: 0.473 3rd Qu.: 10.500
## Max. : 999.000 Max. :13166.667 Max. : 15000.000
## MARGESORTIE
## Min. :-15000.000
## 1st Qu.: 0.990
## Median : 2.260
## Mean : 4.225
## 3rd Qu.: 5.210
## Max. : 15000.000
En visualisant les données, nous nous apercevons qu’il existe 3 types de valeurs pour définir un client “Homme” et un client “Femme”.
Pour combler cette incohérence, nous avons regroupé ces 3 types de valeurs de civilité en une : “MONSIEUR” pour les hommes et “MADAME” pour les femmes car c’est la modalité représentant le plus d’observation
client$CIVILITE[client$CIVILITE == "Mr" | client$CIVILITE == "monsieur"] <- "MONSIEUR"
client$CIVILITE[client$CIVILITE == "Mme" | client$CIVILITE == "madame"] <- "MADAME"
Le résultat est le suivant:
Nous constatons que la répartition homme/femme des clients est assez équitable
Au niveau des dates présentes dans les dataframes client et enteteTicket, nous avons dû transformer chacune de celles-ci dans un format de dates approprié.
Nous avons donc opté pour l’utilisation de la fonction parse_date_time du package lubridate permettant de garder la notion de la date ainsi que de l’heure. (time de la date)
to_date<- function(date){
return(parse_date_time(x = date,
orders = c("dmY HMS", "Ymd HMS")))
}
date_func <- function(df){
colnum <- grep("DATE", colnames(df))
df[, (colnum) := lapply(.SD, to_date), .SDcols = colnum]
return(df)
}
Cette notion de time pourra nous servir pour effectuer des études d’affluences par la suite (partie Datamining).
Le pourcentage de CHURNER représente 1/3 des clients
On se rend compte que sur le CA en 2016, il y a davantage de valeurs aberrantes que sur celui de 2017, avec un pic à plus de 48k€.
Prérequis : Nous avons choisi les clients agés entre 18 ans et 100 ans comme intervalle significatif pour notre étude
Pour chaque tranche d’âge, le nombre de client femme est supérieur au nombre de client homme.
L’écart est d’autant plus important entre 38 ans et 66 ans
Objectif: construire un tableau (formattable) avec reprenant les données suivantes :
Le color_bar ne fontionnant pas correctement prennant en compte le total de tous les magasins (la derniére ligne), nous avons décidé de séparer en deux formattable.
| MAGASIN | NbClientsMag | NbClientsActifs | NbClientsActifs_N2 | TOTAL_TTC_N2 | NbClientsActifs_N1 | TOTAL_TTC_N1 | PctClientN2vsN1 | Evol_TIC_TOTALTTC | IndiceEvol | |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | ALB | 12828 | 13519 | 9717 | 2960492 | 10466 | 3049735 | 107.7 | 89243 |
|
| 2 | ALM | 16499 | 20466 | 14276 | 4036789 | 15577 | 4113500 | 109.1 | 76711 |
|
| 4 | BAR | 1321 | 1820 | 1331 | 455609 | 1486 | 511120 | 111.6 | 55511 |
|
| 6 | BEC | 7977 | 8932 | 6092 | 1470501 | 6683 | 1485816 | 109.7 | 15315 |
|
| 7 | BLA | 11748 | 11341 | 7592 | 2143925 | 8613 | 2255600 | 113.4 | 111675 |
|
| 8 | BRE | 10106 | 9494 | 6429 | 2089464 | 7539 | 2121890 | 117.3 | 32426 |
|
| 10 | CAG | 9071 | 12993 | 7955 | 1697422 | 8978 | 1792635 | 112.9 | 95213 |
|
| 14 | DUM | 6761 | 11770 | 8058 | 2208889 | 9279 | 2458297 | 115.2 | 249408 |
|
| 15 | ECU | 15410 | 21334 | 14485 | 4112227 | 15813 | 4274238 | 109.2 | 162011 |
|
| 16 | EPN | 8800 | 9321 | 6283 | 1748056 | 7123 | 1821401 | 113.4 | 73345 |
|
| 23 | HAG | 4780 | 6131 | 4028 | 801071 | 4653 | 848129 | 115.5 | 47058 |
|
| 25 | IAB | 16885 | 17617 | 11975 | 3222142 | 13749 | 3239041 | 114.8 | 16899 |
|
| 27 | MAC | 14632 | 15259 | 10776 | 2798360 | 11829 | 2821782 | 109.8 | 23422 |
|
| 30 | MOB | 18929 | 22724 | 16342 | 5977005 | 18240 | 6384418 | 111.6 | 407413 |
|
| 34 | OBE | 9709 | 10364 | 7552 | 1793099 | 8122 | 1796716 | 107.5 | 3617 |
|
| 40 | PRI | 26935 | 33621 | 22413 | 5528750 | 24231 | 5557473 | 108.1 | 28723 |
|
| 41 | QUE | 11699 | 15295 | 9924 | 1783723 | 11364 | 1898024 | 114.5 | 114301 |
|
| 43 | RMA | 6499 | 9442 | 4620 | 1108075 | 8182 | 2656634 | 177.1 | 1548559 |
|
| 44 | SAL | 3124 | 4091 | 2621 | 605825 | 3065 | 664169 | 116.9 | 58344 |
|
| 47 | SEY | 25967 | 27737 | 19712 | 4336407 | 21518 | 4400119 | 109.2 | 63712 |
|
| 49 | SJV | 11065 | 12707 | 8658 | 2254727 | 9430 | 2414626 | 108.9 | 159899 |
|
| 50 | SLM | 7894 | 7345 | 5448 | 1366816 | 5742 | 1431045 | 105.4 | 64229 |
|
| 52 | SMR | 12532 | 12943 | 9628 | 3044484 | 10005 | 3063415 | 103.9 | 18931 |
|
| 53 | SNO | 10828 | 15913 | 9927 | 2071763 | 12165 | 2292898 | 122.5 | 221135 |
|
| 54 | SSM | 23601 | 23057 | 16400 | 6413412 | 18358 | 6842403 | 111.9 | 428991 |
|
| 57 | SUR | 23784 | 21603 | 14926 | 4807772 | 15674 | 4966888 | 105.0 | 159116 |
|
| 58 | THO | 10549 | 11255 | 8111 | 2897265 | 8842 | 2979304 | 109.0 | 82039 |
|
| 63 | VIC | 11556 | 10923 | 7703 | 2114766 | 8455 | 2133379 | 109.8 | 18613 |
|
| 65 | VIT | 14673 | 16120 | 10930 | 3007212 | 12106 | 3089915 | 110.8 | 82703 |
|
| 66 | VIV | 3632 | 4435 | 3126 | 923416 | 3465 | 973409 | 110.8 | 49993 |
|
| 3 | AVI | 15435 | 16532 | 11904 | 4065940 | 12889 | 3951028 | 108.3 | -114912 |
|
| 5 | BEA | 20714 | 19927 | 14792 | 5739924 | 16021 | 5566070 | 108.3 | -173854 |
|
| 11 | CLA | 23744 | 22988 | 16444 | 5847742 | 17439 | 5639066 | 106.1 | -208676 |
|
| 13 | DIJ | 12603 | 15333 | 10906 | 3043839 | 11524 | 2900306 | 105.7 | -143533 |
|
| 18 | FEG | 10561 | 11878 | 8570 | 2347398 | 8741 | 2161776 | 102.0 | -185622 |
|
| 19 | FRV | 15377 | 18859 | 13292 | 3922133 | 14205 | 3764134 | 106.9 | -157999 |
|
| 20 | GAI | 16162 | 22318 | 16405 | 6143169 | 16478 | 5666501 | 100.4 | -476668 |
|
| 21 | GAP | 8137 | 9133 | 6869 | 2080513 | 6997 | 1926181 | 101.9 | -154332 |
|
| 22 | GEX | 19278 | 20013 | 15544 | 7388908 | 15865 | 6957686 | 102.1 | -431222 |
|
| 24 | HEI | 23500 | 23181 | 16999 | 5834750 | 18558 | 5796841 | 109.2 | -37909 |
|
| 26 | LAB | 11058 | 11067 | 7684 | 2053102 | 8448 | 2021050 | 109.9 | -32052 |
|
| 29 | MET | 17997 | 25141 | 18161 | 4826410 | 18655 | 4633845 | 102.7 | -192565 |
|
| 31 | MOU | 24389 | 23730 | 16780 | 6349088 | 18111 | 6045146 | 107.9 | -303942 |
|
| 32 | MUL | 14240 | 13252 | 10105 | 3332191 | 10333 | 3172042 | 102.3 | -160149 |
|
| 35 | ORL | 9891 | 9332 | 6981 | 2695003 | 7229 | 2467712 | 103.6 | -227291 |
|
| 36 | PEG | 11012 | 10672 | 7778 | 2118864 | 8164 | 2044230 | 105.0 | -74634 |
|
| 37 | PEP | 7609 | 6988 | 4912 | 1315595 | 4952 | 1225989 | 100.8 | -89606 |
|
| 42 | RAV | 11396 | 13050 | 9425 | 2625701 | 9524 | 2302864 | 101.1 | -322837 |
|
| 61 | VEN | 10544 | 15244 | 11411 | 3354293 | 11742 | 3182816 | 102.9 | -171477 |
|
| 62 | VIB | 24640 | 28710 | 19105 | 4402350 | 20604 | 4323459 | 107.8 | -78891 |
|
| 64 | VIF | 14180 | 14071 | 10052 | 2709179 | 10526 | 2586192 | 104.7 | -122987 |
|
| 9 | BSN | 10302 | 9322 | 7137 | 2020922 | 6082 | 1665793 | 85.2 | -355129 |
|
| 12 | CLI | 4454 | 4198 | 3297 | 918076 | 3072 | 794102 | 93.2 | -123974 |
|
| 28 | MAN | 11343 | 11610 | 8905 | 2719688 | 8749 | 2461591 | 98.2 | -258097 |
|
| 33 | NEV | 7007 | 13715 | 10268 | 1987412 | 9925 | 1769607 | 96.7 | -217805 |
|
| 38 | POC | 10182 | 9095 | 6688 | 2406910 | 6658 | 2235014 | 99.6 | -171896 |
|
| 39 | PON | 11788 | 14116 | 9882 | 2577363 | 9625 | 2363868 | 97.4 | -213495 |
|
| 45 | SCH | 5526 | 5692 | 4555 | 979935 | 3530 | 624614 | 77.5 | -355321 |
|
| 46 | SEM | 10360 | 9249 | 6875 | 1959365 | 6440 | 1781800 | 93.7 | -177565 |
|
| 48 | SGL | 8846 | 9241 | 6682 | 1575548 | 6652 | 1450191 | 99.6 | -125357 |
|
| 51 | SMA | 5413 | 6256 | 4783 | 1741264 | 4489 | 1490880 | 93.9 | -250384 |
|
| 55 | STE | 12001 | 13059 | 9519 | 2526952 | 9388 | 2279578 | 98.6 | -247374 |
|
| 56 | STR | 2946 | 4330 | 3101 | 670530 | 3048 | 642992 | 98.3 | -27538 |
|
| 59 | VAL | 16685 | 16163 | 11995 | 3459988 | 11776 | 2986766 | 98.2 | -473222 |
|
| 60 | VAR | 12948 | 15333 | 12025 | 3150352 | 11756 | 2701641 | 97.8 | -448711 |
|
| 67 | VLG | 22541 | 27497 | 19855 | 6212516 | 19603 | 5653658 | 98.7 | -558858 |
|
| 17 | EST | 1273 | NA | NA | NA | NA | NA | NA | NA |
|
| MAGASIN | NbClientsMag | NbClientsActifs | NbClientsActifs_N2 | TOTAL_TTC_N2 | NbClientsActifs_N1 | TOTAL_TTC_N1 | PctClientN2vsN1 | Evol_TIC_TOTALTTC | IndiceEvol |
|---|---|---|---|---|---|---|---|---|---|
| TOTAL | 845876 | 939867 | 666724 | 196882377 | 708550 | 193575048 | 106.3 | -3307329 |
|
Prérequis: Pour calculer la distance entre deux points GPS, il est obligatoire d’effectuer pour chaque coordonnée une conversion en radian.
deg2rad <- function(x){
return(pi*x/180)
}
get_distance_m <- function(lat1, lng1, lat2, lng2) {
earth_radius <- 6378.137; #Earth radius in km
lon_a <- deg2rad(lng1);
lat_a <- deg2rad(lat1);
lon_b <- deg2rad(lng2);
lat_b <- deg2rad(lat2);
d = earth_radius * (pi/2 - asin( sin(lat_b) * sin(lat_a) + cos(lon_b - lon_a) * cos(lat_b) * cos(lat_a)))
return (d)
}
Exemple:
get_distance_m(43.7235746425,-0.188266221507,48.8433156105,4.54286173009)
Résultat:
## [1] 675.9271
Cet aperçu a été réalisé grâce à la librairie ggmap permettant de créer des maps statiques via Google Maps.
Exemple avec le magasin BAR:
L’histogramme nous montre que l’univers le plus important de la marque est l’univers U1 avec presque 80 millions de CA.
Pour chaque univers, la différence de CA entre ces deux années est faible.
Les univers U2 (environ 27 millions d’euros) et U3 (environ 35 millions d’euros) ont un CA sur l’année 2017 inférieur à celui de 2016.
L’écart le plus important se situe sur l’univers U3 où il y a un écart supérieur à 4M d’euros.
L’univers U0 est très faible avec environ 3 millions d’euros mais une bonne progression sur l’année 2017.
L’univers COUPON quant à lui apparait uniquement en 2016
| CODEUNIVERS | CODEFAMILLE | MARGE_SORTIE | rank |
|---|---|---|---|
| COUPON | COUPON | -910804.82 |
|
| U0 | 160 | 5917722.98 |
|
| U0 | 230 | 10700.63 |
|
| U0 | 400 | 1030.55 |
|
| U0 | 900 | -12475.90 |
|
| U1 | 020 | 17461174.60 |
|
| U1 | 010 | 13094263.08 |
|
| U1 | 080 | 10245218.21 |
|
| U1 | 100 | 9370663.66 |
|
| U1 | 060 | 8230891.96 |
|
| U2 | 090 | 8140625.82 |
|
| U2 | 070 | 7742154.86 |
|
| U2 | 130 | 4425300.30 |
|
| U2 | 210 | 568901.34 |
|
| U3 | 120 | 25890826.74 |
|
| U3 | 110 | 4300843.68 |
|
| U4 | 220 | 12876658.43 |
|
| U4 | 140 | 753928.02 |
|
| U4 | 200 | 282383.97 |
|
Le seul top 5 apparaissant est sur l’univers U1 avec une marge de sortie assez conséquente au total. On peut en déduire que l’univers U1 est l’univers ayant la marge de sortie la plus importante.
La famille 120 de l’univers U3 détient la marge de sortie la plus élevée.