불규칙한 시간 평균하는 법

게시판 IDL Q&A 불규칙한 시간 평균하는 법

3 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #906 Reply
      익명
      비활성

      안녕하세요,
      selab 사이트에서 IDL을 열심히 공부하고 있는 학생입니다.
      제가 이번에 질문하고 싶은것은,
      불규칙한 시간으로 되어있는 배열을 일정시간 단위로 평균하는 것입니다.

      예를들어 어떠한 데이터가 아래와 같이 불규칙한 초단위의 시간배열로 이루어져있을 때
      1분 단위로 끊어서 평균을 내고싶습니다.(하루에 1440개의 데이터가 나오게)
      규칙적으로 되어있다면 그냥 끊어서 하면 되는데 불규칙하기 때문에 어떻게 해야할지 잘 모르겠습니다..
      답변해주시면 정말 감사하겠습니다.
      아 그리고 추가질문으로, y축을 log스케일로 그렸을 때 10의 지수승에만 tickname이 표시되는데,
      200, 300, 400에도 tickname을 쓰고싶은데 어떻게 해야하나요? yticks로 나누어 적용시키니깐 y축이 10의 지수승으로 되어있지 않아서 232, 502 등 보기 좋지않은 값들이 표시되어서요(y축 데이터는 22~939)….
      log스케일이 혹시 minor에도 tickname을 적용할 수 있는게 있나요?

      00:00:01
      00:00:03
      00:00:05
      00:00:12
      00:00:14
      00:00:22
      .
      .
      00:01:01
      00:01:03
      .
      .

    • #910 Reply
      Jonghyuk
      회원

      data=fltarr(1440)
      으로 데이터 정리할 공간을 만들고,
      hh, mm, ss로 컬럼을 분리한뒤
      minute=hh*60+mm
      과 같이 초를 무시해 버리면, minute은 0~1439 의 값을 가지게 될 것입니다.(같은 minute을 가지는 데이터들이 많겠죠).
      for i=0, 1439 do begin
      this_minute=where(minute eq i)
      data[i]=mean(value[this_minute])
      endfor

      이렇게 처리하시면 될 것 같습니다.
      위에서 value라는 것은 원시 자료의 데이터 컬럼을 의미합니다.

      해당 분에 데이터가 하나도 없는 경우는 없겠지요?

      눈금값과 관련하여서는 아래 글을 한번 검토해 보십시오.
      http://www.idl-envi.co.kr/callcenter/tips/view.php?num=34&page=2

      그런데, 개인적으로는 차라리 XYOUTS 같은 것을 이용해서 좀 쉽게 가는 쪽을 선호합니다.

    • #911 Reply
      Jonghyuk
      회원

      data=fltarr(1440)
      으로 데이터 정리할 공간을 만들고,
      hh, mm, ss로 컬럼을 분리한뒤
      minute=hh*60+mm
      과 같이 초를 무시해 버리면, minute은 0~1439 의 값을 가지게 될 것입니다.(같은 minute을 가지는 데이터들이 많겠죠).
      for i=0, 1439 do begin
      this_minute=where(minute eq i)
      data[i]=mean(value[this_minute])
      endfor

      이렇게 처리하시면 될 것 같습니다.
      위에서 value라는 것은 원시 자료의 데이터 컬럼을 의미합니다.

      해당 분에 데이터가 하나도 없는 경우는 없겠지요?

      눈금값과 관련하여서는 아래 글을 한번 검토해 보십시오.
      http://www.idl-envi.co.kr/callcenter/tips/view.php?num=34&page=2

      그런데, 개인적으로는 차라리 XYOUTS 같은 것을 이용해서 좀 쉽게 가는 쪽을 선호합니다.

    • #916 Reply
      Sangwoo
      회원

      위의 설명과 같이 초단위의 시간값들로 이루어진 배열을 x라 하고, 실제 데이터값 배열을 y라고 합니다. 그런데 실제로 값을 구하고자 하는 1분 간격의 시간값들은 초단위로 하면 0, 60, 120, 180, …. 이런 식의 값들로 이루어진 배열이 될겁니다. 이 배열을 xx라고 하면 다음과 같이 만들어볼 수 있을겁니다.

      x = hh*3600L + mm*60L + ss
      y = [~~~~] (실제 데이터값)
      xx = FINDGEN(1441)*60

      여기서 xx의 각각의 값에 대응되는 일종의 내삽값들을 구하는 과정이 될텐데요. 이를 위해서는 간단하게는 INTERPOL이라는 함수를 사용하면 됩니다. 다음과 같은 방식으로 사용하면 됩니다.

      yy = INTERPOL(y, x, xx)

      이렇게 하면 원하는 눈금점들에 대응되는 내삽된 데이터값들을 얻을 수 있습니다. 물론 이 상태는 선형내삽(Linear Interpolation)으로 계산된 결과입니다. 만약 Spline 내삽기법을 사용하고자 할 경우에는 아래와 같이 /SPLINE이란 키워드만 추가하면 됩니다.

      yy = INTERPOL(y, x, xx, /SPLINE)

      이렇게 얻어진 yy를 y와 중첩해서 그려보면 비교가 될 것입니다.

3 답변 글타래를 보이고 있습니다
'불규칙한 시간 평균하는 법'에 답변달기
글쓴이 정보: