Skip to content

Instantly share code, notes, and snippets.

@Valexandre
Created April 7, 2020 20:15
Show Gist options
  • Save Valexandre/3e37294294191d183a78d2a4b8f59bca to your computer and use it in GitHub Desktop.
Save Valexandre/3e37294294191d183a78d2a4b8f59bca to your computer and use it in GitHub Desktop.
##%######################################################%##
# #
#### On veut présenter des valeurs ####
#### absolues et des évolutions dans ####
#### chaque commune et les mettre ####
#### en perspective avec une valeur départementale. ####
# #
##%######################################################%##
#Au Kremlin-Bicêtre, la population VERBE AU PASSE COMPOSE, passant de XXX à YYYY tandis qu'elle VERBE A L'IMPARFAIT dans le reste du Val de Marne, autour de ZZZZ.
#On s'assure d'avoir les bons noms de communes et de départements en toutes circonstances, dataset créé à partir de ça : https://www.insee.fr/fr/information/4316069
TouslesLibellesDesVilles <-read_csv("C:/Users/valexandre/OneDrive - Groupe Les Echos/EXT/DonneesSources/COMMUNE/TouslesLibellesDesVilles.txt")
colnames(TouslesLibellesDesVilles)[1] <- "CODGEO"
TouslesLibellesDesDepartements <-read_csv( "C:/Users/valexandre/OneDrive - Groupe Les Echos/EXT/DonneesSources/COMMUNE/TouslesLibellesDesDepartements.txt")
head(TouslesLibellesDesDepartements)
head(TouslesLibellesDesVilles)
#On charge les librairies
library(tidyverse)
library(readr)
library(readxl)
library(glue)
# On charge les fonctions utiles
options(scipen=999)
`%!in%` = function(x, y) ! (x %in% y)
Majuscule = function(x) (paste0(toupper(substr(x, 1, 1)), substr(x, 2, nchar(x))))
MajMin = function(x) (paste0(toupper(substr(x, 1, 1)), tolower(substr(x, 2, nchar(x)))))
Virg=function(x) (gsub("\\.",",",x))
Milliers=function(x) (formatC(round(x,0), format="f", big.mark = " ", digits=0))
# On charge les données
EvolutionPopulation_2016_2006 <- read_csv("C:/Users/valexandre/Documents/DonneesMaVille/FINALDATA/EvolutionPopulation-2016-2006.csv", locale = locale(encoding = "ISO-8859-1"))
EvolutionPopulation_2016_2006<-EvolutionPopulation_2016_2006[c(1:3,5)]
head(EvolutionPopulation_2016_2006)
EvolutionPopulation_2016_2006$EvolPopBrute<-EvolutionPopulation_2016_2006$P16_POP-EvolutionPopulation_2016_2006$P06_POP
# On charge le jeu de données des expressions
Lexique <-read_csv("C:/Users/valexandre/OneDrive - Groupe Les Echos/EXT/DonneesSources/Lexique - Evolution.csv")
Lexique$valeurmin<-as.numeric(gsub(",",".",Lexique$valeurmin))
Lexique$valeurmax<-as.numeric(gsub(",",".",Lexique$valeurmax))
head(Lexique[,1:5])
#Au Kremlin-Bicêtre, la population a plus que doublé, passant de XXX à YYYY tandis qu'elle stagnait dans le reste du Val de Marne, autour de ZZZZ.
# On joint les noms de la ville et du departement au jeu de données
Texte<-EvolutionPopulation_2016_2006%>%mutate(dep=substr(CODGEO,1,2))%>%
left_join(TouslesLibellesDesDepartements)%>%left_join(TouslesLibellesDesVilles)
head(Texte)
# On calcule les valeurs deps
EvolDep<-EvolutionPopulation_2016_2006%>%mutate(dep=substr(CODGEO,1,2))%>%group_by(dep)%>%
summarise(P16_POPDep=sum(P16_POP,na.rm=T),
P06_POPDep=sum(P06_POP,na.rm=T))%>%
mutate(TxEvolDep=(P16_POPDep-P06_POPDep)/P06_POPDep*100,
EvolPopBruteDep=(P16_POPDep-P06_POPDep))
#Au Kremlin-Bicêtre, la population a plus que doublé, passant de XXX à YYYY tandis qu'elle stagnait dans le reste du Val de Marne, autour de ZZZZ.
# On fait une première jointure sur la situaiton de la population de la ville.
# une évolution en % dont le sujet est un féminin singulier (et on enlève les formulations à bases de valeur, pas adaptées)
Texte_1J<-merge(Texte, Lexique %>%
filter(utilisation == "evolution")%>%
filter(!grepl("valeur",texte))%>%
filter(`singouplur(S/P)`=="S")%>%
filter(`genre(M/F/N)`=="N" |`genre(M/F/N)`=="F"))%>%
filter(EvolPop2006_16 >= valeurmin, EvolPop2006_16 <= valeurmax) %>%
rename(texteevoville=texte)%>%
select(colnames(Texte)[1:5],texteevoville,everything())%>%
arrange(CODGEO)
head(Texte_1J)
#On passe de 35675 lignes à 174644 lignes, avec une ligne pour chaque possibilité de verbe.
# On joint ensuite les évols départements
Texte_2J<-Texte_1J%>%left_join(EvolDep)
#On va créer deux phrases types et ensuite on choisira au hasard parmi l'un de ces deux templates, pour l'une des lignes possibles.
#On pourrait faire la même pour le département, mais on va se contenter de 3 cas: augmentait, baissait, stagnait
#Au Kremlin-Bicêtre, la population a plus que doublé, passant de XXX à YYYY tandis qu'elle stagnait dans le reste du Val de Marne, autour de ZZZZ.
colnames(Texte_2J)
GabaritsTextes<-Texte_2J%>%
mutate(Template1=case_when(TxEvolDep<= -2 ~
glue("{Majuscule(ALaVille)}, la population {texteevoville}, passant de {Milliers(P06_POP)} à {Milliers(P16_POP)}, tandis qu'elle baissait dans le reste {DuDep}."),
TxEvolDep>= 2 ~
glue("{Majuscule(ALaVille)}, la population {texteevoville}, passant de {Milliers(P06_POP)} à {Milliers(P16_POP)}, tandis qu'elle augmentait dans le reste {DuDep}."),
TRUE~
glue("{Majuscule(ALaVille)}, la population {texteevoville}, passant de {Milliers(P06_POP)} à {Milliers(P16_POP)}, tandis qu'elle stagnait dans le reste {DuDep}.")),
Template2=case_when(TxEvolDep<= -2 ~
glue("La population {DeLaVille} {texteevoville} entre 2006 et 2016 : elle est passée de {Milliers(P06_POP)} à {Milliers(P16_POP)} habitants, soit une évolution de {Virg(round(EvolPop2006_16,1))}%. Dans le même temps, {BonNomDeDep} voyait sa population baisser de {Virg(abs(round(TxEvolDep,1)))}%."),
TxEvolDep>= 2 ~
glue("La population {DeLaVille} {texteevoville} entre 2006 et 2016 : elle est passée de {Milliers(P06_POP)} à {Milliers(P16_POP)} habitants, soit une évolution de {Virg(round(EvolPop2006_16,1))}%. Dans le même temps, {BonNomDeDep} voyait sa population augmenter de {Virg(round(TxEvolDep,1))}%."),
TRUE~
glue("La population {DeLaVille} {texteevoville} entre 2006 et 2016 : elle est passée de {Milliers(P06_POP)} à {Milliers(P16_POP)} habitants, soit une évolution de {Virg(round(EvolPop2006_16,1))}%. Dans le même temps, {BonNomDeDep} voyait sa population stagner ({Milliers(P16_POPDep)} habitants en 2016).")))
EnsemblesDesTextes<-rbind(GabaritsTextes%>%select(CODGEO,Template1),
GabaritsTextes%>%select(CODGEO,Template2)%>%rename(Template1=Template2))
# On a donc 326 922 textes possibles.
# On va en sélectionner 1, au hasard
EnsemblesDesTextes$Chosen <- 0
#On assigne un 1, au hasard pour l'ensemble des possibilités
EnsemblesDesTextes[-tapply(-seq_along(EnsemblesDesTextes$Template1),EnsemblesDesTextes$CODGEO,sample,size = 1), ]$Chosen <- 1
TexteSelectionne<-EnsemblesDesTextes %>% arrange(CODGEO)
#On ne garde que celle sélectionnée
TexteSelectionne <- TexteSelectionne %>% filter(Chosen == 1)%>%select(-Chosen)
#Aperçu
TexteSelectionne[1:10,2]
# L'intéret : une meilleure lisibilité pour les lecteurs.
# Un apport plus sérieux : exemple :
TexteSelectionne$Template1[TexteSelectionne$CODGEO=="91692"]
TexteSelectionne$Template1[TexteSelectionne$CODGEO=="94043"]
write.csv(TexteSelectionne%>%arrange(CODGEO),"Exemple.csv",row.names = F,fileEncoding = "UTF-8")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment