logo

RBASE dplyr EXERCICE N°5

RBASE dplyr EXERCICE N°5

Pour rappel les descriptifs des fichiers sont ici.   Fusionner le data.frame des établissements (etab) et les données de l’enquête SAE (capa) pour l’année 2016. On ne gardera dans le résultat que les établissements enquêtés, c’est à dire présents dans capa.

RBASE dplyr EXERCICE N°4

Pour rappel les descriptifs des fichiers sont ici.   L’objet etab contient une colonne date.ouverture. Quel est son type ? En dériver une colonne de type Date, et s’en servir pour calculer l’ancienneté en années de l’établissement par rapport à la date du jour. Les anciennetés négatives ou supérieures à 200 ans seront remplacées par des NA.

RBASE dplyr EXERCICE N°3

Pour rappel les descriptifs des fichiers sont ici.   Créer un objet sae2010 à partir des seules données de l’année 2010 dans le data.frame capa (avec 7779 obs) un objet sae_bretagne à partir des seules données des établissements des départements 22, 29, 35 et 56 dans le data.frame capa (avec 6768 obs) un objet cliniques à partir des établissements (data.frame etab) dont le nom (colonne rs) contient le mot « clinique » (avec 945 obs)

RBASE dplyr EXERCICE N°2

Pour rappel les descriptifs des fichiers sont ici.   Afficher dans la Console les 20 premières lignes du data.frame etab et seulement les colonnes finess, rs, et celles dont le nom commence par « lib ». Pour afficher un objet, on peut : juste écrire son nom sans affectation, a affecter et mettre l’affectation entre parenthèses pour afficher l’objet créé, (b <- a) utiliser explicitement la fonction print, print(a)

données SAE Présentation des données SAE

Les données concernent des établissements de soins médicaux en France. Elles ont été collectées sur le site d’Open Data France et correspondent à un répertoire des établissements (base FINESS) et aux réponses à une enquête auprès des établissements (SAE). Le fichier brut capact0019.csv à séparateur point-virgule (transformé ensuite en objet capa après import) contient les données de l’enquête SAE. Il contient 135 593 lignes (plusieurs années et plusieurs disciplines sont empilées dans ce fichier) et 27 variables. Une ligne représente […]

données AirBnB Présentation des données AirBnB

Les données concernent des locations sur le site d’AirBnB à Paris, à la date du 03/07/2016. Elles ont été collectées par InsideAirBnB. Les fichiers bruts sont au format CSV pour trois d’entre eux (flats, houses et calendar) avec un séparateur virgule ; il y a également un classeur Excel (other) et une table SAS (lis). Cette dernière représente la compilation des annonces de flats, houses et other. Les informations contenues dans flats, houses et other sont identiques, seul le type […]

Test de mise en forma par yohannn

Hello H1 Hello H2 Hello H3 balise p Hello gras    liste puce puce 2 puce 3 citation code code fin Texte p

RBASE dplyr ggplot2 Graphiques (nuages de points et courbes) (12 minutes)

  library(lubridate) # gestion des dates # prix moyen par mois, préparation des données prix % group_by(annee=year(date2), mois=month(date2)) %>% summarise(price=mean(price)) %>% mutate(date = as.Date(paste(annee, mois, 15, sep= »-« ))) # nuage de points ggplot(prix) + aes(x=date, y=price) + geom_point() # sous forme de courbe ggplot(prix) + aes(x=date, y=price) + geom_line() # superposition courbe + nuage de points ggplot(prix) + aes(x=date, y=price) + geom_line() + geom_point() # avec une droite de tendance linéaire (régression) ggplot(prix) + aes(x=date, y=price) + geom_line() + geom_smooth(method= »lm », colour= »blue », […]

RBASE dplyr ggplot2 Graphiques (bâtons) (12 minutes)

  library(ggplot2) # beaux graphiques # bâtons par fréquence du type de location ggplot(flats) + aes(x=room_type) + geom_bar() # bâtons horizontaux ggplot(flats) + aes(y=room_type) + geom_bar() # barres empilées ggplot(flats) + aes(x=tranche_prix, fill=room_type) + geom_bar() # en fixant les couleurs ggplot(flats) + aes(x=tranche_prix, fill=room_type) + geom_bar() + scale_fill_manual(values=c(« green », »orange », »purple »)) library(viridis) # palettes de couleurs ggplot(flats) + aes(x=tranche_prix, fill=room_type) + geom_bar() + scale_fill_viridis_d(option= »magma ») # barres côte à côte ggplot(flats) + aes(x=property_type, fill=room_type) + geom_bar(position= »dodge ») # barres empilées 100% ggplot(flats) + aes(x=property_type, group=room_type, […]

