Nous disposons de données (fictives) de ventes d’un magasin en ligne aux États-Unis, entre 2016 et 2018. Ces données sont téléchargeable sur Kaggle (une plateforme web, filiale de Google, qui permet aux data-scientists de partager des données, des codes, et de participer à des compétitions de data-science).
Chacune des 9994 lignes du jeu de données concerne une vente réalisée. Les informations suivantes sont disponibles pour chaque vente :
Nom de variable | Type | Description |
---|---|---|
Row ID |
double | identifiant numérique unique de la transaction (numéro de ligne) |
Order ID' |
character | identifiant unique de la transaction |
Order Date |
datetime | date de la commande |
Ship Date |
datetime | date de l’envoi de la commande |
Ship Mode |
character | type d’envoi de la commande (First Class, Same Day, Second Class, et Standard Class) |
Customer ID |
character | Identifiant de l’acheteur |
Customer Name |
character | Nom de l’acheteur |
Segment |
character | Segment de vente (Consumer, Corporate, Home Office) |
Country |
character | Pays de résidence du client (United States) |
City |
character | Ville de résidence du client |
State |
character | État de résidence du client |
Postal Code |
character | Code postal de résidence du client |
Region |
character | Région de résidence du client (Central, East, South, West) |
Product ID |
character | Identifiant du produit |
Category |
character | Catégorie du produit (Furniture, Office Supplies, Technology) |
Sub-Category |
character | Sous-catégorie du produit |
Product Name |
character | Nom du produit |
Sales |
double | Prix total de la vente (prix unitaire multiplié par les quantités, avec remise éventuelle) |
Quantity |
double | Quantité vendue |
Discount |
double | Taux de réduction (entre 0 et 0.8) |
Profit |
double | Profit réalisé |
Dans cet exercice, vous allez avoir besoin de faire appel à de nombreuses fonctions contenues dans le package {tidyverse}.
Lors de la première utilisation de ce package sur votre ordinateur, {tidyverse} n’est pas installé. Il faut alors procéder à l’installation en évaluant la commande suivante :
install.packages("tidyverse")
Il est ensuite nécessaire de charger le package, à l’aide de la fonction library()
:
library(tidyverse)
Un message d’avertissement prévient que certains autres packages ont également été chargés.
À chaque fois que vous (re)lancerez R, il faudra de nouveau charger le ou les packages dont vous avez besoin à l’aide de la fonction library()
. Une bonne pratique est de commencer les scripts R par l’appel des packages nécessaires.
De temps en temps, vous pouvez mettre à jour un package, en l’installant à nouveau (avec la fonction install.packages(nomDuPackage)
).
Il est inutile d’installer les packages à chaque fois que vous (re)lancez R. Une fois installé, il suffit de les charger. De manière analogue, vous n’installez pas Android ou iOS sur votre téléphone à chaque fois que vous voulez passer un appel ou aller sur Instagram : le système d’exploitation est déjà installé, vous le chargez en allumant le smartphone. De temps en temps, vous mettez le système d’exploitation à jour.
Installez le package readxl
, et chargez-le.
Après avoir chargé le package {readxl}, le contenu du fichier US Superstore data.xls
situé dans le dossier donnees
peut être importé dans R, à l’aide de la fonction read_excel()
:
library(readxl)
<- read_excel("donnees/US Superstore data.xls")
ventes ventes
## # A tibble: 9,994 × 21
## `Row ID` `Order ID` `Order Date` `Ship Date` `Ship Mode`
## <dbl> <chr> <dttm> <dttm> <chr>
## 1 1 CA-2016-152156 2016-11-08 00:00:00 2016-11-11 00:00:00 Second Class
## 2 2 CA-2016-152156 2016-11-08 00:00:00 2016-11-11 00:00:00 Second Class
## 3 3 CA-2016-138688 2016-06-12 00:00:00 2016-06-16 00:00:00 Second Class
## 4 4 US-2015-108966 2015-10-11 00:00:00 2015-10-18 00:00:00 Standard Cla…
## 5 5 US-2015-108966 2015-10-11 00:00:00 2015-10-18 00:00:00 Standard Cla…
## 6 6 CA-2014-115812 2014-06-09 00:00:00 2014-06-14 00:00:00 Standard Cla…
## 7 7 CA-2014-115812 2014-06-09 00:00:00 2014-06-14 00:00:00 Standard Cla…
## 8 8 CA-2014-115812 2014-06-09 00:00:00 2014-06-14 00:00:00 Standard Cla…
## 9 9 CA-2014-115812 2014-06-09 00:00:00 2014-06-14 00:00:00 Standard Cla…
## 10 10 CA-2014-115812 2014-06-09 00:00:00 2014-06-14 00:00:00 Standard Cla…
## # … with 9,984 more rows, and 16 more variables: Customer ID <chr>,
## # Customer Name <chr>, Segment <chr>, Country <chr>, City <chr>, State <chr>,
## # Postal Code <dbl>, Region <chr>, Product ID <chr>, Category <chr>,
## # Sub-Category <chr>, Product Name <chr>, Sales <dbl>, Quantity <dbl>,
## # Discount <dbl>, Profit <dbl>
Le nombre de colonnes du tableau ventes
peut être obtenu à l’aide de la fonction ncol()
:
ncol(ventes)
## [1] 21
Le nombre de lignes peut s’obtenir quant à lui avec la fonction nrow()
.
nrow(ventes)
## [1] 9994
La fonction str()
appliquée au tableau de données permet d’afficher le nom de chaque colonne du tableau de données, indique le type des données (numériques, chaînes de caractères, logiques, dates, etc.), et donne un aperçu des premières observations.
str(ventes)
## tibble [9,994 × 21] (S3: tbl_df/tbl/data.frame)
## $ Row ID : num [1:9994] 1 2 3 4 5 6 7 8 9 10 ...
## $ Order ID : chr [1:9994] "CA-2016-152156" "CA-2016-152156" "CA-2016-138688" "US-2015-108966" ...
## $ Order Date : POSIXct[1:9994], format: "2016-11-08" "2016-11-08" ...
## $ Ship Date : POSIXct[1:9994], format: "2016-11-11" "2016-11-11" ...
## $ Ship Mode : chr [1:9994] "Second Class" "Second Class" "Second Class" "Standard Class" ...
## $ Customer ID : chr [1:9994] "CG-12520" "CG-12520" "DV-13045" "SO-20335" ...
## $ Customer Name: chr [1:9994] "Claire Gute" "Claire Gute" "Darrin Van Huff" "Sean O'Donnell" ...
## $ Segment : chr [1:9994] "Consumer" "Consumer" "Corporate" "Consumer" ...
## $ Country : chr [1:9994] "United States" "United States" "United States" "United States" ...
## $ City : chr [1:9994] "Henderson" "Henderson" "Los Angeles" "Fort Lauderdale" ...
## $ State : chr [1:9994] "Kentucky" "Kentucky" "California" "Florida" ...
## $ Postal Code : num [1:9994] 42420 42420 90036 33311 33311 ...
## $ Region : chr [1:9994] "South" "South" "West" "South" ...
## $ Product ID : chr [1:9994] "FUR-BO-10001798" "FUR-CH-10000454" "OFF-LA-10000240" "FUR-TA-10000577" ...
## $ Category : chr [1:9994] "Furniture" "Furniture" "Office Supplies" "Furniture" ...
## $ Sub-Category : chr [1:9994] "Bookcases" "Chairs" "Labels" "Tables" ...
## $ Product Name : chr [1:9994] "Bush Somerset Collection Bookcase" "Hon Deluxe Fabric Upholstered Stacking Chairs, Rounded Back" "Self-Adhesive Address Labels for Typewriters by Universal" "Bretford CR4500 Series Slim Rectangular Table" ...
## $ Sales : num [1:9994] 262 731.9 14.6 957.6 22.4 ...
## $ Quantity : num [1:9994] 2 3 2 5 2 7 4 6 3 5 ...
## $ Discount : num [1:9994] 0 0 0 0.45 0.2 0 0 0.2 0.2 0 ...
## $ Profit : num [1:9994] 41.91 219.58 6.87 -383.03 2.52 ...
C’est à votre tour : reprenez l’ensemble de ces codes et évaluez-les dans RStudio.
Le symbole $
permet d’edxtraire les valeurs d’une colonne particulière d’un tableau de données. En écrivant ventes$`Ship Mode`
, on extrait l’ensemble des valeurs de la colonne Ship Mode
du tableau de données ventes
. Seules les 1000 premières observations s’affichent dans la console.
$`Ship Date` ventes
La fonction head()
permet d’afficher les premières valeurs d’un vecteur. Par défaut, les 6 premières valeurs sont retournées. Afficher les 6 premières valeurs de la colonne Ship Date
.
head(ventes$`Ship Date`)
## [1] "2016-11-11 UTC" "2016-11-11 UTC" "2016-06-16 UTC" "2015-10-18 UTC"
## [5] "2015-10-18 UTC" "2014-06-14 UTC"
En ajoutant un 2e argument à la fonction head()
, en le séparant du premier avec une virgule, indiquer que vous désirez afficher les 10 premières observatiosn de la colonne Ship Date
:
head(ventes$`Ship Date`, 10)
## [1] "2016-11-11 UTC" "2016-11-11 UTC" "2016-06-16 UTC" "2015-10-18 UTC"
## [5] "2015-10-18 UTC" "2014-06-14 UTC" "2014-06-14 UTC" "2014-06-14 UTC"
## [9] "2014-06-14 UTC" "2014-06-14 UTC"
À l’aide de la fonction unique()
, affichez les valeurs distinctes de la colonne Ship Mode
.
unique(ventes$`Ship Mode`)
## [1] "Second Class" "Standard Class" "First Class" "Same Day"
La fonction table()
appliquée à un vecteur contenant une variable catégorielle permet d’afficher le nombre d’observations pour chaque classe.
table(ventes$`Ship Mode`)
##
## First Class Same Day Second Class Standard Class
## 1538 543 1945 5968
À l’aide de la fonction sort()
, il est ensuite possible d’ordonner les valeurs par valeurs croissantes :
sort(table(ventes$`Ship Mode`))
##
## Same Day First Class Second Class Standard Class
## 543 1538 1945 5968
À votre tour.
Order Priority
, puis affichez le nombre de valeurs pour chaque catégorie de cette variable.Segment
State
Region
Category
.R gère des objets qui disposent de 4 caractéristiques :
Le mode d’un objet correspond à la nature, au type des éléments qui le composent.
Il existe 4 modes principaux :
Le tableau de données comporte trois modes de données :
On accède au mode d’un objet à l’aide de la fonction mode()
, ou bien à l’aide de la fonction typeof()
:
mode(1)
## [1] "numeric"
Il existe deux types de valeurs numériques :
Pour une valeur entière :
typeof(1L)
## [1] "integer"
Pour des valeurs réelles :
typeof(1)
## [1] "double"
typeof(1.1)
## [1] "double"
Pour savoir si un objet est un entier, on peut utiliser la fonction is.integer()
, qui retournera TRUE
si c’est le cas, ou FALSE
sinon :
is.integer(1L)
## [1] TRUE
is.integer(1)
## [1] FALSE
Affichez le type de la colonne Profit
du tableau ventes
.
Pour créer une chaîne de caractères, on utilise des guillemets simples "
ou des guillemets doubles "
.
"Hello world!"
## [1] "Hello world!"
'Hello world!'
## [1] "Hello world!"
Lorsqu’on utilise la fonction typeof()
sur un objet qui contient des chaînes de caractères, la fonction retourne character
:
typeof('Hello world!')
## [1] "character"
Pour savoir si un objet est composé de chaînes de caractères, on peut utiliser la fonction is.character()
:
is.character("Hello World!")
## [1] TRUE
is.character(1)
## [1] FALSE
`Customer Name`
du tableau ventes
contient des chaînes de caractères. Vérifiez-le à l’aide de la fonction is.character()
Profit
du même tableau de données.Les valeurs logiques permettent de représenter des valeurs binaires : Oui/Non, Vrai/Faux, 0/1, …
En R, elles sont codées à l’aide des valeurs TRUE
et FALSE
, qui sont des mots réservés.
Les valeurs logiques permettent également d’indiquer, comme nous l’avons vu dans les résultats retournés par les fonctions is.integer()
et is.character()
, le résultat de tests logiques. Par exemple, il est possible de tester des égalités ou des inégalités.
Si on souhaite savoir si un nombre est plus grand qu’une valeur donnée, il suffit d’utiliser le symbole “supérieur à” (>
). Par exemple, la ligne de code suivante permet de savoir si 3 est strictement plus grand que 5 :
3 > 5
## [1] FALSE
5 > 5
## [1] FALSE
7 > 5
## [1] TRUE
Pour un test d’égalité large, on fait suivre le symbole “supérieur à” (>
) du symbole égale (=
) :
3 >= 5
## [1] FALSE
5 >= 5
## [1] TRUE
7 >= 5
## [1] TRUE
Pour un test d’égalité, on utilise le symbole égal doublé (==
) :
3 == 3
## [1] TRUE
3 == 4
## [1] FALSE
Pour savoir si un objet est composé de valeurs logiques, on peut utiliser la fonction is.logical()
:
is.logical(3 > 5)
## [1] TRUE
La valeur TRUE
est convertie en 1 et la valeur FALSE
est convertie en 0. Cela peut être pratique pour compter le nombre de valeurs vraies dans un objet qui contient plusieurs logiques.
TRUE + TRUE + FALSE + TRUE*TRUE
## [1] 3
À l’aide du symbole $
, extrayez la colonne Sales
et faites un test d’inégalité pour savoir si les valeurs sont strictement supérieures à 10.
En plus de leur nom et de leur mode, les objets sont caractérisés par une longueur. La longueur d’un objet indique le nombre d’éléments qui le contiennent.
Pour connaître la longueur d’un objet, R propose la fonction length()
Lorsque l’on écrit 10
, R créé un objet (un vecteur) contenant une seule valeur numérique. La longueur de l’objet est donc de 1 :
length(1)
## [1] 1
Il est fréquent pour les français•es de mal orthographier length()
et d’écrire lenght()
à la place. Si vous évaluez lenght(10)
, R vous enverra un message d’erreur indiquant qu’il lui est impossible de trouver la fonction "lenght"
.
En utilisant la fonction length()
, affichez la longueur de la colonne Sales
du tableau ventes
.
Les données manquantes sont codées à l’aide de la valeur NA
en R (not available). Les valeurs NA
sont de type logical.
typeof(NA)
## [1] "logical"
La fonction is.na()
permet de tester si une valeur est de type NA
. Elle retourne une valeur logique pour indiquer exprimer le résultat du test :
is.na(10)
## [1] FALSE
is.na(NA)
## [1] TRUE
La fonction is.na()
est vectorisée : lorsqu’on l’applique à un vecteur, elle est appliquée à chaque élément du vecteur et retourne un résultat pour chaque élément du vecteur. Par exemple, pour savoir, pour chaque observation de la colonne Sales
du tableau de vente
is.na(ventes$Sales)
Pour savoir si toutes les valeurs d’un vecteur sont NA
, on peut utiliser la fonction all()
. Si toutes les valeurs sont NA
, le résultat sera TRUE
; si au moins une valeur n’est pas NA
, le résultat sera FALSE
.
all(is.na(ventes$Sales))
## [1] FALSE
Rendez-vous sur Wooclap pour participer à un quizz et faire le bilan de la première séance.