탐색 건너뛰기

Daymet

Weather Daymet AIforEarth

1km 그리드로 나타낸 북아메리카의 일별 날씨 요소 추정치입니다.

Daymet은 표면 근처의 기상 조건 측정값을 제공하며, Daymet의 주요 목표는 계측 수단이 없는 곳에서 데이터 추정치를 제공하는 것입니다. 이 데이터 세트는 북아메리카의 Daymet 버전 3 데이터를 제공합니다. 하와이와 푸에르토리코의 섬 지역은 대륙과 별도의 파일로 제공됩니다. Daymet 산출물 변수에는 최저 온도, 최고 온도, 강수량, 단파 복사, 증기압, 적설 상당 수량, 낮 길이가 포함됩니다. 본 데이터 세트는 1980년 1월 1일부터 현재까지의 기간을 다룹니다. 각 연도는 연말에 개별적으로 처리됩니다. Daymet 변수는 1km 공간 해상도 및 일별 시간 해상도를 기준으로 변수 및 연도별 개별 파일로 제공되는 연속 표면입니다. 데이터는 북아메리카의 람베르트 정각원추도법에 있으며 CF(기후 및 예측) 메타데이터 규칙(버전 1.6)을 준수하는 netCDF 형식으로 배포됩니다.

스토리지 리소스

데이터는 미국 동부 데이터 센터에 있는 다음 Blob 컨테이너의 Blob에 저장됩니다.

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

해당 컨테이너 내에서 데이터의 이름은 다음과 같이 지정됩니다.

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

  • 변수는 다음 중 하나입니다.
    • tmin(최소 온도)
    • tmax(최대 온도)
    • prcp(강수량)
    • srad(단파 복사)
    • vp(증기 압력)
    • sne(적설 상당 수량)
    • dayl(낮 길이)
  • year는 4자리 연도입니다.
  • region은 “북미”(북아메리카 대륙), “하와이” 또는 “푸에르토리코” 중 하나인 지역 코드입니다.

예를 들어 1982년 대륙의 최대 온도 데이터는 다음에서 제공됩니다.

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

Daymet Blob에 액세스하고 Daymet Blob을 그리는 전체 Python 예제는 “데이터 액세스” 아래에서 제공되는 Notebook에서 사용할 수 있습니다.

또한 Blob 컨테이너를 드라이브로 탑재할 수 있게 해주는 BlobFuse 등을 통해 Daymet 데이터에 액세스하도록 읽기 전용 SAS(공유 액세스 서명) 토큰을 제공합니다.

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

Linux용 탑재 지침은 여기에 있습니다.

이 데이터 세트를 사용한 대규모 처리는 데이터가 저장된 미국 동부 Azure 데이터 센터에서 가장 잘 수행됩니다. 환경 과학 응용 분야에 Daymet 데이터를 사용 중인 경우 컴퓨팅 요구 사항을 지원하려면 지구 환경 AI(AI for Earth) 보조금 신청을 고려해 보세요.

인용

이 데이터를 게시물에서 사용하려는 경우 다음을 인용하세요.

Thornton, P.E., M.M. Thornton, B.W. Mayer, Y. Wei, R. Devarakonda, R.S. Vose, and R.B. Cook. 2016. Daymet: 1km 그리드에서의 북아메리카 일별 표면 날씨 데이터, 버전 3. ORNL DAAC, 미국, 테네시, 오크 리지

자세한 내용은 ORNL DAAC(Oak Ridge National Laboratory Distributed Active Archive Center)의 데이터 사용 및 인용 정책을 참조하세요.

리소스

다음은 Daymet 데이터 세트를 사용할 때 도움이 되는 리소스 및 참조입니다.

멋진 사진


2017년 하와이의 평균 일별 최대 온도입니다.

연락처

이 데이터 세트에 대한 질문이 있는 경우 aiforearthdatasets@microsoft.com으로 문의하세요.

알림

Microsoft는 Azure Open Datasets를 “있는 그대로” 제공합니다. Microsoft는 귀하의 데이터 세트 사용과 관련하여 어떠한 명시적이거나 묵시적인 보증, 보장 또는 조건을 제공하지 않습니다. 귀하가 거주하는 지역의 법규가 허용하는 범위 내에서 Microsoft는 귀하의 데이터 세트 사용으로 인해 발생하는 일체의 직접적, 결과적, 특별, 간접적, 부수적 또는 징벌적 손해 또는 손실을 비롯한 모든 손해 또는 손실에 대한 모든 책임을 부인합니다.

이 데이터 세트는 Microsoft가 원본 데이터를 받은 원래 사용 약관에 따라 제공됩니다. 데이터 세트에는 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)