티스토리 뷰
NSRDB: National Solar Radiation Database :: 일사량
Data set 범위
DATA Download
https://developer.nrel.gov/docs/solar/nsrdb/guide/
데이터 다운로드 이용안내
API에서 지원하는 것보다 더 큰 데이터 세그먼트를 다운로드하는 데 관심이 있는 사용자로부터 요청을 받는 경우가 많습니다. 이러한 데이터세트의 규모가 크다는 점을 이해하는 것이 중요합니다. 현재 우리의 스토리지 아카이브에는 수백 테라바이트의 데이터가 포함되어 있으며 지속적으로 증가하고 있습니다! 점점 늘어나는 사용자 커뮤니티에 이 크기의 데이터 세트의 동적 세그먼트를 안정적으로 제공하기 위해 우리는 서버 하드웨어가 유지할 수 있는 최대 용량을 계산했습니다. 우리는 이 물리적 용량을 사용하여 API 속도 제한을 결정합니다. 대량 데이터에 액세스하는 데 관심이 있는 사용자의 경우 AWS의 공개 데이터 레지스트리( https://registry.opendata.aws/nrel-pds-nsrdb/ )를 통해 전체 데이터 세트를 사용할 수 있습니다 .
API는 단일 사용자가 수행할 수 있는 동시 요청 수, 단일 사용자가 24시간 동안 수행할 수 있는 요청 수, 단일 요청의 최대 크기 등 여러 가지 방식으로 제한됩니다. API 속도 제한은 다음과 같이 설정됩니다.
하루 1000개 요청
2초마다
1개 요청 동시에 20개 요청 처리 중
CSV를 통해 직접 다운로드하는 경우 별도의 속도 제한이 있습니다. 이는 CSV 엔드포인트를 통해 1년 동안 단일 사이트만 다운로드할 수 있기 때문입니다. 따라서 이러한 요청은 비교해 보면 항상 매우 작습니다.
하루 5000개 요청
초당 1개 요청
동시에 20개 요청 처리 중
각 단일 요청당 크기 제한은 각 요청의 총 속성 수에 따라 결정됩니다. 각 요청의 최대 가중치는 5000000 입니다 . 각 요청의 가중치를 결정하는 계산은 다음과 같습니다.
사이트 수*속성 수*연도 수*연간 데이터 간격
- site-count 는 제출된 WKT 값에서 파생되며 site_count API 엔드포인트를 사용하여 검색할 수 있습니다.
- attribute-count는 요청된 속성 수와 같습니다.
- year-count는 요청된 연도 수와 같습니다.
- 연간 데이터 간격은 ((60/간격)*24*365) 입니다 . 여기서 간격은 요청된 간격입니다.
api 발급
https://developer.nrel.gov/signup/
API 키 사용법
가입하고 나면 고유한 API 키가 제공됩니다. 이 40자 문자열이 API 키입니다. 열쇠:
- 귀하를 고유하게 식별합니다.
- NREL의 웹 서비스에 대한 액세스를 제공합니다.
- 비공개로 유지되어야 하며 공유되어서는 안 됩니다.
키를 사용하려면 웹 서비스 요청 시 키를 URL 쿼리 매개변수로 전달하기만 하면 됩니다. 예를 들어:
GET https://developer.nrel.gov/api/alt-fuel-stations/v1.json?limit=1&api_key=YOUR_KEY_HERE
API 키를 전달하는 방법
API 키는 몇 가지 다른 방법으로 서비스에 전달될 수 있습니다. 가장 쉬운 방법을 선택하세요.
HTTP 헤더
API 키를 X-Api-Key헤더에 전달합니다.
curl -H 'X-Api-Key: DEMO_KEY' 'https://developer.nrel.gov/api/alt-fuel-stations/v1.json?limit=1'
쿼리 매개변수 가져오기
API 키를 api_keyGET 쿼리 문자열 매개변수에 전달합니다.
curl 'https://developer.nrel.gov/api/alt-fuel-stations/v1.json?limit=1&api_key=YOUR_KEY_HERE'
참고: GET 쿼리 매개변수는 GET이 아닌 요청(예: POST 및 PUT)에 사용될 수 있습니다.
HTTP 기본 인증 사용자 이름
또는 HTTP 기본 인증을 사용하여 API 키를 사용자 이름(비밀번호 포함)으로 전달합니다.
curl 'https://YOUR_KEY_HERE@developer.nrel.gov/api/alt-fuel-stations/v1.json?limit=1'
실행 : 환경 visual code
pip3 install --user h5pyd
기타 pandas ,IPython 설치
- api_key: 'api key 복사 붙여넣기'NREL의 실제 API 키로 바꿉니다.
- your_name: '성+이름'공백 대신 '+'를 사용하여 이름으로 바꿉니다.
- your_email: '이메일'실제 이메일 주소로 바꿉니다.
python 파일제목.py
실행한다.
파이썬 예제.
https://developer.nrel.gov/docs/solar/nsrdb/python-examples/
import sys, os
import pandas as pd
import numpy as np
from IPython.display import display
#save
filename = 'solar_data.csv'
# Declare all variables as strings. Spaces must be replaced with '+', i.e., change 'John Smith' to 'John+Smith'.
# Define the lat, long of the location and the year
lat, lon, year = 33.2164, -97.1292, 2020
# You must request an NSRDB api key from the link above
api_key = 'api key 복사 붙여넣기'
# Set the attributes to extract (e.g., dhi, ghi, etc.), separated by commas.
attributes = 'ghi,dhi,dni,wind_speed,air_temperature,solar_zenith_angle'
# Choose year of data
year = '2010'
# Set leap year to true or false. True will return leap day data if present, false will not.
leap_year = 'false'
# Set time interval in minutes, i.e., '30' is half hour intervals. Valid intervals are 30 & 60.
interval = '30'
# Specify Coordinated Universal Time (UTC), 'true' will use UTC, 'false' will use the local time zone of the data.
# NOTE: In order to use the NSRDB data in SAM, you must specify UTC as 'false'. SAM requires the data to be in the
# local time zone.
utc = 'false'
# Your full name, use '+' instead of spaces.
your_name = '성+이름'
# Your reason for using the NSRDB.
reason_for_use = 'beta+testing'
# Your affiliation
your_affiliation = 'my+institution'
# Your email address
your_email = '이메일'
# Please join our mailing list so we can keep you up-to-date on new developments.
mailing_list = 'true'
# Return all but first 2 lines of csv to get data:
df = pd.read_csv('https://developer.nrel.gov/api/nsrdb/v2/solar/psm3-download.csv?wkt=POINT({lon}%20{lat})&names={year}&leap_day={leap}&interval={interval}&utc={utc}&full_name={name}&email={email}&affiliation={affiliation}&mailing_list={mailing_list}&reason={reason}&api_key={api}&attributes={attr}'.format(year=year, lat=lat, lon=lon, leap=leap_year, interval=interval, utc=utc, name=your_name, email=your_email, mailing_list=mailing_list, affiliation=your_affiliation, reason=reason_for_use, api=api_key, attr=attributes), skiprows=2)
# Set the time index in the pandas dataframe:
df = df.set_index(pd.date_range('1/1/{yr}'.format(yr=year), freq=interval+'Min', periods=525600/int(interval)))
# take a look
print('shape:', df.shape)
df.head()
df['Date'] = pd.to_datetime(df[['Year', 'Month', 'Day']])
specific_date_data = df[df['Date'] == '2019-06-28']
print(specific_date_data)
# save
# Check if the file exists
if os.path.exists(filename):
# Append without writing the header
specific_date_data.to_csv(filename, mode='w', header=False, index=False)
else:
# Write with the header if the file does not exist
specific_date_data.to_csv(filename, mode='w', index=False)
#data_on_specific_date = data[data['Date'] == '2022-06-27']
#print(data_on_specific_date)
위도와 경도 . 날짜의 범위가 벗어나면 400 error가 뜬다.
결과 예시
- 구체적 정보를 추가해보자. 위치. 날짜.
- 한민국 서울의 위도와 경도:
- 위도: 약 37.5665
- 경도: 약 126.9780
- 날짜 범위:
- year일반적으로 매개변수를 '2022'로 설정합니다 . 하지만 NSRDB API는 특정 날짜가 아닌 1년 단위로 데이터를 제공합니다. 연도 전체 데이터를 받게 되며 데이터 세트를 다운로드한 후 특정 날짜(2022-06-27)를 필터링해야 합니다.
(아래의 범위는 data set의 범위에서 벗어났기 때문에 400오류가 뜬다......)
lat, lon = 37.5665, 126.9780 # Seoul's coordinates
year = "2022" # Year of interest
# Return all but first 2 lines of csv to get data:
df = pd.read_csv('https://developer.nrel.gov/api/nsrdb/v2/solar/psm3-download.csv?wkt=POINT({lon}%20{lat})&names={year}&leap_day={leap}&interval={interval}&utc={utc}&full_name={name}&email={email}&affiliation={affiliation}&mailing_list={mailing_list}&reason={reason}&api_key={api}&attributes={attr}'.format(year=year, lat=lat, lon=lon, leap=leap_year, interval=interval, utc=utc, name=your_name, email=your_email, mailing_list=mailing_list, affiliation=your_affiliation, reason=reason_for_use, api=api_key, attr=attributes), skiprows=2)
# Set the time index in the pandas dataframe:
df = df.set_index(pd.date_range('1/1/{yr}'.format(yr=year), freq=interval+'Min', periods=525600/int(interval)))
# take a look
print('shape:', df.shape)
df.head()
df['Date'] = pd.to_datetime(df[['Year', 'Month', 'Day']])
specific_date_data = df[df['Date'] == '2019-06-28']
print(specific_date_data)
- GHI(전지구 수평 방사 조도):
지면과 수평인 지표면이 상공에서 받는 단파 복사의 총량을 나타냅니다.
직사광선과 하늘의 확산 복사(대기에 의해 산란된 햇빛)를 모두 포함합니다.
고정된 평평한 위치에 설치된 태양광 패널과 관련된 애플리케이션과 관련이 있습니다. - DHI(확산 수평 방사 조도):
지면과 수평인 표면이 하늘(태양 원반 제외)에서 받는 방사선의 양을 나타냅니다.
특히 그늘진 지역이나 흐린 날씨에 하늘 복사가 총 태양 복사 조도에 미치는 영향을 이해하는 데 중요합니다.
태양열 애플리케이션 또는 확산된 태양광을 효과적으로 포착하도록 설계된 태양열 패널에 유용합니다. - DNI(직접 정상 방사 조도):
태양으로부터 오는 광선에 수직(정상)인 표면이 단위 면적당 받는 태양 복사열의 양을 나타냅니다.
태양광의 농도 및 강도와 직접적으로 관련이 있으며, 집광형 태양광 발전(CSP) 시스템과 태양의 경로를 따라가는 추적형 태양광 발전 시스템에 매우 중요합니다. - 풍속 : 측정 위치 및 시간에서의 풍속을 말하며 일반적으로 초당 미터(m/s)로 측정됩니다.
- 온도 : 측정 위치 및 시간의 주변 공기 온도이며 일반적으로 섭씨(°C)로 기록됩니다.
- 태양천정각 : 태양의 방향과 천정(직접 머리 위) 사이의 각도입니다. 각도로 측정됩니다. 태양이 머리 바로 위에 있을 때 태양 천정각은 0°이고 태양이 수평선을 향해 이동할 때 각도는 증가합니다.
- csv 파일로 저장해보자.
# save
if os.path.exists(filename):
# Append without writing the header
specific_date_data.to_csv(filename, mode='w', header=False, index=False)
else:
# Write with the header if the file does not exist
specific_date_data.to_csv(filename, mode='w', index=False)
'Coding > BigData' 카테고리의 다른 글
nasa _near real time data (0) | 2024.01.29 |
---|
- Total
- Today
- Yesterday
- 라즈베리파이
- StableDiffusion
- three.js
- emotive eeg
- 유니티
- opencv
- CNC
- 후디니
- Java
- houdini
- Python
- oculuspro
- VR
- TouchDesigner
- MQTT
- unity 360
- Arduino
- DeepLeaning
- motor controll
- sequelize
- JacobianMatrices
- Express
- colab
- 유니티플러그인
- docker
- RNN
- Unity
- node.js
- ardity
- AI
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |