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 and Data processing by NOAA's National Geophysical Data Center. DMSP data collected by the US Air Force Weather Agency.
――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.
--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.
--Utilisez la bibliothèque suivante (cet article ne présentera que les fonctions minimales requises)
―― 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
-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 ――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.
(Si vous avez un PC haut de gamme, vous pouvez le télécharger et le décompresser en un clic ...)
Tout d'abord, installez les bibliothèques nécessaires 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/')
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 **
――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.
#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)
#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
1992 données de veilleuse chinoise
1992 données de veilleuse thaï
1992 Données de la veilleuse cambodgienne
«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.
«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.
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