[Introduction] Analyse de données satellitaires artificielles à l'aide de Python (environnement Google Colab)

Introduction-Qu'est-ce que les données satellitaires?

Données cibles

Dans cet article, nous allons vous présenter comment utiliser le jeu de données satellite en utilisant ** les données de lumière nocturne ** comme exemple. image.png Image and Data processing by NOAA's National Geophysical Data Center. DMSP data collected by the US Air Force Weather Agency.

Qu'est-ce que NightTime Lights?

――L'une des données observées par les satellites artificiels est celle de la lumière nocturne. «En termes simples, ce sont les données qui ne cessent de détecter la quantité de lumière dans la ville la nuit.

Résumé des données

Image d'utilisation

--Au moment du téléchargement, les données satellitaires artificielles sont énormes en taille mondiale (globale) et en taille de région. ――Par conséquent, il est courant de découper et d'utiliser uniquement la zone nécessaire lors de l'analyse. image.png

Opération de base en python

--Utilisez la bibliothèque suivante (cet article ne présentera que les fonctions minimales requises)

Environnement d'analyse

Flux de travail

―― 1. Acquisition de données ―― 2. Lecture des données ―― 3. Extraction de la zone requise ―― 4. Visualisation / analyse des données - Visualiser / comparer les données de veilleuse pour chaque pays

1. Acquisition de données

-Peut être téléchargé depuis Téléchargement de données DMSP-OLS --Cliquez sur le lien actif pour démarrer le téléchargement image.png ――Cependant, comme indiqué dans la note, le fichier compressé au moment du téléchargement est de ** 300 Mo **, mais une fois décompressé, il sera de ** 3 Go ** par fichier, travaillez donc sur un ordinateur portable général. Un peu dur ――Par conséquent, une série de traitements allant du téléchargement des données à la décompression est effectuée sur Google Colab.

#Installation des bibliothèques requises
!pip install sh
! pip install rasterio
!pip install geopandas
import os
from sh import wget, gunzip, mv
import tarfile

#Répertoire pour le stockage des données'data'Créer
if not os.path.exists('data'):
    os.mkdir('data')

--Utilisez la commande wget pour télécharger les données compressées

#Créez une URL à télécharger
target_data = 'F101992'
url = f'https://ngdc.noaa.gov/eog/data/web_data/v4composites/{target_data}.v4.tar'

#Télécharger les données
wget(url)

#Décompression du fichier compressé (extraire uniquement le fichier applicable)
with tarfile.open(f'/content/{target_data}.v4.tar') as tar:
    # stable_lights.avg_vis.tif.Obtenez le nom de fichier gz
    file = [tarinfo for tarinfo in tar.getmembers() if tarinfo.name.endswith("web.stable_lights.avg_vis.tif.gz")]
    #Décompressez le fichier cible (.gz)
    tar.extractall(path='/content/', members=[file[0]])
    #Décompressez le fichier cible (Décompressez)
    gunzip(f'/content/{target_data}.v4b_web.stable_lights.avg_vis.tif.gz')
    #Déplacer le fichier cible
    mv(f'/content/{target_data}.v4b_web.stable_lights.avg_vis.tif', '/content/data/')

2. Lire les données

import rasterio
import numpy as np
import matplotlib.pyplot as plt

with rasterio.open('/content/data/F101992.v4b_web.stable_lights.avg_vis.tif') as src:
    data = src.read()#Lire au format numpy

#Vérifiez la taille des données
data.shape

#Visualisation de données
plt.imshow(data[0])
plt.colorbar()

** Données mondiales sur l'éclairage nocturne pour 1992 ** image.png

――Cependant, étant donné qu'il est ici à l'état téléchargé (données globales), il est nécessaire de découper les données dans l'unité que vous souhaitez analyser.

3. Extraction de la zone requise

#Télécharger le fichier vectoriel
wget('https://datahub.io/core/geo-countries/r/countries.geojson')
import geopandas as gpd

#Lire le fichier geojson
countries = gpd.read_file('/content/countries.geojson')

#Vérifiez le contenu
countries.head()

#Visualisation des données frontalières
countries.plot()

#Extraction des frontières japonaises (pandas normaux.opération dataframe)
countries.query('ADMIN == "Japan"')

