Skip to content

Commit

Permalink
Merge pull request #85 from dataforgoodfr/oumaima-my-branch
Browse files Browse the repository at this point in the history
mobilité d'écran
  • Loading branch information
Ochamem authored May 31, 2024
2 parents 04c24f1 + b0f53e8 commit 296368c
Show file tree
Hide file tree
Showing 2 changed files with 172 additions and 0 deletions.
34 changes: 34 additions & 0 deletions app/odi_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,3 +121,37 @@ def extract_text_between_brackets(string: str) -> str:
).strip() # Return the matched group and strip any extra whitespace
return None # Return None if no match is found

def prepare_mobility_data(data: DataFrame, colname_suffixes: set[str]) -> DataFrame:
"""
Extracts and prepares mobility data for analysis from multiple characters.
Parameters:
data (DataFrame): The original dataset containing mobility information for characters.
colname_suffixes (Set): Set of suffixes indicating different types of mobility
information.
Returns:
DataFrame: A long-format DataFrame ready for analysis and visualization.
"""

# Prepare and concatenate data for all characters with accurate column names
all_characters_mobility_data = pd.DataFrame()

# Loop through each character number
for i in range(1, 5):
# Prepare the mapping for each character's mobility columns using the correct format
colnames = {
f"character{i}_mobility_vehicule [{suffix}]": f"{suffix}" for suffix in colname_suffixes # noqa: E501
}

if len(colnames) > 0:
# Select and rename the relevant columns for each character's mobility information
temp_data = data[list(colnames.keys())].rename(columns=colnames)

# Append to the overall DataFrame
all_characters_mobility_data = pd.concat([all_characters_mobility_data, temp_data],
ignore_index=True)
# Afficher le DataFrame all_characters_mobility_data


return all_characters_mobility_data
138 changes: 138 additions & 0 deletions app/odi_streamlit.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from odi_functions import (
extract_text_between_brackets,
prepare_character_data,
prepare_mobility_data,
prepare_technology_data,
)

Expand Down Expand Up @@ -1059,6 +1060,143 @@ def get_chart_82052330(df: pd.DataFrame, liste: list[str], titre: str) -> None:
# Objectif: répondre aux questions suivantes:
# Comment se déplace-t-on à l'écran ?
# Est-ce que ça varie selon le type de personnage et leur sensibilité à l'écologie ?
# Préparer les données pour l'analyse de la mobilité

colname_suffixes={"Voiture individuelle","Covoiturage","Transports en commun", "VTC/Taxi",
"Chauffeur privé", "Hélicoptère", "Deux-roues motorisés" }

# Définir un dictionnaire de correspondance pour les noms de colonne
column_mapping = {
"Voiture individuelle": "Voiture individuelle",
"Covoiturage": "Covoiturage",
"Transports en commun": "Transports en commun",
"VTC/Taxi": "VTC/Taxi",
"Chauffeur privé": "Chauffeur privé",
"Hélicoptère": "Hélicoptère",
"Deux-roues motorisés": "Deux-roues motorisés",
"Autre": "Autre",
}

# Maintenant, vous pouvez utiliser ce dictionnaire pour convertir les noms de colonne
nouveau_colname_suffixes = {column_mapping[nom] for nom in colname_suffixes}
# Convertir l'ensemble en un dictionnaire où chaque nom est associé à lui-même
nouveau_colname_suffixes = {nom: nom for nom in nouveau_colname_suffixes}

with st.container():
st.subheader("Analyse de la mobilité à l'écran")
st.markdown("- **Transport individuel**")
# Utiliser le nouveau dictionnaire de suffixes dans la fonction prepare_mobility_data
mobility_data = prepare_mobility_data(data=data, colname_suffixes=nouveau_colname_suffixes)

attribut_personne = prepare_character_data(data=data,colname_suffixes={"name", "gender",
"ethnic_origin",
"interested_ecology",
"age_group",
"importance",
"sentiment"})

