Pomiń nawigację

Daymet

Weather Daymet AIforEarth

Szacunek dziennych parametrów pogody w Ameryce Północnej na siatce jednokilometrowej.

Zestaw danych Daymet udostępnia pomiary warunków meteorologicznych przy powierzchni ziemi; głównym celem opracowania tego zestawu danych jest udostępnianie szacunków danych tam, gdzie niedostępne są instrumenty pomiarowe. Ten zestaw danych udostępnia dane Daymet w wersji 3 dla Ameryki Północnej. Dane dotyczące wysp należących do Hawajów i Portoryko są dostępne w formie osobnych plików (oddzielnych od danych dotyczących obszarów kontynentalnych). Zmienne wyjściowe zestawu danych Daymet obejmują minimalną temperaturę, maksymalną temperaturę, opady, promieniowanie krótkofalowe, ciśnienie pary nasyconej, równoważną zawartość wody oraz długość dnia. Zestaw danych obejmuje okres od 1 stycznia 1980 do chwili obecnej. Każdy rok jest przetwarzany indywidualnie po zakończeniu roku kalendarzowego. Zmienne zestawu danych Daymet to jednolite powierzchnie udostępniane jako indywidualne pliki, podzielone według zmiennej i roku, w jednokilometrowej rozdzielczości przestrzennej i rozdzielczości czasowej jednego dnia. Dane są przedstawiane w formie równokątnego stożkowego odwzorowania Lamberta dla Ameryki Północnej i są udostępniane w formacie netCDF zgodnym z konwencjami metadanych Climate and Forecast (wersja 1.6).

Zasoby magazynu

Dane są przechowywane w obiektach blob w centrum danych Wschodnie stany USA, w następującym kontenerze obiektów blob:

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

W tym kontenerze dane są nazwane następująco:

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

  • Zmienna to jedna z następujących wartości:
    • tmin (temperatura minimalna)
    • tmax (temperatura maksymalna)
    • prcp (opady)
    • srad (promieniowanie krótkofalowe)
    • vp (ciśnienie pary nasyconej)
    • sne (równoważna zawartość wody)
    • dayl (długość dnia)
  • year to cztery cyfry oznaczające rok
  • region to jeden z następujących kodów regionu: „na” (kontynentalna Ameryka Północna), „hawaii” lub „puertorico”

Na przykład dane dotyczące maksymalnej temperatury dla kontynentu z 1982 r. są dostępne pod adresem:

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

Pełny przykład w języku Python uzyskiwania dostępu do obiektu blob zestawu danych Daymet i kreślenia go jest dostępny w notesie udostępnionym w obszarze “dostęp do danych”.

Udostępniamy również token sygnatury dostępu współdzielonego tylko do odczytu na potrzeby dostępu do danych Daymet na przykład za pomocą narzędzia BlobFuse, umożliwiającego instalowanie kontenerów obiektów blob jako dysków:

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

Instrukcje instalacji dla systemu Linux są dostępne tutaj.

Przetwarzanie na dużą skalę przy użyciu tego zestawu danych najlepiej wykonywać w centrum danych platformy Azure w regionie Wschodnie stany USA, w którym te dane są przechowywane. W przypadku korzystania z danych Daymet w aplikacjach nauki o środowisku warto rozważyć złożenie wniosku o grant w ramach programu AI for Earth w celu sfinansowania wymaganych zasobów obliczeniowych.

Odsyłacz bibliograficzny

W przypadku użycia tych danych w publikacji podaj następujące źródło:

Thornton, P.E., M.M. Thornton, B.W. Mayer, Y. Wei, R. Devarakonda, R.S. Vose i R.B. Cook. 2016. Daymet: Daily Surface Weather Data on a 1-km Grid for North America, Version 3 (Daymet: dane dotyczące pogody przy powierzchni ziemi na jednokilometrowej siatce dla Ameryki Północnej, wersja 3). ORNL DAAC, Oak Ridge, Tennessee, USA.

Zobacz zasady dotyczące wykorzystania i cytowania danych Oak Ridge National Laboratory Distributed Active Archive Center, aby uzyskać więcej informacji.

Zasoby

Następujące zasoby i źródła mogą być pomocne podczas pracy z zestawem danych Daymet:

Ładny obraz


Średnia maksymalna temperatura dzienna na Hawajach w 2017 r.

Kontakt

Jeśli masz pytania na temat tego zestawu danych, napisz na adres aiforearthdatasets@microsoft.com.

Uwagi

FIRMA MICROSOFT UDOSTĘPNIA OTWARTE ZESTAWY DANYCH W ICH AKTUALNYM STANIE. FIRMA MICROSOFT NIE UDZIELA ŻADNYCH GWARANCJI, JAWNYCH LUB DOMNIEMANYCH, ANI NIE OKREŚLA ŻADNYCH WARUNKÓW W ODNIESIENIU DO KORZYSTANIA Z ZESTAWÓW DANYCH. W ZAKRESIE DOZWOLONYM PRZEZ PRZEPISY PRAWA LOKALNEGO FIRMA MICROSOFT ZRZEKA SIĘ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK STRATY I SZKODY, W TYM SZKODY BEZPOŚREDNIE, WYNIKOWE, SPECJALNE, POŚREDNIE, PRZYPADKOWE LUB KARNE, WYNIKAJĄCE Z KORZYSTANIA Z TYCH ZESTAWÓW DANYCH.

Zestaw danych jest udostępniany zgodnie z pierwotnymi warunkami, na jakich firma Microsoft otrzymała dane źródłowe. Zestaw danych może zawierać dane pozyskane z firmy 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)