―― Ensuite, appliquez les données acquises de la frontière japonaise à l'ensemble de données global et essayez d'extraire uniquement les données de la région du Japon. --Utilisez une méthode appelée rasterio.mask pour découper les parties nécessaires. --rasterio.mask.mask (lecture d'objet "tif file", colonne de géométrie de "border data", crop = True) --Cela génère deux données, out_image et out_transform, et les données découpées au format numpy sont stockées dans out_image (out_transform stocke les informations de conversion de coordonnées des données découpées, mais c'est un peu compliqué, alors ici Je vais l'omettre)

import rasterio.mask

with rasterio.open('/content/data/F101992.v4b_web.stable_lights.avg_vis.tif') as src:
    out_image, out_transform = rasterio.mask.mask(src, countries.query('ADMIN == "Japan"').geometry, crop=True)

** Données de la lumière nocturne du Japon en 1992 ** (On peut voir que la quantité de lumière dans la zone métropolitaine est importante) image.png

4. Visualisation / analyse des données

#Fonctionner une série de processus
def load_ntl(target_data, area):
    #Télécharger uniquement lorsque les données n'existent pas
    if not os.path.exists(f'/content/data/{target_data}.v4b_web.stable_lights.avg_vis.tif'):
        url = f'https://ngdc.noaa.gov/eog/data/web_data/v4composites/{target_data}.v4.tar'
        #Télécharger les données
        wget(url)
        #Décompression du fichier compressé (extraire uniquement le fichier applicable)
        with tarfile.open(f'/content/{target_data}.v4.tar') as tar:
            # stable_lights.avg_vis.tif.Obtenez le nom de fichier gz
            file = [tarinfo for tarinfo in tar.getmembers() if tarinfo.name.endswith("web.stable_lights.avg_vis.tif.gz")]
            #Décompressez le fichier cible (.gz)
            tar.extractall(path='/content/', members=[file[0]])
            #Décompressez le fichier cible (Décompressez)
            gunzip(f'/content/{target_data}.v4b_web.stable_lights.avg_vis.tif.gz')
            #Déplacer le fichier cible
            mv(f'/content/{target_data}.v4b_web.stable_lights.avg_vis.tif', '/content/data/')
    #Extraire les données de la zone correspondante du fichier TIF
    with rasterio.open(f'/content/data/{target_data}.v4b_web.stable_lights.avg_vis.tif') as src:
        out_image, out_transform = rasterio.mask.mask(src, countries.query(f'ADMIN == "{area}"').geometry, crop=True)
    return out_image

#Fonction de visualisation
def show(data):
    plt.figure(figsize=(15, 5))
    plt.subplot(121)
    plt.imshow(data[0])
    plt.subplot(122)
    plt.hist(data.reshape(-1), bins=np.arange(1, 63, 1))

#Exemple d'utilisation (données acquises au Japon en 1992)
japan_1992 = load_ntl(target_data='F101992', area='Japan')

-Je vais essayer de visualiser la veilleuse de différents pays. (Vous pouvez vérifier les données de votre pays / année préféré en modifiant les variables de target_data et area)

#Obtention de données pour le Japon, la Chine, la Thaïlande et le Cambodge
japan_1992 = load_ntl(target_data='F101992', area='Japan')
china_1992 = load_ntl(target_data='F101992', area='China')
thailand_1992 = load_ntl(target_data='F101992', area='Thailand')
cambodia_1992 = load_ntl(target_data='F101992', area='Cambodia')

#Visualisation
show(japan_1992)
show(china_1992)
show(thailand_1992)
show(cambodia_1992 )

1992 Données de la veilleuse japonaise image.png

1992 données de veilleuse chinoise image.png

1992 données de veilleuse thaï image.png

1992 Données de la veilleuse cambodgienne image.png

«De cette façon, le Japon est généralement brillant à partir de 1992, la Chine a une grande superficie terrestre, il y a donc de grandes différences entre les villes, la Thaïlande est brillante avec des autoroutes et des villes locales centrées sur Bangkok, et le Cambodge est autre que la capitale. Vous pouvez voir la tendance de chaque pays comme l'obscurité. «Ici, je n'analyserai que les modèles ci-dessus, mais je pense qu'il serait intéressant de comparer d'autres groupes d'âge et pays. ――La zone de recherche utilise la somme des NTL (Night time Light) (quantité totale de lumière nocturne pour chaque zone) comme indice, et une analyse comparative est effectuée avec le PIB et l'indice de consommation d'énergie.

Supplément

«Nous avons introduit les données de la veilleuse jusqu'à présent, mais certains problèmes ont également été signalés dans les données de la veilleuse. ――Par exemple, comme le type de capteur est différent pour chaque institution fixe (F10, F12, etc. dans l'en-tête du nom de données), des biais de capteur légèrement différents se produisent. Par conséquent, lors de l'analyse de la quantité de lumière dans une tendance à long terme, un prétraitement est nécessaire pour éliminer ces biais (de nombreux articles de recherche ont été publiés dans le traitement appelé Calibration). De plus, ces données expriment la quantité de lumière nocturne sous la forme d'une valeur entière de 0 à 63, et bien qu'elles soient faciles à gérer, le phénomène de saturation (saturation) se produit aux points où la quantité de lumière est assez grande et la quantité de lumière peut être mesurée correctement. Il a également la propriété de ne pas être présent.

