Objectifs
- Savoir installer et charger des packages/librairies
- Comprendre la suite tidyvers
- Lire et écrire un fichier
- Manipuler, explorer, transformer, trier des données
Installer les différents packages
Les installation de paquets sur R se font simplement via la fonction : install.packages()
L’ensemble des packages R se trouvent sur le repo du CRAN : http://cran.r-project.org
install.packages("tidyverse", repos='http://cran.r-project.org')
Charger un paquet
Pour utiliser une librairie, la commande suivante chargera le paquet :
library(tidyverse)
La suite tidyverse
tidyverse est un ensemble de packages cohérent permettant d’accéder à une collection de fonctionnalités conçues pour fonctionner ensemble (syntaxe, resultats…)
On retrouve des details de ces librairies a cette adresse
ggplot2
(visualisation)
dplyr
(manipulation des donnees)
tidyr
(remise en forme des donnees)
purrr
(programmation)
readr
(importation de donnees)
tibble
(tableaux de donnees)
forcats
(variables qualitatives)
stringr
(chaines de caracteres)
tibble
Tibble est une évolution / extension du classique data frame vu précédemment, ce format ajoute des fonctionnalités, pour autant il reste compatible avec l’objet data frame, il est toujours possible de passer de l’un à l’autre. Tibble est un objet à part entière et retourne un objet de classe tibble.
data.frame to tibble
as_tibble(df)
tibble to data.frame
as.data.frame(tib)
Charger un fichier
Nous allons utiliser dans un premier temps un fichier issu d’une compétition sur le site kaggle : à cette adresse
Vous pouvez telecharger le zip dans la partie Data > Data Sources
Kaggle est un site de compétitions data science, où à partir d’un problème posé, plusieurs data scientists proposent des solutions au travers de modèles statistiques.
Ici le jeu de données est une liste de cours de bourse du S&P500, le S&P500 est un indice au meme titre que le CAC40 français, rassemblant les 500 plus grandes sociétés cotées en bourse americaine, tenant compte des volumes échangés.
Lecture du fichier
df = read_csv('C:/Users/DIONGA/Downloads/dataset/s&p 500/all_stocks_5yr.csv')
Parsed with column specification:
cols(
date = [34mcol_date(format = "")[39m,
open = [32mcol_double()[39m,
high = [32mcol_double()[39m,
low = [32mcol_double()[39m,
close = [32mcol_double()[39m,
volume = [32mcol_double()[39m,
Name = [31mcol_character()[39m
)
Nombre de lignes et de colonnes
dim(df)
[1] 619040 7
Explorer le jeu de données
df %>% View()
Afficher les 5 premieres lignes
df %>% print(5, width = Inf)
Opérations de manipulations / transformations
Filtre sur une journée ou sur un volume
Petite précision, si l’on souhaite obtenir de la documentation sur une fonction, il suffit de taper son nom dans la console précédé par ?
Exemple : ?filter
Le sigle %>%
permet d’enchainer les operations, plus largement il passe en argument les données (dataframe) à la fonction qui suit, ou le resultat de la fonction à la fonction suivante.
filter(df, date == "2018-02-07") %>% count()
filter(df, volume > 5927662) %>% count()
df %>% filter(date == "2018-02-07") %>% count()
Même résultat ici
Sélectionner des colonnes
Le signe - permet de retirer des colonnes
df %>% select(-low, -high)
Ici on passe une expression réguliere à la fonction filter(), le but étant d’obtenir toutes les ouvertures et fermetures dont le nom contient “GOO”, ici cela sortira les cours de Google
df %>% filter(grepl("GOO", Name)) %>% select(Name, open, close)
Trier les données
Pour un ordre décroissant : arrange(desc(date))
df %>% filter(grepl("GOO", Name)) %>% select(Name, date, open, close) %>% arrange(date)
Transformer des colonnes
Pour extraire des informations d’un format date, nous allons installer le package lubridate
:
install.packages("lubridate", repos='http://cran.r-project.org')
library(lubridate)
df <- df %>% mutate(year = year(date), month = month(date), day = day(date)) %>% select(-date)
df
Réaliser des agregats
Cela nous permet ici d’avoir la moyenne du cours d’ouverture et de fermeture par an et par entreprise
df %>% group_by(year, Name) %>% mutate(mean_open = mean(open), mean_close = mean(close)) %>% select(year, Name, mean_open, mean_close) %>% distinct
Summarise aggrége des données et restitue un résultat résumé de plusieurs colonnes
df %>% group_by(year, Name) %>% summarise(mean_open = mean(open), mean_close = mean(close))
Summarise dispose de l’operateur n()
, qui retourne le nombre de lignes concernées par le groupe, ici 226 puisque la bourse n’est ouverte que sur les jours ouvrés.
df %>% group_by(year, Name) %>% summarise(nb = n())
Ecrire un fichier
df.w <- df %>% group_by(year, Name) %>% mutate(mean_open = mean(open), mean_close = mean(close)) %>% select(year, Name, mean_open, mean_close) %>% distinct
Si on veut maintenant persister notre dataframe df.w dans un fichier, on peut utiliser la fonction write_csv()
df.w %>% write_csv('C:/Users/DIONGA/Downloads/dataset/s&p 500/sp500_agg.csv')
Synthèse
Lire un fichier csv |
read_csv() |
Afficher les premières lignes du csv |
print() |
Réaliser des filtres, des opérations de restriction |
filter() |
Sélectionner des colonnes (le signe moins en supprime) |
select(col1, -col2) |
Passer des expressions régulières à la fonction filter |
filter(repl("GOO", col1)) |
Transformer des colonnes (datetime…) |
mutate() |
Réaliser des agrégats |
group_by() |
Ecrire un fichier csv |
write_csv() |
LS0tDQp0aXRsZTogIkNoYXJnZXIgZXQgbWV0dHJlIGVuIGZvcm1lIGRlcyBkb25uw6llcyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCg0KIyBPYmplY3RpZnMNCg0KKiBTYXZvaXIgaW5zdGFsbGVyIGV0IGNoYXJnZXIgZGVzIHBhY2thZ2VzL2xpYnJhaXJpZXMNCiogQ29tcHJlbmRyZSBsYSBzdWl0ZSB0aWR5dmVycw0KKiBMaXJlIGV0IMOpY3JpcmUgdW4gZmljaGllcg0KKiBNYW5pcHVsZXIsIGV4cGxvcmVyLCB0cmFuc2Zvcm1lciwgdHJpZXIgZGVzIGRvbm7DqWVzDQoNCg0KIyBJbnN0YWxsZXIgbGVzIGRpZmbDqXJlbnRzIHBhY2thZ2VzDQoNCkxlcyBpbnN0YWxsYXRpb24gZGUgcGFxdWV0cyBzdXIgUiBzZSBmb250IHNpbXBsZW1lbnQgdmlhIGxhIGZvbmN0aW9uIDogaW5zdGFsbC5wYWNrYWdlcygpICANCkwnZW5zZW1ibGUgZGVzIHBhY2thZ2VzIFIgc2UgdHJvdXZlbnQgc3VyIGxlIHJlcG8gZHUgQ1JBTiA6IGh0dHA6Ly9jcmFuLnItcHJvamVjdC5vcmcgIA0KDQpgYGB7cn0NCmluc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIsIHJlcG9zPSdodHRwOi8vY3Jhbi5yLXByb2plY3Qub3JnJykNCmBgYA0KDQoNCiMgQ2hhcmdlciB1biBwYXF1ZXQNCg0KUG91ciB1dGlsaXNlciB1bmUgbGlicmFpcmllLCBsYSBjb21tYW5kZSBzdWl2YW50ZSBjaGFyZ2VyYSBsZSBwYXF1ZXQgOg0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KYGBgDQoNCg0KIyBMYSBzdWl0ZSB0aWR5dmVyc2UNCg0KdGlkeXZlcnNlIGVzdCB1biBlbnNlbWJsZSBkZSBwYWNrYWdlcyBjb2jDqXJlbnQgcGVybWV0dGFudCBkJ2FjY8OpZGVyIMOgIHVuZSBjb2xsZWN0aW9uIGRlIGZvbmN0aW9ubmFsaXTDqXMgY29uw6d1ZXMgcG91ciBmb25jdGlvbm5lciBlbnNlbWJsZSAoc3ludGF4ZSwgcmVzdWx0YXRzLi4uKSAgDQpPbiByZXRyb3V2ZSBkZXMgZGV0YWlscyBkZSBjZXMgbGlicmFpcmllcyBhIFtjZXR0ZSBhZHJlc3NlXShodHRwczovL3d3dy50aWR5dmVyc2Uub3JnLykNCiAgDQpgZ2dwbG90MmAgKHZpc3VhbGlzYXRpb24pICANCmBkcGx5cmAgKG1hbmlwdWxhdGlvbiBkZXMgZG9ubmVlcykgIA0KYHRpZHlyYCAocmVtaXNlIGVuIGZvcm1lIGRlcyBkb25uZWVzKSAgDQpgcHVycnJgIChwcm9ncmFtbWF0aW9uKSAgDQpgcmVhZHJgIChpbXBvcnRhdGlvbiBkZSBkb25uZWVzKSAgIA0KYHRpYmJsZWAgKHRhYmxlYXV4IGRlIGRvbm5lZXMpICANCmBmb3JjYXRzYCAodmFyaWFibGVzIHF1YWxpdGF0aXZlcykgICANCmBzdHJpbmdyYCAoY2hhaW5lcyBkZSBjYXJhY3RlcmVzKSAgDQoNCiMjIHRpYmJsZQ0KDQpUaWJibGUgZXN0IHVuZSDDqXZvbHV0aW9uIC8gZXh0ZW5zaW9uIGR1IGNsYXNzaXF1ZSBkYXRhIGZyYW1lIHZ1IHByw6ljw6lkZW1tZW50LCBjZSBmb3JtYXQgYWpvdXRlIGRlcyBmb25jdGlvbm5hbGl0w6lzLCBwb3VyIGF1dGFudCBpbCByZXN0ZSBjb21wYXRpYmxlIGF2ZWMgbCdvYmpldCBkYXRhIGZyYW1lLCBpbCBlc3QgdG91am91cnMgcG9zc2libGUgZGUgcGFzc2VyIGRlIGwndW4gw6AgbCdhdXRyZS4gVGliYmxlIGVzdCB1biBvYmpldCDDoCBwYXJ0IGVudGnDqHJlIGV0IHJldG91cm5lIHVuIG9iamV0IGRlIGNsYXNzZSB0aWJibGUuDQoNCioqZGF0YS5mcmFtZSB0byB0aWJibGUqKg0KDQpgYXNfdGliYmxlKGRmKWANCg0KKip0aWJibGUgdG8gZGF0YS5mcmFtZSoqDQoNCmBhcy5kYXRhLmZyYW1lKHRpYilgDQoNCg0KIyBDaGFyZ2VyIHVuIGZpY2hpZXINCg0KTm91cyBhbGxvbnMgdXRpbGlzZXIgZGFucyB1biBwcmVtaWVyIHRlbXBzIHVuIGZpY2hpZXIgaXNzdSBkJ3VuZSBjb21ww6l0aXRpb24gc3VyIGxlIHNpdGUga2FnZ2xlIDogw6AgW2NldHRlIGFkcmVzc2VdKGh0dHBzOi8vd3d3LmthZ2dsZS5jb20vY2FtbnVnZW50L3NhbmRwNTAwI2luZGl2aWR1YWxfc3RvY2tzXzV5ci56aXApICANClZvdXMgcG91dmV6IHRlbGVjaGFyZ2VyIGxlIHppcCBkYW5zIGxhIHBhcnRpZSBEYXRhID4gRGF0YSBTb3VyY2VzICANCiAgDQpLYWdnbGUgZXN0IHVuIHNpdGUgZGUgY29tcMOpdGl0aW9ucyBkYXRhIHNjaWVuY2UsIG/DuSDDoCBwYXJ0aXIgZCd1biBwcm9ibMOobWUgcG9zw6ksIHBsdXNpZXVycyBkYXRhIHNjaWVudGlzdHMgcHJvcG9zZW50IGRlcyBzb2x1dGlvbnMgYXUgdHJhdmVycyBkZSBtb2TDqGxlcyBzdGF0aXN0aXF1ZXMuICANCiAgDQpJY2kgbGUgamV1IGRlIGRvbm7DqWVzIGVzdCB1bmUgbGlzdGUgZGUgY291cnMgZGUgYm91cnNlIGR1IFMmUDUwMCwgbGUgUyZQNTAwIGVzdCB1biBpbmRpY2UgYXUgbWVtZSB0aXRyZSBxdWUgbGUgQ0FDNDAgZnJhbsOnYWlzLCByYXNzZW1ibGFudCBsZXMgNTAwIHBsdXMgZ3JhbmRlcyBzb2Npw6l0w6lzIGNvdMOpZXMgZW4gYm91cnNlIGFtZXJpY2FpbmUsIHRlbmFudCBjb21wdGUgZGVzIHZvbHVtZXMgw6ljaGFuZ8Opcy4NCg0KIyBMZWN0dXJlIGR1IGZpY2hpZXINCg0KYGBge3J9DQpkZiA9IHJlYWRfY3N2KCdDOi9Vc2Vycy9ESU9OR0EvRG93bmxvYWRzL2RhdGFzZXQvcyZwIDUwMC9hbGxfc3RvY2tzXzV5ci5jc3YnKQ0KYGBgDQoNCioqTm9tYnJlIGRlIGxpZ25lcyBldCBkZSBjb2xvbm5lcyoqDQoNCmBgYHtyfQ0KZGltKGRmKQ0KYGBgDQoNCioqRXhwbG9yZXIgbGUgamV1IGRlIGRvbm7DqWVzKioNCg0KYGBge3J9DQpkZiAlPiUgVmlldygpDQpgYGANCg0KKipBZmZpY2hlciBsZXMgNSBwcmVtaWVyZXMgbGlnbmVzKioNCg0KDQpgYGB7cn0NCmRmICU+JSBwcmludCg1LCB3aWR0aCA9IEluZikNCmBgYA0KDQoNCiMgT3DDqXJhdGlvbnMgZGUgbWFuaXB1bGF0aW9ucyAvIHRyYW5zZm9ybWF0aW9ucw0KDQoqKkZpbHRyZSBzdXIgdW5lIGpvdXJuw6llIG91IHN1ciB1biB2b2x1bWUqKg0KDQpQZXRpdGUgcHLDqWNpc2lvbiwgc2kgbCdvbiBzb3VoYWl0ZSBvYnRlbmlyIGRlIGxhIGRvY3VtZW50YXRpb24gc3VyIHVuZSBmb25jdGlvbiwgaWwgc3VmZml0IGRlIHRhcGVyIHNvbiBub20gZGFucyBsYSBjb25zb2xlIHByw6ljw6lkw6kgcGFyID8gIA0KRXhlbXBsZSA6IGA/ZmlsdGVyYCAgDQoNCkxlIHNpZ2xlIGAlPiVgIHBlcm1ldCBkJ2VuY2hhaW5lciBsZXMgb3BlcmF0aW9ucywgcGx1cyBsYXJnZW1lbnQgaWwgcGFzc2UgZW4gYXJndW1lbnQgbGVzIGRvbm7DqWVzIChkYXRhZnJhbWUpIMOgIGxhIGZvbmN0aW9uIHF1aSBzdWl0LCBvdSBsZSByZXN1bHRhdCBkZSBsYSBmb25jdGlvbiDDoCBsYSBmb25jdGlvbiBzdWl2YW50ZS4NCg0KYGBge3J9DQpmaWx0ZXIoZGYsIGRhdGUgPT0gIjIwMTgtMDItMDciKSAlPiUgY291bnQoKQ0KZmlsdGVyKGRmLCB2b2x1bWUgPiA1OTI3NjYyKSAlPiUgY291bnQoKQ0KYGBgDQoNCg0KYGBge3J9DQpkZiAlPiUgZmlsdGVyKGRhdGUgPT0gIjIwMTgtMDItMDciKSAlPiUgY291bnQoKQ0KYGBgDQoNCk3Dqm1lIHLDqXN1bHRhdCBpY2kNCg0KKipTw6lsZWN0aW9ubmVyIGRlcyBjb2xvbm5lcyoqDQoNCkxlIHNpZ25lIC0gcGVybWV0IGRlIHJldGlyZXIgZGVzIGNvbG9ubmVzDQoNCmBgYHtyfQ0KZGYgJT4lIHNlbGVjdCgtbG93LCAtaGlnaCkNCmBgYA0KDQoNCkljaSBvbiBwYXNzZSB1bmUgZXhwcmVzc2lvbiByw6lndWxpZXJlIMOgIGxhIGZvbmN0aW9uIGZpbHRlcigpLCBsZSBidXQgw6l0YW50IGQnb2J0ZW5pciB0b3V0ZXMgbGVzIG91dmVydHVyZXMgZXQgZmVybWV0dXJlcyBkb250IGxlIG5vbSBjb250aWVudCAiR09PIiwgaWNpIGNlbGEgc29ydGlyYSBsZXMgY291cnMgZGUgR29vZ2xlICANCg0KYGBge3J9DQpkZiAlPiUgZmlsdGVyKGdyZXBsKCJHT08iLCBOYW1lKSkgJT4lIHNlbGVjdChOYW1lLCBvcGVuLCBjbG9zZSkgDQpgYGANCg0KDQoqKlRyaWVyIGxlcyBkb25uw6llcyoqDQoNClBvdXIgdW4gb3JkcmUgZMOpY3JvaXNzYW50IDogYGFycmFuZ2UoZGVzYyhkYXRlKSlgDQogDQpgYGB7cn0NCmRmICU+JSBmaWx0ZXIoZ3JlcGwoIkdPTyIsIE5hbWUpKSAlPiUgc2VsZWN0KE5hbWUsIGRhdGUsIG9wZW4sIGNsb3NlKSAlPiUgYXJyYW5nZShkYXRlKQ0KYGBgDQoNCg0KKipUcmFuc2Zvcm1lciBkZXMgY29sb25uZXMqKg0KDQpQb3VyIGV4dHJhaXJlIGRlcyBpbmZvcm1hdGlvbnMgZCd1biBmb3JtYXQgZGF0ZSwgbm91cyBhbGxvbnMgaW5zdGFsbGVyIGxlIHBhY2thZ2UgYGx1YnJpZGF0ZWAgOiAgDQoNCmBgYHtyfQ0KaW5zdGFsbC5wYWNrYWdlcygibHVicmlkYXRlIiwgcmVwb3M9J2h0dHA6Ly9jcmFuLnItcHJvamVjdC5vcmcnKQ0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShsdWJyaWRhdGUpDQoNCmRmIDwtIGRmICU+JSBtdXRhdGUoeWVhciA9IHllYXIoZGF0ZSksIG1vbnRoID0gbW9udGgoZGF0ZSksIGRheSA9IGRheShkYXRlKSkgJT4lIHNlbGVjdCgtZGF0ZSkNCmRmDQpgYGANCg0KDQoqKlLDqWFsaXNlciBkZXMgYWdyZWdhdHMqKg0KDQpDZWxhIG5vdXMgcGVybWV0IGljaSBkJ2F2b2lyIGxhIG1veWVubmUgZHUgY291cnMgZCdvdXZlcnR1cmUgZXQgZGUgZmVybWV0dXJlIHBhciBhbiBldCBwYXIgZW50cmVwcmlzZQ0KDQpgYGB7cn0NCmRmICU+JSBncm91cF9ieSh5ZWFyLCBOYW1lKSAlPiUgbXV0YXRlKG1lYW5fb3BlbiA9IG1lYW4ob3BlbiksIG1lYW5fY2xvc2UgPSBtZWFuKGNsb3NlKSkgJT4lIHNlbGVjdCh5ZWFyLCBOYW1lLCBtZWFuX29wZW4sIG1lYW5fY2xvc2UpICU+JSBkaXN0aW5jdA0KYGBgDQoNCg0KU3VtbWFyaXNlIGFnZ3LDqWdlIGRlcyBkb25uw6llcyBldCByZXN0aXR1ZSB1biByw6lzdWx0YXQgcsOpc3Vtw6kgZGUgcGx1c2lldXJzIGNvbG9ubmVzDQoNCmBgYHtyfQ0KZGYgJT4lIGdyb3VwX2J5KHllYXIsIE5hbWUpICU+JSBzdW1tYXJpc2UobWVhbl9vcGVuID0gbWVhbihvcGVuKSwgbWVhbl9jbG9zZSA9IG1lYW4oY2xvc2UpKQ0KYGBgDQoNCg0KU3VtbWFyaXNlIGRpc3Bvc2UgZGUgbCdvcGVyYXRldXIgYG4oKWAsIHF1aSByZXRvdXJuZSBsZSBub21icmUgZGUgbGlnbmVzIGNvbmNlcm7DqWVzIHBhciBsZSBncm91cGUsIGljaSAyMjYgcHVpc3F1ZSBsYSBib3Vyc2Ugbidlc3Qgb3V2ZXJ0ZSBxdWUgc3VyIGxlcyBqb3VycyBvdXZyw6lzLg0KDQpgYGB7cn0NCmRmICU+JSBncm91cF9ieSh5ZWFyLCBOYW1lKSAlPiUgc3VtbWFyaXNlKG5iID0gbigpKQ0KYGBgDQoNCg0KIyBFY3JpcmUgdW4gZmljaGllcg0KDQpgYGB7cn0NCmRmLncgPC0gZGYgJT4lIGdyb3VwX2J5KHllYXIsIE5hbWUpICU+JSBtdXRhdGUobWVhbl9vcGVuID0gbWVhbihvcGVuKSwgbWVhbl9jbG9zZSA9IG1lYW4oY2xvc2UpKSAlPiUgc2VsZWN0KHllYXIsIE5hbWUsIG1lYW5fb3BlbiwgbWVhbl9jbG9zZSkgJT4lIGRpc3RpbmN0DQpgYGANCg0KU2kgb24gdmV1dCBtYWludGVuYW50IHBlcnNpc3RlciBub3RyZSBkYXRhZnJhbWUgZGYudyBkYW5zIHVuIGZpY2hpZXIsIG9uIHBldXQgdXRpbGlzZXIgbGEgZm9uY3Rpb24gYHdyaXRlX2NzdigpYA0KDQpgYGB7cn0NCmRmLncgJT4lIHdyaXRlX2NzdignQzovVXNlcnMvRElPTkdBL0Rvd25sb2Fkcy9kYXRhc2V0L3MmcCA1MDAvc3A1MDBfYWdnLmNzdicpDQpgYGANCg0KIyBTeW50aMOoc2UNCg0KfEZvbmN0aW9ubmFsaXTDqXxGb25jdGlvbnMgUnwNCnwtLXwtLXwNCnxMaXJlIHVuIGZpY2hpZXIgY3N2fGByZWFkX2NzdigpYHwNCnxBZmZpY2hlciBsZXMgcHJlbWnDqHJlcyBsaWduZXMgZHUgY3N2fGBwcmludCgpYHwNCnxSw6lhbGlzZXIgZGVzIGZpbHRyZXMsIGRlcyBvcMOpcmF0aW9ucyBkZSByZXN0cmljdGlvbnxgZmlsdGVyKClgfA0KfFPDqWxlY3Rpb25uZXIgZGVzIGNvbG9ubmVzIChsZSBzaWduZSBtb2lucyBlbiBzdXBwcmltZSl8YHNlbGVjdChjb2wxLCAtY29sMilgfA0KfFBhc3NlciBkZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIMOgIGxhIGZvbmN0aW9uIGZpbHRlcnxgZmlsdGVyKHJlcGwoIkdPTyIsIGNvbDEpKWB8DQp8VHJhbnNmb3JtZXIgZGVzIGNvbG9ubmVzIChkYXRldGltZS4uLil8YG11dGF0ZSgpYHwNCnxSw6lhbGlzZXIgZGVzIGFncsOpZ2F0c3xgZ3JvdXBfYnkoKWB8DQp8RWNyaXJlIHVuIGZpY2hpZXIgY3N2fGB3cml0ZV9jc3YoKWB8DQo=