Ignorar navegação

Daymet

Weather Daymet AIforEarth

Estimativas de parâmetros meteorológicos diários na América do Norte em uma grade de um quilômetro.

O Daymet fornece medidas de condições meteorológicas próximas da superfície. O principal objetivo do Daymet é fornecer estimativas de dados em locais em que não há instrumentação. Esse conjunto de dados fornece dados do Daymet Versão 3 para a América do Norte (as áreas das ilhas do Havaí e de Porto Rico estão disponíveis como arquivos separados dos arquivos do território continental). As variáveis de saída do Daymet incluem temperatura mínima, temperatura máxima, precipitação, radiação de ondas curtas, pressão de vapor, equivalente de água da neve e duração do dia. O conjunto de dados abrange o período de 1º de janeiro de 1980 até o presente. Cada ano é processado individualmente ao fim de um ano civil. As variáveis do Daymet são superfícies contínuas fornecidas como arquivos individuais, por variável e por ano, com uma resolução espacial de um quilômetro e uma resolução temporal diária. Os dados da América do Norte estão em uma projeção cônica conforme de Lambert e são distribuídos no formato netCDF em conformidade com as Convenções de Metadados de CF (Clima e Previsão) (versão 1.6).

Recursos de Armazenamento

Os dados são armazenados em blobs no data center da região Leste dos EUA, no seguinte contêiner de blob:

https://daymet.blob.core.windows.net/daymetv3-raw

Dentro desse contêiner, os dados são nomeados como:

davymet_v3_[variable]_[year]_[region].nc4

  • A variável é uma dentre:
    • tmin (temperatura mínima)
    • tmax (temperatura máxima)
    • prcp (precipitação)
    • srad (radiação de onda curta)
    • pv (pressão de vapor)
    • swe (equivalente em água da neve)
    • dayl (duração do dia)
  • o campo year corresponde a um ano com quatro dígitos
  • o campo region corresponde a um código de região, que pode ser “na” (massa continental da América do Norte), “hawaii” (Havaí) ou “puertorico” (Porto Rico)

Por exemplo, os dados de temperatura máxima de 1982 da massa continental estão disponíveis em:

https://daymet.blob.core.windows.net/daymetv3-raw/daymet_v3_tmax_1982_na.nc4

Veja um exemplo de Python completo de como acessar e plotar um blob do Daymet no notebook disponível em “Acesso a dados”.

Também fornecemos um token SAS (assinatura de acesso compartilhado) somente leitura para permitir o acesso aos dados do Daymet por meio, por exemplo, do BlobFuse, que permite montar contêineres de blob como unidades:

st=2020-01-03T00%3A12%3A06Z&se=2031-01-04T00%3A12%3A00Z&sp=rl&sv=2018-03-28&sr=c&sig=ca0OY7h4J6j0JxQiiTcM9PeZ%2FCWmX5wC5sjKUPqq0mk%3D

As instruções de montagem para o Linux podem ser encontradas aqui.

O processamento em grande escala utilizando esse conjunto de dados tem desempenho melhor no data center do Azure da região Leste dos EUA, no qual os dados estão armazenados. Se você estiver usando os dados do Daymet para aplicações de ciência ambiental, considere a possibilidade de se candidatar a uma concessão do AI for Earth para dar suporte aos seus requisitos de computação.

Citação

Se você usar esses dados em uma publicação, cite:

Thornton, P.E., M.M. Thornton, B.W. Mayer, Y. Wei, R. Devarakonda, R.S. Vose e R.B. Cook. 2016. Daymet: Daily Surface Weather Data on a 1-km Grid for North America, Version 3. ORNL DAAC, Oak Ridge, Tennessee, EUA.

Para obter mais informações, confira a Política de Citações e Uso de Dados do ORNL DAAC (Oak Ridge National Laboratory Distributed Active Archive Center).

Recursos

Os recursos e as referências a seguir poderão ser úteis ao trabalhar com o conjunto de dados do Daymet:

Imagem bonita


Média de temperatura máxima diária no Havaí em 2017.

Contact

Para perguntas sobre este conjunto de dados, entre em contato com aiforearthdatasets@microsoft.com.

Avisos

