Skip to content

Commit

Permalink
Add missing dependencies, fix linting errors, bump ruff to latest
Browse files Browse the repository at this point in the history
  • Loading branch information
kaaloo committed Apr 16, 2024
1 parent 8780073 commit 9a945da
Show file tree
Hide file tree
Showing 5 changed files with 1,178 additions and 86 deletions.
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
repos:
- repo: https://github.com/charliermarsh/ruff-pre-commit
# Ruff version.
rev: "v0.0.254"
rev: "v0.3.7"
hooks:
- id: ruff
args: [--fix, --exit-non-zero-on-fix]
Expand Down
19 changes: 11 additions & 8 deletions app/analyse_app_OLD.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,11 @@
st.divider()
st.header("Fait par la dream team _Analyse de données_")
st.write(
"Cette application analyse les données du PoC. On peut se faire plaisir en y ajoutant tous les graphiques nécessaires. "
+ "Le code est à nettoyer pour une meilleure maintenance ;-) "
(
"Cette application analyse les données du PoC. On peut se faire plaisir"
" en y ajoutant tous les graphiques nécessaires. "
"Le code est à nettoyer pour une meilleure maintenance ;-) "
),
)


Expand All @@ -28,8 +31,9 @@
# XXX est un nombre
# Et Supprimer les lignes où toutes les valeurs sont NaN
df = data[~data["TITRE"].str.contains(r"Contenu \d+", na=False)].dropna(how="all")
df
# ne conserver qu'une ligne sur 4 (ce qui revient à supprimer les informations des personnages 2, 3, 4 quand ils existent)

# ne conserver qu'une ligne sur 4 (ce qui revient à supprimer les informations
# des personnages 2, 3, 4 quand ils existent)
df_truncated = df.iloc[::4]
# Nettoyage du data set

Expand All @@ -39,10 +43,9 @@
### Convertir les types de données correctement ici
# Convertir les années en entier
annee = "ANNEE"
df_truncated[annee] = (
pd.to_numeric(df_truncated[annee], errors="coerce").fillna(0).astype(int)
)
# Trouver les titres qui apparaissent plus de 4 fois dans la colonne "TITRE" (car chaque titre a 4 lignes, une pour chaque personnage)
df_truncated[annee] = pd.to_numeric(df_truncated[annee], errors="coerce").fillna(0).astype(int)
# Trouver les titres qui apparaissent plus de 4 fois dans la colonne "TITRE"
# (car chaque titre a 4 lignes, une pour chaque personnage)
titles_more_than_once = df_truncated["TITRE"].value_counts()
titles_more_than_once = titles_more_than_once[titles_more_than_once > 1]

Expand Down
138 changes: 62 additions & 76 deletions app/odi_streamlit.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,53 +3,37 @@
Here's our first attempt at using data to create a table:
"""

import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt


# O.Importation des librairies nécessaires pour le script
# Core Pkgs - Web application
import streamlit as st
from streamlit_option_menu import option_menu

# Other Pkgs
from PIL import Image
import os
import random
# Export fichier

# Datavisualisation
import altair as alt
import plotly.graph_objects as go
import plotly.express as px
import matplotlib.pyplot as plt
from plotly.subplots import make_subplots

import pandas as pd
import numpy as np

import time
import re
import plotly.express as px

import json
# O.Importation des librairies nécessaires pour le script
# Core Pkgs - Web application
import streamlit as st

# Export fichier
import pickle
# Other Pkgs

# 3.Setup de l'application Streamlit - Streamlit webpage properties / set up the app with wide view preset and a title
# 3.Setup de l'application Streamlit - Streamlit webpage properties / set up the app
# with wide view preset and a title
st.set_page_config(
page_title="Observatoire des Imaginaires", page_icon="herb", layout="wide"
page_title="Observatoire des Imaginaires",
page_icon="herb",
layout="wide",
)


@st.cache_data # 👈 Add the caching decorator
def load_data(file):
def load_data(file: str) -> pd.DataFrame:
df = pd.read_csv(file, skiprows=1)
return df


# Load the data
file_path = "../data/AnalyseReponsesTreatedData.csv" #'../data/Analyse réponses.xlsx - Treated data.csv'
file_path = "../data/AnalyseReponsesTreatedData.csv" #'../data/Analyse réponses.xlsx - Treated data.csv' # noqa: E501
# ne pas lire la première ligne
data = load_data(file_path)

Expand All @@ -74,8 +58,11 @@ def load_data(file):

st.title("Fait par la dream team _Analyse de données_")
st.write(
"Cette application analyse les données du PoC. On peut se faire plaisir en y ajoutant tous les graphiques nécessaires. "
+ "Le code est à nettoyer pour une meilleure maintenance ;-) "
(
"Cette application analyse les données du PoC. On peut se faire plaisir"
" en y ajoutant tous les graphiques nécessaires. "
"Le code est à nettoyer pour une meilleure maintenance ;-) "
),
)


Expand Down Expand Up @@ -104,7 +91,8 @@ def load_data(file):
# Et Supprimer les lignes où toutes les valeurs sont NaN
df = data[~data["TITRE"].str.contains(r"Contenu \d+", na=False)].dropna(how="all")

# ne conserver qu'une ligne sur 4 (ce qui revient à supprimer les informations des personnages 2, 3, 4 quand ils existent)
# ne conserver qu'une ligne sur 4 (ce qui revient à supprimer
# les informations des personnages 2, 3, 4 quand ils existent)
df_truncated = df.iloc[::4]

# Nettoyage du data set
Expand Down Expand Up @@ -154,10 +142,11 @@ def load_data(file):

st.write()
st.write(
f":blue[{round(100*len(set(df_truncated[df_truncated.TYPE == 'FILM']['TITRE']))/len(set(df_truncated['TITRE'])),2)}%] des contenus renseignés sont des films vs :blue[{round(100*len(set(df_truncated[df_truncated.TYPE == 'SÉRIE']['TITRE']))/len(set(df_truncated['TITRE'])),2)}%] des séries."
f":blue[{round(100*len(set(df_truncated[df_truncated.TYPE == 'FILM']['TITRE']))/len(set(df_truncated['TITRE'])),2)}%] des contenus renseignés sont des films vs :blue[{round(100*len(set(df_truncated[df_truncated.TYPE == 'SÉRIE']['TITRE']))/len(set(df_truncated['TITRE'])),2)}%] des séries.", # noqa: E501
)

# Trouver les titres qui apparaissent plus de 4 fois dans la colonne "TITRE" (car chaque titre a 4 lignes, une pour chaque personnage)
# Trouver les titres qui apparaissent plus de 4 fois dans la colonne "TITRE"
# (car chaque titre a 4 lignes, une pour chaque personnage)


titles_more_than_once = (
Expand All @@ -172,21 +161,29 @@ def load_data(file):
with st.container(border=True):
st.header("Films les plus fréquents")
col_freq_film_select, col_freq_film_vide, col_freq_film_graph = st.columns(
[2, 0.5, 5]
[2, 0.5, 5],
)
with col_freq_film_select:
type_choice = st.selectbox(
"Choisir un type", titles_more_than_once["TYPE"].unique(), index=None
"Choisir un type",
titles_more_than_once["TYPE"].unique(),
index=None,
)
with col_freq_film_graph:
if type_choice == "FILM":
t = titles_more_than_once.loc[
titles_more_than_once["TYPE"] == "FILM"
].sort_values(by="compte", ascending=True)
].sort_values(
by="compte",
ascending=True,
)
elif type_choice == "SÉRIE":
t = titles_more_than_once.loc[
titles_more_than_once["TYPE"] == "SÉRIE"
].sort_values(by="compte", ascending=True)
].sort_values(
by="compte",
ascending=True,
)
else:
t = titles_more_than_once.sort_values(by="compte", ascending=True)

Expand All @@ -210,20 +207,24 @@ def load_data(file):

date_min = str(df_truncated.ANNEE.min())
date_max = str(df_truncated.ANNEE.max())
date_pareto = date_group_df[date_group_df["periode_percent"] <= 80][
"ANNEE"
].min()
date_pareto = (
date_group_df[date_group_df["periode_percent"] <= 80]["ANNEE"].min() # noqa: PLR2004
)
date_value_pareto = int(
round(
date_group_df[date_group_df["periode_percent"] <= 80][
date_group_df[date_group_df["periode_percent"] <= 80][ # noqa: PLR2004
"periode_percent"
].max(),
0,
)
),
)

st.markdown(
f"Les contenus datent d`une période qui s`étend de {date_min} à {date_max}. {date_value_pareto}% des contenus sont postérieurs à {date_pareto}."
(
f"Les contenus datent d`une période qui s`étend de {date_min}"
f" à {date_max}. {date_value_pareto}% des contenus sont postérieurs à"
f" {date_pareto}."
),
)

st.bar_chart(date_group_df, x="ANNEE", y="nb_titre")
Expand All @@ -246,25 +247,27 @@ def load_data(file):
0,
)
country_group_df["country_percent"] = round(
100 * (country_group_df.nb_titre / country_group_df.nb_titre.sum()), 2
100 * (country_group_df.nb_titre / country_group_df.nb_titre.sum()),
2,
)

country_value_pareto = int(
round(
country_group_df[country_group_df["country_percent"] >= 10][
country_group_df[country_group_df["country_percent"] >= 10][ # noqa: PLR2004
"country_percent"
].sum(),
2,
)
),
)
country_group_df_pareto = country_group_df[
country_group_df["country_percent"] >= 10
country_group_df["country_percent"] >= 10 # noqa: PLR2004
][["pays_rework", "country_percent"]].sort_values(
"country_percent", ascending=False
"country_percent",
ascending=False,
)

st.write(
f"A **:blue[{country_value_pareto}%]**, les 2 principaux pays dont les contenus sont les plus visionnés sont : {country_group_df.nlargest(2,'country_percent').reset_index(drop=True)['pays_rework'][0].capitalize()} ({country_group_df.nlargest(2,'country_percent').reset_index(drop=True)['country_percent'][0]}%) et {country_group_df.nlargest(2,'country_percent').reset_index(drop=True)['pays_rework'][1].capitalize()} ({country_group_df.nlargest(2,'country_percent').reset_index(drop=True)['country_percent'][1]}%)."
f"A **:blue[{country_value_pareto}%]**, les 2 principaux pays dont les contenus sont les plus visionnés sont : {country_group_df.nlargest(2,'country_percent').reset_index(drop=True)['pays_rework'][0].capitalize()} ({country_group_df.nlargest(2,'country_percent').reset_index(drop=True)['country_percent'][0]}%) et {country_group_df.nlargest(2,'country_percent').reset_index(drop=True)['pays_rework'][1].capitalize()} ({country_group_df.nlargest(2,'country_percent').reset_index(drop=True)['country_percent'][1]}%).", # noqa: E501
)

fig_type = px.bar(
Expand Down Expand Up @@ -303,11 +306,15 @@ def load_data(file):
percent_canal_visionne2 = round(canal_group_df.canal_percent.nlargest(2)[1], 2)

st.markdown(
f"Les contenus sont visionnés principalement sur :blue[{canal_visionne1.capitalize()}] (:blue[{percent_canal_visionne1}%]) et :blue[{canal_visionne2.capitalize()}] (:blue[{percent_canal_visionne2}%]).\n\n La majorité des contenus visionnés sur :blue[{canal_visionne1.capitalize()}] ont pour pays d'origine :blue[{canal_country_group_df[canal_country_group_df['CANAL']==canal_visionne1].nlargest(1,'nb_titre').reset_index()['pays_rework'][0]}] (:blue[%]), alors que la majorité des contenus français sont visionnés xxx (xxx%).\n\n :blue[{round(canal_group_df.loc['Autre','canal_percent'],2)}%] des contenus sont visionnés sur un canal `Autre` que la liste proposée (cf ci-contre)"
f"Les contenus sont visionnés principalement sur :blue[{canal_visionne1.capitalize()}] (:blue[{percent_canal_visionne1}%]) et :blue[{canal_visionne2.capitalize()}] (:blue[{percent_canal_visionne2}%]).\n\n La majorité des contenus visionnés sur :blue[{canal_visionne1.capitalize()}] ont pour pays d'origine :blue[{canal_country_group_df[canal_country_group_df['CANAL']==canal_visionne1].nlargest(1,'nb_titre').reset_index()['pays_rework'][0]}] (:blue[%]), alors que la majorité des contenus français sont visionnés xxx (xxx%).\n\n :blue[{round(canal_group_df.loc['Autre','canal_percent'],2)}%] des contenus sont visionnés sur un canal `Autre` que la liste proposée (cf ci-contre)", # noqa: E501
)

# Les contenus sont visionnés principalement sur Netflix (29.91%) ou dans une salle de cinéma (28.97%). La majorité des contenus américains sont visionnés sur Netflix (40.48% des contenus US), alors que la majorité des contenus français sont visionnés au cinéma (44.19%).
# 23.36% des contenus sont visionnés sur un canal `autre` que la liste proposée (cf ci-dessous)
# Les contenus sont visionnés principalement sur Netflix (29.91%) ou dans
# une salle de cinéma (28.97%). La majorité des contenus américains sont
# visionnés sur Netflix (40.48% des contenus US), alors que la majorité
# des contenus français sont visionnés au cinéma (44.19%).
# 23.36% des contenus sont visionnés sur un canal `autre`
# que la liste proposée (cf ci-dessous)

with col_table_canal:
st.markdown(set(canal_group_df.reset_index().CANAL))
Expand All @@ -320,49 +327,28 @@ def load_data(file):
st.dataframe(
df_truncated[["TITRE", "TRAITEMENT DU RECIT", "TYPE DE MONDE"]]
.groupby(["TRAITEMENT DU RECIT", "TYPE DE MONDE"])
.count()
.count(),
)

# st.write(f"Parmi les ouvrages parus et écrits par des autrices, **:blue[{int(round(st.session_state['roman_francais'][st.session_state['roman_francais']['Genre']==selection]['Nb ouvrages'].sum()/len(liste_ean)*100,0))}%]** sont des romans français, **:blue[{int(round(st.session_state['roman_etranger'][st.session_state['roman_etranger']['Genre']==selection]['Nb ouvrages'].sum()/len(liste_ean)*100,0))}%]** des romans étrangers et **:blue[{int(round(st.session_state['essais'][st.session_state['essais']['Genre']==selection]['Nb ouvrages'].sum()/len(liste_ean)*100,0))}%]** des essais.")
#
# with st.container():

# fig = plt.subplot()
#
# fig.add_trace(go.Pie(labels=country_group_df.pays_rework, values=country_group_df.nb_titre, name="Countries"))
# fig.add_trace(go.Pie(labels=gender_viz_crew.gender_text, values=gender_viz_crew.nb_by_genre, name="Equipe tech"),
# fig.add_trace(go.Pie(labels=gender_viz_crew.gender_text, values=gender_viz_crew.nb_by_genre, name="Equipe tech"), # noqa: E501
# 1, 2)
#
# colors0 = ['red' if x == 1 else 'blue' if x == 2 else 'green' if x == 0 else 'grey' for x in gender_viz_cast['gender']]
# colors1 = ['red' if x == 1 else 'blue' if x == 2 else 'green' if x == 0 else 'grey' for x in gender_viz_crew['gender']]
#
# fig.update_traces(hole=.4, hoverinfo="label+value+name",marker=dict(colors=colors0)) # Use `hole` to create a donut-like pie chart&
#
# fig.update_traces(hole=.4, hoverinfo="label+value+name")#,marker=dict(colors=colors1), col=2)
#
# fig.update_layout(width = 400,
# margin=dict(t=0, b=0, l=0, r=0),)
# legend=dict(
# orientation="h",
# yanchor="bottom",
# y=0.05,
# xanchor="right",
# x=1),
# title=dict(text="Répartition par genre",y=0.9,),
# Add annotations in the center of the donut pies.
# annotations=[dict(text='Casting', x=0.15, y=0.5, font_size=20, showarrow=False),
# dict(text='Crew', x=0.83, y=0.5, font_size=20, showarrow=False)])
#
# st.plotly_chart(fig)
#
# fig1 = go.Figure(
# data=[go.Bar(x=country_group_df.pays_rework ,
# y=country_group_df.nb_titre)])
#
# #colinfofilm.write("Répartition par genre de l'équipe technique")
# with colinfofilm.expander("Table de données"):
# st.write("Casting")
# st.dataframe(gender_viz_cast)
# st.write("Equipe technique")
# st.dataframe(gender_viz_crew)
# placeholderviz.empty()
Loading

0 comments on commit 9a945da

Please sign in to comment.