Répondre à la question : Le type de milieu a-t-il un effet sur l'abondance des oiseaux ?
Calcul d'abondance
Représentation graphique
Test statistiques
Répondre à la question : Quel est l'effet du type de milieu sur l'abondance des oiseaux ?
Afin de répondre à cette question, nous allons avoir besoin des données de Vigie-Nature École relatives au protocole Oiseaux des jardins.
from matplotlib import pyplot as plt
import pandas as pd
import matplotlib.dates as mdates
from datetime import datetime
import seaborn as sns
from scipy import stats
Oiseau = pd.read_csv('Oiseau.csv')
Oiseau
Unnamed: 0 | numero_observation | zonepk | date_observation | code_postal_etablissement | ville_etablissement | latitude | longitude | espece | nombre_individus | ... | heure_fin | type_de_milieu | surface_zone | distance_bois | distance_prairie | distance_champ | pourcentage_milieux_urbanisés_200m | departement | region | academie | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 94923 | 91804 | 2015-11-17 | 92000 | Nanterre | 48.8825 | 2.20161 | Huppe fasciée | 0 | ... | 11:50:39 | 01_Urbain | 02_21 à 100 m2 | 05_au-delà de 2 km | 05_au-delà de 2 km | 05_au-delà de 2 km | 1.0 | Hauts-de-Seine | Île-de-France | Académie de Versailles |
1 | 1 | 94923 | 91804 | 2015-11-17 | 92000 | Nanterre | 48.8825 | 2.20161 | Accenteur mouchet | 0 | ... | 11:50:39 | 01_Urbain | 02_21 à 100 m2 | 05_au-delà de 2 km | 05_au-delà de 2 km | 05_au-delà de 2 km | 1.0 | Hauts-de-Seine | Île-de-France | Académie de Versailles |
2 | 2 | 94923 | 91804 | 2015-11-17 | 92000 | Nanterre | 48.8825 | 2.20161 | Gobemouche gris | 0 | ... | 11:50:39 | 01_Urbain | 02_21 à 100 m2 | 05_au-delà de 2 km | 05_au-delà de 2 km | 05_au-delà de 2 km | 1.0 | Hauts-de-Seine | Île-de-France | Académie de Versailles |
3 | 3 | 94923 | 91804 | 2015-11-17 | 92000 | Nanterre | 48.8825 | 2.20161 | Bergeronnette grise | 0 | ... | 11:50:39 | 01_Urbain | 02_21 à 100 m2 | 05_au-delà de 2 km | 05_au-delà de 2 km | 05_au-delà de 2 km | 1.0 | Hauts-de-Seine | Île-de-France | Académie de Versailles |
4 | 4 | 94923 | 91804 | 2015-11-17 | 92000 | Nanterre | 48.8825 | 2.20161 | Bruant jaune | 0 | ... | 11:50:39 | 01_Urbain | 02_21 à 100 m2 | 05_au-delà de 2 km | 05_au-delà de 2 km | 05_au-delà de 2 km | 1.0 | Hauts-de-Seine | Île-de-France | Académie de Versailles |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
155296 | 155299 | 104099 | 92799 | 2021-02-04 | 28110 | Lucé | 48.4385 | 1.46539 | Chardonneret élegant | 0 | ... | 15:35:00 | 01_Urbain | 02_21 à 100 m2 | 01_moins de 50 m | 03_501 à 1000 m | 05_au-delà de 2 km | 1.0 | Eure-et-Loir | Centre-Val de Loire | Académie d'Orléans-Tours |
155297 | 155300 | 104099 | 92799 | 2021-02-04 | 28110 | Lucé | 48.4385 | 1.46539 | Chardonneret élegant | 0 | ... | 15:35:00 | 01_Urbain | 02_21 à 100 m2 | 01_moins de 50 m | 03_501 à 1000 m | 05_au-delà de 2 km | 1.0 | Eure-et-Loir | Centre-Val de Loire | Académie d'Orléans-Tours |
155298 | 155301 | 104099 | 92799 | 2021-02-04 | 28110 | Lucé | 48.4385 | 1.46539 | Hirondelle rustique | 0 | ... | 15:35:00 | 01_Urbain | 02_21 à 100 m2 | 01_moins de 50 m | 03_501 à 1000 m | 05_au-delà de 2 km | 1.0 | Eure-et-Loir | Centre-Val de Loire | Académie d'Orléans-Tours |
155299 | 155302 | 104099 | 92799 | 2021-02-04 | 28110 | Lucé | 48.4385 | 1.46539 | Hirondelle rustique | 0 | ... | 15:35:00 | 01_Urbain | 02_21 à 100 m2 | 01_moins de 50 m | 03_501 à 1000 m | 05_au-delà de 2 km | 1.0 | Eure-et-Loir | Centre-Val de Loire | Académie d'Orléans-Tours |
155300 | 155303 | 104099 | 92799 | 2021-02-04 | 28110 | Lucé | 48.4385 | 1.46539 | Pie bavarde | 0 | ... | 15:35:00 | 01_Urbain | 02_21 à 100 m2 | 01_moins de 50 m | 03_501 à 1000 m | 05_au-delà de 2 km | 1.0 | Eure-et-Loir | Centre-Val de Loire | Académie |
155301 rows × 21 columns
Maintenant que vous avez toutes les données, il va falloir les résumer car il y a plus de 15 000 lignes. Nous allons commencer par calculer l'abondance totale des oiseaux vus lors de chaque observation.
Pour cela, nous allons faire la somme des individus observés en regroupant les données par numéro d'observation (pour ne pas additionner toutes les observations entre elles) et le type de milieu (pour garder cette colonne associée avec nos valeurs et pouvoir répondre à notre question).
Abondance = pd.DataFrame({
'nombre_individus': Oiseau.groupby(['type_de_milieu', 'numero_observation'])['nombre_individus'].sum()
})
Abondance
nombre_individus | ||
---|---|---|
type_de_milieu | numero_observation | |
01_Urbain | 94923 | 13 |
94926 | 6 | |
95139 | 2 | |
95193 | 2 | |
95194 | 2 | |
... | ... | ... |
03_Rural | 104054 | 13 |
104062 | 18 | |
104068 | 9 | |
104094 | 12 | |
104095 | 17 |
2718 rows × 1 columns
Nous allons maintenant regrouper les données par type de milieu. Cette fois nous allons faire une moyenne pour avoir une valeur qui représente le nombre d'oiseaux moyen par type de milieu.
AbondanceParMilieu = pd.DataFrame({
'nombre_individus': Abondance.groupby(['type_de_milieu'])['nombre_individus'].mean()
})
AbondanceParMilieu
nombre_individus | |
---|---|
type_de_milieu | |
01_Urbain | 9.108824 |
02_Péri-urbain | 11.019847 |
03_Rural | 11.106686 |
Normalement, en regardant votre tableau, vous pouvez déjà voir qu'il existe des différences entre le milieu urbain et les autres types de milieux. Toutefois, afin de mieux voir les différences, on peut réaliser un graphique. Ici, la colonne type de milieu est qualitative (on ne peut pas faire d'opération avec ces valeurs) et la colonne Abondance moyenne est quantitative (on peut faire des opérations avec ses valeurs). Une représentation adaptée est donc le diagramme en barre avec type de milieu sur l'axe des X et l'Abondance moyenne sur l'axe des Y.
sns.barplot(x=AbondanceParMilieu.index, y=AbondanceParMilieu['nombre_individus'])
<AxesSubplot:xlabel='type_de_milieu', ylabel='nombre_individus'>
La différence est plus visible encore qu'avec le tableau. Maintenant, il faut savoir si la différence que l'on observe n'est pas que due au hasard.
Nous allons donc faire un test statistique afin de voir si le type de milieu explique la différence observée entre le milieu urbain et les deux autres environnement. Comme nous l'avons déjà expliqué plus haut, la colonne environnement est qualitative et la colonne Abondance est quantitative. Il faut donc faire une comparaison de moyenne. Dans cet outil, attention à bien selectionner le jeu de données qui a servi à faire la moyenne.
Abondance = Abondance.reset_index()
sns.boxplot(x='type_de_milieu', y='nombre_individus', data=Abondance, showfliers=False)
<AxesSubplot:xlabel='type_de_milieu', ylabel='nombre_individus'>
Ici on réalise un test statistique de Student :
Urbain2 = Abondance.loc[Abondance['type_de_milieu'] == '01_Urbain',['nombre_individus']]
PeriUrbain2 = Abondance.loc[Abondance['type_de_milieu'] == '02_Péri-urbain',['nombre_individus']]
Rural2 = Abondance.loc[Abondance['type_de_milieu'] == '03_Rural',['nombre_individus']]
stats.ttest_ind(Urbain2['nombre_individus'], PeriUrbain2['nombre_individus'])
Ttest_indResult(statistic=-3.750286296981889, pvalue=0.00018162235610313243)
La différence entre le milieu Urbain et le milieu Périurbain semble significative.
stats.ttest_ind(Urbain2['nombre_individus'], Rural2['nombre_individus'])
Ttest_indResult(statistic=-3.6498423239309314, pvalue=0.00026893117952066345)
La différence entre le milieu Urbain et le milieu Rural semble significative.
stats.ttest_ind(PeriUrbain2['nombre_individus'], Rural2['nombre_individus'])
Ttest_indResult(statistic=-0.1202309728063965, pvalue=0.9043179940616125)
La différence entre le milieu Périurbain et le milieu Rural ne semble pas significative.
Je conclue que le type de milieu a bien un effet sur l'abondance. Les oiseaux semblent être moins nombreux en milieu urbain.