Navigáció kihagyása

Daymet

Weather Daymet AIforEarth

Észak-Amerika napi időjárási mintázatainak becslése 1 kilométeres rácsban.

A Daymet felszínközeli meteorológiai méréseredményeket szolgáltat; az elsődleges rendeltetése, hogy olyan helyekről is szolgáltasson becsült adatokat, ahol nincsenek eszközök. Ez az adatkészlet a Daymet 3-as verziójának adatait teszi elérhetővé Észak-Amerikához; és Hawaii és Puerto Rico szigetéhez a kontinentális területtől elkülönítve az adatok külön fájlként érhetőek el. A Daymet kimeneti változói a következő paramétereket tartalmazzák: legalacsonyabb hőmérséklet, legmagasabb hőmérséklet, csapadék, rövidhullámú sugárzás, légnyomás, hó-víz egyenérték, nap hosszúsága. Az adatkészlet adatokat tartalmaz 1980. január 1-től kezdve máig. Minden év feldolgozása a naptári év zárásakor történik. A Daymet változói változók és évek szerinti fájlok formájában rendelkezésre bocsátott folytonos felületek, 1 km-es térbeli és naponkénti időbeli felbontásban. Az adatok Lambert-féle szögtartó kúpvetületben, Észak-Amerikára, a Klíma- és Előrejelzési (CF) metaadat-egyezményeknek (1.6 verzió) megfelelő netCDF-fáljban érhetők el.

Tárerőforrások

Az adatok tárolása blobokban, az USA keleti részén található adatközpontban, a következő blobtárolóban történik:

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

A tárolón belül az adatok elnevezése a következőképpen történik:

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

  • A változó az alábbiak egyike lehet:
    • tmin (minimum hőmérséklet)
    • tmax (maximum hőmérséklet)
    • prcp (csapadék)
    • srad (rövidhullámú sugárzás)
    • vp (páranyomás)
    • sne (hó-víz egyenérték)
    • dayl (nap hossza)
  • A year négyjegyű szám
  • A region egy régiókód, az „na” (Észak-Amerika kontinensre kiterjedően), a „hawaii” és a „puertorico” valamelyike lehet

Például az 1982-es maximum hőmérsékleti adatok a kontinensre vonatkozóan elérhetőek itt:

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

Az egy Daymet-blob elérését és ábrázolását bemutató teljes Python-példa áll rendelkezésre az “adatelérés” szakaszban található jegyzetfüzetben.

Egy csak olvasható SAS-tokent is biztosítunk, amellyel például a BlobFuse szolgáltatáson keresztül hozzáférhet a Daymet-adatokhoz, és a blobtárolókat meghajtókként is csatlakoztathatja:

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

A csatlakoztatási útmutatót Linux rendszerhez itt olvashatja.

Érdemes a nagyobb adatfeldolgozásokat az USA keleti részén található Azure-adatközpontban végezni, ahol az adatok találhatók. Ha a Daymet-adatokat környezettudományi alkalmazásokhoz használja, igényeljen AI for Earth típusú engedélyt számítógépes igényei támogatása érdekében.

Idézés

Ha ezeket az adatokat kiadványban használja, így adja meg a forrást:

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

További információkért lásd az Oak Ridge Nemzeti Laboratórium Megosztott Aktív Archívumközpont (ORNL DAAC) Adatidézési és hivatkozási szabályzatát.

Erőforrások

A Daymet-adatkészlettel végzett munkát a következő források és hivatkozások segíthetik:

Szép kép


Hawaii átlagos napi csúcshőmérséklete 2017-ben.

Kapcsolattartó

Az ezzel az adatkészlettel kapcsolatos kérdéseket elküldheti az aiforearthdatasets@microsoft.com címre.

Értesítések

A MICROSOFT JELEN ÁLLAPOTUKBAN SZOLGÁLTATJA AZ AZURE NYÍLT ADATKÉSZLETEIT. A MICROSOFT NEM VÁLLAL SEMMINEMŰ KIFEJEZETT VAGY HALLGATÓLAGOS JÓTÁLLÁST AZ ADATKÉSZLETEK HASZNÁLATÁRA VONATKOZÓAN. A HELYI TÖRVÉNYEK ÁLTAL ENGEDETT MÉRTÉKBEN A MICROSOFT ELHÁRÍT MINDEN FELELŐSSÉGET AZ ADATKÉSZLETEK HASZNÁLATÁBÓL ADÓDÓ ESETLEGES KÁROKÉRT VAGY VESZTESÉGEKÉRT, BELEÉRTVE A KÖZVETLEN, KÖVETKEZMÉNYES, KÜLÖNLEGES, KÖZVETETT, VÉLETLEN VAGY BÜNTETÉSBŐL EREDŐ KÁROKAT.

Az adatkészletet a Microsoft forrásadataihoz tartozó eredeti feltételek szerint szolgáltatjuk. A készlet tartalmazhat Microsofttól származó adatokat.

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)