finalement

Dans cet article, nous avons présenté comment gérer les ensembles de données satellite dans l'environnement Google Colab. Cette fois, nous avons introduit l'ensemble de données de veilleuse, mais divers ensembles de données satellites sont ouverts au public en tant que données ouvertes, et vous pouvez fondamentalement les gérer de la même manière que cette fois.

Recommended Posts

[Introduction] Analyse de données satellitaires artificielles à l'aide de Python (environnement Google Colab)
Analyse de données à l'aide de pandas python
[Livre technique] Introduction à l'analyse de données avec Python -1 Chapitre Introduction-
Créer une feuille de calcul Google à l'aide de l'API Python / Google Data
Analyse de données python
[Construction de l'environnement] Analyse des dépendances à l'aide de CaboCha avec Python 2.7
Analyse de données avec python 2
Analyse des données à l'aide de xarray
Présentation de l'analyse de données python
Nettoyage des données à l'aide de Python
Modèle d'analyse de données Python
Analyse de données avec Python
[Python] [Word] [python-docx] Analyse simple des données de diff en utilisant python
Note de lecture: Introduction à l'analyse de données avec Python
Un moyen facile de gratter avec Python en utilisant Google Colab
Construction d'un environnement d'analyse de données avec Python (notebook IPython + Pandas)
[Python] Obtenez des données insight à l'aide de l'API Google My Business
Analyse d'images satellites artificielles par Google Earth Engine et Google Colab-Analyse d'images satellite à partir de gratuitement (Introduction) -
Mon conteneur d'analyse de données python
Visualisez l'activité des plantes depuis l'espace à l'aide de données satellites et de Python
Python pour l'analyse des données Chapitre 4
Gonfler des données textuelles par retranslation à l'aide de Google Traduction en Python
20200329_Introduction à l'analyse de données avec Python 2nd Edition Personal Summary
Mon environnement d'analyse de données python
Créer un environnement d'analyse de données python sur Mac (El Capitan)
Notes d'apprentissage sur l'analyse des données Python
Python pour l'analyse des données Chapitre 2
[Python] Introduction à la création de graphiques à l'aide de données de virus corona [Pour les débutants]
Jouez avec l'API de données YouTube v3 à l'aide du client Python de l'API Google
Python pour l'analyse des données Chapitre 3
Introduction à l'analyse de données avec Python P32-P43 [ch02 3.US Baby Names 1880-2010]
Introduction à l'analyse de données par Python P17-P26 [ch02 1.usa.gov données de bit.ly]
Créer un Ubuntu de démarrage USB avec un environnement Python pour l'analyse des données
Première analyse de données satellitaires par Tellus
Acquisition de données à l'aide de l'API googlemap de python
Python: analyse des séries chronologiques: prétraitement des données des séries chronologiques
[Python3] Google translate google translation sans utiliser l'API
Utiliser Cloud Storage depuis Python3 (Introduction)
Modèle de prétraitement pour l'analyse des données (Python)
Recommandation d'analyse des données à l'aide de MessagePack
Analyse de données à partir de python (visualisation de données 1)
Introduction à l'analyse d'image opencv python
Analyse de données à partir de python (visualisation de données 2)
Construction de l'environnement Python3.6 (à l'aide de l'environnement Win Anaconda)
J'ai essayé l'analyse de données IRMf avec python (Introduction au décodage des informations cérébrales)
Environnement de développement Python pour macOS utilisant venv 2016
Outil de visualisation Python pour le travail d'analyse de données
Introduction à la simulation d'événements discrets à l'aide de Python # 1
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.1-8.2.5)
Utilisation de venv dans un environnement Windows + Docker [Python]
[Débutant] Scrapage Web Python facile à comprendre à l'aide de Google Colaboratory
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.3-8.3.6.1)
[Python] Créer un environnement Batch à l'aide d'AWS-CDK
Obtenez les données de l'API Google Fit en Python
Essayez d'utiliser Python avec Google Cloud Functions
Tutoriel de recommandation utilisant l'analyse d'association (implémentation python)
[Introduction à Python3 Jour 19] Chapitre 8 Destinations de données (8.4-8.5)
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
[Introduction à Python3 Day 18] Chapitre 8 Destinations de données (8.3.6.2 à 8.3.6.3)
[Python] Première analyse de données / apprentissage automatique (Kaggle)
Création d'une application d'analyse de données à l'aide de Streamlit