python으로 OMNI 데이터 다운로드 및 처리하기

져닝·2024년 12월 16일

solar research

목록 보기
1/1

NASA의 OMNI 데이터는 태양풍과 지구 자기권 정보를 분석할 수 있는 중요한 데이터셋이다. 연구나 프로젝트에서 이 데이터를 python을 사용해 자동으로 다운로드하고 처리하는 방법을 정리하려고 한다.


1. OMNI 데이터란?

OMNI 데이터는 태양풍과 지구 자기권 환경 데이터를 통합적으로 제공하는 데이터셋이다. L1 포인트의 위성 데이터를 지구 근처(정확히는 bow shock nose)로 time shift하여 제공하며, 시간 해상도는 1분, 5분, 1시간 등이 있어서 연구 목적에 따라 다양한 해상도를 선택할 수 있다. NASA의 OMNIWeb (https://omniweb.gsfc.nasa.gov/) 에서 데이터를 수동으로 다운로드할 수 있지만, python으로 자동화하면 데이터를 효율적으로 이용할 수 있다.


2. python으로 OMNI 데이터 다운로드하기

OMNI 데이터를 python으로 다운로드하려면 HTTP 요청 라이브러리인 requests를 사용한다. 아래는 5분 단위 데이터를 다운로드하는 기본 코드이다.

코드: 데이터 요청

import requests
from io import StringIO

def download_omni_data(start_date, end_date, resolution='5min'):
	url = "https://omniweb.gsfc.nasa.gov/cgi/nx1.cgi"
    payload = {
    	'activity': 'retrieve',
        'res': resolution,
        'spacecraft': 'omni_min',
        'start_date': start_date,
        'end_date': end_date,
        'vars': ["21"]
    }
 
   response = requests.post(url, data=payload)

   if response.status_code == 200:
      print("데이터 요청 성공")
      return response.txt
   else:
      raise Exception(f"데이터 요청 실패: {response.status_code}")
    
 # 사용 예시
 start_date = "202401010000"
 end_date = "202401052359"
 raw_data = download_omni_data(start_date, end_date)
 contents = StringIO(raw_data).readlines()

3. 주요 파라미터와 함수 설명

3.1 OMNI 데이터 요청 파라미터

  • activity : 데이터를 요청하는 작업 유형, 항상 'retrieve' 로 설정한다. (OMNIWeb API에서는 'retrieve'만 유효한 activity 값으로 알려져 있음)
    • 'retrieve': 데이터 검색(데이터를 가져오는 작업) 의미
  • res : 시간 해상도 설정
    • '1min': 1분 단위 데이터
    • '5min': 5분 단위 데이터
    • 'hour': 1시간 단위 데이터
    • 'day': 1일 단위 데이터
  • spacecraft: 데이터의 출처 지정
    • 'omni': 1시간 단위 OMNI 데이터셋
    • 'omni_min': 1분 또는 5분 단위 고해상도 OMNI 데이터셋
  • vars: 요청할 변수 목록 - 사이트에서 3: Description of records and words 참조 (https://omniweb.gsfc.nasa.gov/html/ow_data.html). * 지정할 때에는 python에서 리스트 인덱스를 참조하는 것처럼 0부터 시작

3.2 주요 함수

  1. requests.post
    • HTTP 프로토콜의 POST 요청을 보낼 때 사용한다.
    • POST 요청은 서버에 데이터를 전송하여 특정 작업(데이터 생성, 데이터 처리 등)을 요청할 때 사용되며, REST API나 웹 애플리케이션과 상호작용할 때 유용하다.
    • 해당 코드에서는 OMNI 데이터 서버에 POST 요청을 보내 데이터를 받아온다.
    • 반환값: 응답 객체(response). 상태 코드(response.status_code)와 데이터 내용(response.text)을 확인할 수 있다.
  2. StringIO
    • 문자열 데이터를 파일처럼 처리할 수 있게 도와주는 모듈
    • OMNI 서버에서 받은 텍스트 데이터를 StringIO를 사용해 메모리 내에서 파일처럼 변환한다.
profile
태양물리박사 / 코드 공부 끄적끄적하는 공간 / Space weather forecasting

0개의 댓글