RBASE dplyr Statistiques par groupe (8 minutes)

  # prix moyen par quartier flats %>% group_by(neighbourhood_cleansed) %>% summarise(mean(price)) # prix moyen par type de logement et de location flats %>% group_by(room_type, property_type) %>% summarise(mean(price)) # plusieurs statistiques flats %>% group_by(room_type, property_type) %>% summarise(moy=mean(price), med=median(price), n=length(price)) # niveaux de groupement : # top 5 des loueurs proposant le plus d’appartements flats %>% group_by(host_id, host_name) %>% # les données sont groupées selon host_id et host_name summarise(nb_apparts = length(id)) %>% # les données sont groupées selon host_id seulement arrange(desc(nb_apparts)) %>% […]

RBASE dplyr Moyenne, médiane, somme, etc. (12 minutes)

  mean(flats$price) # prix moyen flats %>% summarise(median(price)) # prix médian length(flats$price) # nombre de valeurs dans prix… nrow(flats) # … égal au nombre de lignes du data.frame quantile(flats$price) # quartiles de prix quantile(flats$price, seq(0,1,by=0.1)) # déciles de prix mean(flats$review_scores_rating) # moyenne des notes moyennes mean(flats$review_scores_rating, na.rm=TRUE) # sans tenir compte des NA # moyenne des variables dont le nom finit par « rooms » flats %>% summarise_at(vars(ends_with(« rooms »)), mean, na.rm=TRUE) sum(is.na(flats$review_scores_rating)) # nombre de NA dans les notes sum(!is.na(flats$review_scores_rating)) # nombre de […]

RBASE dplyr Statistiques globales (8 minutes)

  # description des colonnes de flats summary(flats) library(skimr) # statistiques descriptives globales # variante avec le package {skimr} skim(flats) skim_without_charts(flats)

RBASE dplyr Doublons (7 minutes)

  # liste des loueurs d’appartements # sans doublons (chaque loueur n’apparaît qu’une fois même # s’il loue plusieurs appartements) loueurs % select(host_id, host_name) %>% distinct() loueurs %>% slice(1:10) library(gdata) # diverses fonctions dont duplicated2 # loueurs avec un seul appartement proposé loueurs_un_seul_bien % select(host_id, host_name) %>% filter(!duplicated2(host_id)) loueurs_un_seul_bien %>% slice(1:10) # loueurs avec au moins 2 appartements proposés loueurs_plusieurs_biens % select(host_id, host_name) %>% filter(duplicated2(host_id)) %>% arrange(host_id) loueurs_plusieurs_biens %>% slice(1:10) # liste des loueurs (sans doublons) proposant au moins 2 […]

RBASE dplyr Transposition (19 minutes)

  # régularisation des données textuelles library(reshape2) # transpositions library(stringi) # fonctions pour les textes houses2 % tolower() %>% stri_trans_general(id = « Latin-ASCII »)) houses3 % # on supprime aussi les lignes vides filter(!is.na(equipement)) # prix moyen des logements par mois library(lubridate) # gestion des dates prix % mutate(annee = year(as.Date(date)), mois = month(as.Date(date), label=TRUE, abbr=FALSE)) %>% # transposition : chaque combinaison mois x année –> 1 colonne # les lignes sont par logement dcast(listing_id ~ annee + mois, value.var= »price », fun = […]

RBASE dplyr Tri des données (3 minutes)

  # tri des appartements par prix (croissant) flats %>% arrange(price) %>% slice(1:10) %>% select(id,price,room_type,accommodates) # puis par prix décroissant flats %>% arrange(desc(price)) %>% slice(1:10) %>% select(id,price,room_type,accommodates) # par prix décroissant et pour un même prix, # par nombre de personnes accueillies décroissant flats %>% arrange(desc(price), desc(accommodates)) %>% slice(1:10) %>% select(id,price,room_type,accommodates)

RBASE dplyr Fusion de tables (13 minutes)

  # empilement des trois catégories de logement logements % union_all(houses) str(logements) # avec plus de 2 tables logements % union_all(houses) %>% union_all(other) # message d’erreur, il faut convertir zipcode en chr dans other logements % union_all(houses) %>% union_all(other %>% mutate(zipcode = as.character(zipcode))) glimpse(logements) # quels appartements du quartier Bourse sont dispos le 15/08/2016 ? # on commence par extraire les données pertinentes bourse % filter(neighbourhood_cleansed == « Bourse ») quinze_aout % filter(date2 == « 2016-08-15 ») # croisement (jointure interne par défaut) apparts_bourse_dispos_08_15 […]

RBASE dplyr Formules conditionnelles (8 minutes)

  # ratio prix/nombre de personnes en 2 catégories # plus simple que d’utiliser cut dans ce cas houses % mutate(categ_prix = ifelse(price/accommodates > 40, « cher », « acceptable »)) houses %>% slice(1:10) %>% select(price,accommodates,categ_prix) # plus de 2 cas flats % mutate(type = case_when( room_type == « Entire home/apt » ~ « Logement entier », room_type == « Private room » & accommodates < 4 ~ "Chambre pour 1-3 personnes", room_type == "Private room" ~ "Chambre pour > 3 personnes », accommodates < 3 ~ "Chambre partagée pour 1-2 […]

