Répondre à la question : La fréquentation de cours d'établissement par les mésanges change-t-elle au cours de l’année ?
Filtrer des données
Extraire des éléments d'une date
Calcul de fréquence de présence
Représentation graphique ## Déroulement de l'analyse étape par étape :
La fréquentation de nos zones d'observation par les mésanges change-t-elle au cours de l’année ?
import pandas as pd
from matplotlib import pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime
import seaborn as sns
import numpy
Pour répondre à notre question de recherche, nous allons avoir besoin des données de Vigie-Nature École relatives à l'observatoire Oiseaux des jardins afin d'avoir des observations de toutes les espèces de mésanges (en effet il y en a 6 dans le protocole oiseaux des jardins) et des observations sur tous les mois de l'année. Les données sont téléchargeables directement depuis internet.
oiseau = pd.read_csv('https://depot.vigienature-ecole.fr/datasets/bricks/oiseaux.csv')
oiseau
numero_observation | date_observation | nom_etablissement | code_postal_etablissement | ville_etablissement | latitude | longitude | espece | nombre_individus | heure_debut | ... | Temperature_moyenne | Temperature_max | Temperature_min | Precipitation_moyenne | Precipitation_max | Precipitation_min | departement | region | academie | utilisation_pesticide | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 94923 | 2015-11-17 | Ecole elementaire Jules Ferry B | 92000 | Nanterre | 48.882454 | 2.201610 | Mésange noire | 0 | 08:50:39 | ... | 11.5 | 24.5 | 1.7 | 640 | 63 | 43 | Hauts-de-Seine | Île-de-France | Académie de Versailles | 01_Jamais |
1 | 94923 | 2015-11-17 | Ecole elementaire Jules Ferry B | 92000 | Nanterre | 48.882454 | 2.201610 | Écureuil roux | 0 | 08:50:39 | ... | 11.5 | 24.5 | 1.7 | 640 | 63 | 43 | Hauts-de-Seine | Île-de-France | Académie de Versailles | 01_Jamais |
2 | 94923 | 2015-11-17 | Ecole elementaire Jules Ferry B | 92000 | Nanterre | 48.882454 | 2.201610 | Choucas des tours | 0 | 08:50:39 | ... | 11.5 | 24.5 | 1.7 | 640 | 63 | 43 | Hauts-de-Seine | Île-de-France | Académie de Versailles | 01_Jamais |
3 | 94923 | 2015-11-17 | Ecole elementaire Jules Ferry B | 92000 | Nanterre | 48.882454 | 2.201610 | Pinson des arbres | 0 | 08:50:39 | ... | 11.5 | 24.5 | 1.7 | 640 | 63 | 43 | Hauts-de-Seine | Île-de-France | Académie de Versailles | 01_Jamais |
4 | 94923 | 2015-11-17 | Ecole elementaire Jules Ferry B | 92000 | Nanterre | 48.882454 | 2.201610 | Rougegorge familier | 1 | 08:50:39 | ... | 11.5 | 24.5 | 1.7 | 640 | 63 | 43 | Hauts-de-Seine | Île-de-France | Académie de Versailles | 01_Jamais |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
297410 | 110736 | 2023-07-06 | Ecole elementaire Frederic Joliot-Curie | 78260 | Achères | 48.951538 | 2.062363 | Merle noir | 0 | 10:45:00 | ... | 11.3 | 24.2 | 1.5 | 610 | 60 | 42 | Yvelines | Île-de-France | Académie de Versailles | 01_Jamais |
297411 | 110736 | 2023-07-06 | Ecole elementaire Frederic Joliot-Curie | 78260 | Achères | 48.951538 | 2.062363 | Corneille noire | 0 | 10:45:00 | ... | 11.3 | 24.2 | 1.5 | 610 | 60 | 42 | Yvelines | Île-de-France | Académie de Versailles | 01_Jamais |
297412 | 110736 | 2023-07-06 | Ecole elementaire Frederic Joliot-Curie | 78260 | Achères | 48.951538 | 2.062363 | Pigeon biset domestique | 0 | 10:45:00 | ... | 11.3 | 24.2 | 1.5 | 610 | 60 | 42 | Yvelines | Île-de-France | Académie de Versailles | 01_Jamais |
297413 | 110736 | 2023-07-06 | Ecole elementaire Frederic Joliot-Curie | 78260 | Achères | 48.951538 | 2.062363 | Pigeon ramier | 1 | 10:45:00 | ... | 11.3 | 24.2 | 1.5 | 610 | 60 | 42 | Yvelines | Île-de-France | Académie de Versailles | 01_Jamais |
297414 | 110736 | 2023-07-06 | Ecole elementaire Frederic Joliot-Curie | 78260 | Achères | 48.951538 | 2.062363 | Tourterelle turque | 4 | 10:45:00 | ... | 11.3 | 24.2 | 1.5 | 610 | 60 | 42 | Yvelines | Île-de-France | Académie de Versailles | 01_Jamais |
297415 rows × 32 columns
Comme nous souhaitons étudier les variations temporelles, nous allons choisir le pas de temps qui nous intéresse. Le mois est intéressant car il permet d'avoir beaucoup de données tout en étant assez précis pour voir des différences dans les observations chez les mésanges.
Nous définissons le format de la colonne 'date_observation' en format date puis nous créons une nouvelle colonne contenant le mois d'observation.
oiseau['date_observation'] = pd.to_datetime(oiseau['date_observation'])
oiseau['mois'] = oiseau.date_observation.dt.month
oiseau
numero_observation | date_observation | nom_etablissement | code_postal_etablissement | ville_etablissement | latitude | longitude | espece | nombre_individus | heure_debut | ... | Temperature_max | Temperature_min | Precipitation_moyenne | Precipitation_max | Precipitation_min | departement | region | academie | utilisation_pesticide | mois | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 94923 | 2015-11-17 | Ecole elementaire Jules Ferry B | 92000 | Nanterre | 48.882454 | 2.201610 | Mésange noire | 0 | 08:50:39 | ... | 24.5 | 1.7 | 640 | 63 | 43 | Hauts-de-Seine | Île-de-France | Académie de Versailles | 01_Jamais | 11 |
1 | 94923 | 2015-11-17 | Ecole elementaire Jules Ferry B | 92000 | Nanterre | 48.882454 | 2.201610 | Écureuil roux | 0 | 08:50:39 | ... | 24.5 | 1.7 | 640 | 63 | 43 | Hauts-de-Seine | Île-de-France | Académie de Versailles | 01_Jamais | 11 |
2 | 94923 | 2015-11-17 | Ecole elementaire Jules Ferry B | 92000 | Nanterre | 48.882454 | 2.201610 | Choucas des tours | 0 | 08:50:39 | ... | 24.5 | 1.7 | 640 | 63 | 43 | Hauts-de-Seine | Île-de-France | Académie de Versailles | 01_Jamais | 11 |
3 | 94923 | 2015-11-17 | Ecole elementaire Jules Ferry B | 92000 | Nanterre | 48.882454 | 2.201610 | Pinson des arbres | 0 | 08:50:39 | ... | 24.5 | 1.7 | 640 | 63 | 43 | Hauts-de-Seine | Île-de-France | Académie de Versailles | 01_Jamais | 11 |
4 | 94923 | 2015-11-17 | Ecole elementaire Jules Ferry B | 92000 | Nanterre | 48.882454 | 2.201610 | Rougegorge familier | 1 | 08:50:39 | ... | 24.5 | 1.7 | 640 | 63 | 43 | Hauts-de-Seine | Île-de-France | Académie de Versailles | 01_Jamais | 11 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
297410 | 110736 | 2023-07-06 | Ecole elementaire Frederic Joliot-Curie | 78260 | Achères | 48.951538 | 2.062363 | Merle noir | 0 | 10:45:00 | ... | 24.2 | 1.5 | 610 | 60 | 42 | Yvelines | Île-de-France | Académie de Versailles | 01_Jamais | 7 |
297411 | 110736 | 2023-07-06 | Ecole elementaire Frederic Joliot-Curie | 78260 | Achères | 48.951538 | 2.062363 | Corneille noire | 0 | 10:45:00 | ... | 24.2 | 1.5 | 610 | 60 | 42 | Yvelines | Île-de-France | Académie de Versailles | 01_Jamais | 7 |
297412 | 110736 | 2023-07-06 | Ecole elementaire Frederic Joliot-Curie | 78260 | Achères | 48.951538 | 2.062363 | Pigeon biset domestique | 0 | 10:45:00 | ... | 24.2 | 1.5 | 610 | 60 | 42 | Yvelines | Île-de-France | Académie de Versailles | 01_Jamais | 7 |
297413 | 110736 | 2023-07-06 | Ecole elementaire Frederic Joliot-Curie | 78260 | Achères | 48.951538 | 2.062363 | Pigeon ramier | 1 | 10:45:00 | ... | 24.2 | 1.5 | 610 | 60 | 42 | Yvelines | Île-de-France | Académie de Versailles | 01_Jamais | 7 |
297414 | 110736 | 2023-07-06 | Ecole elementaire Frederic Joliot-Curie | 78260 | Achères | 48.951538 | 2.062363 | Tourterelle turque | 4 | 10:45:00 | ... | 24.2 | 1.5 | 610 | 60 | 42 | Yvelines | Île-de-France | Académie de Versailles | 01_Jamais | 7 |
297415 rows × 33 columns
Il va falloir sélectionner les données qui nous intéressent. Nous allons sélectionner les lignes qui contiennent les Mésanges afin de garder toutes les espèces de mésanges.
espece = ['Mésange charbonnière', 'Mésange noire', 'Mésange bleue', 'Mésange à longue queue', 'Mésange nonnette', 'Mésange huppée']
mesange = oiseau[oiseau.espece.isin(espece)]
mesange
numero_observation | date_observation | nom_etablissement | code_postal_etablissement | ville_etablissement | latitude | longitude | espece | nombre_individus | heure_debut | ... | Temperature_max | Temperature_min | Precipitation_moyenne | Precipitation_max | Precipitation_min | departement | region | academie | utilisation_pesticide | mois | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 94923 | 2015-11-17 | Ecole elementaire Jules Ferry B | 92000 | Nanterre | 48.882454 | 2.201610 | Mésange noire | 0 | 08:50:39 | ... | 24.5 | 1.7 | 640 | 63 | 43 | Hauts-de-Seine | Île-de-France | Académie de Versailles | 01_Jamais | 11 |
5 | 94923 | 2015-11-17 | Ecole elementaire Jules Ferry B | 92000 | Nanterre | 48.882454 | 2.201610 | Mésange huppée | 0 | 08:50:39 | ... | 24.5 | 1.7 | 640 | 63 | 43 | Hauts-de-Seine | Île-de-France | Académie de Versailles | 01_Jamais | 11 |
29 | 94923 | 2015-11-17 | Ecole elementaire Jules Ferry B | 92000 | Nanterre | 48.882454 | 2.201610 | Mésange bleue | 4 | 08:50:39 | ... | 24.5 | 1.7 | 640 | 63 | 43 | Hauts-de-Seine | Île-de-France | Académie de Versailles | 01_Jamais | 11 |
32 | 94923 | 2015-11-17 | Ecole elementaire Jules Ferry B | 92000 | Nanterre | 48.882454 | 2.201610 | Mésange à longue queue | 0 | 08:50:39 | ... | 24.5 | 1.7 | 640 | 63 | 43 | Hauts-de-Seine | Île-de-France | Académie de Versailles | 01_Jamais | 11 |
37 | 94923 | 2015-11-17 | Ecole elementaire Jules Ferry B | 92000 | Nanterre | 48.882454 | 2.201610 | Mésange nonnette | 0 | 08:50:39 | ... | 24.5 | 1.7 | 640 | 63 | 43 | Hauts-de-Seine | Île-de-France | Académie de Versailles | 01_Jamais | 11 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
297373 | 110736 | 2023-07-06 | Ecole elementaire Frederic Joliot-Curie | 78260 | Achères | 48.951538 | 2.062363 | Mésange noire | 2 | 10:45:00 | ... | 24.2 | 1.5 | 610 | 60 | 42 | Yvelines | Île-de-France | Académie de Versailles | 01_Jamais | 7 |
297374 | 110736 | 2023-07-06 | Ecole elementaire Frederic Joliot-Curie | 78260 | Achères | 48.951538 | 2.062363 | Mésange huppée | 0 | 10:45:00 | ... | 24.2 | 1.5 | 610 | 60 | 42 | Yvelines | Île-de-France | Académie de Versailles | 01_Jamais | 7 |
297375 | 110736 | 2023-07-06 | Ecole elementaire Frederic Joliot-Curie | 78260 | Achères | 48.951538 | 2.062363 | Mésange à longue queue | 0 | 10:45:00 | ... | 24.2 | 1.5 | 610 | 60 | 42 | Yvelines | Île-de-France | Académie de Versailles | 01_Jamais | 7 |
297396 | 110736 | 2023-07-06 | Ecole elementaire Frederic Joliot-Curie | 78260 | Achères | 48.951538 | 2.062363 | Mésange charbonnière | 3 | 10:45:00 | ... | 24.2 | 1.5 | 610 | 60 | 42 | Yvelines | Île-de-France | Académie de Versailles | 01_Jamais | 7 |
297405 | 110736 | 2023-07-06 | Ecole elementaire Frederic Joliot-Curie | 78260 | Achères | 48.951538 | 2.062363 | Mésange bleue | 1 | 10:45:00 | ... | 24.2 | 1.5 | 610 | 60 | 42 | Yvelines | Île-de-France | Académie de Versailles | 01_Jamais | 7 |
31192 rows × 33 columns
La colonne que nous avons créé plus tôt contient le mois de l'observation. Nous allons maintenant regrouper les données selon les valeurs de cette colonne. Il faut pour cela, compter le nombre de fois où l'on a vu un individidu d'une espèce de mésange.
mesangeMois = pd.DataFrame({
'nombre_individus': mesange.groupby(['espece', 'mois'])['nombre_individus'].sum(),
'presence':mesange[mesange['nombre_individus']>0].groupby(['espece', 'mois'])['nombre_individus'].count(),
'nombre_observation': mesange.groupby(['espece', 'mois'])['numero_observation'].count()
})
mesangeMois = mesangeMois.fillna(0)
Nous connaissons maintenant le nombre de fois où chaque espèce a été vue. Avant de regarder les observations par espèces, nous vous proposons de regarder la répartition des observations dans l'année.
mesangeMois = mesangeMois.reset_index()
sns.relplot(data=mesangeMois, x=mesangeMois['mois'], y=mesangeMois['nombre_observation'])
<seaborn.axisgrid.FacetGrid at 0x7fd366ee3b20>
Le protocole est davantage réalisé en hiver et les observations sont très rares en été (notamment à cause des vacances). Il y a plus d'observations à certaines périodes de l'année, il est donc possible qu'on observe plus de mésanges en hiver car on a plus observé durant cette saison et non parce qu'il y a plus de mésanges.
Pour obtenir un résultat qui ne soit pas biaisé par les différences de nombre de sessions d'observations, nous allons calculer des fréquences en divisant le nombre d'observations de l'espèce par le nombre total d'observations.
Afin que la fréquence soit plus simple à interpréter, vous pouvez la multiplier par 100 pour qu'elle soit exprimée en pourcentage.
mesangeMois['fréquence_observation (%)'] = (mesangeMois['presence'] / mesangeMois['nombre_observation'])*100
mesangeMois
espece | mois | nombre_individus | presence | nombre_observation | fréquence_observation (%) | |
---|---|---|---|---|---|---|
0 | Mésange bleue | 1 | 688 | 317.0 | 931 | 34.049409 |
1 | Mésange bleue | 2 | 464 | 228.0 | 598 | 38.127090 |
2 | Mésange bleue | 3 | 476 | 227.0 | 878 | 25.854214 |
3 | Mésange bleue | 4 | 240 | 122.0 | 563 | 21.669627 |
4 | Mésange bleue | 5 | 98 | 60.0 | 504 | 11.904762 |
... | ... | ... | ... | ... | ... | ... |
67 | Mésange à longue queue | 8 | 0 | 0.0 | 2 | 0.000000 |
68 | Mésange à longue queue | 9 | 6 | 6.0 | 262 | 2.290076 |
69 | Mésange à longue queue | 10 | 11 | 10.0 | 203 | 4.926108 |
70 | Mésange à longue queue | 11 | 26 | 17.0 | 391 | 4.347826 |
71 | Mésange à longue queue | 12 | 40 | 17.0 | 570 | 2.982456 |
72 rows × 6 columns
Afin de voir la répartition des données, il faut maintenant faire une représentation de la fréquence d'observations au cours de l'année.
sns.relplot(data=mesangeMois, x=mesangeMois['mois'], y=mesangeMois['fréquence_observation (%)'],
hue=mesangeMois['espece'], style=mesangeMois['espece'], kind='line')
<seaborn.axisgrid.FacetGrid at 0x7fd367490490>
À vous de jouer !