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 »)
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 »)
# 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 […]
# 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)
# empilement des trois catégories de logement logements % slice(1:10) %>% select(id,price.y,dispo)
# 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 […]
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)
# 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= »-« )) # […]
library(tidyverse) # requêtes etc. # types d’origine str(calendar) # conversion texte -> Date calendar % mutate(date2 = as.Date(date, « %Y-%m-%d »)) # vérification str(calendar) # types d’origine str(flats %>% select(property_type, price)) # conversion texte -> facteur flats % mutate(prop_type = as.factor(property_type), # mise en tranches (conversion numérique -> facteur) tranche_prix = cut(price, c(-Inf, 50, 75, 100, 125, 150, 200, Inf), dig.lab=10) ) # vérification str(flats %>% select(property_type,prop_type, price,tranche_prix)) # facteurs : levels() permet de voir les valeurs possibles levels(flats$prop_type) levels(flats$tranche_prix) […]
# 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) […]
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 […]
# type de l’objet flats class(flats) # types des colonnes de flats str(flats) library(tibble) glimpse(flats)
# sauvegarde de plusieurs objets en un fichier save(flats, houses, other, calendar, file= »donnees_airBnB.Rdata ») # sauvegarde individuelle saveRDS(flats, file= »appartements.RDS ») # restauration des objets # pour un RDS on doit affecter mais pas pour un Rdata load(« donnees_airBnB.Rdata ») apparts
IMPORTANT : dans l’environnement Banque de France il faut ajouter à tous les imports avec la fonction read.delim l’option fileEncoding= »WINDOWS-1252″. Le code ci-dessous montre comment l’intégrer. # répertoire par défaut —- setwd(« c:/olivier/airbnb ») # imports —- houses <- read.delim(« houses.csv », sep = « , », stringsAsFactors = FALSE, fileEncoding= »WINDOWS-1252″ ) flats <- read.delim(« flats.csv », sep = « , », stringsAsFactors = FALSE, fileEncoding= »WINDOWS-1252″ ) library(readxl) # import de classeurs Excel other <- read_excel(« other.xlsx ») calendar <- read.delim(« calendar.csv », sep = « , », stringsAsFactors = FALSE) library(haven) # import de fichiers […]
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). […]
ODS EXCEL FILE= »%SYSFUNC(PATHNAME(work))/bilans2005.xlsx » ; PROC MEANS DATA=exercice.bilans_2005 (WHERE=(d26 IN (« EA », »EB », »EC »))) MEAN MEDIAN ; VAR fj ; CLASS d26 fk ; FORMAT fk exporte. ; WAYS 1 2 ; RUN ; ODS EXCEL CLOSE ;
PROC IMPORT DATAFILE= »%SYSFUNC(PATHNAME(exercice))/bilans_2004.xlsx » OUT=work.bilans_2004 DBMS=EXCEL REPLACE ; RUN ; PROC CONTENTS DATA=work.bilans_2004 ; RUN ;
PROC SORT DATA=exercice.bilans_2005 (WHERE=(DI > 0)) OUT=work.benef ; BY d1 ; RUN ; PROC SORT DATA=exercice.siren (RENAME=(siren=d1) WHERE=(commune IN: (« 67″, »68 »))) OUT=work.alsace ; BY d1 ; RUN ; DATA work.benef_alsace ; MERGE work.benef (IN=dans_benef) work.alsace (IN=dans_alsace) ; BY d1 ; IF dans_benef AND dans_alsace THEN OUTPUT ; RUN ;
DATA work.siren ; SET exercice.siren (WHERE=(dateFermeture IS NOT MISSING)) ; ATTRIB departement LABEL= »Département d’implantation » LENGTH=$2 anciennete LABEL= »Ancienneté de l’entreprise » LENGTH=3 ; departement = SUBSTR(commune,1,2) ; anciennete = YEAR(TODAY()) – YEAR(dateCreation) ; RUN ;
PROC FORMAT ; VALUE exporte 0 = « non » OTHER = « oui » ; RUN ; PROC MEANS DATA=exercice.bilans_2005 MEAN MEDIAN MAXDEC=1 ; VAR FJ ; CLASS D26 FK ; FORMAT FK exporte. ; RUN ;
PROC FREQ DATA=exercice.bilans_2005 ; TABLE D26 / NOCUM ; RUN ; PROC FREQ DATA=exercice.bilans_2005 ; TABLE D26 * DI / NOCOL NOPERCENT ; FORMAT DI montants. ; RUN ;
PROC FORMAT ; VALUE montants LOW –< 0 = "Négatif" 0 = "Nul" 0
PROC SORT DATA=exercice.bilans_2005 (WHERE=(FK > 0)) OUT=work.bilans05 ; BY DESCENDING FK ; RUN ;
PROC PRINT DATA=exercice.bilans_2005 (WHERE=(DI < 0 AND D26 = "EK")) ; RUN ;
Dans la bibliothèque EXERCICE vous trouvez des données sur les entreprises, dont leurs bilans. Sélectionnez dans BILANS_2005 les exercices comptables dont le résultat (colonne DI) est négatif, parmi les entreprises du secteur (D26) des transports (code EK) : il y en a 90.
Les descriptifs des fichiers sont ici. Créer un classeur Excel contenant les chiffres d’affaires France (FJ) moyens et médian selon le secteur (D26, en se limitant aux secteurs EA, EB et EC) et selon le fait que l’entreprise fasse du chiffre d’affaires à l’export (FK et le format déjà utilisé à l’exercice 5) pour les bilans de l’année 2005. On exportera trois tableaux : un par secteur, un selon le fait d’exporter et un croisant les deux critères.
Les descriptifs des fichiers sont ici. Importer le classeur BILANS_2004.XLSX dans une table SAS dans la bibliothèque WORK. Le classeur Excel se trouve dans le répertoire correspondant à la bibliothèque EXERCICE.
Les descriptifs des fichiers sont ici. Joindre les données BILANS_2005 et SIREN de manière à conserver tous les bilans et à ajouter quand c’est possible la date de création de l’entreprise et son département. Ne retenir dans le résultat que les entreprises alsaciennes (communes des départements du Haut Rhin et du Bas Rhin, commençant donc par 67 ou 68) dont le résultat est bénéficiaire (DI > 0). Il y en a 116. Note : on peut changer le nom d’une colonne […]
Les descriptifs des fichiers sont ici. Ajouter aux données SIREN deux nouvelles colonnes : le département avec les deux premiers caractères du code commune (COMMUNE) et l’ancienneté en années de l’entreprise à partir de DATECREATION. Pour cette dernière, les fonctions TODAY et YEAR vous permettront de faire les calculs (une entreprise créée en 1990 aura 31 ans d’ancienneté tout au long de l’année 2021). Exclure du résultat les entreprises qui ont une date de fermeture renseignée.
Les descriptifs des fichiers sont ici. Calculez les chiffres d’affaires France (FJ) moyen et médian selon le secteur d’activité (D26) et selon que l’entreprise exporte (FK > 0) ou non. Il est conseillé d’utiliser un format pour distinguer les entreprises exportatrices des autres.
Les descriptifs des fichiers sont ici. Compter à partir de BILANS_2005 le nombre d’entreprises et le pourcentage qu’elles représentent sur l’ensemble des données de bilans en fonction de leur secteur D26. On ne souhaite pas avoir de cumuls des fréquences ni des pourcentages dans le résultat. Par ailleurs, indiquez la répartition (fréquence et pourcentage au sein de chaque tranche de résultat) des bilans selon la tranche de résultat DI (utilisez le format créé à l’exercice 3) et le secteur (D26) ?
Les descriptifs des fichiers sont ici. Construire un format qui affiche les montants en trois tranches : négatif, nul et enfin positif.
Les descriptifs des fichiers sont ici. Trier par chiffre d’affaires à l’export (FK) décroissant les bilans de 2005 ; on ne retiendra pas les bilans où le chiffre d’affaires à l’export est nul. On ne trie donc que 2 439 bilans.
Par rapport aux exemples de la vidéo, les fichiers produits sur un serveur sont à stocker dans un répertoire de ce serveur. On ne peut pas lui indiquer une adresse locale (comme le c:/temp) ; en revanche on peut utiliser le chemin correspondant à une bibliothèque, SASUSER ou WORK. On écrit dans ce cas %SYSFUNC(PATHNAME(WORK)) en guise de répertoire, entre les guillemets du chemin. ODS EXCEL FILE= »%SYSFUNC(PATHNAME(WORK))/tableau de bord ventes.xlsx » STYLE=dove ; ODS PDF FILE= »%SYSFUNC(PATHNAME(WORK))/tableau de bord ventes.pdf » STYLE=meadow […]
Par rapport aux exemples de la vidéo, les fichiers importés sur un serveur sont à stocker dans un répertoire de ce serveur. On ne peut pas lui indiquer une adresse locale (comme le c:/temp) ; en revanche on peut utiliser le chemin correspondant à une bibliothèque comme EXEMPLE. On écrit dans ce cas %SYSFUNC(PATHNAME(EXEMPLE)) en guise de répertoire, entre les guillemets du chemin. PROC IMPORT DATAFILE= »%SYSFUNC(PATHNAME(EXEMPLE))/produits.tab » OUT=work.produits DBMS=DLM REPLACE ; GETNAMES=YES ; DELIMITER= »09″x ; GUESSINGROWS=10000 ; RUN ;
library(ggplot2) library(formattable) # fonctions de mise en forme pourcent
library(ggplot2) ggplot(flats) + aes(y=neighbourhood_cleansed, fill=room_type) + geom_bar(position= »fill ») + scale_fill_manual(values=c(« Entire home/apt »= »yellow », « Private room »= »orange », « Shared room »= »gray »), name= »Type de location »)
library(ggplot2) library(patchwork) # composition de graphiques library(forcats) # gestion des facteurs histo
library(ggplot2) ggplot(flats) + aes(y=neighbourhood_cleansed, fill=room_type) + geom_bar(show.legend = FALSE) + facet_wrap(~room_type, scales = « free_x »)
library(tidyverse) # manipulation des données library(ggplot2) library(treemapify) # production de treemaps quartiers % group_by(neighbourhood_cleansed, room_type) %>% summarise(nb_logements = n()) %>% ungroup() ggplot(quartiers) + aes(area=nb_logements, label=neighbourhood_cleansed, subgroup=room_type, fill=room_type) + geom_treemap(start= »topleft ») + geom_treemap_text(start= »topleft »)
library(tidyverse) # manipulation des données library(lubridate) # manipulation des dates library(ggplot2) par_mois % group_by(mois = floor_date(as.Date(date), « months »)) %>% summarise(prix_moyen=mean(price)) %>% ungroup() ggplot(par_mois) + aes(x=mois, y=prix_moyen) + geom_line()
library(tidyverse) # manipulation des données library(ggplot2) library(ggrepel) # libellés intelligemment disposés quartiers % group_by(neighbourhood_cleansed) %>% summarise(nb_logements = n(), prix_moyen = mean(price), capacite_moyenne = mean(accommodates)) %>% ungroup() ggplot(quartiers) + aes(x=capacite_moyenne, y=prix_moyen, size=nb_logements, label=neighbourhood_cleansed) + geom_point(colour= »wheat ») + geom_text_repel()
library(tidyverse) # manipulation des données library(ggplot2) quartiers % group_by(neighbourhood_cleansed) %>% summarise(nb_logements = n(), prix_moyen = mean(price), capacite_moyenne = mean(accommodates)) %>% ungroup() ggplot(quartiers) + aes(x=capacite_moyenne, y=prix_moyen) + geom_point()
library(ggplot2) ggplot(flats) + aes(x=room_type, y=accommodates) + geom_boxplot() + geom_point(stat= »summary », fun=mean, shape=17, colour= »red », size=3)
library(ggplot2) ggplot(flats) + aes(y=neighbourhood_cleansed, fill=room_type) + geom_bar()
Pour l’ensemble des exercices vous utiliserez les données Airbnb décrites ici. Reprendre le graphique précédent et obtenir celui-ci. On pourra utiliser la fonction formattable::percent pour afficher les pourcentages. Pour réduire la marge à gauche des barres, regardez l’option expand des fonctions scale_x et scale_y.
Pour l’ensemble des exercices vous utiliserez les données Airbnb décrites ici. Produire le graphique suivant à partir des données flats. Le type de location qui sert à construire la légende est la colonne room_type.
Pour l’ensemble des exercices vous utiliserez les données Airbnb décrites ici. Produire le graphique suivant à partir des données flats.
Pour l’ensemble des exercices vous utiliserez les données Airbnb décrites ici. Produire le graphique suivant à partir des données flats.
Pour l’ensemble des exercices vous utiliserez les données Airbnb décrites ici. Produire le graphique suivant en agrégeant les données flats par quartier (neighbourhood_cleansed) et par type de location (room_type) pour calculer le nombre de logements.
Pour l’ensemble des exercices vous utiliserez les données Airbnb décrites ici. En agrégeant les données calendar par mois (utiliser la fonction lubridate::floor_date pour récupérer seulement le mois et l’année à partir de la variable date), produire le graphique suivant.
Pour l’ensemble des exercices vous utiliserez les données Airbnb décrites ici. Produire le graphique suivant en agrégeant les données flats par quartier (neighbourhood_cleansed) pour calculer le prix moyen des locations, le nombre de logements et la moyenne du nombre de personnes accueillies par logement (accommodates).
Pour l’ensemble des exercices vous utiliserez les données Airbnb décrites ici. Produire le graphique suivant en agrégeant les données flats par quartier (neighbourhood_cleansed) pour calculer le prix moyen des locations, le nombre de logements et la moyenne du nombre de personnes accueillies par logement (accommodates).
Pour l’ensemble des exercices vous utiliserez les données Airbnb décrites ici. Produire le graphique suivant à partir des données flats.
Pour l’ensemble des exercices vous utiliserez les données Airbnb décrites ici. Produire le graphique suivant à partir des données flats.
library(ggplot2) library(lubridate) load (« c:/olivier/vins/vins.Rdata ») graphique <- ggplot(produits) + aes(x=couleur, fill=couleur) + geom_bar() # emplacements de légende : # extérieure graphique + theme(legend.position= »bottom ») # emplacements de légende : # intérieure graphique + theme(legend.position=c(0.25, 0.8)) # fond blanc, pas de quadrillage graphique + theme(panel.background= element_rect(fill= »white », colour= »black »), panel.grid=element_blank()) # légende encadrée, titres en gras graphique + theme(title = element_text(face = « bold »), legend.background = element_rect(color= »gray »)) # graduations d’axes graphique + theme(axis.ticks.x = element_blank(), axis.ticks.length = unit(2, »mm »)) # bouger le titre graphique + labs(title= »Nombre […]
library(ggplot2) load (« c:/olivier/vins/vins.Rdata ») # camembert amélioré ggplot(produits)+ aes(x=1, fill=couleur)+ geom_bar(width=1)+ coord_polar(theta= »y »)+ scale_y_continuous(labels=NULL, breaks=NULL, name=NULL)+ scale_x_continuous(labels=NULL, breaks=NULL, name=NULL) # soigner les axes ggplot(ventesMens) + aes(x=mois, y=ventes)+ geom_line() + scale_y_continuous( limits=c(0,1500), breaks=seq(0,1500,by=250) ) ggplot(ventesMens)+ aes(x=mois,y=ventes)+ geom_line()+ scale_y_continuous( limits = c(0,1500), breaks=0:6*250, minor_breaks = 0:30*50, name= »Quantités vendues par mois »)+ scale_x_date(name=NULL) ggplot(produits) + aes(y=couleur, x=prixTTC) + geom_bar(stat = « summary », fun = mean) + scale_x_continuous(labels=c(« zéro », « vingt », « quarante », « soixante »)) ggplot(produits) + aes(y=couleur, x=prixTTC) + geom_bar(stat= »summary », fun=max) + scale_x_continuous( labels=c(« zéro », « vingt », « quarante », « soixante ») ) ggplot(produits) + […]
library(ggplot2) library(ggthemes) library(paletteer) load (« c:/olivier/vins/vins.Rdata ») # tests de thèmes prédéfinis graphique <- ggplot(produits) + aes(x=couleur, fill=couleur) + geom_bar() graphique + theme_bw() graphique + theme_dark() graphique + theme_light() graphique + theme_minimal() graphique + theme_classic() graphique + theme_economist() graphique + theme_clean() graphique + theme_few() graphique + theme_excel() graphique + theme_excel_new() graphique + theme_excel_new() + theme(legend.position= »top ») barres <- ggplot(produits[ which(grepl(« ^B »,produits$region)),])+ aes(x=couleur, fill=region)+ geom_bar() # couleurs par défaut barres # séquentiel par défaut barres + scale_fill_brewer() barres + scale_fill_brewer(type= »div ») barres + scale_fill_brewer(type= »div », palette=2) […]
library(ggplot2) library(lubridate) load (« c:/olivier/vins/vins.Rdata ») # légende pour les marqueurs ggplot(produits)+ aes(y=region, x=prixTTC, shape=couleur)+ geom_point(stat= »summary », fun = mean)+ scale_shape_manual( name= »Couleur du vin », labels=c(« Vin blanc », « Vin rouge »), values=c(21, 15)) # légende pour les types de traits v <- ventesMens v$yy <- factor(year(v$mois)) v$mm <- month(v$mois) v <- v[which(v$yy %in% c(2000,2001)),] ggplot(v)+ aes(x=mm, y=ventes, linetype=yy)+ geom_line()+ scale_linetype_manual( name= »Année\nde vente », values=c(« 2000″= »solid », « 2001 »= »longdash »)) # graphique sans légende ggplot(produits)+ aes(x=couleur, fill=couleur)+ geom_bar(show.legend = FALSE) # aspect de la légende ggplot(produits) + aes(x=region, fill=couleur) + geom_bar() […]
library(ggplot2) load (« c:/olivier/vins/vins.Rdata ») # zoom ggplot(ventesMens) + aes(x=mois, y=ventes) + geom_line() + coord_cartesian(ylim=c(700,1400)) # un graphique « carré » ggplot(ventesMens) + aes(sample=ventes) + geom_qq(dparams=list(mean=mean(ventesMens$ventes), sd = sd(ventesMens$ventes))) + geom_abline(slope=1, intercept = 0) + coord_fixed() # barres verticales -> horizontales ggplot(produits)+ aes(x=region)+ geom_bar()+ coord_flip() # barre unique… ggplot(produits)+ aes(x=1, fill=couleur)+ geom_bar() # … devient un camembert ggplot(produits)+ aes(x=1, fill=couleur)+ geom_bar(width=1)+ coord_polar(theta= »y »)
library(ggplot2) library(patchwork) library(grid) # pour insertion de textes dans patchwork load (« c:/olivier/vins/vins.Rdata ») p1 <- ggplot(produits) + aes(x=couleur, y=prixTTC) + geom_boxplot() p2 <- ggplot(produits) + aes(x=couleur, y=prixTTC) + geom_bar(stat= »summary », fun= »mean ») + ggtitle(« Prix moyen ») p3 <- ggplot(produits) + aes(x=couleur, y=prixTTC) + geom_bar(stat= »summary », fun= »max ») + ggtitle(« Prix max ») p4 <- ggplot(produits) + aes(x=couleur, y=prixTTC) + geom_bar(stat= »summary », fun= »median ») + ggtitle(« Prix médian ») # côte à côte p2 + p3 # empilés p1 / p2 # en quadrillage (p1+p2)/(p3+p4) (p1)/(p2+p3+p4) # avec un titre commun (p2+ […]
library(ggplot2) library(lubridate) load (« c:/olivier/vins/vins.Rdata ») # éclatement optimisé ggplot(produits[produits$region != « Bordeaux »,])+ aes(x=couleur)+ geom_bar()+ coord_flip()+ facet_wrap(~region) # en 3 colonnes * 4 lignes ggplot(produits[produits$region != « Bordeaux »,])+ aes(x=couleur)+ geom_bar()+ coord_flip()+ facet_wrap(~region, nrow=4, ncol=3) # en 2 colonnes * 6 lignes ggplot(produits[produits$region != « Bordeaux »,])+ aes(x=couleur)+ geom_bar()+ coord_flip()+ facet_wrap(~region, nrow=6, ncol=2) # comparaisons facilitées ventesMens$yy <- year(ventesMens$mois) ventesMens$mm <- month(ventesMens$mois) ggplot(ventesMens)+ aes(x=mm, y=ventes)+ geom_line() + facet_wrap(~yy, ncol=1, strip.position = « left ») # échelles coordonnées ou non ggplot(produits)+ aes(x=prixTTC)+ geom_histogram()+ facet_wrap(~couleur) ggplot(produits)+ aes(x=prixTTC)+ geom_histogram()+ facet_wrap(~couleur, scales= »free_y ») […]
library(ggplot2) load (« c:/olivier/vins/vins.Rdata ») # barres en fonction de la moyenne ggplot(produits[ produits$millesime>1980,])+ aes(x=millesime, y=prixTTC)+ stat_summary( fun=mean, geom= »bar ») # variantes sur le type de graphique ggplot(produits[ produits$millesime>1980,])+ aes(x=millesime, y=prixTTC)+ stat_summary( fun=mean, geom= »line ») ggplot(produits[ produits$millesime>1980,])+ aes(x=millesime, y=prixTTC)+ stat_summary( fun=mean, geom= »point ») ggplot(produits[ produits$millesime>1980,])+ aes(x=millesime, y=prixTTC)+ stat_summary( fun=mean, geom= »step ») # tranches en fonction de la moyenne ggplot(produits[ produits$millesime>1980,])+ aes(x=millesime, y=prixTTC)+ stat_summary_bin( fun=mean, geom= »bar »)
library(ggplot2) load (« c:/olivier/vins/vins.Rdata ») # histogramme avec moyenne ggplot(produits)+ aes(x=prixTTC)+ geom_histogram()+ geom_vline(xintercept= mean(produits$prixTTC)) # courbe avec moyenne générale ggplot(ventesMens)+ aes(x=mois, y=ventes)+ geom_line()+ geom_hline(yintercept = mean(ventesMens$ventes)) # QQ plot ggplot(ventesMens) + aes(sample=ventes) + geom_qq(dparams=list(mean=mean(ventesMens$ventes), sd = sd(ventesMens$ventes))) + geom_abline(slope=1, intercept = 0)
library(treemapify) library(ggplot2) load(« c:/olivier/vins/vins.Rdata ») bordeaux <- produits[which(produits$region == « Bordeaux »),] treemap <- aggregate(numCatalogue ~ AOC, bordeaux, FUN=length) ggplot(treemap) + aes(area=numCatalogue, label=AOC) + geom_treemap(start= »topleft ») + geom_treemap_text(start= »topleft ») treemap2 <- aggregate(numCatalogue ~ AOC + couleur, bordeaux, FUN=length) ggplot(treemap2) + aes(area=numCatalogue, label=AOC, fill=couleur, subgroup=couleur) + geom_treemap(start= »topleft », show.legend = FALSE) + geom_treemap_text(start= »topleft ») + geom_treemap_subgroup_border(show.legend = FALSE) + geom_treemap_subgroup_text()
library(ggiraphExtra) library(reshape2) radar <- dcast(produits[which(produits$millesime %in% 1990:2000),], couleur ~ millesime, value.var= »prixTTC », fun.aggregate = mean) ggRadar(data=radar, aes(group=couleur), rescale=FALSE) ggRadar(data=radar, aes(group=couleur, facet=couleur), rescale=FALSE, ylim=c(0,250), size=-Inf) + theme(legend.position = « none »)
library(ggplot2) library(lubridate) load (« c:/olivier/vins/vins.Rdata ») # courbe simple ggplot(ventesMens)+ aes(x=mois,y=ventes)+ geom_line() # aspect : couleur, épaisseur ggplot(ventesMens)+ aes(x=mois, y=ventes)+ geom_line(colour= »orange », size=2) # aspect : motif du trait ggplot(ventesMens)+ aes(x=mois, y=ventes)+ geom_line(linetype= »dotted ») # courbe en escalier ggplot(ventesMens)+ aes(x=mois, y=ventes)+ geom_step() # interruption s’il y a des NA mens <- ventesMens[1:10,] mens[6, »ventes »] <- NA ggplot(mens[-6,]) + aes(x=mois, y=ventes)+ geom_line() + geom_point() ggplot(mens) + aes(x=mois, y=ventes)+ geom_point()+ geom_line() # plusieurs courbes ggplot(ventesMens)+ aes(x=month(mois), y=ventes, colour=factor(year(mois)))+ geom_line() # nuage de points avec régression ggplot(ventesMens)+ […]
library(ggplot2) load (« c:/olivier/vins/vins.Rdata ») # nuage de points ggplot(produits)+ aes(x=millesime, y=prixTTC)+ geom_point() # nuage de points avec transparence ggplot(produits)+ aes(x=millesime, y=prixTTC)+ geom_point(alpha=1/10) # avec un zoom sur les millésimes récents ggplot(produits[which(produits$millesime > 1980),]) + aes(x=millesime, y=prixTTC) + geom_point(alpha=1/10) # geom_jitter permet d’avoir des éparpillements aléatoires # pour les points ex-aequos ggplot(produits[which(produits$millesime > 1980),]) + aes(x=millesime, y=prixTTC) + geom_jitter(alpha=1/10) # nuage de stats stats1 <- aggregate(prixTTC ~ millesime, produits, FUN=mean) stats2 <- aggregate(prixTTC ~ millesime, produits, FUN=length) stats <- merge(stats1, stats2, […]
library(ggplot2) load (« c:/olivier/vins/vins.Rdata ») # une seule boxplot ggplot(produits)+ aes(y=prixTTC)+ geom_boxplot() # une boxplot par groupe regionB <- produits[which(grepl(« ^B »,produits$region)),] ggplot(regionB)+ aes(x=region,y=prixTTC)+ geom_boxplot() # boxplots côte à côte par groupe ggplot(regionB)+ aes(x=region, y=prixTTC, fill=couleur)+ geom_boxplot() # boxplots à corset ggplot(regionB)+ aes(x=couleur, y=prixTTC)+ geom_boxplot(notch = TRUE) # boxplots de largeur f°(obs) ggplot(regionB)+ aes(x=couleur, y=prixTTC)+ geom_boxplot(varwidth = TRUE) # points atypiques ggplot(produits)+ aes(x=couleur, y=prixTTC)+ geom_boxplot(outlier.shape=2, outlier.color= »orange ») # croisillons en bouts de moustaches ggplot(produits)+ aes(x=couleur, y=prixTTC)+ geom_errorbar(stat= »boxplot », width=0.1)+ geom_boxplot() # avec la moyenne en […]
library(ggplot2) load (« c:/olivier/vins/vins.Rdata ») ggplot(data=produits)+ aes(x=prixTTC)+ geom_histogram() ggplot(data=produits)+ aes(x=prixTTC)+ geom_histogram(bins=10) ggplot(data=produits)+ aes(x=prixTTC)+ geom_histogram(bins=20,aes(y=..density..))+ geom_density()
library(ggplot2) library(lubridate) library(forcats) load (« c:/olivier/vins/vins.Rdata ») # barres d’effectifs par couleur ggplot(data=produits)+ aes(x=couleur)+ geom_bar() # idem avec une couleur spécifiée ggplot(data=produits)+ aes(x=couleur)+ geom_bar(fill= »orange ») # idem avec une couleur par barre ggplot(data=produits)+ aes(x=couleur, fill=couleur)+ geom_bar() # avec weight on calcule des sommes # nombre d’items vendus par an ggplot(data=ventesMens)+ aes(x=factor(year(mois)), weight=ventes)+ geom_bar() regionB <- produits[grep(« ^B », produits$region),] # barres empilées ggplot(data=regionB)+ aes(x=region, fill=couleur)+ geom_bar() # barres côte à côte ggplot(data=regionB)+ aes(x=region, fill=couleur)+ geom_bar(position= »dodge ») # barres empilées 100% ggplot(data=regionB)+ aes(x=region,fill=couleur)+ geom_bar(position= »fill ») # avec […]
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). […]
# packages utiles —- library(lubridate) # gestion des dates # type de la colonne siren$dateCreation —- class(siren$dateCreation) # elle est de type caractère # conversion en Date et ancienneté —- siren$DATE_CREA
library(dplyr) bilans_2005 %>% filter(D5 == 12) %>% group_by(D26) %>% summarise(nb_bilans = n(), ca_median = median(FJ+FK)) %>% ungroup() %>% arrange(desc(ca_median)) %>% slice(1:5)
# commerces déficitaires en 2005—- commerces_deficitaires
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(bilans_2005$D26) # doit répondre 16 nmiss(bilans_2005$FJ / bilans_2005$FK) # doit répondre 181
Paramétrer le secteur d’activité (sur 2 lettres majuscules commençant par un E) et calculer pour ce secteur (D26) le chiffre d’affaires France (FJ) médian en 2005.
Créer un classeur Excel à partir des bilans_2005 avec un onglet par secteur (colonne D26) et dans chaque onglet, la liste des bilans de ce secteur.
Créer un data.frame contenant les bilans des entreprises de déménagement (code activité D23 valant 602N) toujours actives (colonne etat dans siren) à partir de siren et bilans_2004. Ils doivent être 10.
Dans l’objet siren on trouve la date de création de l’entreprise dans dateCreation. Quel est son type ? En dériver une colonne DATE_CREA de type Date. S’en servir pour calculer l’ancienneté de l’entreprise (la stocker dans la colonne ANC) par rapport à la date du jour.
Importer les fichiers bilans_2004.xlsx dans un objet bilans_2004 et siren.csv (ce dernier est un fichier à séparateur point-virgule) dans un objet siren.
A partir des données bilans_2005, calculer par secteur (D26) le nombre de bilans établis sur douze mois (durée en mois : D5) et la médiane du chiffre d’affaires de ces bilans (chiffre d’affaires : somme de FJ et FK). Ne lister que les 5 secteurs correspondant aux médianes les plus élevées.
Compter le nombre de bilans_2005 par secteur (colonne D26), ne retenir que les secteurs qui représentent au moins 5% du total.
Quel est le chiffre d’affaires (CA) France moyen (FJ) des bilans_2005 par secteur d’activité (D26) ? Quels sont les secteurs où les CA moyens dépassent 10000 k€ ?
Créer un objet commerces_deficitaires à partir des bilans_2005 dont le résultat (DI) est négatif et dont le secteur d’activité (D26) est EJ. (383 obs) Créer un objet services des bilans 2005 d’entreprises ayant un secteur d’activité (D26) dans les services (valeurs EN et EP) à partir du data.frame bilans_2005. (1683 obs)
Les descriptifs des fichiers sont ici. Créer un objet bilans_2005 à partir de la table SAS bilans_2005.sas7bdat.
Bonjour et bienvenue sur cette page de test. Ci-dessous deux éléments sont inclus : tout d’abord un support PowerPoint, puis une vidéo. Le test consiste à savoir si l’un et l’autre s’affichent à votre écran et si vous pouvez naviguer dans le PPT et lire la vidéo. Le PowerPoint : Il comporte 7 diapositives. La vidéo : Elle dure quasiment 16 minutes. Son sujet n’est pas le même que le PowerPoint. Voilà, le test est terminé, merci.
IMPORTANT : dans l’environnement Banque de France il faut ajouter à tous les imports avec la fonction read.delim l’option fileEncoding= »WINDOWS-1252″. Le code ci-dessous montre comment l’intégrer. # répertoire par défaut —- setwd(« c:/olivier/airbnb ») # imports —- houses <- read.delim(« houses.csv », sep = « , », stringsAsFactors = FALSE, fileEncoding= »WINDOWS-1252″ ) flats <- read.delim(« flats.csv », sep = « , », stringsAsFactors = FALSE, fileEncoding= »WINDOWS-1252″ ) library(readxl) # import de classeurs Excel other <- read_excel(« other.xlsx ») calendar <- read.delim(« calendar.csv », sep = « , », stringsAsFactors = FALSE) library(haven) # import de fichiers […]
Les données sont disponibles dans la bibliothèque EXERCICE de votre serveur SAS. Elles consistent en 3 fichiers : bilans_2004 qui est un classeur Excel (xlsx), bilans_2005 une table SAS, et siren une autre table SAS. Seules les deux tables SAS sont visibles dans la bibliothèque EXERCICE. Les noms des colonnes dans les tables bilans sont ceux des rubriques des « liasses fiscales », des imprimés administratifs utilisés pour déclarer le bilan comptable d’une entreprise à l’administration. Bilans_2004 et Bilans_2005 Deux […]
Créer une invite (en bas à gauche, avec le symbole à droite de SERVEURS puis le bouton AJOUTER). Dans l’onglet TYPE ET VALEURS DE L’INVITE, choisir comme METHODE D’ALIMENTATION DE L’INVITE une SELECTION DANS UNE LISTE STATIQUE. Cliquer ensuite sur le bouton OBTENIR VALEURS en bas à droite, choisir la table SIREN comme SOURCE DE DONNEES, la colonne DEPT et OBTENIR VALEURS. Bien penser à cliquer sur la flèche double pour basculer toutes les valeurs dans la liste en bas […]
Les descriptifs des fichiers sont ici. Avec une invite, paramétrer une requête sur le département pour qu’elle indique combien d’entreprises de la table SIREN (= nombre de lignes dans la table) ont fermé par an depuis 2005. Ci-dessous la réponse pour l’Aisne.