RBASE dplyr Formules (nombres et dates) (8 minutes)

  library(lubridate) # gestion des Dates # conversion texte -> Date houses % mutate(debut_loc = as.Date(host_since)) # résultat invisible à l’affichage houses %>% slice(1:10) %>% select(host_since,debut_loc) # mais le type est bien modifié str(houses %>% select(host_since,debut_loc)) houses % mutate( # extraction de l’année annee_debut_loc = year(debut_loc), # calcul d’ancienneté par rapport à aujourd’hui anciennete_loc = (today()-debut_loc)/dyears(1), # avec un arrondi à une seule décimale anciennete_loc2 = round(anciennete_loc, 1)) houses %>% slice(1:10) %>% select(debut_loc, annee_debut_loc, anciennete_loc, anciennete_loc2)

RBASE dplyr Formules (texte) (10 minutes)

  # valeurs d’origine levels(flats$prop_type) # recodage flats % mutate(prop_type2 = fct_recode(prop_type, « Apartment »= »Condominium »)) # on a fusionné des valeurs levels(flats$prop_type2) # fusion des modalités sauf les 20 plus fréquentes # (conversion de la variable d’origine incluse) flats % mutate(zipcode2 = fct_lump_n(zipcode, 20)) # vérification levels(flats$zipcode2) # pour comparer à la version d’origine levels(as.factor(flats$zipcode)) # les 2 premiers caractères flats % mutate(dept = substr(zipcode,1,2)) # vérification levels(as.factor(flats$dept)) # concaténation avec séparateur « – » flats % mutate(host = paste(host_id, host_name, sep= »-« )) # vérification […]

RBASE dplyr Filtres et requêtes (14 minutes)

  # maisons du 14e arrondissement houses %>% filter(zipcode == « 75014 ») %>% select(id) # maisons du 14e arrondissement et sélection de colonnes houses %>% filter(zipcode == « 75014 ») %>% select(id,price,accommodates) # maisons du 14e arrondissement # accueillant plus de 4 personnes houses %>% filter(zipcode == « 75014 » & accommodates > 4) %>% select(id,price,accommodates) # maisons avec les politiques d’annulation médianes houses %>% filter(cancellation_policy %in% c(« strict », »moderate »))%>% select(id,price,cancellation_policy) # maisons sans note moyenne # mais avec au moins 1 commentaire houses %>% filter(is.na(review_scores_rating) & […]

RBASE dplyr Extraction des données (12 minutes)

  library(tidyverse) # requêtes etc. # la colonne « price » houses$price # syntaxes {dplyr} pull(houses, price) houses %>% pull(price) # les colonnes id, price, accommodates houses %>% select(id, price, accommodates) %>% slice(1:20) # les colonnes id et price en premier houses %>% select(id, price, everything()) %>% slice(1:10) # les colonnes dont le nom commence par « host » houses %>% select(starts_with(« host »)) %>% slice(1:10) # toutes les colonnes sauf celles dont # le nom se termine par « type », ni celles # dont le nom […]

RBASE ggplot2 EXERCICE N°13

Pour rappel les descriptifs des fichiers sont ici.   Calculer le nombre de lits d’hospitalisation complète (colonne LIT dans capa) par an et reporter cette information sous forme de courbe comme ci-dessous. La variable en abscisse (an) doit être numérique.

RBASE ggplot2 Correction – EXERCICE N°13

library(ggplot2) # beaux graphiques evol <- aggregate(LIT~an, capa, sum, na.rm=TRUE) evol$an <- as.numeric(evol$an) ggplot(evol) + aes(x=an, y=LIT) + geom_line() + geom_point()

RBASE ggplot2 Correction – EXERCICE N°12

library(questionr) # pour la fonction wtd.table library(forcats)   # pour réordonner les facteurs library(ggplot2)   # beaux graphiques capa2015 <- aggregate(LIT ~ Discipline,                       capa[which(capa$an == 2015),],                       sum) ggplot(capa2015) +   aes(y=Discipline, x=LIT) +   geom_bar(stat= »identity ») # et en rangeant les barres capa2015$Discipline <- fct_reorder(capa2015$Discipline,                                    capa2015$LIT,                                    sum) ggplot(capa2015) +   aes(y=Discipline, x=LIT) +   geom_bar(stat= »identity »)

RBASE ggplot2 EXERCICE N°12

Pour rappel les descriptifs des fichiers sont ici.   Représenter par un diagramme en bâtons les capacités en lits d’hospitalisation complète (colonne LIT dans capa) selon la discipline pour l’année 2015. Vous pourrez utiliser la fonction forcats::fct_reorder pour ranger les barres comme ci-dessous.

RBASE ggplot2 Graphiques (nuages de points et courbes) (11 minutes)

  # prix moyen par mois, préparation des données prix

