Chargement des données dans le bac à sable

Aperçu

Dans cet exercice, nous allons charger des données à partir du datacube. Tout d’abord, nous allons créer un nouvel ordinateur portable dans lequel nous allons travailler. Ensuite, nous chargerons des données Landsat 8 pour une période spécifique, et nous utiliserons ces données pour tracer une image en couleur. Enfin, nous vous montrerons comment modifier le processus de chargement pour charger et tracer les données Sentinel-2.

Créer un nouveau cahier

Créons un nouveau bloc-notes Jupyter vierge pour cet exercice.

  1. Naviguez vers le dossier Training. Le dossier Training a été créé dans le cadre de la Session 1, pour copier et exécuter le carnet de notes Crop Health. Si vous n’avez pas ce dossier dans l’Environnement de test, vous pouvez le créer en suivant les étapes de la section Exécution d’un carnet de notes.

    image1

  2. Si le Lanceur n’est pas l’onglet actif dans la zone de travail principale (volet de droite), cliquez sur le bouton + en haut de la barre latérale gauche pour ouvrir le Lanceur dans le volet de droite.

    image2

  3. Dans la section Notebook du Lanceur, sélectionnez l’option Python 3 pour créer un nouveau notebook dans le répertoire actuel.

    image3

  4. Le nouveau notebook s’appellera Untitled.ipynb, mais vous pouvez le renommer. Cliquez avec le bouton droit de la souris sur le bloc-notes dans le menu fichier et sélectionnez Rename.

image4

Tapez le nom souhaité. Par exemple, nous pouvons l’appeler Charger_données.ipynb.

image5

Appuyez sur la touche Entrée pour terminer de renommer l’ordinateur portable.

image6

Configurer le notebook

Charger des packages et des fonctions

Les packages et les fonctions agissent comme la boîte à outils de la programmation Python. Nous importerons ceux qui nous seront utiles.

Dans la première cellule, tapez le code suivant, puis exécutez la cellule.

Note

Exécutez une cellule en appuyant sur Maj + Entrée sur votre clavier.

image7

  • % matplotlib inline nous permet de tracer des graphiques et des cartes

  • Le package datacube est importé pour nous permettre de créer un objet qui peut récupérer les données du datacube, ce que nous ferons dans la prochaine cellule que nous allons créer.

  • Le paquet deafrica_tools contient plusieurs modules qui aident à charger, analyser et sortir les données de Digital Earth Africa. Ici, nous faisons appel au module deafrica_tools.plotting pour importer la fonction rgb plot, qui nous permet de visualiser les données sous forme d’images en couleurs réelles (rouge-vert-bleu, ou RVB).

Lorsque la cellule a fini de fonctionner, elle affiche [1] à côté d’elle, et génère une nouvelle cellule vierge en dessous.

Note

À partir de juin 2021, le paquet deafrica_tools remplace l’importation de fichiers dépréciée sys.path.append('../Scripts'). Pour plus d’informations sur deafrica_tools, visitez la documentation du module DE Africa Tools””.

Connectez-vous au datacube

Le paquet datacube nous permet d’accéder aux données de l’Environnement de test. Pour l’utiliser, nous devons établir une connexion avec le datacube. Entrez le code suivant et exécutez la cellule.

image8

