Publié le :
Reporting EXTERNE

Heatmap des détections d'oiseaux par jour

Ce code est également disponible en : Deutsch Español
En attente de validation
Le script exécute un processus complet de reporting. Il commence par télécharger un fichier CSV contenant des données de détection d'oiseaux via une requête HTTP. Ensuite, il utilise une étape DATA pour lire et parser ce fichier en créant un jeu de données SAS© dans la librairie WORK. Une requête PROC SQL est ensuite utilisée pour agréger les données, en comptant le nombre de détections par jour et par espèce. Enfin, après un tri, PROC SGPLOT génère un graphique de type nuage de points qui fonctionne comme une heatmap, visualisant l'intensité des détections par jour pour chaque espèce d'oiseau.
Analyse des données

Type : EXTERNE


Les données sont chargées à partir d'un fichier CSV distant hébergé sur GitHub. La procédure PROC HTTP est utilisée pour télécharger le fichier dans un emplacement temporaire, qui est ensuite lu par une étape DATA.

1 Bloc de code
PROC HTTP
Explication :
Ce bloc utilise la procédure HTTP pour télécharger le contenu d'un fichier CSV depuis une URL sur GitHub. Le contenu est stocké dans un fichier temporaire référencé par 'birdcsv'.
Copié !
1filename birdcsv temp;
2PROC HTTP
3 method="GET"
4 url="https://raw.githubusercontent.com/cjdinger/birdnet-data/refs/heads/main/alldetect.csv"
5 out=birdcsv;
6RUN;
2 Bloc de code
DATA STEP Data
Explication :
Cette étape DATA lit le fichier CSV temporaire. Elle définit la structure de la table de destination 'WORK.BIRDS_EVENTS', incluant les informats et formats pour chaque colonne, puis charge les données en ignorant la première ligne d'en-tête (firstobs=2).
Copié !
1DATA WORK.BIRDS_EVENTS;
2 INFILE BIRDCSV delimiter = ',' MISSOVER DSD lrecl=32767 firstobs=2;
3 informat Date yymmdd10.;
4 informat Time time20.3;
5 informat Sci_Name $30.;
6 informat Com_Name $30.;
7 informat Confidence best32.;
8 informat Lat best32.;
9 informat Lon best32.;
10 informat Cutoff best32.;
11 informat Week best32.;
12 informat Sens best32.;
13 informat Overlap best32.;
14 informat File_Name $57.;
15 FORMAT Date yymmdd10.;
16 FORMAT Time time20.3;
17 FORMAT Sci_Name $30.;
18 FORMAT Com_Name $30.;
19 FORMAT Confidence best12.;
20 FORMAT Lat best12.;
21 FORMAT Lon best12.;
22 FORMAT Cutoff best12.;
23 FORMAT Week best12.;
24 FORMAT Sens best12.;
25 FORMAT Overlap best12.;
26 FORMAT File_Name $57.;
27 INPUT
28 Date
29 Time
30 Sci_Name $
31 Com_Name $
32 Confidence
33 Lat
34 Lon
35 Cutoff
36 Week
37 Sens
38 Overlap
39 File_Name $
40 ;
41RUN;
3 Bloc de code
PROC SQL Data
Explication :
Ce bloc SQL crée une table de synthèse 'WORK.birds_DailyDetect'. Il regroupe les données par date, nom scientifique et nom commun, et compte le nombre de détections pour chaque groupe. Il extrait également un nom de famille en prenant le dernier mot du nom commun.
Copié !
1PROC SQL;
2 CREATE TABLE WORK.birds_DailyDetect AS
3 SELECT t1.Date,
4 t1.Sci_Name,
5 t1.Com_Name,
6 scan(t1.Com_Name,-1,' ') as Family,
7 /* Detections */
8 (COUNT(t1.Date)) AS Detections FROM WORK.birds_events t1 GROUP BY t1.Date, Family, t1.Sci_Name, t1.Com_Name;
9QUIT;
4 Bloc de code
PROC SORT
Explication :
Cette procédure trie la table agrégée 'birds_dailyDetect' en fonction de la colonne 'Family'. Ce tri est utile pour l'organisation des données, bien qu'il n'ait pas d'impact direct sur le graphique SGPLOT final tel que défini.
Copié !
1 
2PROC SORT
3DATA=birds_dailyDetect;
4BY Family;
5RUN;
6 
5 Bloc de code
PROC SGPLOT
Explication :
Ce bloc utilise SGPLOT pour créer une visualisation. Un nuage de points est généré avec la date sur l'axe des X et le nom commun de l'oiseau sur l'axe des Y. La couleur de chaque point est déterminée par le nombre de détections ('Detections'), créant ainsi une heatmap qui montre les jours et les espèces avec le plus d'activité.
Copié !
1ods graphics / width=1000 height=2000;
2/* ods html5(eghtml) gtitle; */
3 
4PROC SGPLOT DATA=work.birds_DailyDetect;
5 title "Birdsong Detections by Day - from BirdNET-Pi";
6 scatter x=Date y=Com_Name / colorresponse=Detections
7 colormodel=(lightblue lightgreen darkgreen lightorange orange red darkred)
8 markerattrs=(size=4);
9 xaxis grid minor;
10 yaxis fitpolicy=none grid minor valueattrs=(size=8pt) display=(nolabel);
11RUN;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.