RBASE ggplot2 Graphiques (distributions) (6 minutes)

  # histogramme des prix des appartements ggplot(flats) + aes(x=price) + geom_histogram() # avec 10 tranches ggplot(flats) + aes(x=price) + geom_histogram(bins=10) # avec des tranches d’amplitude 100 ggplot(flats) + aes(x=price) + geom_histogram(binwidth=100) # boîte à moustaches du nombre de personnes accueillies ggplot(flats) + aes(y=accommodates) + geom_boxplot() # la même à l’horizontale ggplot(flats) + aes(y=accommodates) + geom_boxplot() + coord_flip() # par type d’appartement ggplot(flats) + aes(y=accommodates, x=property_type) + geom_boxplot() # avec la moyenne par-dessus ggplot(flats) + aes(y=accommodates, x=property_type) + geom_boxplot() + […]

RBASE ggplot2 Graphiques : principe de {ggplot2} (10 minutes)

  library(ggplot2) # beaux graphiques ggplot() + # données aes() + # rôles accordés à chaque variable geom_XXX() # type de graphique

RBASE ggplot2 Graphiques (bâtons) (11 minutes)

  library(ggplot2) # beaux graphiques # bâtons par fréquence du type de location ggplot(flats) + aes(x=room_type) + geom_bar() # bâtons horizontaux ggplot(flats) + aes(y=room_type) + geom_bar() # barres empilées ggplot(flats) + aes(x=tranche_prix, fill=room_type) + geom_bar() # en fixant les couleurs ggplot(flats) + aes(x=tranche_prix, fill=room_type) + geom_bar() + scale_fill_manual(values=c(« green », »orange », »purple »)) library(viridis) # palettes de couleurs ggplot(flats) + aes(x=tranche_prix, fill=room_type) + geom_bar() + scale_fill_viridis_d(option= »magma ») # barres côte à côte ggplot(flats) + aes(x=property_type, fill=room_type) + geom_bar(position= »dodge ») # barres empilées 100% ggplot(flats) + aes(x=property_type, group=room_type, […]

RBASE Correction – EXERCICE N°13

evol

RBASE EXERCICE N°13

Pour rappel les descriptifs des fichiers sont ici.   Calculer le nombre de lits d’hospitalisation complète (colonne LIT dans capa) par an et reporter cette information sous forme de courbe comme ci-dessous.

RBASE Correction – EXERCICE N°12

library(questionr) # pour la fonction wtd.table library(forcats) # pour réordonner les facteurs capa2015 <- capa[which(capa$an == 2015), c(« fi », »Discipline », »LIT »)] par(las=1) # graduations à l’horizontale par(mar=c(3,15,1,1)) barplot(wtd.table(capa2015$Discipline, weights = capa2015$LIT), horiz=TRUE) # en rangeant les barres capa2015$disci

RBASE EXERCICE N°12

Pour rappel les descriptifs des fichiers sont ici.   Représenter par un diagramme en bâtons les capacités en lits d’hospitalisation complète (colonne LIT dans capa) selon la discipline pour l’année 2015. Vous pourrez utiliser la fonction forcats::fct_reorder pour ranger les barres comme ci-dessous.

RBASE Correction – EXERCICE N°11

library(questionr) # pour la fonction wtd.table capa_2010_2015

RBASE EXERCICE N°11

Pour rappel les descriptifs des fichiers sont ici.   Dans capa, la colonne PLA contient le nombre de places en hospitalisation partielle. Créer un tableau de pourcentages indiquant quelle est la répartition des places d’hospitalisation partielle par discipline (colonne portant ce nom) selon l’année. Les pourcentages feront 100% pour chaque année. On se limitera à la période 2010-2015.

RBASE Correction – EXERCICE N°10

aggregate(LIT ~ fi, sae2010[which(substr(sae2010$fi,1,2)== »17″),], sum)

RBASE EXERCICE N°10

Pour rappel les descriptifs des fichiers sont ici.   Pour l’année 2010, quelle est la capacité totale (total du nombre de lits indiqués dans la colonne LIT de capa) par établissement ? On se limitera aux établissements de Charente-Maritime (le numéro FINESS contenu dans la colonne fi commence par 17).

RBASE Correction – EXERCICE N°9

sum(sae2010$LIT, na.rm=TRUE)

RBASE EXERCICE N°9

Pour rappel les descriptifs des fichiers sont ici.   Pour l’année 2010, quelle est la capacité totale (total du nombre de lits indiqués dans la colonne LIT de capa) des établissements ?

RBASE Correction – EXERCICE N°8

library(openxlsx) # export en classeur XLSX write.xlsx(cliniques, file= »c:/temp/cliniques.xlsx », sheetName = « cliniques », asTable = TRUE, overwrite = TRUE)

RBASE EXERCICE N°8

Pour rappel les descriptifs des fichiers sont ici.   Créer un classeur Excel contenant une feuille nommée « cliniques » et contenant les données extraites à l’exercice 3.

RBASE Correction – EXERCICE N°7

library(reshape2) # transpositions evol_lits <- dcast(capa, fi ~ an, fun=sum, value.var = « LIT »)

RBASE EXERCICE N°7

Pour rappel les descriptifs des fichiers sont ici.   A partir des données du data.frame capa (enquête SAE), construire un data.frame avec une ligne par établissement et une colonne par année, chaque colonne contenant le nombre de lits (colonne LIT).

RBASE Correction – EXERCICE N°6

# tri par lits, toutes disciplines confondues sae16_tri <- sae16[order(-sae16$LIT),                    c(« fi », »rs », »Discipline », »LIT »)] # tri par lits à l’intérieur d’un tri par discipline sae16_tri2 <- sae16[order(sae16$Discipline,                           -sae16$LIT),                     c(« fi », »rs », »Discipline », »LIT »)]

RBASE EXERCICE N°6

Pour rappel les descriptifs des fichiers sont ici.   Trier les établissements de l’enquête SAE (objet capa) pour 2016 : * Par nombre de lits (colonne LIT) décroissant, toutes disciplines confondues * Par nombre de lits décroissant, à l’intérieur d’un tri par discipline (colonne Discipline)

RBASE Correction – EXERCICE N°5

sae16 <- capa[which(capa$an == 2016),] sae2016_etab <- merge(etab,                       sae16,                       by.x= »finess »,                       by.y= »fi »,                       all.y=TRUE)

RBASE EXERCICE N°5

Pour rappel les descriptifs des fichiers sont ici.   Fusionner le data.frame des établissements (etab) et les données de l’enquête SAE (capa) pour l’année 2016. On ne gardera dans le résultat que les établissements enquêtés, c’est à dire présents dans capa.

RBASE Correction – EXERCICE N°4

library(lubridate) # gestion des dates class(etab$date.ouverture) # variable texte # on convertit en Date etab$date.ouverture2 <- as.Date(etab$date.ouverture) # ancienneté de l’établissement etab$anciennete <- (today() – etab$date.ouverture2)/ dyears(1) # on corrige les dates dont les années sont étranges etab$anciennete <- ifelse(etab$anciennete < 0 | etab$anciennete > 200, NA, etab$anciennete)

RBASE EXERCICE N°4

Pour rappel les descriptifs des fichiers sont ici.   L’objet etab contient une colonne date.ouverture. Quel est son type ? En dériver une colonne de type Date, et s’en servir pour calculer l’ancienneté en années de l’établissement par rapport à la date du jour. Les anciennetés négatives ou supérieures à 200 ans seront remplacées par des NA.

Questionnaire d’évaluation

RBASE Correction – EXERCICE N°3

# objet sae2010 à partir des seules données # de l’année 2010 dans le data.frame capa sae2010 <- capa[which(capa$an == 2010),] # 7779 lignes et 24 colonnes # objet sae_bretagne à partir des seules données # des établissements des départements 22, 29, 35 et 56 # dans le data.frame capa sae_bretagne <- capa[which(capa$dep %in%                              c(« 22″, »29″, »35″, »56 »)),] # 6768 lignes et 24 colonnes # objet cliniques à partir des établissements # (data.frame etab) dont le nom (colonne rs) # contient le […]

RBASE EXERCICE N°3

Pour rappel les descriptifs des fichiers sont ici.   Créer un objet sae2010 à partir des seules données de l’année 2010 dans le data.frame capa (avec 7779 obs) un objet sae_bretagne à partir des seules données des établissements des départements 22, 29, 35 et 56 dans le data.frame capa (avec 6768 obs) un objet cliniques à partir des établissements (data.frame etab) dont le nom (colonne rs) contient le mot « clinique » (avec 945 obs)

RBASE Correction – EXERCICE N°2

# afficher les 20 premières lignes de l’objet etab etab[1:20,] print(etab[1:20,]) (etab20 <- etab[1:20,])

RBASE EXERCICE N°2

Pour rappel les descriptifs des fichiers sont ici.   Afficher dans la Console les 20 premières lignes du data.frame etab. Pour afficher un objet, on peut : juste écrire son nom sans affectation, a affecter et mettre l’affectation entre parenthèses pour afficher l’objet créé, (b <- a) utiliser explicitement la fonction print, print(a)

RBASE EXERCICE N°1

Les descriptifs des fichiers sont ici. Importer les fichiers FINESS.CSV (dans un objet appelé etab) CAPACT0016.SAS7BDAT (dans un objet appelé capa) Le premier est un descriptif des établissements hospitaliers français ; leur identifiant unique est le numéro Finess (1e colonne). Le second est un suivi de la capacité (nombre de lits) et de l’activité (nombre de séjours) de certains établissements sur plusieurs années (colonne an) et par discipline (colonnes disci et Discipline).

RBASE Correction – EXERCICE N°1

library(haven) # import tables SAS etab <- read.delim(« C:/olivier/sae/finess.csv »,                    sep = « ; »,                    stringsAsFactors = FALSE) capa <- read_sas(« C:/olivier/sae/capact0016.sas7bdat »)

RBASE Graphiques (nuages de points et courbes) (10 minutes)

  # prix moyen par mois, préparation des données prix

RBASE Graphiques (distributions) (6 minutes)

  # histogramme des prix des appartements hist(flats$price) # avec 30 tranches hist(flats$price, breaks=30) # avec des tranches d’amplitude 100 hist(flats$price[which(flats$price < 1000)], breaks=seq(0,1000,by=100)) # et les effectifs au-dessus des barres hist(flats$price[which(flats$price < 1000)], breaks=seq(0,1000,by=100), labels=TRUE) # boîte à moustaches du nombre de personnes accueillies boxplot(flats$accommodates) # avec la moyenne par-dessus boxplot(flats$accommodates) points(mean(flats$accommodates), pch=16, # symbole = un cercle plein col="red") # par type d'appartement boxplot(accommodates ~ property_type, flats) # pour ajouter les moyennes c'est plus compliqué boxplot(accommodates ~ property_type, […]

RBASE Graphiques (bâtons) (14 minutes)

  # bâtons par fréquence du type de location barplot(table(flats$room_type)) # bâtons horizontaux barplot(table(flats$room_type), horiz=TRUE) # en écrivant les graduations d’axes à l’horizontale par(las=1) barplot(table(flats$tranche_prix)) # barres empilées barplot(table(flats$room_type, flats$tranche_prix)) # avec une légende barplot(table(flats$room_type, flats$tranche_prix), legend=TRUE) # en fixant les couleurs barplot(table(flats$room_type, flats$tranche_prix), legend=TRUE, col=c(« green », »purple », »orange »)) library(viridis) # palettes de couleurs barplot(table(flats$room_type, flats$tranche_prix), legend=TRUE, col=magma(3)) # 3 parce qu’il faut 3 couleurs # en ajustant les marges (bas, gauche, haut, droite) par(mar=c(3,10,1,3)) barplot(table(flats$neighbourhood_cleansed), horiz=TRUE) # pour ordonner les barres, il […]

RBASE Comptages et pourcentages (12 minutes)

  # nombre d’appartements par type de location table(flats$room_type) addmargins(table(flats$room_type)) # + total # en pourcentage addmargins(table(flats$room_type))/nrow(flats) # version « brute » addmargins(prop.table(table(flats$room_type))) # avec prop.table round(addmargins(prop.table(table(flats$room_type)))*100,1) # et mise en forme # appartements par quartier et type de location table(flats$neighbourhood_cleansed, flats$room_type) # on peut le stocker dans un objet tableau

RBASE Statistiques par groupe (6 minutes)

  # prix moyen par quartier aggregate(price ~ neighbourhood_cleansed, flats, mean) # prix moyen par type de logement et de location aggregate(price ~ room_type + property_type, flats, mean) # pour avoir plusieurs statistiques il faut construire # une fonction ad hoc aggregate(price ~ room_type + property_type, flats, function(x){c(« moy »=mean(x, na.rm=TRUE), « med »=median(x, na.rm=TRUE), « n »=length(x))}) # si elle doit servir en plusieurs occasions, # autant stocker la fonction (elle pourra être # enregistrée dans un Rdata comme d’autres objets) mes_stats

RBASE Moyenne, médiane, somme, etc. (7 minutes)

  mean(flats$price) # prix moyen median(flats$price) # prix médian length(flats$price) # nombre de valeurs dans prix… nrow(flats) # … égal au nombre de lignes du data.frame quantile(flats$price) # quartiles de prix quantile(flats$price, seq(0,1,by=0.1)) # déciles de prix mean(flats$review_scores_rating) # moyenne des notes moyennes mean(flats$review_scores_rating, na.rm=TRUE) # sans tenir compte des NA sum(is.na(flats$review_scores_rating)) # nombre de NA dans les notes sum(!is.na(flats$review_scores_rating)) # nombre de valeurs non manquantes mean(is.na(flats$review_scores_rating))*100 # pourcentage de NA sum(flats$price > 100) # nombre d’appartements où une nuit […]

RBASE Statistiques globales (8 minutes)

  # description des colonnes de flats summary(flats) library(skimr) # statistiques descriptives globales # variante avec le package {skimr} skim(flats) skim_without_charts(flats)

RBASE Export (4 minutes)

  library(openxlsx) # export de fichiers XLSX # export des données de houses avec mise en forme write.xlsx(houses, file= »export maisons.xlsx », asTable = TRUE, overwrite = TRUE, sheetName = « Maisons »)

RBASE Sauvegarde (7 minutes)

  # sauvegarde de plusieurs objets en un fichier save(flats, houses, other, calendar, file= »donnees_airBnB.Rdata ») # sauvegarde individuelle saveRDS(logements, file= »logements.RDS ») # restauration des objets # pour un RDS on doit affecter mais pas pour un Rdata loc_paris <- readRDS(« logements.RDS ») load(« donnees_airBnB.Rdata »)

RBASE Doublons (8 minutes)

  # liste des loueurs d’appartements loueurs <- flats[,c(« host_id », »host_name »)] # sans doublons (chaque loueur n’apparaît qu’une fois même # s’il loue plusieurs appartements) liste_loueurs <- loueurs[!duplicated(loueurs$host_id),] liste_loueurs[1:10,] library(gdata) # diverses fonctions dont duplicated2 # loueurs avec un seul appartement proposé loueurs_un_seul_bien <- loueurs[!duplicated2(loueurs$host_id),] loueurs_un_seul_bien[1:10,] # loueurs avec au moins 2 appartements proposés loueurs_plusieurs_biens <- loueurs[duplicated2(loueurs$host_id),] loueurs_plusieurs_biens[1:10,] # liste des loueurs (sans doublons) proposant au moins 2 appartements loueurs_plusieurs_biens <- loueurs_plusieurs_biens[ !duplicated(loueurs_plusieurs_biens$host_id),] loueurs_plusieurs_biens[1:10,]

RBASE Transposition (17 minutes)

  # régularisation des données textuelles library(reshape2) # transpositions library(stringi) # fonctions pour les textes houses2

RBASE Tri des données (7 minutes)

  # tri des appartements par prix (croissant) flats <- flats[order(flats$price),] flats[1:10,c(« id », »price », »room_type », »accommodates »)] # puis par prix décroissant flats <- flats[order(-flats$price),] flats[1:10,c(« id », »price », »room_type », »accommodates »)] # attention de ne pas écrire !!! flats2 <- flats[-order(flats$price),] flats2 # par prix décroissant et pour un même prix, # par nombre de personnes accueillies décroissant flats <- flats[order(-flats$price, -flats$accommodates),] flats[1:10,c(« id », »price », »room_type », »accommodates »)]

RBASE Fusion de tables (13 minutes)

  # empilement des trois catégories de logement # on ne garde que les 21 premières colonnes # (celles qui viennent de l’import) # pour exclure les ajouts faits dans les exemples précédents logements <- rbind(flats[,1:21], houses[,1:21], other[,1:21]) str(logements) # quels appartements du quartier Bourse sont dispos le 15/08/2016 ? # on commence par extraire les données pertinentes bourse <- flats[which(flats$neighbourhood_cleansed == « Bourse »),] quinze_aout <- calendar[which(calendar$date2 == « 2016-08-15″),] # croisement (jointure interne par défaut) apparts_bourse_dispos_08_15 <- merge(bourse, quinze_aout, by.x= »id », by.y= »listing_id ») […]

RBASE Formules conditionnelles (6 minutes)

  # construction de tranches # plus compliqué que cut s’il y a plus de 2 catégories # mais on peut intégrer des conditions plus complexes houses$categ_prix <- ifelse(houses$price/houses$accommodates > 40, « cher », « acceptable ») houses[1:10,c(« price », »accommodates », »categ_prix »)] # tri parmi les codes postaux : sont corrects ceux qui # commencent par « 750 » suivi d’exactement 2 chiffres et rien d’autre houses$valid_zipcode <- ifelse(grepl(« ^750\\d{2}$ », houses$zipcode), « correct », « incorrect ») houses[600:620,c(« zipcode », »valid_zipcode »)]

RBASE Formules (nombres et dates) (8 minutes)

  library(lubridate) # gestion des Dates # conversion texte -> Date houses$debut_loc <- as.Date(houses$host_since) # résultat invisible à l’affichage houses[1:10,c(« host_since », »debut_loc »)] # mais le type est bien modifié str(houses[,c(« host_since », »debut_loc »)]) # extraction de l’année houses$annee_debut_loc <- year(houses$debut_loc) houses[1:10,c(« debut_loc », »annee_debut_loc »)] # calcul d’ancienneté par rapport à aujourd’hui houses$anciennete_loc <- (today()-houses$debut_loc)/dyears(1) houses[1:10, c(« anciennete_loc », « host_since »)] # avec un arrondi à une seule décimale houses$anciennete_loc <- round(houses$anciennete_loc, 1) houses[1:10, c(« anciennete_loc », « host_since »)]

RBASE Formules (texte) (8 minutes)

  library(forcats) # manipulation des facteurs # valeurs d’origine levels(flats$prop_type) # recodage flats$prop_type2 <- fct_recode(flats$prop_type, « Apartment »= »Condominium ») # on a fusionné des valeurs levels(flats$prop_type2) # fusion des modalités sauf les 20 plus fréquentes # (conversion de la variable d’origine incluse) flats$zipcode2 <- fct_lump_n(flats$zipcode, 20) # vérification levels(flats$zipcode2) levels(as.factor(flats$zipcode)) # pour comparer à la version d’origine # les 2 premiers caractères flats$dept <- substr(flats$zipcode,1,2) # vérification levels(as.factor(flats$dept)) # concaténation avec séparateur « – » flats$host <- paste(flats$host_id, flats$host_name, sep= »-« ) # vérification flats$host[1:10] # expressions […]

RBASE Formules (généralités) (8 minutes)

  # types d’origine str(calendar) # conversion texte -> Date calendar$date2 <- as.Date(calendar$date, « %Y-%m-%d ») # vérification str(calendar) # types d’origine str(flats) # conversion texte -> facteur flats$prop_type <- as.factor(flats$property_type) # mise en tranches (conversion numérique -> facteur) flats$tranche_prix <- cut(flats$price, c(-Inf, 50, 75, 100, 125, 150, 200, Inf), dig.lab=10) # vérification str(flats[,c(« property_type », »prop_type », « price », »tranche_prix »)]) # facteurs : levels() permet de voir les valeurs possibles levels(flats$prop_type) levels(flats$tranche_prix) # ça ne fonctionne pas sur un autre type de variable levels(flats$property_type) levels(flats$price)

