logo

SASBASE Environnement (17 minutes)

SASBASE Environnement (17 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). […]

SASBASE Correction – EXERCICE N°9

ODS EXCEL FILE= »c:/temp/airbnb.xlsx » ; PROC MEANS DATA=airbnb.flats (WHERE=(UPCASE(room_type)=: »ENTIRE »)) MEAN MEDIAN ; VAR price ; CLASS neighbourhood_cleansed accommodates ; WAYS 1 2 ; RUN ; ODS EXCEL CLOSE ;

SASBASE Correction – EXERCICE N°8

PROC IMPORT DATAFILE= »c:/olivier/airbnb/houses.csv » OUT=work.houses DBMS=DLM REPLACE ; DELIMITER= », » ; RUN ; PROC IMPORT DATAFILE= »c:/olivier/airbnb/other.xlsx » OUT=work.other DBMS=XLSX REPLACE ; RUN ; PROC CONTENTS DATA=work.houses ; RUN ; PROC CONTENTS DATA=work.houses ; RUN ; PROC CONTENTS DATA=airbnb.flats ; RUN ; /* les dates (HOST_SINCE, LAST_SCRAPED) ne sont pas importées comme des dates mais comme des textes */

SASBASE Correction – EXERCICE N°7

PROC SORT DATA=airbnb.flats (WHERE=(UPCASE(neighbourhood_cleansed)= »BOURSE »)) OUT=work.bourse ; BY id ; RUN ; /* on renomme la variable ID en LISTING_ID pour harmoniser les noms */ DATA work.bourse ; SET work.bourse ; listing_id = id ; RUN ; PROC SORT DATA=airbnb.calendar (WHERE=(date = « 15AUG2016″D)) OUT=work.quinze_aout ; BY listing_id ; RUN ; DATA work.dispos_quinze_aout ; MERGE work.bourse (IN=dans_bourse) work.quinze_aout (IN=dispo) ; BY listing_id ; IF dans_bourse AND dispo THEN OUTPUT ; RUN ;

SASBASE Correction – EXERCICE N°6

DATA work.flats ; SET airbnb.flats ; ATTRIB anciennete_hote LABEL= »Nombre d’années depuis l’inscription du loueur » LENGTH=3 dept LABEL= »Département » LENGTH=$ 2 categ_prix LABEL= »Catégorie en fonction du prix par personne » LENGTH=$ 10 ; anciennete_hote = FLOOR(YRDIF(host_since, TODAY(), « ACT/ACT »)) ; dept = SUBSTR(zipcode,1,2) ; categ_prix = IFC(price/accommodates > 40, « CHER », « ACCEPTABLE ») ; RUN ;

SASBASE Correction – EXERCICE N°5

PROC FORMAT ; VALUE accueil 4-HIGH = « 4 et + » ; RUN ; PROC MEANS DATA=airbnb.flats MEAN MEDIAN MAXDEC=1 ; VAR price ; CLASS accommodates neighbourhood_cleansed ; FORMAT accommodates accueil. ; RUN ;

SASBASE Correction – EXERCICE N°4

PROC FREQ DATA=airbnb.flats (WHERE=(accommodates

SASBASE Correction – EXERCICE N°3

PROC FORMAT ; VALUE prix LOW –< 50 = "Moins de 50 € par nuit" 50 -< 80 = "50 à 80 € par nuit" 80 -< 120 = "80 à 120 € par nuit" 120 -< 200 = "120 à 200 € par nuit" 200 - HIGH = "200 € et plus par nuit" ; RUN ;

SASBASE Correction – EXERCICE N°2

PROC SORT DATA=airbnb.flats OUT=work.appartements ; BY DESCENDING price DESCENDING accommodates ; RUN ; /* liste des loueurs proposant plusieurs appartements */ /* Etape 1 : éliminer les singletons (un seul appartement loué) */ PROC SORT DATA=airbnb.flats OUT=work.plusieurs_appartements NOUNIQUEKEY ; BY host_id ; RUN ; /* Etape 2 : dédoublonner le résultat précédent pour n’avoir qu’une ligne par propriétaire */ PROC SORT DATA=work.plusieurs_appartements OUT=work.loueurs_plusieurs_appartements NODUPKEY ; BY host_id ; RUN ;

SASBASE Correction – EXERCICE N°1

LIBNAME airbnb « c:/olivier/airbnb » ; PROC PRINT DATA=airbnb.flats (WHERE=(zipcode = « 75014 » AND accommodates > 4)) ; RUN ;

SASBASE EXERCICE N°9

Les descriptifs des fichiers sont ici. Créer un classeur Excel contenant les prix moyens et médian selon le quartier (NEIGHBOURHOOD_CLEANSED) et selon le nombre de personnes pouvant être accueillies (ACCOMMODATES) pour les appartements loués intégralement (ROOM_TYPE vaut « Entire home/apt »). On exportera trois tableaux : un par quartier, un par capacité d’accueil et un croisant les deux critères.

SASBASE EXERCICE N°8

Les descriptifs des fichiers sont ici. Importer les fichiers HOUSES.CSV (séparateur virgule) et OTHER.XLSX dans deux tables SAS. Comparez leurs colonnes avec celles de la table FLATS (avec des procédures CONTENTS) : est-ce que les types des colonnes sont tous identiques ?

SASBASE EXERCICE N°7

Les descriptifs des fichiers sont ici. Croiser les tables FLATS et CALENDAR pour ne retenir que les logements du quartier Bourse (colonne NEIGHBOURHOOD_CLEANSED) disponibles le 15 août 2016 (variable DATE dans CALENDAR).

SASBASE EXERCICE N°6

Les descriptifs des fichiers sont ici. Ajouter aux données concernant les appartements trois nouvelles colonnes : ANCIENNETE_HOTE est le nombre d’années (arrondi à l’entier inférieur) depuis lequel la personne proposant ce bien est inscrite sur Airbnb (la date est dans HOST_SINCE). Quelques erreurs seront produites dans le Journal pour les 45 observations où HOST_SINCE n’est pas renseigné DEPT est le numéro de département extrait du code postal ZIPCODE, ce sont les 2 premiers caractères CATEG_PRIX a deux modalités, « CHER » et […]

SASBASE EXERCICE N°5

Les descriptifs des fichiers sont ici. Calculez les prix moyen et médian selon le nombre de personnes accueillies (faire une tranche pour 4 et plus, les autres valeurs telles quelles) et le quartier (NEIGHBOURHOOD_CLEANSED).

SASBASE EXERCICE N°4

Les descriptifs des fichiers sont ici. Pour les logements pouvant accueillir au maximum 4 personnes (colonne ACCOMMODATES) quelle est la répartition selon le nombre de chambres (BEDROOMS) ? Par ailleurs, indiquez la répartition (fréquence et pourcentage au sein de chaque tranche de prix) des appartements selon la tranche de prix (utilisez le format créé à l’exercice 3) et le type de location (ROOM_TYPE) ?

SASBASE EXERCICE N°3

Les descriptifs des fichiers sont ici. Construire un format qui affiche les prix sous forme de tranches : moins de 50€ par nuit, de 50 à 80€ (exclus) par nuit, de 80 à 120€ (exclus) par nuit, de 120 à 200€ (exclus) par nuit et enfin 200€ et plus par nuit.

SASBASE EXERCICE N°2

Les descriptifs des fichiers sont ici. Trier par prix (PRICE) décroissant les appartements ; ceux loués au même prix seront par nombre décroissant de personnes accueillies (ACCOMMODATES). Dans un 2e code, faire la liste des loueurs (identifiés par HOST_ID) qui proposent plusieurs appartements. Ils sont 3 130. (On pourra procéder en 2 étapes : d’abord éliminer les loueurs qui n’apparaissent que pour un seul appartement, puis à partir de ce premier résultat, ne garder qu’une ligne par loueur.)

SASBASE EXERCICE N°1

Les descriptifs des fichiers sont ici. Associer une bibliothèque avec le répertoire de vos données Airbnb. Vous devez y voir deux tables : FLATS (les appartements à louer) et CALENDAR (les disponibilités). Lister les appartements du 14e arrondissement de Paris (code postal 75014 dans la colonne ZIPCODE) pouvant accueillir plus de 4 personnes (colonne ACCOMMODATES). Le résultat compte 201 lignes.

RPLUS Correction – EXERCICE N°12

# packages utiles —- library(openxlsx) # mise à jour de classeurs Excel library(tidyverse) # pour le bon fonctionnement de crosstab # données à insérer —- donnees % filter(an %in% c(2010,2016)) %>% crosstab(rows= »Discipline », cols= »an », var= »LIT ») # récupération du classeur modèle et mise à jour —- classeur

RPLUS Correction – EXERCICE N°11

# packages utiles —- library(officer) # création et modification de documents Word et PPT library(flextable) # tableaux library(lubridate) # pour la fonction today() # préparation des tableaux —- tab1 % filter(an %in% 2010:2016 & Discipline == « Psychiatrie ») %>% crosstab(rows= »reg », cols= »an », var= »LIT ») %>% rename(« Région (code INSEE) »= »reg ») %>% flextable()%>% add_header(« Région (code INSEE) »= »Région (code INSEE) », « 2010 »= »Année », « 2011 »= »Année », « 2012 »= »Année », « 2013 »= »Année », « 2014 »= »Année », « 2015 »= »Année », « 2016 »= »Année ») %>% merge_v(part= »header ») %>% merge_h(part= »header ») %>% theme_box() %>% bg(part= »header », bg=gray(0.8)) %>% bg(j=1, bg=gray(0.8)) %>% bold(j=1) tab2 % filter(an %in% 2010:2016 & Discipline […]

RPLUS Correction – EXERCICE N°10

library(flextable) # mise en forme de tableaux statistiques capa %>% filter(an %in% 2014:2016 & Discipline != « Hospitalisation à domicile ») %>% crosstab(rows= »Discipline », cols= »an », var= »LIT ») %>% flextable() %>% add_header(« Discipline »= »Discipline », « 2014 »= »Année », « 2015 »= »Année », « 2016 »= »Année ») %>% merge_v(part= »header ») %>% merge_h(part= »header ») %>% theme_box() %>% bg(part= »header », bg=gray(0.8)) %>% bg(j=1, bg=gray(0.8)) %>% bold(j=1)

RPLUS Correction – EXERCICE N°9

# essai sans paramétrage —- capa %>% group_by(an, Discipline) %>% summarise(x=sum(LIT, na.rm=TRUE)) %>% ungroup() %>% pivot_wider(id_cols=Discipline, names_from=an, values_from=x) # avec des paramètres mais pas encore de fonction —- df % rename(« x » := {{var}}, « r » := {{rows}}, « c » := {{cols}}) %>% pivot_wider(id_cols=r, names_from=c, values_from=x) %>% rename({{rows}} := « r ») rm(df, rows, cols, var) # on supprime les paramètres par prudence # on transforme en fonction —- crosstab % # pour simplifier les manipulations futures, on donne des noms aux variables # de […]

RPLUS Correction – EXERCICE N°8

etab_categ

RPLUS Correction – EXERCICE N°7

etab2 % mutate( across( where( ~ length(unique(.x)) < 120 & is.character(.x) ), as.factor ) )

RPLUS Correction – EXERCICE N°5

dept <- « 19 » annee <- 2010 capa %>% filter(an=={{annee}} & substr(fi,1,2) == {{dept}}) %>% group_by(fi) %>% summarise(capacite_totale = sum(LIT, na.rm=TRUE)) %>% ungroup() %>% filter(capacite_totale > 0)

RPLUS NEWCorrection – EXERCICE N°9

for (categorie in unique(etab$lib.agregat)){ write.table(etab %>% filter(lib.agregat == {{categorie}}), file=paste0(« c:/temp/ », toupper(categorie), « .csv »), sep= »; », row.names = FALSE) }

RPLUS Correction – EXERCICE N°4

capa %>% filter(AN == 2010 & substr(FI,1,2) == « 17 ») %>% group_by(FI) %>% summarise(capacite_totale = sum(LIT, na.rm=TRUE)) %>% ungroup() %>% filter(capacite_totale > 0)

RPLUS Correction – EXERCICE N°3

sae2016_etab <- capa %>% filter(AN == 2016) %>% left_join(etab, by=c(« FI »= »finess »))

RPLUS Correction – EXERCICE N°2

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

RPLUS Correction – EXERCICE N°1

library(dplyr) cliniques_2010 <- capa %>% filter(AN == 2010 & grepl(« clinique », tolower(RS))) %>% select(FI, RS, DEP, DISCIPLINE, LIT)

RPLUS EXERCICE N°7

Les descriptifs des fichiers sont ici. Faites une nouvelle version du data.frame etab (etab2) dans laquelle toutes les variables de type caractère avec moins de 120 valeurs distinctes sont transformées en facteurs.

RPLUS EXERCICE N°12

Les descriptifs des fichiers sont ici. Mettre à jour le classeur Excel disponible ici avec les nombres de places d’hospitalisation complète selon l’année (2010 et 2016) et la discipline ; la discipline est indiquée dans la colonne C, les places 2010 en colonne D et 2016 en colonne E.

RPLUS EXERCICE N°11

Les descriptifs des fichiers sont ici. Mettre à jour le document Word disponible ici avec deux tableaux dérivés de ceux de l’exercice 10 et la date de production de la note. Pour rappel les filtres sont Discipline== »Psychiatrie » et an %in% 2010:2016 ; la variable à résumer dans le tableau 1 est LIT et dans le tableau 2, PLA. La région est indiquée dans la colonne reg, ce sont des codes de la nomenclature INSEE.

RPLUS EXERCICE N°10

Les descriptifs des fichiers sont ici. A partir du résultat de capa %>% filter(an %in% 2014:2016 & Discipline != « Hospitalisation à domicile ») %>% crosstab(rows= »Discipline », cols= »an », var= »LIT ») produire le flextable ci-dessous.   La fonction crosstab a été créée lors de l’exercice 9. Si besoin voici son code : crosstab <- function(df, rows, cols, var){ res <- df %>% group_by(.[{{rows}}], .[{{cols}}]) %>% # pour simplifier les manipulations futures, on donne des noms aux variables # de groupement, ici r et c summarise(across({{var}}, […]

RPLUS EXERCICE N°9

Les descriptifs des fichiers sont ici. Construire une fonction crosstab avec les paramètres suivants : df : le data.frame contenant les données rows : indique le nom entre guillemets d’une variable définissant les lignes du tableau cols : indique le nom entre guillemets d’une variable définissant les colonnes du tableau var : indique le nom entre guillemets d’une variable dont la somme remplit les cases du tableau Le but de cette fonction est de construire un tableau croisé (avec la […]

RPLUS EXERCICE N°8

Les descriptifs des fichiers sont ici. Comme dans l’exercice 6, on veut exporter dans autant de fichiers CSV à séparateur point-virgule (avec la fonction write.table) les établissements selon leur catégorie (lib.agregat). Chaque fichier portera le nom de la catégorie en majuscule, par exemple TRANSFUSION SANGUINE.CSV. Réaliser cela avec une fonction de package {purrr}, en ayant au préalable « éclaté » le data.frame etab avec la fonction base::split.

RPLUS NEWEXERCICE N°9

Les descriptifs des fichiers sont ici. Exporter dans autant de fichiers CSV à séparateur point-virgule (avec la fonction write.table) les établissements (etab) selon leur catégorie (colonne lib.agregat). Chaque fichier portera le nom de la catégorie en majuscule, par exemple TRANSFUSION SANGUINE.CSV.

RPLUS EXERCICE N°5

Les descriptifs des fichiers sont ici. Paramétrer le département (texte sur 2 caractères avec un zéro à gauche) et l’année (nombre sur 4 chiffres) pour calculer pour un département et une année donnés le total de lits. Exclure du résultat les établissements dont la somme des lits vaut zéro.

RPLUS EXERCICE N°4

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) et on exclura du résultat les établissements dont la somme des lits vaut zéro.

RPLUS EXERCICE N°3

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. Seul les établissements enquêtés (c’est à dire présents dans la table capa) nous intéressent. On obtient 6 440 lignes.

RPLUS EXERCICE N°2

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 avec la fonction as.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. Indice : aidez-vous des fonctions de {lubridate}, en particulier today() et dyears(1). Remarque : les dates de l’objet etab sont sous la […]

RPLUS EXERCICE N°1

Les descriptifs des fichiers sont ici.   Créer un objet cliniques_2010 des établissements enquêtés (capa) pour l’année 2010 dont le nom (colonne RS) contient le mot « clinique » ; on ne conservera que les colonnes FI, RS, DEP, DISCIPLINE et LIT. On obtient 1 468 observations et 5 variables.

SAS2R Correction – EXERCICE N°11

count_distinct

SAS2R Correction – EXERCICE N°10

mag

SAS2R Correction – EXERCICE N°9

library(openxlsx) magasins$dept

SAS2R Correction – EXERCICE N°8

trans2

SAS2R Correction – EXERCICE N°7

library(lubridate) transactions$annee

SAS2R Correction – EXERCICE N°6

library(readxl) magasins

SAS2R Correction – EXERCICE N°1

library(haven) transactions

SAS2R Correction – EXERCICE N°5

library(dplyr) transactions %>% filter(date_trans >= « 2015-01-01 » & date_trans % group_by(id_item) %>% summarise(ca_tot = sum(ca, na.rm=TRUE)) %>% ungroup() %>% arrange(desc(ca_tot)) %>% slice(1:10)

SAS2R Correction – EXERCICE N°4

nb_trans_par_magasin

SAS2R Correction – EXERCICE N°3

ca_mag <- aggregate(ca ~ id_mag, transactions, sum) ca_mag[which(ca_mag$ca > 2000000),]

SAS2R Correction – EXERCICE N°2

Q2_2015 = « 2015-04-01 » & transactions$date_trans 0),]

SAS2R EXERCICE N°11

Les descriptifs des fichiers sont ici.   Créer deux fonctions ayant un vecteur pour argument. La première (count_distinct) compte le nombre de valeurs distinctes du vecteur ; la seconde (nmiss) compte les valeurs manquantes dans le vecteur. Tests : count_distinct(magasins$dept) nmiss(transactions$ca / transactions$quantite)

SAS2R EXERCICE N°10

Les descriptifs des fichiers sont ici.   Paramétrer le numéro du magasin (un ou plusieurs) et calculer le CA total par magasin à partir des transactions. Valeurs pour tester : magasin n° 3 ; puis magasins n° 111 à 115.

SAS2R EXERCICE N°9

Les descriptifs des fichiers sont ici.   Créer un classeur Excel à partir des magasins avec un onglet par département (extrait du numéro de commune numCom) et dans chaque onglet, la liste des magasins de ce département.

SAS2R EXERCICE N°8

Les descriptifs des fichiers sont ici.   Ajouter aux transactions les informations sur les produits puis les rayons. Calculer ensuite un total du CA par libellé du rayon.

SAS2R EXERCICE N°7

Les descriptifs des fichiers sont ici.   Ajouter aux données transactions des colonnes mois et annee dérivées de date_trans.

SAS2R EXERCICE N°6

Les descriptifs des fichiers sont ici.   Importer les fichiers magasins.xlsx, rayons.xlsx et produits.tab (ce dernier est un fichier à séparateur tabulation).

SAS2R EXERCICE N°5

Les descriptifs des fichiers sont ici.   A partir des données transactions, construire la liste des 10 items les plus générateurs de chiffre d’affaire sur l’année 2015.

SAS2R EXERCICE N°4

Les descriptifs des fichiers sont ici.   Compter le nombre de transactions par magasin (colonne id_mag), ne retenir que ceux qui représentent au moins 1% du total.

SAS2R EXERCICE N°3

Les descriptifs des fichiers sont ici. Calculer le chiffre d’affaires (colonne ca) total par magasin (colonne id_mag) à partir des transactions. Ne retenir que les magasins où le CA total dépasse 2 millions d’euros (il y en a 14).

SAS2R EXERCICE N°2

Les descriptifs des fichiers sont ici.   Créer un objet Q2_2015 des transactions réalisées au 2e trimestre 2015 (colonne date_trans) en excluant les lignes avec une quantité nulle. Aide : pour indiquer une constante date dans un filtre, on l’écrit entre guillemets sous la forme année-mois-jour, par exemple « 2020-12-31 » pour le 31 décembre 2020.

SAS2R EXERCICE N°1

Les descriptifs des fichiers sont ici.   Créer un objet transactions à partir de la table SAS transactions.sas7bdat ; la table est volumineuse (8 variables mais… presque 22 millions d’observations !) donc cet import peut prendre du temps. Si jamais R ne peut pas importer la table faute de place, utiliser transactions_small.sas7bdat (seulement 219 389 observations).

données Conso Présentation des données Conso

Les données concernent des achats par des clients ayant une carte de fidélité dans une chaîne fictive de moyennes et grandes surfaces. Elles sont regroupées en quatre jeux de données : le principal est transactions (une table SAS de quasiment 22 millions d’observations) ; on peut utiliser à la place transactions_small qui est un échantillon à 1% (donc seulement 220 000 lignes environ). Les autres jeux de données sont la liste des magasins (format Excel) avec leur surface, la présence […]

SAS2R RETAIN (13 minutes)

  library(dplyr) # requêtes en pseudo-SQL # les 5 maisons les plus chères par quartier houses %>% arrange(desc(price)) %>% group_by(neighbourhood_cleansed) %>% mutate(rang_prix = row_number()) %>% select(neighbourhood_cleansed, rang_prix, price, id) %>% slice(1:5) %>% ungroup() # calcul de fréquence et pourcentage cumulé houses %>% group_by(prix = cut(price, breaks=c(-Inf, seq(50,300,by=50), Inf))) %>% summarise(N=n()) %>% ungroup() %>% mutate(Percent=N/nrow(houses)*100, Cum_N=cumsum(N), Cum_Percent=cumsum(Percent)) %>% select(prix, N, Cum_N, everything())

SAS2R ODS HTML (15 minutes)

  — title: « Exemple Markdown » author: « Olivier » date: « 26/07/2020 » output: html_document — « `{r setup, include=FALSE} knitr::opts_chunk$set(echo = FALSE) load(« c:/olivier/airbnb/airbnb.Rdata ») load(« c:/temp/flextbl.Rdata ») library(flextable) nbApparts

SAS2R ODS RTF (10 minutes)

  # packages —- library(officer) # création de doc Word ou PowerPoint # création du document Word vierge word % body_add_par(« Logements Airbnb sur Paris », style= »heading 1″) %>% body_add_par( » « ) %>% body_add_fpar(fpar(« Le tableau ci-dessous résume le nombre d’appartements « , « loués par Airbnb à la date du 03/07/2016. « , ftext(prettyNum(nrow(flats), big.mark= »\uA0″), shortcuts$fp_bold()),  » appartements sont décrits. »)) %>% body_add_par( » « ) %>% body_add_par( » « ) %>% body_add_par(« Tableau 1 – Appartements selon le prix à la nuit et la capacité d’accueil ») %>% body_add_flextable(tableau_fxt) %>% print(target= »c:/temp/airbnb.docx »)

SAS2R ODS EXCEL (12 minutes)

  library(openxlsx) # export Excel # classeur vide classeur % filter(neighbourhood_cleansed == {{onglet}}) %>% select(-neighbourhood_cleansed)) } # enregistrement du classeur saveWorkbook(classeur, file= »c:/temp/airbnb.xlsx », overwrite = TRUE)

SAS2R Macro-variables (4 minutes)

  library(dplyr) # requêtes en pseudo-SQL limite % filter(price < {{limite}}) %>% nrow()

SAS2R Macro-programmes (21minutes)

  # mettre en majuscules les noms de colonnes d’un data.frame noms_en_majuscules

SAS2R Combiner des tables (10 minutes)

  # empilement des trois catégories de logement logements

SAS2R Créer des variables (22 minutes)

  library(stringr) # fonctions pour les textes library(forcats) # fonctions pour les facteurs library(lubridate) # fonctions pour les Dates houses2

SAS2R Proc TABULATE (20 minutes)

  # packages utiles —- library(tidyverse) # requêtes avec {dplyr} et %>% avec {magrittr} library(flextable) # tableaux statistiques mis en forme # calcul des statistiques —- tableau % mutate(Prix=cut(price, breaks=c(-Inf,50,100,200,Inf)), Capacité=ifelse(accommodates > 4, « 5 et plus », accommodates)) %>% select(Prix, Capacité) # habillage des tranches de prix levels(tableau$Prix) % pivot_wider(id_cols = Prix, values_from = Capacité, names_from = Capacité, values_fn = length, names_sort = TRUE) # construction du flextable tableau_fxt

SAS2R Proc IMPORT et proc EXPORT (11 minutes)

   library(readxl) # import de classeurs Excel library(openxlsx) # export de classeurs Excel # imports —- maisons <- read.delim(« c:/olivier/airbnb/houses.csv », sep= », ») autres <- read_excel(« c:/olivier/airbnb/other.xlsx ») # exports —- write.table(houses, « c:/temp/houses.txt », sep= »\t ») tmp <- createWorkbook() addWorksheet(tmp, « Maisons ») writeData(tmp, « Maisons », houses) saveWorkbook(tmp, file= »c:/temp/houses.xlsx », overwrite=TRUE) Pour l’import d’un fichier texte, il peut arriver des problèmes avec l’encodage du fichier, c’est-à-dire la manière dont sont stockés informatiquement les caractères. On remarque de tels problèmes au niveau des caractères spéciaux. S’ils sont bien restitués, l’encodage a […]

SAS2R Proc SQL (16 minutes)

  library(dplyr) # requêtes en pseudo-SQL # maisons du 14e arrondissement et sélection de colonnes houses %>% filter(zipcode == « 75014 ») %>% select(id,price,accommodates) # prix moyen par quartier flats %>% group_by(neighbourhood_cleansed) %>% summarise(mean(price)) %>% ungroup() # ratio prix/nombre de personnes # et quartiers de Paris houses % mutate(prix_par_personne = price/accommodates, quartier = case_when( neighbourhood_cleansed %in% c(« Louvre », »Hôtel-de-Ville », « Temple », »Bourse ») ~ « centre », neighbourhood_cleansed %in% c(« Observatoire », »Vaugirard », « Panthéon », »Luxembourg », »Passy ») ~ « sud-ouest », neighbourhood_cleansed %in% c(« Palais-Bourbon », »Élysée », « Opéra », »Batignolles-Monceau », « Batignolles-Monceau ») ~ « nord-ouest », TRUE ~ « est » )) table(houses$quartier) # quels appartements du […]

SAS2R Proc TRANSPOSE (13 minutes)

  plus d’explications ici. library(tidyr) # fonctions pivot_longer et pivot_wider houses2

SAS2R Proc SORT (16 minutes)

  library(dplyr) # requêtes en pseudo-SQL library(gdata) # fonction duplicated2 # tris —- appartements

SAS2R Proc FREQ (8 minutes)

  library(questionr) # tableaux de fréquences # effectifs (résultat=vecteur) table(houses$room_type) # % prop.table(table(houses$room_type))*100 # avec total addmargins(table(houses$room_type)) # % avec total addmargins(prop.table(table(houses$room_type)))*100 # tout en une seule fonction (résultat=data.frame) freq(houses$room_type, cum=TRUE, valid=FALSE, total=TRUE) # tableaux croisés table(houses$room_type, houses$property_type) # % avec totaux (fonctions de {questionr}) cprop(table(houses$room_type, houses$property_type)) rprop(table(houses$room_type, houses$property_type)) prop(table(houses$room_type, houses$property_type))

SAS2R Proc MEANS (20 minutes)

  library(dplyr) # requêtes en pseudo-SQL library(dlookr) # stats descriptives # statistiques « standard » summary(houses) # concentré sur une colonne summary(houses$price) # concentré sur quelques colonnes houses[,c(« price », »beds », »accommodates », »review_scores_rating »)] %>% summary() # statistiques spécifiques mean(houses$price) mean(houses$review_scores_rating) mean(houses$review_scores_rating, na.rm=TRUE) # statistiques par groupe aggregate(price ~ neighbourhood_cleansed, houses, mean) aggregate(price ~ room_type + property_type, houses, mean) aggregate(price ~ room_type + property_type, houses, function(x){c(moy=mean(x), N=length(x), stddev=sd(x))}) houses %>% group_by(room_type) %>% describe() houses %>% group_by(room_type) %>% describe() %>% as.data.frame() houses %>% group_by(room_type) %>% describe(price) %>% as.data.frame() houses […]

SAS2R Proc PRINT (24 minutes)

  library(tibble) # pour la fonction as_tibble flats[1:5,] print(flats[1:5,]) as_tibble(flats) # appartements à moins de 100 € / nuit as_tibble(flats[which(flats$price < 100),]) # écrit autrement flats[which(flats$price < 100),] %>% as_tibble() # 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 »)), […]

SAS2R Proc CONTENTS (6 minutes)

  library(tibble) # pour la fonction glimpse colnames(flats) sapply(flats, class) glimpse(flats) str(flats)

SAS2R Style de programmation (9 minutes)

 

SAS2R Récupérer des tables SAS et sauvegarder (8 minutes)

  library(haven) # import de tables SAS logements

SAS2R Organisation des données (13 minutes)

  # chargement des données archivées load(« c:/olivier/airbnb/airbnb.Rdata ») # sélectionner une colonne houses[,1] # par son numéro houses[12] # par son numéro houses$price # par son nom houses[, »beds »] # sélectionner plusieurs colonnes houses[,c(« id », »beds », »price »)] # sélectionner une ligne houses[3,] # sélectionner plusieurs lignes houses[1:10, ] # sélectionner lignes et colonnes houses[1:5, c(« id », »accommodates », »price »)]

SAS2R Le langage R (11 minutes)

 

SAS2R L’interface RStudio (20 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). […]

RPLUS DEPP Correction – EXERCICE N°12

# packages utiles —- library(openxlsx) # mise à jour de classeurs Excel library(tidyverse) # pour le bon fonctionnement de crosstab # données à insérer —- nb_agents

RPLUS DEPP Correction – EXERCICE N°11

# fonction pour mise en forme des tableaux —- tableau % crosstab(…) %>% flextable() %>% add_header(« NATURE_UAI »= »NATURE_UAI », « PR »= »Secteur », « PU »= »Secteur ») %>% merge_v(part= »header ») %>% merge_h(part= »header ») %>% theme_box() %>% bg(part= »header », bg=gray(0.8)) %>% bg(j=1, bg=gray(0.8)) %>% bold(j=1) } # packages utiles —- library(flextable) # mise en forme des tableaux library(officer) # mise à jour d’un document Word library(lubridate) # pour la fonction today() # création des tableaux —- tab1 % filter(NATURE_UAI < 150) %>% tableau(rows= »NATURE_UAI », cols= »SECTEUR_PUBLIC_PRIVE ») tab2 % filter(between(NATURE_UAI,151,199)) %>% tableau(rows= »NATURE_UAI », cols= »SECTEUR_PUBLIC_PRIVE ») tab3 % filter(NATURE_UAI […]

RPLUS DEPP Correction – EXERCICE N°10

library(flextable) # mise en forme de tableaux statistiques etab %>% crosstab(rows= »NATURE_UAI », cols= »SECTEUR_PUBLIC_PRIVE ») %>% flextable() %>% add_header(« NATURE_UAI »= »NATURE_UAI », « PR »= »Secteur », « PU »= »Secteur ») %>% merge_v(part= »header ») %>% merge_h(part= »header ») %>% theme_box() %>% bg(part= »header », bg=gray(0.8)) %>% bg(j=1, bg=gray(0.8)) %>% bold(j=1))

RPLUS DEPP Correction – EXERCICE N°9

# essai sans paramétrage —- agents %>% group_by(acad, sexe) %>% summarise(n=n()) %>% ungroup() %>% pivot_wider(id_cols=acad, names_from=sexe, values_from=n) # avec des paramètres mais pas encore de fonction —- df % ungroup() %>% pivot_wider(id_cols=r, names_from=c, values_from=n) %>% rename({{rows}} := r) # on renomme juste la 1e colonne rm(df, rows, cols) # on supprime les paramètres par prudence # on transforme en fonction (on ne gère pas les % pour le moment) —- crosstab % # pour simplifier les manipulations futures, on donne […]

RPLUS DEPP Correction – EXERCICE N°8

agents_acad

RPLUS DEPP Correction – EXERCICE N°7

etab2 % mutate( across( where( ~ length(unique(.x)) < 50 & is.character(.x) ), as.factor ) )

RPLUS DEPP Correction – EXERCICE N°6

for (academie in unique(agents$acad)){ write.table(agents %>% filter(acad == {{academie}}), file=paste0(« c:/temp/ »,academie, ».csv »), sep= »; », row.names = FALSE) }

RPLUS DEPP Correction – EXERCICE N°5

dept % filter(substr(etab,1,3)=={{dept}} & ! is.na(sexe)) %>% group_by(nature, sexe) %>% summarise(nb_agents = n(), age_moyen = mean(age, na.rm=TRUE)) %>% ungroup()

RPLUS DEPP Correction – EXERCICE N°4

agents %>% filter(sexe == 2) %>% group_by(acad) %>% summarise(age_moyen = mean(age, na.rm=TRUE)) %>% ungroup() %>% arrange(age_moyen) %>% slice(1:3)

RPLUS DEPP Correction – EXERCICE N°3

lp_la_rochelle % filter(nature == 320) %>% inner_join(etab %>% filter(NATURE_UAI == 320 & COMMUNE == « 17300 »), by=c(« etab »= »NUMERO_UAI »))

RPLUS DEPP Correction – EXERCICE N°2

library(lubridate) # fonctions pour gérer les Dates etab % mutate(ouverture = as.Date(DATE_OUVERTURE), anciennete = ifelse(is.na(DATE_FERMETURE), (today()-ouverture)/dyears(1), NA))

RPLUS DEPP Correction – EXERCICE N°1

lp_antilles % filter(tolower(acad) %in% c(« guadeloupe », »martinique ») & nature == 320) %>% select(Clef, etab, sexe, age)