시간별로 있는 데이터를 일평균 내려고 합니다

게시판 IDL Q&A 시간별로 있는 데이터를 일평균 내려고 합니다

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

      20130101 00 2.6
      20130101 01 3.1
      20130101 02 5.6
      20130101 03 7.9
      20130101 04 7.6
      20130101 05 6.8

      이런식으로 각 날짜마다 1시간별로 있는 데이터인데
      일평균을 계산해서 그래프를 그리려고 합니다.
      중간중간 값이 없는 시간도 있어서 24시간 별로 전부 평균을 내지는 못할 것 같습니다.

      input_file=’test.txt’
      FMT = ‘X,X,X,A,I,F’
      readcol, input_file, F=FMT, Date, Time, E, /preserve_null

      우선 readcol 을 이용해서 날짜, 시간, 값을 정리했습니다
      하지만 if 나 for 문을 사용해봤는데 잘 해결이 안됩니다
      도움 부탁드립니다

    • #2241 Reply
      Jonghyuk
      회원

      readcol로 데이터는 잘 읽으신 상황이라고 생각됩니다. 즉, Date 변수에는 ‘20130101’ 같은 문자열이 들어 있고, time에는 시간에 해당하는 정수, e 변수에는 5.6, 7.9 같은 어떤 측정값 같은 것이 들어 있겠지요.

      언제부터 언제까지의 일평균을 낼 것인지 결정이 되시면,

      t=timegen(start=julday(1, 1, 2013), final=julday(12, 31, 2014), unit=’day’)
      t_str=string(t, format='(C(CYI04CMOI02CDI02))’)
      와 같이 처리하면, t_str 변수에는 매일 날짜의 YYYYMMDD 문자열 배열이 들어갑니다.

      julday() 함수의 순서는 월, 일, 년 입니다. 그러므로 지정하시고자 하는 월, 일, 년을 시작과 종료날로 지정해 주시면 됩니다.

      for i=0, n_elements(t)-1 do begin
      ok=where(date eq t_str[i], ct)
      print, t_str[i], mean(e[ok])
      endfor

      로 매일 날짜에 대해 연월일 문자열이 매칭되는 행을 찾고(where 함수), 해당 행의 e 값들 즉, e[ok] 에 대한 평균을 내면 될 것 같습니다.

    • #2257 Reply
      익명
      비활성

      덕분에 해결되었습니다. 감사합니다

    • #2258 Reply
      익명
      비활성

      문제가 생겼습니다. 코드를 아래와같이 작성하였는데

      readcol, input_file, F=FMT, Date, Time, Ethane
      ; 날짜, 시간, 값을 Read
      S_day=julday(12, 1, 2013)
      F_day=julday(12, 31, 2013)

      t=timegen(start=S_day, final=F_day, unit= ‘day’)
      t_str=string(t, format='(C(CYI04CMOI02CDI02))’)
      x=byte(t[*]-t[0]+1)
      Eavg=findgen(x[-1])

      for i=0, n_elements(t)-1 do begin
      ok=where(date eq t_str[i], ct)
      Eavg[i]=mean(ethane[ok])
      endfor
      forprint, t_str, Eavg, TEXTOUT=
      end

      중간에 며칠정도 데이터가 비는 부분이 있는데, 아래와같이 4월 12~29일은 데이터가 없는 부분이라 평균이 0으로
      나와줘야 하는데 2.1로 되어있습니다. 왜 이렇게 나오는지 이해가 잘 안되는데 도움 부탁드립니다.
      20130411 1.92917
      20130412 2.10000
      20130413 2.10000
      20130414 2.10000
      20130415 2.10000
      20130416 2.10000
      20130417 2.10000
      20130418 2.10000
      20130419 2.10000
      20130420 2.10000
      20130421 2.10000
      20130422 2.10000
      20130423 2.10000
      20130424 2.10000
      20130425 2.10000
      20130426 2.10000
      20130427 2.10000
      20130428 2.10000
      20130429 2.10000
      20130430 2.37778

    • #2259 Reply
      익명
      비활성

      어쩌다보니 혼자서 해결되었습니다

4 답변 글타래를 보이고 있습니다
'시간별로 있는 데이터를 일평균 내려고 합니다'에 답변달기
글쓴이 정보: