어쨌든 소중한 서울의 태양광 스펙트럼 데이터가 차곡차곡 쌓여 있는데, 다양한 분야에서 사용할 수도 있겠다 싶어 글을 남겨본다.
측정 장소는 동국대학교, 측정기는 AVNTES 의 spectrometer, 측정 범위는 300~1400nm
그리고 당시 온도와 날씨 (cloudy, sunny)가 기록되어 있었다.
첫 번째. 날짜별로 파장에 따른 스펙트럼을 무식하게 그려 보았다.
엑셀로는 다 표현하기조차 어렵지만 R에서는 범례를 제거하고 스펙트럼을 날짜별로 그릴 수 있었다. 2020년 7월부터 2021년 7월까지라고 하지만 측정한 날짜는 총 187일이었다.
맑은 날과 흐린 날이 있었고, 계절별로 태양의 고도가 달라지므로 측정된 스펙트럼의 진폭은 매우 달랐지만, 오존, 산소와 수증기, 이산화탄소에 의해 흡수되는 파장은 일정한 골을 만들었기 때문에 그래프의 형태는 유사했다. 760nm에서 강하게 흡수되는 peak는 구글링을 해 보니, 대기에 있는 산소에 의해 흡수된 peak였다. 그리고 940nm 근처에서는 수분에 의한 흡수 peak가 보였다. 흡수 peak에 대해서 좀 자세히 알아보기 위해서 논문을 찾아보니 아래와 같은 자료를 찾을 수 있었다.
JOURNAL OF GEOPHYSICAL RESEARCH, VOL. 105, NO. D7, PAGES 9421-9428, APRIL 16, 200
그럼 본격적으로 데이터로 분석해볼까?
전체 파장 데이터를 다루기 한번에 다루기 어려우니, UV 영역(300~400nm 평균), IR 영역(900~1100nm 평균), 가시광선 (380~780nm 평균)으로 나누었다. 그리고 Oxygen 흡수(760nm)와 Water vapor 흡수(940nm)를 이용하여 분석을 해 보았다.
기온 : 여름엔 cloudy 가 sunny보다 낮지만, 겨울엔 반대
너무나 당연한 결과다.
그럼 두 번째.
날짜별, 계절별 UV는 어떻게 달라지는지 그려보았다. 이번엔 날씨와 더불어 온도 값을 size로 표현해보았다.
UV는 맑은 날보다 흐린 날 더 적었다. 그리고 겨울이 여름보다 UV는 적었다.
이것도 너무나 당연한 결과다.
기온이 높은 날은 UV가 많이 방출될까? 열은 적외선 영역이니 그래프를 그려보니 화창한 날엔 0도 이상에서, 흐린 날엔 15도 이상에서만 비례관계가 보였다.
그럼 IR(900~1100nm)는 적외선에 가까우니, 이걸로 기온 데이터와 matching 해 보면 어떨까?
응? 오히려 기온이 높을수록 IR 값은 작아지는 결과가 보였다. 열은 훨씬 더 긴 장파장이니, 900~1100nm는 near IR 영역이라 열과는 상관없었다.
그럼 다음엔 뭘 해 볼까? 위 논문에서 산소와 수증기 흡수 peak가 명확히 있었으므로 그걸 따로 뽑아내서 날짜별로 그려볼까? 오.. 측정값이 높다는 것은 산소나 수분에 의한 흡수가 적기 때문일 것이리라. 그럼 기온이 높으면 산소에 의한 흡수량이 적고, 수분에 의한 흡수량이 많다는 것이 되는데, 기온이 높은 여름에 산소가 적고 수분이 많은 것일까?
날짜별로 그래프를 그려보자. 정말 겨울엔 산소 흡수 peak가 적고, 여름엔 높다. 즉 겨울엔 산소가 많아지고 여름엔 많아지는 것일까? 그럴 수 있지. 여름엔 식물들이 광합성을 많이 하니 산소가 많아지는 것일까?
그리고 수분은 뭔가 값이 이상하다. 워낙 값 자체가 낮아서 그런 것 같다. 그래서 위 논문에서 수분 흡수 peak 중 720nm를 다시 선택해서 그려보았다. 결과는 940nm peak 값과 유사하게 나왔다. 온도가 높을수록 수분 흡수량이 많아서 측정값이 낮게 나왔다. 즉 온도가 높으수록 수분은 적다는 것. 온도가 높을수록 습도가 낮아지는 것은 자연스러운 것이므로...
그럼 Oxygen과 Water vapor 흡수 peak가 기온에 따라 달라지는 것을 스펙트럼 분석을 통해서 계절별로 알 수 있었다.
그럼 다음엔 뭘 해볼까? 만약 날씨는 모른 상태에서 측정 데이터만 있을 때, 그날이 맑은 날이었는지, 흐린 날이었는지 알 수 있을까?
x 변수로 아래와 같이 uv, WATER 흡수(940nm), 가시광선(380~780nm 평균), IR_A(900~1100 평균), Oxygen흡수(760nm) 5개의 값을 가지고, 흐린 날인지, 맑은 날인지 맞추는 머신러닝을 해 보면 어떨까? y값이 cloudy와 sunny 두 개의 factor로 이루어졌으므로 로지스틱 회귀 분석이나 KNN 분석이 먼저 떠오른다.
KNN 분석을 선택해서 해 보았다. (K 최근접 이웃 분석)
먼저 훈련 데이터와 테스트 데이터를 0.75:0.25로 나누고, 75%의 데이터로 모델을 훈련시킨 후 25% 데이터로 검증하는 절차를 밟았다.