##Selon l'age de group##
ct = pd.crosstab(attribut_personne["age_group"], mobility_data["Voiture individuelle"])


# Visualiser la proportion des modes de transport individuel en fonction d'age
# Définir la palette de couleurs discrètes
color_map = [
(0, "#98FB98"), # Adolescent
(0.25, "#99CCFF"), # Jeune adulte (moins de 30 ans)
(0.5, "#3A4EC6"), # Adulte (30 - 50 ans)
(0.75, "#FF5050"), # Senior (plus de 50 ans)
(1, "#101727"), # Plus de 70 ans
]

# Generate a heatmap
fig = px.imshow(ct, text_auto=True, aspect="auto",
labels=dict(x="Voiture individuelle", y="age_group", color="Count"),
title="Répartition de la mobilité par Voiture individuelles selon l'age_group", # noqa: E501
color_continuous_scale=color_map)

# Update layout for clarity
fig.update_xaxes(side="bottom")

##Selon le genre##

# Display the plot
st.plotly_chart(fig)

ct = pd.crosstab(index=attribut_personne["gender"], columns=mobility_data["Voiture individuelle"]) # noqa: E501
# Visualiser la proportion des modes de transport individuel en fonction de l'âge

# Générer un heatmap avec la palette de couleurs spécifiée
fig = px.imshow(ct, text_auto=True, aspect="auto",
labels=dict(x="Voiture individuelle", y="gender", color="Count"),
title="Répartition de la mobilité par Voiture individuelles selon le genre",
color_continuous_scale=color_map)

# Mettre à jour la mise en page pour plus de clarté
fig.update_xaxes(side="bottom")

# Display the plot
st.plotly_chart(fig)

##Selon l'origine ethnique##
ct = pd.crosstab(index=attribut_personne["ethnic_origin"],
columns=mobility_data["Voiture individuelle"])
# Visualiser la proportion des modes de transport individuel en fonction de l'âge

# Générer un heatmap avec la palette de couleurs spécifiée
fig = px.imshow(ct, text_auto=True, aspect="auto",
labels=dict(x="Voiture individuelle", y="ethnic_origin", color="Count"),
title="Répartition de la mobilité par Voiture individuelles selon l'origine " # noqa: E501
"ethnique",
color_continuous_scale=color_map)

# Mettre à jour la mise en page pour plus de clarté
fig.update_xaxes(side="bottom")

# Display the plot
st.plotly_chart(fig)

##Selon l'écologie##

ct = pd.crosstab(index=attribut_personne["interested_ecology"],
columns=mobility_data["Voiture individuelle"])
# Visualiser la proportion des modes de transport individuel en fonction de l'âge
# Générer un heatmap avec la palette de couleurs spécifiée
fig = px.imshow(ct, text_auto=True, aspect="auto",
labels=dict(x="Voiture individuelle", y="interested_ecology",
color="Count"),
title="Répartition de la mobilité par Voiture individuelles selon"
"l'écologie",
color_continuous_scale=color_map)

# Mettre à jour la mise en page pour plus de clarté
fig.update_xaxes(side="bottom")

# Display the plot
st.plotly_chart(fig)

st.markdown("- **Transports en commun**")
##Selon l'age groupe##

ct = pd.crosstab(index=attribut_personne["age_group"],
columns=mobility_data["Transports en commun"])

# Visualiser la proportion des modes de transport individuel en fonction de l'âge

# Générer un heatmap avec la palette de couleurs spécifiée
fig = px.imshow(ct, text_auto=True, aspect="auto",
labels=dict(x="Transports en commun", y="age_group", color="Count"),
title="Répartition de la mobilité par transport commun selon l'age_group",
color_continuous_scale=color_map)

# Mettre à jour la mise en page pour plus de clarté
fig.update_xaxes(side="bottom")

# Display the plot
st.plotly_chart(fig)




# TODO Analyse de l'habitat
# Visualisation générale des modes d'habitat à l'écran, avec filtres possibles sur les
Expand Down

0 comments on commit 296368c

Please sign in to comment.