La classe datacube.Datacube permet d’accéder au datacube. Nous appelons généralement les objets de cette classe dc, comme nous l’avons fait ici. Le paramètre ``app`”” est un nom unique pour l’analyse qui est basé sur le nom du fichier du notebook.

Lorsque la cellule a fini de fonctionner, elle affiche un [2] à côté d’elle, et génère une nouvelle cellule vierge en dessous.

Charger les données Landsat 8

Cet exercice chargera les données Landsat pour une zone de Dar es Salaam, en Tanzanie. Nous utiliserons une paire de coordonnées de latitude (-6,90, -6,70) et une paire de coordonnées de longitude (39,20, 39,37) pour spécifier la zone à charger. Les données seront chargées pour le rectangle défini par ces plages de coordonnées.

Tout d’abord, nous allons visualiser cette zone sur une carte. Cela nous permet de vérifier que nous avons les bonnes coordonnées. Dans la nouvelle cellule ci-dessous, entrez le code suivant, puis exécutez-le pour voir cette zone sur une carte.

image8+

La sortie de cette cellule devrait ressembler à ceci.

image8++

Dans la nouvelle cellule ci-dessous, entrez le code suivant, puis exécutez-le pour charger les données Landsat 8.

image9

Nous chargeons les données avec la fonction dc.load(). Nous avons choisi d’appeler le jeu de données chargé landsat_ds. Le texte entre les parenthèses de dc.load() sont nos paramètres. Nous avons choisi de mettre les paramètres sur des lignes séparées pour rendre le code plus facile à lire (et les erreurs plus faciles à repérer). Chaque paramètre doit être séparé par une virgule.

  • L’argument product est le produit du datacube à partir duquel charger les données. Nous voulons accéder au jeu de données Landsat 8, qui est nommé ls8_sr.

    ls8_sr n’utilise que des chiffres et des lettres minuscules. C’est l’abréviation de L* et de 8 S* urface R* eflectance.

  • Les arguments x et y spécifient la zone pour laquelle il faut charger les données. Dans ce cas, ils représentent la longitude et la latitude. Cela définit un rectangle couvrant leurs plages de valeurs de coordonnées, comme on le voit dans la sortie display_map ci-dessus.

  • L’argument time spécifie la plage de temps des données à charger. Nous avons spécifié toute l’année 2018.

  • L’argument output_crs spécifie le système de référence de coordonnées (CRS) pour charger les données. Le CRS EPSG:6933 spécifie une projection à aire égale - chaque pixel a la même aire.

  • L’argument resolution est la résolution y et x (dans cet ordre) en pixels par degré. La première valeur est généralement négative. Dans ce cas, une résolution de (-30, 30) correspond à une résolution de 30 mètres par pixel, ce qui est la résolution maximale des données Landsat.

  • L’argument group_by contrôle la façon dont les données proches dans le temps sont combinées pour fournir de meilleures images. Il est recommandé de spécifier une valeur de 'solar_day'.

  • L’argument mesures spécifie quelles bandes seront chargées. Nous allons tracer une image en couleur de ces données plus tard. Pour ce faire, nous avons besoin des bandes rouge, verte et bleue.

Note

À partir de juin 2021, les données Landsat de DE Africa ont été mises à niveau vers la collection 2. Les noms des cubes de données ont été mis à jour en « lls5_sr », « lls7_sr » et « lls8_sr ». Les conventions de dénomination obsolètes telles que « ls8_usgs_sr_scene » ne fonctionneront plus. Pour plus d’informations sur Landsat Collection 2, visitez la documentation DE Africa Landsat.

Code de dépannage

Parfois, des erreurs de frappe peuvent survenir. Cela produira un message d’erreur lorsque vous exécuterez la cellule.

Par exemple, cette erreur est une SyntaxError.

image9+

Il nous indique qu’il y a peut-être une erreur juste avant la section du code x=(39.20, 39.39),. En effet, ce message d’erreur a été généré lorsqu’une virgule manquait après le paramètre product, comme le montre la capture d’écran ci-dessous.

À des fins d’illustration, le point où la virgule est manquante a été mis en évidence par une boîte rouge, mais cela n’apparaîtra pas dans JupyterLab - vous devrez trouver l’erreur ou les erreurs vous-même.

image9++

Si des erreurs telles que IndentationError ou SyntaxError apparaissent, elles doivent être résolues avant que vous puissiez continuer. Essayez de vérifier certains de ces problèmes courants :

  • Tous les crochets et guillemets sont-ils au bon endroit?

  • Chaque support ouvert a-t-il un support fermé correspondant?

  • Vos types de parenthèses correspondent-ils ? (``doit être fermé par ``) et [``avec ``], et ils ont des significations différentes en Python, donc ils ne sont pas interchangeables.

  • Chaque guillemet ouvrant doit-il avoir un guillemet fermant ? Vous pouvez utiliser indifféremment ' ou ", mais les paires de guillemets doivent être identiques.

  • Y a-t-il des virgules , entre les éléments énumérés entre crochets [] ou entre parenthèses () ?

  • L’indentation est-elle correcte ? Appuyez sur la touche Tab de votre clavier pour augmenter le niveau d’indentation, et appuyez sur les touches Maj + Tab de votre clavier pour diminuer le niveau d’indentation.

  • Tout est-il correctement orthographié?

Une fois vos modifications effectuées, essayez à nouveau d’exécuter la cellule, en appuyant sur les touches Maj + Entrée de votre clavier.

Si vous obtenez un NameError, c’est peut-être parce que vous n’avez pas encore importé les paquets et fonctions nécessaires. Ils doivent être importés chaque fois que vous démarrez une nouvelle session de serveur. Pour résoudre ce problème, suivez les instructions de la section ci-dessus, Chargez les paquets et les fonctions.

image9+++

Un exemple d’une erreur de nom (NameError) causée par le fait de ne pas importer le package datacube.

Note

Prenez votre temps pour taper du code. Si vous souhaitez en savoir plus sur la syntaxe du code Python, ou avoir plus d’occasions de mettre en pratique les compétences de base de Python, jetez un coup d’œil à la session supplémentaire facultative Les bases de Python.

Examiner les données

Lorsque la cellule dc.load() s’exécute avec succès, elle crée une nouvelle cellule en dessous d’elle. Dans cette nouvelle cellule, nous pouvons entrer le nom de notre jeu de données et exécuter la cellule. Cela affichera le jeu de données que nous avons chargé.

image10

La sortie de la cellule doit ressembler à ceci:

image11

La sortie de dc.load() est un objet xarray.Dataset. Ce type de jeu de données est un format courant pour les données satellites, et est organisé par :

  • Dimensions: Les dimensions de l’ensemble de données. Pour les données d’observation de la Terre, il s’agit souvent de x (longitude), y (latitude) et time, comme on le voit ici. Les unités pour les dimensions x et y sont les pixels, tandis que le time est compté en nombre de survols. Dans cet exemple, nous voyons qu’il y a eu 21 survols de l’endroit sélectionné au cours de l’année 2018.

  • Coordinates: Une liste des valeurs de chaque dimension. spatial_ref fait référence au CRS que nous avons sélectionné dans dc.load().

  • Variables de données: Les valeurs de données pour nos mesures choisies. Nous voyons que red, green et blue (rouge, vert et bleu) sont chargés comme nous l’avons spécifié dans la commande dc.load(). Ce produit fournit des valeurs pour la réflectance de la surface, qui est sans unité.

  • Attributs: Métadonnées sur ce jeu de données. Le CRS est à nouveau listé.

Tracez une image en couleurs vraies

Les images en couleurs réelles sont également connues sous le nom d’images rouge-vert-bleu (RVB). Elles sont rendues en utilisant les couleurs « naturelles » de l’image et apparaissent comme elles pourraient être vues par l’œil humain. Comme nous avons chargé les bandes rouge, verte et bleue de Landsat 8, nous pouvons maintenant tracer une image RVB en utilisant les données de landsat_ds.

Dans la cellule vide suivante, entrez le code suivant. Exécutez la cellule pour générer une image RVB.

image12

La fonction utilisée ici s’appelle rgb().

  • Le premier élément entre les parenthèses rgb() est le nom de l’ensemble de données dont nous tirons les données. Dans ce cas, nous voulons extraire des informations de landsat_ds.

  • bands spécifie le nom des variables de données dans l’ensemble de données qui correspondent au rouge, au vert et au bleu. Nous avons vu ci-dessus que dans landsat_ds, elles sont nommées de manière pratique red, green et blue.

  • index fait référence au pas de temps à visualiser. La valeur par défaut est 0. Le langage Python compte à partir de 0, donc index=0 montre le premier survol, et index=1 le second.

  • size est la hauteur de l’image.

L’image RVB ressemblera à ceci:

image13

Le titre de l’image indique que la date de ces données est 2018-02-16, soit le 16 février 2018.

Exercice: charger et tracer les données Sentinel-2

Répétons le processus de chargement des données pour les données Sentinel-2. C’est un processus très similaire à celui du chargement des données Landsat 8. Nous voulons charger des données pour le même moment et le même lieu, donc nous devons seulement changer le produit et la résolution.

  1. Appelons notre jeu de données Sentinel-2 sentinel_2_ds. Vous devez lui donner un nom différent de celui du jeu de données Landsat 8. Dans une nouvelle cellule, tapez le nom de l’ensemble de données Sentinel-2.

    Jeu de données Sentinel-2

  2. Encore une fois, nous allons utiliser dc.load() pour importer les données Sentinel-2. Après sentinel_2_ds, tapez = dc.load(). Cela devrait ressembler à sentinel_2_ds = dc.load().

    Comment remplir les paramètres à l’intérieur des parenthèses de dc.load() ? Nous pouvons le faire en copiant certaines des informations de la cellule d’entrée dc.load() de Landsat 8. Le premier paramètre que nous avons listé auparavant était product. Cependant, nous ne voulons pas utiliser le produit Landsat 8, nous voulons sélectionner le produit Sentinel-2, s2_l2a.

    Produit du jeu de données Sentinel-2

Note

s2_l2a signifie Sentinel-2 Level-2A. Le quatrième caractère est un « l » alphabétique minuscule. Vérifiez que vous avez saisi le nom du produit correctement pour éviter les erreurs.

  1. Le paramètre resolution sera également différent de la charge Landsat 8. Pour Sentinel-2, il devrait être (-10,10), puisque nos données Sentinel-2 ont une résolution de 10 mètres par pixel.

    Résolution du jeu de données Sentinel-2

  2. Maintenant, saisissez le reste des paramètres pour qu’ils soient les mêmes que pour la charge Landsat 8. Ceci comprend:

    • x

    • y

    • time

    • sortie_crs

    • group_by

    • Mesures

    Comme auparavant, faites attention aux virgules, guillemets et crochets pour éviter les messages d’erreur lors de l’exécution de la cellule.

  3. Vous devriez vous retrouver avec un ensemble de paramètres qui ressemblent à ceci:

    Sentinel-2 dc.load

  4. Exécutez la cellule pour charger les données Sentinel-2.

  5. Dans la nouvelle cellule ci-dessous, traçons une image RVB à peu près au même moment que l’image RVB Landsat 8, qui date du 16 février 2018.

    Nous devons d’abord spécifier le jeu de données, puis les bandes, l’index et la taille. Dans ce cas, nous voulons utiliser index=9. Assurez-vous que la cellule contient le code suivant, puis exécutez-la.

    image15

  6. Une image RVB utilisant les données Sentinel-2 sera générée.

image16

Comme les données Landsat 8 et Sentinel-2 proviennent de différents satellites, leurs survols ne se font pas toujours en même temps. Dans ce cas, la date la plus proche des données Sentinel-2 des données Landsat est la veille, le 15 février 2018. Il s’agit d’une autre scène nuageuse, comme celle de Landsat 8.

Conclusion

Vous avez correctement chargé et tracé les données pour Landsat 8 et Sentinel-2.

Vous avez également terminé la deuxième session du cours de formation Digital Earth Africa. Au cours de cette session, vous avez découvert:

  • Produits Digital Earth Africa, y compris Landsat 8 et Sentinel-2

  • Visualisation des données avec la carte de l’Afrique de Digital Earth

  • Explorer la disponibilité des données avec le Digital Earth Africa Explorer

  • Chargement des données dans le bac à sable

  • Générer des images RVB

Toutes nos félicitations!