a-langlais commited on
Commit
f8a9026
·
1 Parent(s): d40ccf6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +36 -19
app.py CHANGED
@@ -12,9 +12,10 @@ from dashboard import *
12
 
13
  # CHARGEMENT DES DONNEES
14
  df_controls, df_individus, df_sites, df_distances, df_mapping = load_data_antenna()
15
- liste_sites_antennes = ["Brelouze", "Mairie d'Annepont", "Grottes de Loubeau", "Le Plessis", "Puy-Chenin", "Cézelle", "La Bourtière", "Goizet (W)", "Château de Gagemont", "Faye-L'Abbesse - Bourg", "Guibaud", "Cave Billard", "Grotte de Boisdichon", "Les Roches", "Barrage de l'Aigle", "Gouffre de la Fage",
16
- "La Brumaudière", "Château de Verteuil", "Les Dames", "Château de Hautefort", "Les Tours de Merle - Tour Fulcon", "Le Petit Pin", "Maison Brousse", "Caves de Laubenheimer", "Château de Villandraut", "Tunnel ferroviaire", "Grotte de la carrière", "Centrale hydroélectrique de Claredent", "Fermette des Nobis",
17
- "Beauregard", "Grotte de la Deveze", "Petexaenea", "Gouffre de Bexanka", "Mikelauenziloa"]
 
18
 
19
  # Initialisation des variables d'état
20
  selected_dpt = []
@@ -22,13 +23,13 @@ selected_dpt_gant = []
22
  selected_sp = []
23
  selected_gender = []
24
  selected_sites = []
 
25
  selected_dates = [df_controls['DATE'].min(), df_controls['DATE'].max()]
26
  dates_gant = [df_controls['DATE'].min(), df_controls['DATE'].max()]
27
  df_empty = pd.DataFrame()
28
 
29
  # CONTENU
30
  ## ROOT PAGE
31
-
32
  FEDER = "images/FEDER-NA.png"
33
  PREFET = "images/Prefet_NA.jpg"
34
  VERT = "images/FranceNationVerte.jpg"
@@ -41,12 +42,24 @@ with open("pages/page1.md", "r", encoding = "utf-8") as file:
41
  page1 = file.read()
42
 
43
  ## VISUALISATION DES DONNEES D'ANTENNES
 
44
  departements = sorted(df_controls['DEPARTEMENT'].unique().tolist())
45
- species = sorted(df_controls['CODE_ESP'].unique().tolist())
46
- genders = sorted(df_controls['SEXE'].dropna().unique().tolist())
47
- sites = sorted(df_controls['LIEU_DIT'].unique().tolist())
48
  dates = [df_controls['DATE'].min(), df_controls['DATE'].max()]
49
 
 
 
 
 
 
 
 
 
 
 
 
50
  m = generate_map(df_empty, df_sites)
51
 
52
  with open("pages/page2.md", "r", encoding = "utf-8") as file:
@@ -78,7 +91,7 @@ def refresh_map_button(state):
78
  if state.selected_dates and len(state.selected_dates) == 2:
79
  start_date = pd.Timestamp(state.selected_dates[0])
80
  end_date = pd.Timestamp(state.selected_dates[1])
81
- df_filtered = df_filtered[(df_filtered['DATE'] >= start_date) & (df_filtered['DATE'] <= end_date)]
82
 
83
  # Rafraichir la carte
84
  state.m = generate_map(df_filtered, df_sites)
@@ -92,6 +105,7 @@ with open("pages/page3.md", "r", encoding = "utf-8") as file:
92
  # Callbacks du diagramme de Gant
93
  def update_gant(state):
94
  df_filtered_gant = df_controls.copy()
 
95
 
96
  # Convertir les dates sélectionnées en objets Timestamp
97
  if state.selected_dpt_gant:
@@ -108,29 +122,32 @@ def update_gant(state):
108
 
109
  ## STATISTIQUES ANALYTIQUES
110
  # Initialisation de tous les plots
111
- plot_detection_year = detection_by_year(df_controls) # Barplot du nombre de détections par an et par espèce
112
- plot_capture_year = capture_by_year(df_individus) # Barplot du nombre de captures par an et par espèces
113
- plot_control_year = control_by_year(df_controls) # Barplot du nombre de contrôles par an et par espèces
114
- plot_frequencies = detection_frequencies(df_controls) # Courbes de fréquences de détections par jour de l'année et par site
115
- plot_pie_controled = pie_controled(df_controls) # Pieplot des individus contrôlés
116
- plot_pie_marked = pie_marked(df_individus) # Pieplot des individus marqués
117
- plot_top_detection = top_detection(df_controls) # Barplot horizontal des 10 individus les plus détectés
 
 
 
 
118
 
119
  # Initialisation des variables à plot
120
  total_recaptured = df_controls['NUM_PIT'].nunique() # Individus contrôlés
121
  total_marked = df_individus['NUM_PIT'].nunique() # Individus marqués
122
  sites_capture = df_individus['LIEU_DIT'].nunique() # Sites capturés au moins une fois
123
  sites_antennes = df_sites['LIEU_DIT'].nunique() # Sites contrôlés au moins une fois
124
- transition_table_plot = df_distances[['CODE_ESP', 'DATE', 'SITE_DEPART', 'DATE_ARRIVEE', 'SITE_ARRIVEE', 'DISTANCE']].sort_values(by='DISTANCE', ascending = False)
125
- transition_table_plot['DISTANCE'] = transition_table_plot['DISTANCE'].round(2)
126
- transition_table_plot = transition_table_plot.rename(columns = {'DATE':'DATE_DEPART'})
127
 
128
  with open("pages/page4.md", "r", encoding = "utf-8") as file:
129
  page4 = file.read()
130
 
131
  ## FICHE SITE
132
  # Initialisation du sélecteur et des plots
133
- selection_fiche = ['Brelouze']
134
  df_controls_fiche = df_controls[df_controls['LIEU_DIT'].isin(selection_fiche)]
135
  df_individus_fiche = df_individus[df_individus['LIEU_DIT'].isin(selection_fiche)]
136
  df_distances_fiche = df_distances[(df_distances['SITE_DEPART'].isin(selection_fiche)) | (df_distances['SITE_ARRIVEE'].isin(selection_fiche))]
 
12
 
13
  # CHARGEMENT DES DONNEES
14
  df_controls, df_individus, df_sites, df_distances, df_mapping = load_data_antenna()
15
+ liste_sites_antennes = sorted(["Brelouze", "Mairie d'Annepont", "Grottes de Loubeau", "Le Plessis", "Puy-Chenin", "Cézelle", "La Bourtière", "Goizet (W)", "Château de Gagemont", "Faye-L'Abbesse - Bourg", "Guibaud", "Cave Billard", "Grotte de Boisdichon", "Les Roches", "Barrage de l'Aigle", "Gouffre de la Fage",
16
+ "Ancienne citerne à eau", "Château de Verteuil", "Les Dames", "Château de Hautefort", "Les Tours de Merle - Tour Fulcon", "Le Petit Pin", "Maison Brousse", "Caves de Laubenheimer", "Château de Villandraut", "Tunnel ferroviaire", "Grotte de la carrière", "Centrale hydroélectrique de Claredent", "Fermette des Nobis",
17
+ "Beauregard", "Grotte de la Deveze", "Petexaenea (Site générique Galeries N&S)", "Gouffre de Bexanka", "Mikelauenziloa"])
18
+ ETUDE_valides = ["Diag CEN", "Diag NATURA 2000", "Diag FDS_Oléron", "ECOFECT (GR/CCPNA)", "ECOFECT (Hors GR)", "TRANSPY ESPAGNE", "TRANSPY FRANCE"]
19
 
20
  # Initialisation des variables d'état
21
  selected_dpt = []
 
23
  selected_sp = []
24
  selected_gender = []
25
  selected_sites = []
26
+ selected_communes = []
27
  selected_dates = [df_controls['DATE'].min(), df_controls['DATE'].max()]
28
  dates_gant = [df_controls['DATE'].min(), df_controls['DATE'].max()]
29
  df_empty = pd.DataFrame()
30
 
31
  # CONTENU
32
  ## ROOT PAGE
 
33
  FEDER = "images/FEDER-NA.png"
34
  PREFET = "images/Prefet_NA.jpg"
35
  VERT = "images/FranceNationVerte.jpg"
 
42
  page1 = file.read()
43
 
44
  ## VISUALISATION DES DONNEES D'ANTENNES
45
+ communes = sorted(df_controls['COMMUNE'].unique().tolist())
46
  departements = sorted(df_controls['DEPARTEMENT'].unique().tolist())
