TyT2019|W13: Population pyramid ou comment utiliser des histrogrammes pour comparer des populations

Pour le #Tidytuesday de cette semaine, nous avons accès aux données des animaux de compagnie enregistrés à Seatle. On retrouve les données brutes sur le site Seattle’s open data portal. Peu de données sont présentes, mais nous disposons tout de même de la date de délivrance de la licence, du nom de l’animal, de son espèce, de sa race et de son code postal. On devrait pourvoir s’amuser!

Mes objectifs pour cette semaine:
1) Comparer les noms les plus populaires pour les chats et les chiens.
2) Apprendre comment faire des pyramides de populations

IMPORTER

data<- read_csv("Seattle_Pet_Licenses.csv",
               col_names = TRUE) #identifier la première ligne comme nom de colonne
FALSE Parsed with column specification:
FALSE cols(
FALSE   `License Issue Date` = col_character(),
FALSE   `License Number` = col_character(),
FALSE   `Animal's Name` = col_character(),
FALSE   Species = col_character(),
FALSE   `Primary Breed` = col_character(),
FALSE   `Secondary Breed` = col_character(),
FALSE   `ZIP Code` = col_character()
FALSE )

EXPLORER

glimpse(data)
## Observations: 52,519
## Variables: 7
## $ `License Issue Date` <chr> "November 16 2018", "November 11 2018", "No…
## $ `License Number`     <chr> "8002756", "S124529", "903793", "824666", "…
## $ `Animal's Name`      <chr> "Wall-E", "Andre", "Mac", "Melb", "Gingersn…
## $ Species              <chr> "Dog", "Dog", "Dog", "Cat", "Cat", "Dog", "…
## $ `Primary Breed`      <chr> "Mixed Breed, Medium (up to 44 lbs fully gr…
## $ `Secondary Breed`    <chr> "Mix", "Dachshund, Standard Wire Haired", N…
## $ `ZIP Code`           <chr> "98108", "98117", "98136", "98117", "98144"…
Hmisc::describe(data$Species)
## data$Species 
##        n  missing distinct 
##    52519        0        4 
##                                   
## Value        Cat   Dog  Goat   Pig
## Frequency  17294 35181    38     6
## Proportion 0.329 0.670 0.001 0.000
Hmisc::describe(data$`License Issue Date`)
## data$`License Issue Date` 
##        n  missing distinct 
##    52519        0     1064 
## 
## lowest : April 01 2017     April 01 2018     April 02 2017     April 02 2018     April 03 2014    
## highest: September 29 2017 September 29 2018 September 30 2015 September 30 2017 September 30 2018

Nous disposons de plusieurs variables, mais pour ce que j’ai en tête j’ai besion de créer un ensemble de données où on voit la fréquence des noms pour les chats et les chiens. Voici comment je m’y prend:

PRÉPARER

data_name%
  filter(Species %in% c("Cat", "Dog"))%>% #garder seulement les chiens et les chat
  select(Species,`Animal's Name`)%>% # conserver seulement les colonnes pertinentes pour l'analyse
  group_by(Species,`Animal's Name`)%>%
  summarise(nombre=dplyr::n())%>%
  filter(!`Animal's Name`%in% NA)%>%
  filter(nombre>=100)%>% #sélectionner les 37 noms les plus populaires
  mutate(nombre=ifelse(Species=="Cat", -nombre, nombre))#nécessaire pour faire le grapgique

VISUALISER

#Graphique
gg<-ggplot(data=data_name, aes(x=reorder(`Animal's Name`,desc(`Animal's Name`)), y=nombre, fill=Species))
gg<-gg + geom_bar(stat = "identity")
gg<-gg + facet_share(~Species, dir = "h", scales = "free", reverse_num = TRUE)
gg<-gg + coord_flip()
gg<-gg + scale_fill_manual(values = c("#C1292E", "#235789"))
#modifier la légende
gg<-gg + theme(legend.position="none")
#modifier le thème
gg<-gg +theme(panel.border = element_rect(size=0.5, color="#A9A9A9", fill = NA),
              panel.background = element_blank(),
              plot.background = element_blank(),
              panel.grid.major.y= element_blank(),
              panel.grid.major.x= element_blank(),
              panel.grid.minor = element_blank(),
              axis.line.y = element_blank(),
              axis.line.x = element_blank(),
              axis.ticks.y = element_blank(),
              axis.ticks.x = element_blank())