RBASE Filtres et requêtes (16 minutes)

  # maisons du 14e arrondissement houses[which(houses$zipcode == « 75014 »), »id »] # maisons du 14e arrondissement et sélection de colonnes houses[which(houses$zipcode == « 75014 »), c(« id », »price », »accommodates »)] # maisons du 14e arrondissement # accueillant plus de 4 personnes houses[which(houses$zipcode == « 75014 » & houses$accommodates > 4), c(« id », »price », »accommodates »)] # maisons avec les politiques d’annulation médianes houses[which(houses$cancellation_policy %in% c(« strict », »moderate »)), c(« id », »price », »cancellation_policy »)] # maisons sans note moyenne # mais avec au moins 1 commentaire houses[which(is.na(houses$review_scores_rating) & houses$number_of_reviews > 0), c(« id », »price », »number_of_reviews »)] # maisons dont le loueur a un w dans son […]

RBASE Extraction des données (5 minutes)

  # la deuxième colonne calendar[2] # la deuxième ligne calendar[2,] # la deuxième colonne (c’est plus clair) calendar[,2] # les dix premières lignes calendar[1:10,]

RBASE Organisation des données (5 minutes)

  # type de l’objet flats class(flats) # types des colonnes de flats str(flats) library(tibble) glimpse(flats)

RBASE Imports (15 minutes)

  # répertoire par défaut —- setwd(« c:/olivier/airbnb ») # imports —- houses <- read.delim(« houses.csv », sep = « , », stringsAsFactors = FALSE) flats <- read.delim(« flats.csv », sep = « , », stringsAsFactors = FALSE) library(readxl) # import de classeurs Excel other <- read_excel(« other.xlsx ») calendar <- read.delim(« calendar.csv », sep = « , », stringsAsFactors = FALSE) library(haven) # import de fichiers statistiques listing <- read_sas(« lis.sas7bdat »)

RBASE Prise en main (10 minutes)

Organisation de la leçon (valable pour toutes les pages de ce cours, sauf les exercices et les QCM) 1) Un support Powerpoint à lire (pas de son). Possibilité de le télécharger ou de le passer en plein écran (en bas à droite du diaporama). Pour faire défiler les diapos, il suffit de cliquer dessus. 2) Une vidéo (avec du son) pour revenir sur les exemples du support. Possibilité de plein écran (en bas à droite, juste à côté de VIMEO). […]

Activating Notifications

In the upper menu, go to the Notifications tab, then click on the Activate New Notification button found here. There are two main notification types based on destination: Admin and Student notifications. You can also decide if a notification affects all of the courses or just a specific one. When typing your subject and message, make sure to use the shortcodes found on the right hand side of the page. Additional settings can be found by navigating to the General Options -> Notifications tab. You can also activate the option for Pushover […]

Payment Services

You can find a list of all the payment services by going in the upper menu and clicking on the Payment Services tab. Here you can click on which box you want to set up. If a certain payment is grayed out it means that you must first navigate to the Extensions tab and activate the Payment Integration module from there. Each payment type requires different settings in order for it to work.

Special Settings – Intro

These are very important settings which bring a new level of customization to: Questions, Quizzes, Lessons and Courses. You can access these settings by hovering over an existing item and clicking on Special Settings or when creating / editing one of the above items, at the top of the page and / or on the right hand side menu you have the Special Settings buttons. They are different for each item, to learn more either access their respective pages or head over to the knowledge base […]

Creating a Course

A course is a collection of lessons and quizzes, a quiz is a collection of questions. Before making a course make sure you have everything else created to make things easier for yourself. In the upper menu, go to the Courses tab, then click on the Add new Course button found here. In the upper portion of the page you have a menu with useful links to help you customize your course, for example the Special Settings button. After adding content in the first area, you can […]

Setting up a Quiz

In the upper menu, go to the Quizzes tab, then click on the Add new Quiz button found here. You can add content in the first section, or skip to the Quiz Questions section where you can add existing questions to your quiz. You can click on the + icon, drag and drop and search for specific questions. When you are done editing, simply click on the Publish button found on the right hand side menu. You can also access the Special Settings page where you have some useful options […]

Creating a Question

In the upper menu, go to the Questions tab, then click on the Add new Question button found here. You can type your message here, then you have the option to select which Type of Question it is, you can select one from the drop-down menu. Example: If  you select the type to be Multi Choice, then you can add as many answers as you want by clicking Add new Option, then at the bottom you can add the correct answer. When you are done editing, simply click […]

Adding a new Lesson

In the upper menu, go to the Lessons tab, then click on the Add new Lesson button found here. In the content area you will type in your lesson and once you are ready hit publish! An additional section called Lesson Drip Content can be found below the content area only after activating the Magic Feature: Lesson Drip Content. This will allow you to release content at regular intervals by creating a release schedule for your content.