💪 Objectifs:
💪 Objectifs:
🏋 Les exercices en ligne => chapitre 1
💪 Objectifs:
🏋 Les exercices en ligne => chapitre 2
💪 Objectifs:
dplyr
pour la manipulation de tableaux de donnéesselect()
filter()
arrange()
mutate()
summarise()
et group_by()
🏋 Les exercices en ligne => chapitre 3
💪 Objectifs:
ggplot2
pour la production de graphiquesdata
, et l’argument mapping
pour définir des esthétiques x
et y
geom
et en explorer différents types🏋 Les exercices en ligne => chapitre 4
💪 Objectifs:
aes()
facet_grid()
ou facet_wrap()
🏋 Les exercices en ligne => chapitre 5
💪 Objectifs:
labs()
scale_..._...()
labels
, breaks
, limits
,…theme_...()
geom_smooth()
🏋 Les exercices en ligne => chapitre 6
💪 Objectifs:
🏋 Les exercices en ligne => chapitre 7
(NOPE cette année vous échappez aux tests statistiques avec moi!
💪 Objectifs:
🏋 Les exercices en ligne => chapitre 8
💪 Objectifs:
purrr
🏋 Les exercices en ligne => chapitre 9
💪 Objectifs:
🏋 L’exercice => première partie
💪 Objectifs:
🏋 L’exercice => deuxième partie
J’attends vos rendus le 9/11/2020. Les retards seront pénalisés (-2 points par semaine de retard)!
J’attends que vous me fournissiez à la fois:
De ce fait, vous pouvez, si vous le souhaitez, ne pas me montrer les lignes de commandes dans le rapport pour faire “comme si” j’étais un interlocuteur qui ne connaît pas le langage et s’intéresse juste aux résultats…
Si vous me montrez des tableaux de données intermédiaires, essayez de me montrer seulement quelques lignes, ou leurs dimensions, pas des tableaux énormes qui vont générer 10 pages de rapport pour pas grand chose…
Enfin, ne soyez pas trop scolaires… Prenez cet exercice comme une “simulation” de rapport qu’on vous demanderait de produire dans le cadre d’un stage ou de votre travail… Je veux dire par là que vous avez le droit d’utiliser des fonctions autres que celles que je vous ai montrées, de faire des choses en plus par rapport à ce que je vous demande (pas en moins SVP :-p ), d’organiser le rapport pour que la progression soit la plus logique possible, etc. La description étape par étape que je vous indique n’est en effet là que pour vous aider dans votre progression (et pour assurer que vous révisiez bien différents aspects abordés dans le cours…), pas pour brimer votre imagination…
Vous allez travailler sur des données de la base Sirene de l’INSEE -ancien formattage, dispo ici: (http://perso.ens-lyon.fr/lise.vaudor/Supports_formation/cours_geonum/data/geo-sirene) -.
Ces données répertorient l’ensemble des entreprises et établissements actifs pour 5 départements. Les métadonnées associées à cette base sont en partie décrites dans ce tableau.
geo_siret_42.csv
data42
en lisant la table geo-siret_42.csv
.APE_Type
en lisant le fichier relatif aux codes d’APE.👁 Consultez ce billet de blog sur la manipulation de chaînes de caractères avec R et le package stringr
Code
à votre table en ne conservant que les quatre premiers caractères de la variable activitePrincipaleEtablissement (cela correspond à un pattern “^….”, à savoir le début de chaîne de caractère suivi de quatre caractères quelconques -cf ce billet de blog sur les expressions régulières-).data42
pour ne retenir que celles pour lesquelles l’APE correspond aux commerces “alimentaires” -alimentation, boisson, restaurant, bar- (voir la liste contenue dans le fichier APE_Type)alim42
.dplyr
.Réalisez une jointure entre data42_alim
(variable codeAPE
) et APE_Type
(variable Code
), de manière à compléter alim42
avec les types de commerces (variables Type
et TypeAbreg
).A ce stade, votre script commence à être un peu long et (peut-être) un peu désordonné… Ne serait-ce pas plus agréable de continuer votre projet sous la forme d’un rapport Rmarkdown? (Ne répondez pas à cette question, elle est rhétorique…).
____.Rmd
, structurez-le avec quelques titres, et répartissez les différents morceaux de code de votre script de manière pertinente dans différents chunks.A partir de maintenant, votre document de travail sera un document`___.Rmd’ et non le script que vous avez créé initialement…
Pour obtenir la table alim42
, vous avez réalisé un certain nombre d’opérations. On voudrait réaliser l’ensemble de ces opérations pour les 5 départements suivants:
Réutilisez les commandes que vous avez mises au point sur data42 pour écrire une fonction get_clean_data()
qui réalisera l’ensemble de ces opérations sur le département de votre choix. L’input correspondra à un numéro de département (c’est-à-dire que vous pourrez utiliser la fonction en faisant, par exemple get_clean_data("01")
).
💬 Pour lire le fichier, il faudra indiquer son chemin… Pensez à réutiliser ce que vous venez d’apprendre sur les chaînes de caractères pour reformer le chemin du fichier que vous intéresse à partir du numéro de département…
Certaines chaînes de caractère sont interprétées comme des chaînes de caractère pour certains jeux de données (par exemple pour les codes postaux de l’Ain, à cause du “0” en début de chaîne) tandis qu’elle est interprétée comme un numérique pour les autres jeux de données. Faites en sorte que votre fonction transforme bien cette variable pour qu’elles soient toujours de classe “character” en sortie (conversion par as.character()
…).
Appelez cette fonction de manière itérative pour chacun des départements cités ci-dessus. Vous pouvez pour ce faire soit écrire une boucle for, soit utiliser la fonction map()
du package purrr
.
alimRA_entr
(données pour l’ancienne région Rhône-Alpes, où 1 ligne=1 entreprise).💬 Vous pourrez si vous le souhaitez vous servir de la commande do.call("rbind",...)
ou bind_rows()
.
Exemple:
ma_liste
## [[1]]
## # A tibble: 1 x 3
## V1 V2 V3
## <chr> <dbl> <dbl>
## 1 pouet 33 0.22
##
## [[2]]
## # A tibble: 1 x 3
## V1 V2 V3
## <chr> <dbl> <dbl>
## 1 tut 56 0.18
##
## [[3]]
## # A tibble: 1 x 3
## V1 V2 V3
## <chr> <dbl> <dbl>
## 1 cot 11 0.16
do.call("rbind",ma_liste)
## # A tibble: 3 x 3
## V1 V2 V3
## <chr> <dbl> <dbl>
## 1 pouet 33 0.22
## 2 tut 56 0.18
## 3 cot 11 0.16
dplyr::bind_rows(ma_liste)
## # A tibble: 3 x 3
## V1 V2 V3
## <chr> <dbl> <dbl>
## 1 pouet 33 0.22
## 2 tut 56 0.18
## 3 cot 11 0.16
departement
(correspondant au numéro de département) à votre jeu de données alimRA_entr
. Peut-être par des manipulations sur le code postal?…Vous avez dû remarquer que l’exécution de l’étape précédente prenait un peu de temps car les 5 fichiers geo-sirene lus sont très volumineux… En revanche la table alimRA_entr
est de taille beaucoup plus raisonnable. Or, nous n’aurons besoin que de cette table pour la suite du projet. Pour éviter d’exécuter cette étape chronophage à chaque fois que vous travaillerez sur ce projet:
alimRA_entr
dans un fichier alimRA_entr.csv
.for
d’une structure conditionnelle if
de sorte que la boucle ne soit exécutée que si le fichier alimRA_entr.csv
n’existe pas (voir fonction file.exists()
…)alimRA_entr.csv
à chaque “tricotage” de votre rapport Rmarkdown.Agrégez la table alimRA_entr
par commune et type de commerce, pour créer une table alimRA_typeCom
(où une ligne correspondra à un type de commerce pour une commune):
une variable nInCom
correspondant au nombre de commerces par commune
une variable nInTypeCom
correspondant au nombre de commerces par type et commune
une variable propInTypeCom
correspondant à la proportion d’un type de commerce dans une commune
Quelles communes comptant plus de 100 commerces comptent au moins 5% de commerces de type “viande”?
Réalisez un graphique montrant les proportions des différents types de commerces pour LYON 4EME et LYON 8EME.
lubridate
Nous allons nous intéresser aux dates de création des entreprises de notre base alimRA_entr
(variable dateCreationEtablissement
).
🗯 Pour le moment, dateCreationEtablissement
est considéré comme une variable de type “chaîne de caractères”. Pour faire comprendre à R qu’il s’agit en réalité d’une date (et lui faire comprendre comment elle est mise en forme) nous allons faire appel au package lubridate
.
👁 Consultez ce billet de blog ou la vignette du package lubridate
, qui explique succintement comment utiliser ce package.
lubridate
.alimRA_entr
en modifiant la classe de dateCreationEtablissement
à l’aide d’une fonction de lubridate
.annee
au tableau alimRA_entr
à l’aide, à nouveau, d’une des fonctions de lubridate
.alimRA_typeAn
qui recense le **nombre d’entreprises par année (nInAn
), et par type*année (nInTypeAn
)**.alimRA_typeAn
pour ne garder que les entreprises dont la création correspond aux années >=1970.ggplot2
alim_entr
pour en faire un objet de classe “sf”. Vous vous servirez pour cela des colonnes “longitude” et “latitude” et exclurez les entreprises pour lesquelles ces colonnes ne sont pas renseignées.