#ajouter les titres
gg<-gg + labs(title="Quels sont les noms d'animaux de compagnie les plus populaires à Seatle?",
              subtitle=NULL,
              y=NULL,
              x=NULL)
gg<-gg + theme(plot.title    = element_text(hjust=0,size=14, color="#000000", face="bold"),
               plot.subtitle = element_text(hjust=0,size=12, color="#000000"),
               axis.title.y  = element_blank(),
               axis.title.x  = element_blank(),
               axis.text.x   = element_blank(),
               axis.text.y   = element_text(hjust=0,size=10, color="#000000"))

Voici ce que ça donne:

On cosntate que les noms les plus populaires pour les chiens ne sont pas nécessairement populaires pour les chats. C’est intéressant, mais ce n’est pas ce que j’avais en tête comme graphique. J’aimerais voir quels sont les noms les plus populaires à la fois pour les chiens et pour les chats. Voici comment on peut ajuster ça:

PRÉPARER

data_name_pop%
  filter(Species %in% c("Cat", "Dog"))%>% #garder seulement les chiens et les chat
  select(Species,`Animal's Name`)%>% # conserver seulement les colonnes pertinentes pour l'analyse
  group_by(Species,`Animal's Name`)%>%
  summarise(nombre=dplyr::n())%>%
  filter(!`Animal's Name`%in% NA)%>% # retirer les lignes sans noms
  spread(Species, nombre)%>%
  filter(!Cat %in% NA)%>% #retirer les lignes ou le nom ne s'applique pas au chat
  filter(!Dog %in% NA)%>% #retirer les lignes ou le nom ne s'applique pas au chien
  mutate(somme=Cat+Dog)%>%
  filter(somme >=173)%>% #garder les 20 noms les plus populaires
  select(`Animal's Name`, Cat, Dog)%>%
  gather(key=Species, value=nombre, -`Animal's Name`)%>%
  mutate(nombre=ifelse(Species=="Cat", -nombre, nombre))#nécessaire pour faire le graphique

VISUALISER

#Graphique
gg<-ggplot(data=data_name_pop, aes(x=reorder(`Animal's Name`,desc(`Animal's Name`)), y=nombre, fill=Species))
gg<-gg + geom_bar(stat = "identity")
gg<-gg + facet_share(~Species, dir = "h", scales = "free", reverse_num = TRUE)
gg<-gg + coord_flip()
gg<-gg + scale_fill_manual(values = c("#C1292E", "#235789"))
#modifier la légende
gg<-gg + theme(legend.position="none")
#modifier le thème
gg<-gg +theme(panel.border = element_rect(size=0.5, color="#A9A9A9", fill = NA),
              panel.background = element_blank(),
              plot.background = element_blank(),
              panel.grid.major.y= element_blank(),
              panel.grid.major.x= element_blank(),
              panel.grid.minor = element_blank(),
              axis.line.y = element_blank(),
              axis.line.x = element_blank(),
              axis.ticks.y = element_blank(),
              axis.ticks.x = element_blank())
#ajouter les titres
gg<-gg + labs(title="Quels sont les noms les plus populaires pour les chats et les chiens de Seatle?",
              subtitle="Lucy est le nom le plus utilisé pour leur animaux de compagine",
              y=NULL,
              x=NULL)
gg<-gg + theme(plot.title    = element_text(hjust=0,size=14, color="#000000", face="bold"),
               plot.subtitle = element_text(hjust=0,size=12, color="#000000"),
               axis.title.y  = element_blank(),
               axis.title.x  = element_blank(),
               axis.text.x   = element_blank(),
               axis.text.y   = element_text(hjust=0,size=10, color="#000000"))

Voici ce que ça donne:

 

On obtient deux histogrammes dos à dos qui montrent les fréquences des noms qui sont à la fois utilisés pour les chiens et les chats.

 

Vous voulez en apprendre plus sur ma démarche? Allez écouter l’épisode de podcast dans lequel j’explique mes réflexions pour arriver à ce résultat.

Une réflexion sur “TyT2019|W13: Population pyramid ou comment utiliser des histrogrammes pour comparer des populations

  1. Pingback: Podcast ADV#2: Utiliser des histrogrammes pour comparer des populations | Johanie Fournier, agr.

Répondre

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s