315 lines
13 KiB
R
315 lines
13 KiB
R
library(tidyverse)
|
|
library(directlabels)
|
|
|
|
####### 1 Plot and Given names #######
|
|
### Exploring the Pink City
|
|
# read the table prenoms.csv
|
|
prenoms <- read.csv('/home/labourde/Bureau/tp-analyse-explorative/prenoms.csv',sep=";")
|
|
# Inspect it
|
|
head(prenoms)
|
|
# Plot the number of births by year
|
|
prenoms %>%
|
|
group_by(Année) %>%
|
|
summarise(Naissances=sum(Nombre)) %>%
|
|
ggplot(aes(x=Année,y=Naissances)) +
|
|
geom_point()
|
|
# Plot the number of male/female births by year
|
|
prenoms %>%
|
|
group_by(Année,Sexe) %>%
|
|
summarise(Naissances=sum(Nombre)) %>%
|
|
ggplot(aes(x=Année,y=Naissances)) +
|
|
geom_point(aes(color=Sexe))
|
|
# Is my name in the dataset ?
|
|
prenoms[tolower(prenoms$Prénom) == tolower("Titouan"),]
|
|
# Represent the 10 most given names
|
|
prenoms %>%
|
|
group_by(Prénom) %>%
|
|
summarise(Naissances=sum(Nombre)) %>%
|
|
arrange(desc(Naissances)) -> mostGivenNames
|
|
ggplot(head(mostGivenNames,10),aes(x=Prénom,y=Naissances)) +
|
|
geom_bar(stat='Identity',aes(fill=Prénom))
|
|
# Select for each year the top 5 given names by sex and their evolution through the years
|
|
prenoms[prenoms$Sexe == "M",] %>%
|
|
group_by(Année) %>%
|
|
slice_max(order_by = Nombre, n = 5) -> mostMaleGivenNamesByYear
|
|
prenoms[prenoms$Sexe == "F",] %>%
|
|
group_by(Année) %>%
|
|
slice_max(order_by = Nombre, n = 5) -> mostFemaleGivenNamesByYear
|
|
mostGivenNamesBySexeAndYear <- rbind(mostMaleGivenNamesByYear, mostFemaleGivenNamesByYear)
|
|
ggplot(mostGivenNamesBySexeAndYear,aes(x=Année,y=Nombre)) +
|
|
geom_point(aes(color=Prénom)) +
|
|
facet_wrap("Prénom")
|
|
# Plot the average numbers of letters by years
|
|
prenoms %>%
|
|
group_by(Année) %>%
|
|
summarise(Lettres=mean(nchar(Prénom))) -> averageNumberOfLettersByYear
|
|
ggplot(averageNumberOfLettersByYear,aes(x=Année,y=Lettres)) +
|
|
geom_line()
|
|
# Plot the average numbers of vowels/consonants by years
|
|
prenoms %>%
|
|
group_by(Année) %>%
|
|
summarise(
|
|
Vowels = mean(nchar(gsub("[éèêëàâäïaeiouy]", "", tolower(Prénom)))),
|
|
Consonants = mean(nchar(gsub("[zrtpqsdfghjklmwxcvbnç]", "", tolower(Prénom))))
|
|
) -> averageNumberOfVowelsAndConsonantsByYear
|
|
ggplot(averageNumberOfVowelsAndConsonantsByYear, aes(x=Année,y=Vowels)) +
|
|
geom_point()
|
|
ggplot(averageNumberOfVowelsAndConsonantsByYear, aes(x=Année,y=Consonants)) +
|
|
geom_point()
|
|
# How the number of composed names change through the years
|
|
prenoms[str_detect(prenoms$Prénom, regex("[a-zA-Zéèàï]+-[a-zA-ZéèàÎ]+")),] %>%
|
|
group_by(Année) %>%
|
|
summarise(nb_composedNames=sum(Nombre)) -> composedNamesByYear
|
|
ggplot(composedNamesByYear,aes(x=Année,y=nb_composedNames)) +
|
|
geom_line()
|
|
# Defining a "hype" criteria and finding the hypest names
|
|
prenoms %>%
|
|
group_by(Année) -> namesByYear
|
|
namesByYear$nbAnnéePrec <- lag(namesByYear$Nombre)
|
|
namesByYear$difference <- namesByYear$Nombre - namesByYear$nbAnnéePrec
|
|
|
|
namesByYear %>%
|
|
group_by(Année) %>%
|
|
slice_max(order_by = difference, n = 1) -> hypestNameByYear
|
|
ggplot(hypestNameByYear,aes(x=factor(Année),y=difference)) +
|
|
geom_text(aes(label=Prénom))
|
|
|
|
### Exploring the Gray City
|
|
# read the table prenomsParis.csv
|
|
prenomsParis <- read.csv('/home/labourde/Bureau/tp-analyse-explorative/prenomsParis.csv',sep=";")
|
|
prenomsParis <-rename(prenomsParis, Année = Annee)
|
|
prenomsParis <-rename(prenomsParis, Prénom = Prenoms)
|
|
|
|
nameStudy <- function(prenoms) {
|
|
# Plot the number of births by year
|
|
prenoms %>%
|
|
group_by(Année) %>%
|
|
summarise(Naissances=sum(Nombre)) %>%
|
|
ggplot(aes(x=Année,y=Naissances)) +
|
|
ggtitle("Naissances par année") +
|
|
geom_point() -> p1
|
|
# Plot the number of male/female births by year
|
|
prenoms %>%
|
|
group_by(Année,Sexe) %>%
|
|
summarise(Naissances=sum(Nombre)) %>%
|
|
ggplot(aes(x=Année,y=Naissances)) +
|
|
ggtitle("Sexe des naissances par année") +
|
|
geom_point(aes(color=Sexe)) -> p2
|
|
# Is my name in the dataset ?
|
|
prenoms[tolower(prenoms$Prénom) == tolower("Titouan"),]
|
|
# Represent the 10 most given names
|
|
prenoms %>%
|
|
group_by(Prénom) %>%
|
|
summarise(Naissances=sum(Nombre)) %>%
|
|
arrange(desc(Naissances)) -> mostGivenNames
|
|
ggplot(head(mostGivenNames,10),aes(x=reorder(Prénom,Naissances),y=Naissances)) +
|
|
ggtitle("Les 10 noms les plus donnés") +
|
|
geom_bar(stat='Identity',aes(fill=reorder(Prénom,Naissances))) -> p3
|
|
# Select for each year the top 5 given names by sex and their evolution through the years
|
|
prenoms[prenoms$Sexe == "M",] %>%
|
|
group_by(Année) %>%
|
|
slice_max(order_by = Nombre, n = 5) -> mostMaleGivenNamesByYear
|
|
prenoms[prenoms$Sexe == "F",] %>%
|
|
group_by(Année) %>%
|
|
slice_max(order_by = Nombre, n = 5) -> mostFemaleGivenNamesByYear
|
|
mostGivenNamesBySexeAndYear <- rbind(mostMaleGivenNamesByYear, mostFemaleGivenNamesByYear)
|
|
ggplot(mostGivenNamesBySexeAndYear,aes(x=Année,y=Nombre)) +
|
|
ggtitle("Top 5 des noms donnés, par sexe et par an") +
|
|
geom_point(aes(color=Prénom)) +
|
|
facet_wrap("Prénom") -> p4
|
|
# Plot the average numbers of letters by years
|
|
prenoms %>%
|
|
group_by(Année) %>%
|
|
summarise(Lettres=mean(nchar(Prénom))) -> averageNumberOfLettersByYear
|
|
ggplot(averageNumberOfLettersByYear,aes(x=Année,y=Lettres)) +
|
|
ggtitle("Nombre moyen de lettres dans les prénoms par année") +
|
|
geom_line() -> p5
|
|
# Plot the average numbers of vowels/consonants by years
|
|
prenoms %>%
|
|
group_by(Année) %>%
|
|
summarise(
|
|
Vowels = mean(nchar(gsub("[éèêëàâäïaeiouy]", "", tolower(Prénom)))),
|
|
Consonants = mean(nchar(gsub("[zrtpqsdfghjklmwxcvbnç]", "", tolower(Prénom))))
|
|
) -> averageNumberOfVowelsAndConsonantsByYear
|
|
ggplot(averageNumberOfVowelsAndConsonantsByYear, aes(x=Année,y=Vowels)) +
|
|
ggtitle("Nombre moyen de voyelles dans les prénoms par année") +
|
|
geom_point() -> p6
|
|
ggplot(averageNumberOfVowelsAndConsonantsByYear, aes(x=Année,y=Consonants)) +
|
|
ggtitle("Nombre moyen de consonnes dans les prénoms par année") +
|
|
geom_point() -> p7
|
|
# How the number of composed names change through the years
|
|
prenoms[str_detect(prenoms$Prénom, regex("[a-zA-Zéèàï]+-[a-zA-ZéèàÎ]+")),] %>%
|
|
group_by(Année) %>%
|
|
summarise(nb_composedNames=sum(Nombre)) -> composedNamesByYear
|
|
ggplot(composedNamesByYear,aes(x=Année,y=nb_composedNames)) +
|
|
ggtitle("Nombre de prénoms composés par année") +
|
|
geom_line() -> p8
|
|
# Defining a "hype" criteria and finding the hypest names
|
|
prenoms %>%
|
|
group_by(Année) -> namesByYear
|
|
namesByYear$nbAnnéePrec <- lag(namesByYear$Nombre)
|
|
namesByYear$difference <- namesByYear$Nombre - namesByYear$nbAnnéePrec
|
|
namesByYear %>%
|
|
group_by(Année) %>%
|
|
slice_max(order_by = difference, n = 1) -> hypestNameByYear
|
|
ggplot(hypestNameByYear,aes(x=factor(Année),y=difference)) +
|
|
ggtitle("Prénom le plus hype par année") +
|
|
geom_text(aes(label=Prénom)) -> p9
|
|
return(list(p1,p2,p3,p4,p5,p6,p7,p8,p9))
|
|
}
|
|
plotsParis <- nameStudy(prenomsParis)
|
|
plotsParis
|
|
|
|
# A tale of two (or more) cities
|
|
|
|
prenoms <- subset( prenoms, select = -Ordre )
|
|
prenoms$Ville <- "Toulouse"
|
|
prenomsParis$Ville <- "Paris"
|
|
allPrenoms <- rbind(prenoms,prenomsParis)
|
|
allPrenoms %>%
|
|
group_by(Année,Ville) %>%
|
|
mutate(NaissancesVilleAnnée=sum(Nombre)) -> allPrenoms
|
|
|
|
nameStudyCombined <- function(prenoms) {
|
|
# Plot the number of births by year
|
|
prenoms %>%
|
|
group_by(Année,Ville) %>%
|
|
summarise(Naissances=sum(Nombre)) %>%
|
|
ggplot(aes(x=Année,y=Naissances)) +
|
|
geom_point(aes(color=Ville)) +
|
|
geom_line(aes(color=Ville)) +
|
|
ggtitle("Naissances par année") -> p1
|
|
|
|
prenoms %>%
|
|
group_by(Année,Ville) %>%
|
|
mutate(NaissancesVilleAnnée=sum(Nombre)) -> prenoms
|
|
|
|
# Plot the number of male/female births by year and by cities
|
|
prenoms %>%
|
|
group_by(Année,Sexe,Ville) %>%
|
|
summarise(Naissances=100*sum(Nombre)/NaissancesVilleAnnée) %>%
|
|
ggplot(aes(x=Année,y=Naissances)) +
|
|
geom_point(aes(color=Sexe)) +
|
|
facet_wrap("Ville") +
|
|
ggtitle("Sexe des naissances par année en %") -> p2
|
|
|
|
# Represent the 10 most given names by cities
|
|
prenoms %>%
|
|
group_by(Ville) %>%
|
|
mutate(NaissancesVille = sum(Nombre)) %>%
|
|
group_by(Prénom,Ville) %>%
|
|
summarise(Naissances=100*sum(Nombre)/sum(NaissancesVille)) %>%
|
|
group_by(Ville) %>%
|
|
slice_max(order_by = Naissances, n = 10) -> mostGivenNames
|
|
ggplot(mostGivenNames,aes(x=reorder(Prénom,Naissances),y=Naissances)) +
|
|
ggtitle("Les 10 noms les plus donnés par ville") +
|
|
geom_bar(stat='Identity',aes(fill=reorder(Prénom,Naissances))) +
|
|
facet_wrap("Ville") -> p3
|
|
|
|
# Select for each year the top 5 given names by sex and their evolution through the years by cites
|
|
tryCatch(
|
|
{
|
|
prenoms[prenoms$Sexe == "M",] %>%
|
|
group_by(Ville,Année) %>%
|
|
slice_max(order_by = Nombre, n = 5) -> mostMaleGivenNamesByYear
|
|
prenoms[prenoms$Sexe == "F",] %>%
|
|
group_by(Ville,Année) %>%
|
|
slice_max(order_by = Nombre, n = 5) -> mostFemaleGivenNamesByYear
|
|
mostGivenNamesBySexeAndYear <- rbind(mostMaleGivenNamesByYear, mostFemaleGivenNamesByYear)
|
|
mostGivenNamesBySexeAndYear %>%
|
|
group_by(Prénom,Ville,Année) %>%
|
|
mutate(Naissances=100*sum(Nombre)/sum(NaissancesVilleAnnée)) -> mostGivenNamesBySexeAndYearNormalized
|
|
ggplot(mostGivenNamesBySexeAndYearNormalized,aes(x=Année,y=Naissances)) +
|
|
ggtitle("Top 5 des noms donnés, par sexe, par an et par ville") +
|
|
geom_line(aes(color=Prénom)) +
|
|
geom_point(aes(color=Prénom,shape=Sexe),size=3) +
|
|
geom_dl(aes(label=Prénom), method=list(dl.combine("first.points")), cex = 0.8) +
|
|
facet_wrap("Ville")
|
|
},
|
|
error=function(e) e
|
|
) -> p4
|
|
|
|
|
|
# Plot the average numbers of letters by years by cities
|
|
prenoms %>%
|
|
group_by(Année,Ville) %>%
|
|
summarise(Lettres=mean(nchar(Prénom))) -> averageNumberOfLettersByYear
|
|
ggplot(averageNumberOfLettersByYear,aes(x=Année,y=Lettres)) +
|
|
ggtitle("Nombre moyen de lettres dans les prénoms par année et par ville") +
|
|
geom_point(aes(color=Ville)) +
|
|
geom_line(aes(color=Ville)) -> p5
|
|
|
|
# Plot the average numbers of vowels/consonants by years and by cities
|
|
prenoms %>%
|
|
group_by(Ville, Année) %>%
|
|
summarise(
|
|
Vowels = mean(nchar(gsub("[éèêëàâäïaeiouy]", "", tolower(Prénom)))),
|
|
Consonants = mean(nchar(gsub("[zrtpqsdfghjklmwxcvbnç]", "", tolower(Prénom))))
|
|
) -> averageNumberOfVowelsAndConsonantsByYear
|
|
ggplot(averageNumberOfVowelsAndConsonantsByYear, aes(x=Année,y=Vowels)) +
|
|
ggtitle("Nombre moyen de voyelles dans les prénoms par année et par ville") +
|
|
geom_point(aes(color=Ville)) +
|
|
geom_line(aes(color=Ville)) -> p6
|
|
ggplot(averageNumberOfVowelsAndConsonantsByYear, aes(x=Année,y=Consonants)) +
|
|
ggtitle("Nombre moyen de consonnes dans les prénoms par année et par ville") +
|
|
geom_point(aes(color=Ville)) +
|
|
geom_line(aes(color=Ville)) -> p7
|
|
|
|
# How the number of composed names change through the years
|
|
prenoms[str_detect(prenoms$Prénom, regex("[a-zA-Zéèàï]+-[a-zA-ZéèàÎ]+")),] %>%
|
|
group_by(Année,Ville) %>%
|
|
summarise(nb_composedNames=100*sum(Nombre)/NaissancesVilleAnnée) -> composedNamesByYear
|
|
ggplot(composedNamesByYear,aes(x=Année,y=nb_composedNames)) +
|
|
ggtitle("Nombre de prénoms composés par année et par ville") +
|
|
geom_point(aes(color=Ville)) +
|
|
geom_line(aes(color=Ville)) -> p8
|
|
|
|
# Defining a "hype" criteria and finding the hypest names
|
|
prenoms %>%
|
|
group_by(Année,Ville) -> namesByYearAndCities
|
|
namesByYearAndCities$nbAnnéePrec <- lag(namesByYearAndCities$Nombre)
|
|
namesByYearAndCities$difference <- namesByYearAndCities$Nombre - namesByYearAndCities$nbAnnéePrec
|
|
namesByYearAndCities %>%
|
|
group_by(Année,Ville) %>%
|
|
slice_max(order_by = difference, n = 1) -> hypestNameByYearAndCities
|
|
ggplot(hypestNameByYearAndCities,aes(x=factor(Année),y=difference/NaissancesVilleAnnée)) +
|
|
ggtitle("Prénom le plus hype par année et par ville") +
|
|
geom_text(aes(label=Prénom,color=Prénom)) +
|
|
facet_wrap("Ville") -> p9
|
|
|
|
return(list(p1,p2,p3,p4,p5,p6,p7,p8,p9))
|
|
}
|
|
|
|
combinedParisToulouse <- nameStudyCombined(allPrenoms)
|
|
combinedParisToulouse
|
|
|
|
# The most unshared names
|
|
allPrenoms %>%
|
|
group_by(Ville) %>%
|
|
mutate(NaissancesVille=sum(Nombre)) %>%
|
|
group_by(Prénom,Ville) %>%
|
|
mutate(Proportion=sum(Nombre)/NaissancesVille) %>%
|
|
group_by(Prénom,Ville) -> namesByCities
|
|
namesByCities$autreVilleProportion <- lag(namesByCities$Proportion)
|
|
namesByCities$difference <- namesByCities$Proportion - namesByCities$autreVilleProportion
|
|
|
|
|
|
### A Tale of many cities
|
|
# read the table prenomsRennesStrassNantesToul.csv
|
|
prenomsRennesStrassNantesToul <- read.csv('/home/labourde/Bureau/tp-analyse-explorative/prenomsRennesStrassNantesToul.csv',sep=";")
|
|
prenomsRennesStrassNantesToul <-rename(prenomsRennesStrassNantesToul, Année = ANNAISS)
|
|
prenomsRennesStrassNantesToul <-rename(prenomsRennesStrassNantesToul, Ville = LBCOM)
|
|
prenomsRennesStrassNantesToul <-rename(prenomsRennesStrassNantesToul, Sexe = SEX)
|
|
prenomsRennesStrassNantesToul <-rename(prenomsRennesStrassNantesToul, Prénom = PRN)
|
|
prenomsRennesStrassNantesToul <-rename(prenomsRennesStrassNantesToul, Nombre = NRB)
|
|
prenomsRennesStrassNantesToul[prenomsRennesStrassNantesToul$Ville=="RENNES",] -> a
|
|
combinedRennesStrassNantesToul <- nameStudyCombined(prenomsRennesStrassNantesToul)
|
|
combinedRennesStrassNantesToul[1]
|
|
combinedRennesStrassNantesToul[2]
|
|
combinedRennesStrassNantesToul[3]
|
|
combinedRennesStrassNantesToul[4]
|
|
combinedRennesStrassNantesToul[5]
|
|
combinedRennesStrassNantesToul[6]
|
|
combinedRennesStrassNantesToul[7]
|
|
combinedRennesStrassNantesToul[8]
|
|
combinedRennesStrassNantesToul[9]
|