Etude sur la pauvreté

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

Etude des 5 départements les plus pauvres et les plus riches sur différents aspects

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

Identification de groupe parmi les départements

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")
```