A MICROSOFT FORNECE O AZURE OPEN DATASETS NO ESTADO EM QUE SE ENCONTRA. A MICROSOFT NÃO OFERECE GARANTIAS OU COBERTURAS, EXPRESSAS OU IMPLÍCITAS, EM RELAÇÃO AO USO DOS CONJUNTOS DE DADOS. ATÉ O LIMITE PERMITIDO PELA LEGISLAÇÃO LOCAL, A MICROSOFT SE EXIME DE TODA A RESPONSABILIDADE POR DANOS OU PERDAS, INCLUSIVE DIRETOS, CONSEQUENTES, ESPECIAIS, INDIRETOS, ACIDENTAIS OU PUNITIVOS, RESULTANTES DO USO DOS CONJUNTOS DE DADOS.

Esse conjunto de dados é fornecido de acordo com os termos originais com que a Microsoft recebeu os dados de origem. O conjunto de dados pode incluir dados originados da Microsoft.

Access

Available inWhen to use
Azure Notebooks

Quickly explore the dataset with Jupyter notebooks hosted on Azure or your local machine.

Select your preferred service:

Azure Notebooks

Azure Notebooks

Package: Language: Python

Demo notebook for accessing Daymet data on Azure

The Daymet dataset contains daily minimum temperature, maximum temperature, precipitation, shortwave radiation, vapor pressure, snow water equivalent, and day length at 1km resolution for North America. The dataset covers the period from January 1, 1980 to December 31, 2019.

The Daymet dataset is maintained at daac.ornl.gov/cgi-bin/dsviewer.pl?ds_id=1328 and mirrored on Azure Open Datasets at azure.microsoft.com/services/open-datasets/catalog/daymet.

In [6]:
# Standard or standard-ish imports
import os
import tempfile
import shutil
import numpy as np
import matplotlib.pyplot as plt
import urllib.request

# Less standard, but still pip- or conda-installable
import netCDF4 as nc 
from azure.storage.blob import ContainerClient
from netCDF4 import Dataset

container_name = 'daymetv3-raw'
daymet_azure_storage_url = 'https://daymet.blob.core.windows.net/'

daymet_container_client = ContainerClient(account_url=daymet_azure_storage_url, 
                                         container_name=container_name,
                                         credential=None)

# Temporary folder for data we need during execution of this notebook (we'll clean up
# at the end, we promise)
temp_dir = os.path.join(tempfile.gettempdir(),'daymet')
os.makedirs(temp_dir,exist_ok=True)

Support functions

In [2]:
def download_url(url, destination_filename=None, progress_updater=None, force_download=False):
    """
    Download a URL to a temporary file
    """
    
    # This is not intended to guarantee uniqueness, we just know it happens to guarantee
    # uniqueness for this application.
    if destination_filename is None:
        url_as_filename = url.replace('://', '_').replace('.', '_').replace('/', '_')
        destination_filename = \
            os.path.join(temp_dir,url_as_filename)
    if (not force_download) and (os.path.isfile(destination_filename)):
        print('Bypassing download of already-downloaded file {}'.format(os.path.basename(url)))
        return destination_filename
    print('Downloading file {}'.format(os.path.basename(url)),end='')
    urllib.request.urlretrieve(url, destination_filename, progress_updater)  
    assert(os.path.isfile(destination_filename))
    nBytes = os.path.getsize(destination_filename)
    print('...done, {} bytes.'.format(nBytes))
    return destination_filename

List the available Daymet files

The Daymet dataset is available for anonymous public download on Azure. The following code shows how to list all data files that are currently available, trimmed to a specific region (hawaii, na, puertorico) and year for brevity.

In [3]:
# Hawaii sounds nice...
state_of_interest = 'hawaii'
year_of_interest = '1988'

# List the blobs in the container
generator = daymet_container_client.list_blobs()
for blob in generator:
    if state_of_interest in blob.name and year_of_interest in blob.name:
        print('Blob name: ' + blob.name)
Blob name: daymet_v3_dayl_1988_hawaii.nc4
Blob name: daymet_v3_prcp_1988_hawaii.nc4
Blob name: daymet_v3_srad_1988_hawaii.nc4
Blob name: daymet_v3_swe_1988_hawaii.nc4
Blob name: daymet_v3_tmax_1988_hawaii.nc4
Blob name: daymet_v3_tmin_1988_hawaii.nc4
Blob name: daymet_v3_vp_1988_hawaii.nc4

Download a specific file from Azure blob storage

This code shows how to download a specific file from Azure blob storage into the current directory. It uses the example file daymet_v3_tmax_1980_hawaii.nc4, but you can change this as described below.

The following types of data are available: minimum temperature (tmin), maximum temperature (tmax), precipitation (prcp), shortwave radiation (srad), vapor pressure (vp), snow water equivalent (swe), and day length (dayl).

In [7]:
variable = 'tmax'
year = '2017'

# Choose your location.  The following are available: hawaii, na, puertorico.  The value 'na' stands for North America.
location = 'hawaii'

granule_name = 'daymet_v3_' + variable + '_' + year + '_' + location + '.nc4'
url = 'https://daymet.blob.core.windows.net/daymetv3-raw/' + granule_name

filename = download_url(url)
Bypassing download of already-downloaded file daymet_v3_tmax_2017_hawaii.nc4

Explore the NetCDF metadata

In [8]:
daymet_ds = Dataset(filename, 'r') 
print('netCDF file format:' + ' ' + daymet_ds.file_format)

print('netCDF dimensions:')
print(daymet_ds.dimensions.keys())
print('\ntime dimension:')
print(daymet_ds.dimensions['time'])
print('x dimension:')
print(daymet_ds.dimensions['x'])
print('y dimension:')
print(daymet_ds.dimensions['y'])
print('netCDF variables:')
print(daymet_ds.variables.keys())
print('\n' + variable + ' variable and attributes:')
print(daymet_ds.variables[variable])
netCDF file format: NETCDF4_CLASSIC
netCDF dimensions:
dict_keys(['x', 'y', 'time', 'nv'])

time dimension:
<class 'netCDF4._netCDF4.Dimension'> (unlimited): name = 'time', size = 365
x dimension:
<class 'netCDF4._netCDF4.Dimension'>: name = 'x', size = 284
y dimension:
<class 'netCDF4._netCDF4.Dimension'>: name = 'y', size = 584
netCDF variables:
dict_keys(['x', 'y', 'lat', 'lon', 'time', 'yearday', 'time_bnds', 'lambert_conformal_conic', 'tmax'])

tmax variable and attributes:
<class 'netCDF4._netCDF4.Variable'>
float32 tmax(time, y, x)
    _FillValue: -9999.0
    long_name: daily maximum temperature
    units: degrees C
    missing_value: -9999.0
    coordinates: lat lon
    grid_mapping: lambert_conformal_conic
    cell_methods: area: mean time: maximum
unlimited dimensions: time
current shape = (365, 584, 284)
filling on

Plot temperature data

Let's calculate the mean value for the variable that we care about, and then visualize this on a map. If you have kept the defaults above, this is the maximum temperature.

In [9]:
# Read the whole array
factor = daymet_ds.variables[variable][:]

# Calculate mean
factor_mean_comp = np.mean(factor, axis=0, keepdims=True)

# Reshape 
x_size = daymet_ds.dimensions['x'].size
y_size = daymet_ds.dimensions['y'].size
factor_mean_comp.shape = (y_size,x_size)

# Plot
%matplotlib inline
plt.rcParams['figure.figsize'] = (25,9)
plt.imshow(factor_mean_comp, cmap='rainbow')
plt.colorbar()
Out[9]:
<matplotlib.colorbar.Colorbar at 0x10cd4264b48>

Time conversion

Convert the time axis to a more human-readable format... mostly an excuse to demonstrate tinkering with NetCDF variables.

In [11]:
time = daymet_ds.variables['time'][:] 
time_unit = daymet_ds.variables['time'].getncattr('units') 
time_cal = daymet_ds.variables['time'].getncattr('calendar') 
local_time = nc.num2date(time, units=time_unit, calendar=time_cal)

print('Original time value: {}, human-readable time: {}'.format(time[0], local_time[0]))
Original time value: 13515.5, human-readable time: 2017-01-01 12:00:00

Cleanup

In [ ]:
shutil.rmtree(temp_dir)