47
+ species = sorted(df_distances['CODE_ESP'].unique().tolist())
48
+ genders = sorted(df_individus['SEXE'].dropna().unique().tolist())
49
+ sites = sorted(df_controls['LIEU_DIT'].dropna().unique().tolist())
50
  dates = [df_controls['DATE'].min(), df_controls['DATE'].max()]
51
 
52
+ # Callback du sélécteur de sites
53
+ def refresh_sites(state):
54
+ selected_communes = state.selected_communes or []
55
+
56
+ if selected_communes:
57
+ filtered_df = df_controls[df_controls['COMMUNE'].isin(selected_communes)]
58
+ else:
59
+ filtered_df = df_controls
60
+
61
+ state.sites = sorted(filtered_df['LIEU_DIT'].unique().tolist())
62
+
63
  m = generate_map(df_empty, df_sites)
64
 
65
  with open("pages/page2.md", "r", encoding = "utf-8") as file:
 
91
  if state.selected_dates and len(state.selected_dates) == 2:
92
  start_date = pd.Timestamp(state.selected_dates[0])
93
  end_date = pd.Timestamp(state.selected_dates[1])
94
+ df_filtered = df_filtered[(df_filtered['DATE_DEPART'] >= start_date) & (df_filtered['DATE_DEPART'] <= end_date)]
95
 
96
  # Rafraichir la carte
97
  state.m = generate_map(df_filtered, df_sites)
 
105
  # Callbacks du diagramme de Gant
106
  def update_gant(state):
107
  df_filtered_gant = df_controls.copy()
108
+ df_filtered_gant = df_filtered_gant[df_filtered_gant['LIEU_DIT'].isin(liste_sites_antennes)]
109
 
110
  # Convertir les dates sélectionnées en objets Timestamp
111
  if state.selected_dpt_gant:
 
122
 
123
  ## STATISTIQUES ANALYTIQUES
124
  # Initialisation de tous les plots
125
+ df_controls_valide = df_controls[df_controls['ETUDE'].isin(ETUDE_valides)]
126
+ df_individus_valide = df_individus[df_individus['ETUDE'].isin(ETUDE_valides)]
127
+
128
+ plot_detection_year = detection_by_year(df_controls_valide) # Barplot du nombre de détections par an et par espèce
129
+ plot_capture_year = capture_by_year(df_individus_valide) # Barplot du nombre de captures par an et par espèces
130
+ plot_control_year = control_by_year(df_controls_valide) # Barplot du nombre de contrôles par an et par espèces
131
+ plot_frequencies = detection_frequencies(df_controls_valide) # Courbes de fréquences de détections par jour de l'année et par site
132
+ plot_pie_controled = pie_controled(df_controls_valide) # Pieplot des individus contrôlés
133
+ plot_pie_marked = pie_marked(df_individus_valide) # Pieplot des individus marqués
134
+ plot_top_detection = top_detection(df_controls_valide) # Barplot horizontal des 10 individus les plus détectés
135
+ plot_box_distances = distance_boxplot(df_distances) # Boxplot des distances par espèce
136
 
137
  # Initialisation des variables à plot
138
  total_recaptured = df_controls['NUM_PIT'].nunique() # Individus contrôlés
139
  total_marked = df_individus['NUM_PIT'].nunique() # Individus marqués
140
  sites_capture = df_individus['LIEU_DIT'].nunique() # Sites capturés au moins une fois
141
  sites_antennes = df_sites['LIEU_DIT'].nunique() # Sites contrôlés au moins une fois
142
+ transition_table_plot = df_distances[['NUM_PIT', 'CODE_ESP', 'DATE_DEPART', 'SITE_DEPART', 'DATE_ARRIVEE', 'SITE_ARRIVEE', 'DIST_KM']].sort_values(by='DIST_KM', ascending = False)
143
+ transition_table_plot['DIST_KM'] = transition_table_plot['DIST_KM'].round(2)
 
144
 
145
  with open("pages/page4.md", "r", encoding = "utf-8") as file:
146
  page4 = file.read()
147
 
148
  ## FICHE SITE
149
  # Initialisation du sélecteur et des plots
150
+ selection_fiche = ['Ancienne citerne à eau']
151
  df_controls_fiche = df_controls[df_controls['LIEU_DIT'].isin(selection_fiche)]
152
  df_individus_fiche = df_individus[df_individus['LIEU_DIT'].isin(selection_fiche)]
153
  df_distances_fiche = df_distances[(df_distances['SITE_DEPART'].isin(selection_fiche)) | (df_distances['SITE_ARRIVEE'].isin(selection_fiche))]