• Nombre de personnes pauvres par département
  • Répartition de la pauvreté par tranche d’âge
  • Taux de pauvreté des familles monoparentales
  • Taux de pauvreté des locataires

Main Content

  • Nombre de polices-gendarmeries, de banques et de grandes surface par département
  • Nombre d’urgences et de médecins généralistes par département
  • Nombre de pharmacies et infirmiers par département
  • Nombre de bassins de natation et de salle multisports par département
  • Nombre d’écoles, collèges et lycées par département

  • Clustering des départements graphique
  • Clustering des départements en dendrogramme

---
title: "Mon Flexdashboard"
output: 
  flexdashboard::flex_dashboard:
    storyboard: true
    social: menu
    source: embed
---

```{r setup, include=FALSE}
library(DT)
library(dygraphs)
library(plotly)
library(ggplot2)
library(shiny)
library(shinyWidgets)
library(flexdashboard)
library(dplyr)
library(tidyr)
library(cluster)
library(factoextra)
library(reshape2)
library(shinythemes)

pauv <- read.csv2("pauv.csv")
pop <- read.csv2("pop.csv")
serv <- read.csv2("services_a_la_pop.csv")
scolarité <- read.csv2("scolarite.csv")

df_joint = merge(pop, pauv, by = "Libellé")

top5_pauvres <- df_joint %>% 
  arrange(desc(Taux.pauvreté.2021)) %>% 
  head(5)

top5_riches <- df_joint %>% 
  arrange(Taux.pauvreté.2021) %>% 
  head(5)

top_departements <- bind_rows(top5_pauvres, top5_riches) %>% 
  arrange(desc(Taux.pauvreté.2021))

top_departements <- top_departements %>% 
  mutate(Nombre_pauvres = round(Population.municipale.2022 * (Taux.pauvreté.2021 / 100)))

top_deps <- bind_rows(top5_pauvres, top5_riches) %>% 
  arrange(desc(Taux.pauvreté.2021))


df_services = merge(serv, pauv, by = "Libellé")

top5_pauvres_2 <- df_services %>% 
  arrange(desc(Taux.pauvreté.2021)) %>% 
  head(5)

top5_riches_2 <- df_services %>% 
  arrange(Taux.pauvreté.2021) %>% 
  head(5)

top_departements_2 <- bind_rows(top5_pauvres_2, top5_riches_2) %>% 
  arrange(desc(Taux.pauvreté.2021))


df_service = subset(top_departements_2, select = -c(Code.x))

```





Etude sur la pauvreté {.storyboard}
===

### Nombre de personnes pauvres par département

```{r}
ggplot(top_departements, aes(x = reorder(Code.y, -Nombre_pauvres), y = Nombre_pauvres, fill = Taux.pauvreté.2021)) +
  geom_bar(stat = "identity") +
  coord_flip() +
  labs(title = "Nombre de personnes pauvres par département", x = "Département", y = "Nombre de pauvres") +
  scale_fill_gradient(low = "blue", high = "red")
```

### Répartition de la pauvreté par tranche d’âge

```{r}
df_pauvrete_age <- top_departements %>% 
  select(Code.y, starts_with("Taux.de.pauvreté.")) %>% 
  pivot_longer(cols = starts_with("Taux.de.pauvreté."), names_to = "Tranche_age", values_to = "Taux")

ggplot(df_pauvrete_age, aes(x = Tranche_age, y = Taux, fill = Code.y)) +
  geom_bar(stat = "identity", position = "dodge") +
  coord_flip() +
  labs(title = "Taux de pauvreté par tranche d'âge", x = "Tranche d'âge", y = "Taux de pauvreté (%)")
```


### Taux de pauvreté des familles monoparentales

```{r}
top_departements <- top_departements %>% arrange(desc(Taux.pauvreté.familles.monoparentales.2021))

ggplot(top_departements, aes(x = reorder(Code.y, -Taux.pauvreté.familles.monoparentales.2021), 
                             y = Taux.pauvreté.familles.monoparentales.2021, fill = Taux.pauvreté.2021)) +
  geom_bar(stat = "identity") +
  coord_flip() +
  labs(title = "Taux de pauvreté des familles monoparentales", x = "Département", y = "Taux de pauvreté (%)") +
  scale_fill_gradient(low = "blue", high = "red")
```




### Taux de pauvreté des locataires

```{r}

top_departements <- top_departements %>% arrange(desc(Taux.pauvreté.locataires.2021))

ggplot(top_departements, aes(x = reorder(Code.y, -Taux.pauvreté.locataires.2021), 
                             y = Taux.pauvreté.locataires.2021, fill = Taux.pauvreté.2021)) +
  geom_bar(stat = "identity") +
  coord_flip() +
  labs(title = "Taux de pauvreté des locataires", x = "Département", y = "Taux de pauvreté (%)") +
  scale_fill_gradient(low = "blue", high = "red")
```








Etude des 5 départements les plus pauvres et les plus riches sur différents aspects {.storyboard}
===


Sidebar {.sidebar}
-------------------------------------

```{r}
selectInput("dep", "Sélectionnez un département :", choices = top_deps$Libelle.x)
```

Main Content
-------------------------------------

```{r}
renderText({
  paste("Vous avez sélectionné :", input$dep)
})
```





### Nombre de polices-gendarmeries, de banques et de grandes surface par département

```{r}
# Fonction pour générer un graphique en barres par Libellé
generer_graphique_par_libelle <- function(df, variables, titre) {
  df_melt <- melt(df, id.vars = "Libellé", measure.vars = variables, variable.name = "Service", value.name = "Nombre")
  
  ggplot(df_melt, aes(x = Libellé, y = Nombre, fill = Service)) +
    geom_bar(stat = "identity", position = "dodge") +
    theme_minimal() +
    labs(title = titre, x = "Libellé", y = "Nombre") +
    theme(axis.text.x = element_text(angle = 45, hjust = 1))
}

# Graphique pour Police-Gendarmerie, Banques et Grandes surfaces
graph1 <- generer_graphique_par_libelle(df_service, 
                                        c("nb.Police.Gendarmerie", "nb.Banque.caisse.d.épargne", "nb.Grande.surface"),
                                        "Nombre de services par Code : Police, Banques et Grandes surfaces")
print(graph1)
```


### Nombre d'urgences et de médecins généralistes par département

```{r}
# Graphique pour Urgences et Médecins généralistes
graph2 <- generer_graphique_par_libelle(df_service, 
                                        c("nb.Urgences", "nb.Médecin.généraliste"),
                                        "Nombre d'urgences et de médecins généralistes par Code")
print(graph2)
```

### Nombre de pharmacies et infirmiers par département

```{r}
# Graphique pour Pharmacies et Infirmiers
graph3 <- generer_graphique_par_libelle(df_service, 
                                        c("nb.Pharmacie", "nb.Infirmier"),
                                        "Nombre de pharmacies et d'infirmiers par Code")
print(graph3)
```

### Nombre de bassins de natation et de salle multisports par département

```{r}
# Graphique pour Bassins de natation et Salles multisports
graph4 <- generer_graphique_par_libelle(df_service, 
                                        c("nb.Bassin.de.natation", "nb.Salles.multisports.gymnases"),
                                        "Nombre de bassins de natation et salles multisports par Code")
print(graph4)
```

### Nombre d'écoles, collèges et lycées par département

```{r}
# Graphique pour Écoles, Collèges et Lycées
graph5 <- generer_graphique_par_libelle(df_service, 
                                        c("nb.École.maternelle.primaire.élémentaire", "nb.Collège", "nb.Lycée"),
                                        "Nombre d'écoles, collèges et lycées par Code")
print(graph5)
```




Identification de groupe parmi les départements {.storyboard}
===

### Clustering des départements graphique

```{r}
top10_pauvres <- df_joint %>% 
  arrange(desc(Taux.pauvreté.2021)) %>% 
  head(10)

top10_riches <- df_joint %>% 
  arrange(Taux.pauvreté.2021) %>% 
  head(10)

top_departements2 <- bind_rows(top10_pauvres, top10_riches) %>% 
  arrange(desc(Taux.pauvreté.2021))

top_departements2 <- top_departements2 %>% 
  mutate(Nombre_pauvres = round(Population.municipale.2022 * (Taux.pauvreté.2021 / 100)))



df_joint = subset(df_joint, select = -c(Code.x) )

# Conversion des colonnes numériques
df_joint <- df_joint %>%
  mutate(across(-c(Libellé, Code.y), as.numeric))

# Suppression des valeurs manquantes (optionnel)
df_joint <- na.omit(df_joint)

# Sélection des colonnes à normaliser (toutes sauf Libellé et Code.y)
vars_to_normalize <- colnames(df_joint)[!colnames(df_joint) %in% c("Libellé", "Code.y")]

# Normalisation des données (Min-Max Scaling)
df_normalized <- df_joint %>%
  mutate(across(all_of(vars_to_normalize), ~ (.-min(.))/(max(.)-min(.))))



# Application de k-means avec k=5 (ajuster selon le graphique précédent)
set.seed(123)
km_res <- kmeans(df_normalized[, vars_to_normalize], centers = 5, nstart = 25)

# Ajout des clusters au dataframe
df_joint$Cluster <- as.factor(km_res$cluster)

# Visualisation des clusters
fviz_cluster(km_res, data = df_normalized[, vars_to_normalize], 
             geom = "point", ellipse.type = "convex",
             labelsize = 5, ggtheme = theme_minimal(), xlab = NULL, ylab = NULL)
```


### Clustering des départements en dendrogramme

```{r}
top_departements2 = subset(top_departements2, select = -c(Code.x) )

# Conversion des colonnes numériques
top_departements2 <- top_departements2 %>%
  mutate(across(-c(Libellé, Code.y), as.numeric))

# Suppression des valeurs manquantes (optionnel)
top_departements2 <- na.omit(top_departements2)

# Sélection des colonnes à normaliser (toutes sauf Libellé et Code.y)
vars_to_normalize <- colnames(top_departements2)[!colnames(df_joint) %in% c("Libellé", "Code.y")]

# Normalisation des données (Min-Max Scaling)
df_normalized <- top_departements2 %>%
  mutate(across(all_of(vars_to_normalize), ~ (.-min(.))/(max(.)-min(.))))




# Clustering hiérarchique pour visualisation
hc <- hclust(dist(df_normalized[, vars_to_normalize]), method = "ward.D2")
plot(hc, labels = top_departements2$Code.y, main = "Dendrogramme des 10 pires et 10 meilleurs départements", xlab = "Départements", ylab = "Distance")
```