310 likes | 593 Views
제 15 장 날짜와 시간 2/2. 전산천문학 2. 2007. 가을. Mission. Julian Day 는 연월일의 연산에는 필요하지만 , 실제 자료를 가시화하기에는 연월일시분초가 적합하다 . Julian day 를 이용한 연산을 최종적으로 연월일 시분초의 출력값으로 변환하여 그래픽을 완성할 수 있다. 다루어야 할 문제. Julian Day 를 연월일시분초로 표시하기 위해서 , CALDAT 프로시저를 사용
E N D
제 15 장 날짜와 시간 2/2 전산천문학 2 2007. 가을
Mission • Julian Day는 연월일의 연산에는 필요하지만, 실제 자료를 가시화하기에는 연월일시분초가 적합하다. • Julian day를 이용한 연산을 최종적으로 연월일 시분초의 출력값으로 변환하여 그래픽을 완성할 수 있다.
다루어야 할 문제 • Julian Day를 연월일시분초로 표시하기 위해서, CALDAT 프로시저를 사용 • CALDAT procedure 를이용하여, 연, 월, 일, 시, 분, 초 개별적인 변수로 저장 • 저장된 변수를 활용하여, 필요한 문자열 혹은 숫자로 변환하여 활용한다. • 월을 Jan, Feb, Mar, …로 표시하려면? • IDL에서 CALDAT 프로시저를 사용하지 않고, Julian day를 연월일 시분초로 바꿀 수 있는 방법은? • IDL의 출력포맷 (FORMAT 키워드)에는 Julian Day를 연월일시분초로 표시하는 포맷코드 정의 • IDL> print, 31, format=‘(I)’ ; 정수 • IDL> print, 31, format=‘(F)’ ; 실수 • IDL> print, 31, format=‘(B)’ ; 2진수 • IDL> print, 31, format=‘(A)’ ; 문자열 • Julian Day를 일상생활의 날짜로 변환해서 보여주는 포맷은? ‘C()’
날짜 코드 ‘(C())’ • IDL> day = julday (11, 6, 2007, 15, 20, 20) • IDL> print, day, format=‘(D)’ • IDL> print, day, format=‘(C())’ ; 디폴트 출력 • C()에서 괄호안의 세부코드의 규칙은? • 날짜와 관련있는 옵션이라 C로 시작 • 그 다음 Y(year), MO(month), D(day), H(Hour), AP(am/pm), M(Minute), S(Second), DW(Day of week) • 그 다음 위에서 정의한 연월시분초 등의 형식 지정 : I (정수형), F(실수형), A (문자형) 이 그 다음에 옴 • 대소문자의 구별이 있으므로, 다른 IDL 키워드의 규칙과 다른 부분이 있다. • 추가로, 08로표시할지 8로 표시할지 등의 추가 옵션도 있다.
training • Julian day 지정 및 연산 • day=julday(11,6,2007,14,20,30)’ • Tue Nov 6 15:40:00 2007 • print,day,format=‘(C())’ • 2007/11/6 • print, day, format=‘(C(CYI,”/”,CMOI,”/”,CDI)) ‘ • 2007/11/06 • print, day, format=‘(C(CYI,”/”,CMOI02,”/”,CDI02))’ • 2007년 11월 6일 15시 40분 ? • 200711061540 ?
연속되는 시간 생성 TIMEGEN()
TIMEGEN 문법 • Results=timegen([D1,….D8|,final=value][,start=value][,step_size=value] [,units=string]) • 결과는 연속되는 쥴리언데이들의 배열 • D1 : 몇 개의 날짜를 생성할지? • start, final : 시작과 끝날 (쥴리언데이) • 생성되는 날짜 수열의 간격 (뒤의 units에 따라 바뀜 디폴트는 날짜) • Units=“years” [“months”, “days”, “hours”, ….] • 기타 키워드 : days, months, years, hours, minutes, seconds
training • 2005년 8월 15일부터 10일을 생성 • days=timegen(10,start=julday(8,15,2005)) • Print, days,format=‘(C())’ • 2004년 1월 1일부터 한달 간격으로 12개의 날짜를 생성 • days=timegen(12, start=julday(1,1,2004),units=‘months’) • print, days, format=‘(C())’ • 2004년 1월 1일부터 2005년 1월 1일까지 3개월 간격으로 날짜 생성 • days=timegen(start=julday(1,1,2004),final=julday(1,1,2005), step_size=3, units=‘months’) • print, days, format=‘(C())’ • 2004년 1월 1일부터 3월 15일까지 매 1일 15일에 해당하는 날짜 생성 • days=timegen(start=julday(1,1,2004),final=julday(3,15,2004), days=[1,15] • 2004년 각 달의 날짜 수를 어떻게 계산할까요?
현재 시간 SYSTIME()
현재 시간 • 현재의 시각을 입력받아 프로그래밍을 수행하는 경우 • 시각으로부터 프로그램 실행 시간을 계산해야 할 경우 • 현재시각으로부터 연월일시분초요일 등을 저장하여 프로그래밍 해야 하는경우
Training • 현재 시각 표시 • print, systime() 또는 systime(0) • 초단위 계산을 위한 현재 시각 표시 • print, systime(1) [1970년 1월 1일 이후 경과한 시간을 초단위로 보여 줌] • 쥴리언데이로 현재 시각 표시 • print, systime(/julian) • 현재 시각으로 2007년에서 정확히 얼마나 지났을까? • 세계표준시로 현재 시각 표시 • print, systime(/utc) • print,systime(),”KST “, systime(/utc), “utc”
training • [20,10]이라는 일차원배열을 iplot으로 그릴 때와 plot으로 그릴 때 각각 얼마나 걸리는가? • start=systime(1) & iplot, [20,10] & print, systime(1)-start • start=systime(1) & plot, [20,10] & print, systime(1)-start • 현재의 연월일 시분초를 각각 다른 변수에 나누어 담으려면? • now=systime(/julian) • caldat,now,mon,day,year,hr,min,sec • print,year,mon,day,hr,min,sec • ymdhms=bin_date(now)
시간 눈금의 그래프 그리기 LABEL_DATE()
시간 눈금의 그래프 • 시계열 (Time series) 자료를 다룰 때 • 시간의 연산 및 범위를 지정할 때 줄리언 데이를 쓰면 편하다. • 그러나, 그래프 축의 눈금을 시간 눈금으로 그려야 한다. • Label_date() 키워드 • 시간 축의 데이터가 Julian day일 때, 이 숫자의 출력형태를 우리가 흔히 쓰는 형식의 시각으로 표현하고자 할 때 쓰는 키워드 • day=timegen(5,start=julday(8,15,2005)) • humidity=randomu(seed,5)*50+40 • Window,0, xs=800, ys=400 • plot,day,humidity • Window,1,xs=800,ys=400 • Plot,day,humidity,xtickformat=‘label_date’
Label_date()함수 • 우리가 원하는 포맷으로 변경하려면? • dummy=label_date(date_format=암호문자열) • 그 다음 xtickformat=‘label_date’ • 암호문자열
Training • Label date의 암호 조합 • day=timegen(5, start=julday(11,7,2007)) • humidity=randomu(seed,5)*50 +40 • dummy=label_date(date_format=‘%M %D’) • plot, day, humidity, xtickformat=‘label_date’ • dummy=label_date(date_format=‘%Y %M %D’) • plot, day, humidity, xtickformat=‘label_date’ • dummy=label_date(date_format=‘%Y!C%M %D’)
Backgrounds Solar & Geomagnetic indices (태양 지수와 지자기 지수)
태양 활동 • 태양 흑점 주기 (Solar Cycles) • 태양은 11년마다 활동 극대기와 극소기를 거친 • 태양의 흑점 갯수는 이러한 활동의 극대기와 극소기 변화를 반영해주는 지수이며, 태양 흑점수가 많아질 수록 태양의 활동은 커진다. • 태양 흑점은 격렬한 폭발현상인 태양 플레어를 일으키며, 이에 따라 태양계에 영항을 미친다. • 플레어에 의한 에너지 방출은 지구에서 가장 큰 지진의 수백만배 규모에 달한다.
시계열 자료 다루기 1991년부터 현재까지의 월별 흑점 및 태양 전파 관측 자료를 이용한 흑점 주기 살펴보기
Mission • 최근 월별 태양 흑점 지수를 날짜별로 표현하여, 흑점 지수의 시계열 변화에 대하여 알아본다. • 월별 및 일별 관측 자료를 이용하여, 날짜별로 어떤 주기들이 있는지 알아 본다.
Mission • Solar_Recentindices.txt • 1991년부터 최근까지의 태양 흑점 및 10.7 cm 전파 플럭스 양을 모아놓은 자료, 월별로 요약되어 있다. • 2006_DSD.txt • 2006년 일별 태양 자료를 모아놓은 자료 • 일별 10.7 cm 플럭스량과 흑점 면적 등이 정리되어 있다.
training • 실습 자료를 이용하여, 월별, 일별 태양 및 지자기 지수의 변화를 살펴보자.