Objectifs

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 = col_date(format = ""),
  open = col_double(),
  high = col_double(),
  low = col_double(),
  close = col_double(),
  volume = col_double(),
  Name = col_character()
)

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

Fonctionnalité Fonctions R
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=