[python] 북극 진동 (Arctic Oscillation) 패턴 계산 & 그리기 1: 목표 설정
·
대기과학/프로그래밍
- 개요본격적인 코딩을 하기 전에 무엇을 해야하는지 정리해보고자 합니다.NOAA 홈페이지에 북극 진동 패턴을 구하는 과정이 잘 정리되어있습니다. https://www.cpc.ncep.noaa.gov/products/precip/CWlink/daily_ao_index/history/method.shtml - 북극 진동 패턴 구하는 방법론 해석NOAA 홈페이지의 문단을 한 문장씩 읽으면서 북극 진동 패턴을 구하기 위한 정보들을 모아봅시다. To identify the leading teleconnection patterns in the atmospheric circulation, Emperical Orthogonal Function (EOF) was applied to the monthly mean 1000..
[python] 북극 진동 (Arctic Oscillation) 패턴 계산 & 그리기 0: 프롤로그
·
대기과학/프로그래밍
- 북극 진동 패턴이란?이제 슬슬 겨울이 다가오고 있습니다.기상, 기후 뉴스에서 매년 엘니뇨 이야기가 나오는 것처럼 겨울철에는, 특히 우리나라 한파가 올 때 "북극 진동"이라는 키워드를 심심치 않게 볼 수 있습니다. 그리고 뉴스에 나오는 논리는 대충 이럴겁니다.1. 북극의 찬 공기를 가두는 소용돌이가 있다.2. 평소에는 이 소용돌이가 북극의 찬 공기를 가두기 때문에 찬 공기는 고위도 지역에 머무른다.3. 이러저러한 이유로 소용돌이가 약해져서 원래는 고위도에 있던 북극의 찬 공기가 중위도로 남하한다.4. 북극의 찬 공기 때문에 우리나라의 온도는 급격히 떨어져서 한파가 발생한다. 소용돌이의 세기를 숫자로 표현한다면 소용돌이가 쌔면 숫자가 크고, 약하면 숫자가 작겠죠?소용돌이의 세기를 y축, 시간을 x축으로 ..
[Matplotlib] 기후 나선 그리기 5: 애니메이션 만들기
·
대기과학/프로그래밍
- 개요이제 그림 그리는 법은 다 알았으니 애니메이션을 만들 차례입니다.여기서 애니메이션은 동영상 파일이 아니라여러 사진을 연속으로 보여주는 gif 파일로 저장됩니다.matplotlib의 함수를 쓰면 쉽게 gif 파일을 만들 수 있습니다. - matplotlib으로 그림 그리는 과정에 대한 이해matplotlib의 애니메이션을 만들어주는 함수를 이해하기 위해선matplotlib 라이브러리에서 그림이 어떤 과정으로 그려지는지 알 필요가 있습니다. 쉽게 설명하려고 비유를 했기 때문에 완벽한 설명을 아닙니다. 먼저 fig=plt.figure()는 그림을 그릴 때 쓰는 canvas를 준비하는 것입니다.ax=fig.add_subplot()은 canvas 내에서 그림을 그릴 도화지를 준비하는 과정입니다. 다음으로 ..
[Matplotlib] 기후 나선 그리기 4: 기온선 그리기
·
대기과학/프로그래밍
- 개요기후 나선에서는 시간에 따라 과거의 기온선부터 현재의 기온선까지 순차적으로 그려져야 합니다.순차적으로 그리기 위해서는 애니메이션 효과를 써야하며, 그 전에 기온선을 그려야 합니다.이번 포스트에서는 기온선을 그려보겠습니다. - 모든 연도의 기온선 그리기1. 선 그리기선을 그리는 것은 어렵지 않습니다만이전 포스트처럼 극좌표계의 위치를 기후나선에 맞게 수정을 해야합니다.극좌표계에서 0도는 가장 오른쪽 방향이고, 각도가 증가할수록 반시계방향으로 돌아갑니다.반면 기후나선에서는 극좌표계의 90도의 위치가 1월이고 2, 3, 4월은 시계방향의 순서로 위치합니다.즉 시작하는 위치와 회전방향을 수정해줘야 합니다.import matplotlib.pyplot as pltfrom matplotlib.animation ..
[Matplotlib] 기후 나선 그리기 3: 밑그림 그리기
·
대기과학/프로그래밍
- 개요저번 포스트에서는 기온 자료의 전처리 작업을 했습니다.이번 포스트에서는 기온 자료를 시각화하기 전에NASA Climate change 기후 나선 그림에서 1, 0, -1도를 나타내는 원과 그림 중앙의 연도, 외곽의 1~12월 문자를 밑그림으로 그립니다.  - 밑그림 그리기원을 그리는 것과 1월부터 12월을 텍스트로 적는 것은 반복 작업이므로 하나하나 적지말고 함수를 만듭니다.저는 극좌표계로 생각하고 이를 x ,y 좌표로 변환해서 그림을 그렸습니다.코드에서 r은 반지름을 의미합니다. 1. 기본 그림matplotlib으로 그림을 그리면 기본 하얀 바탕에 축이 그려집니다.우린 검은 바탕을 써야하고, 축을 지워야 합니다.import matplotlib.pyplot as pltfig = plt.figure..
[Matplotlib] 기후 나선 그리기 2: 서울 일평균 기온 자료 전처리
·
대기과학/프로그래밍
- 개요이번 포스트에서는 서울 47108 기온 자료의 전처리 작업을 수행합니다.여러분이 서울 470108 일평균 기온 자료를 가지고 있다고 가정하겠습니다. - 일평균 기온 자료를 월평균 기온 자료로 변환주의할 점으로 저는 이미 기온 자료의 기간을 1908년 1월부터 2023년 12월까지,즉 시작은 1월부터 마지막은 12월로 맞추어두었습니다.만약 이렇게 기간을 잡지 않았다면 월평균 자료로 바꾼 다음 시작은 1월, 마지막은 12월로 맞춰주세요.import numpy as npimport pandas as pddf = pd.read_csv('ASOS_108_daily.csv', encoding='cp949')col1 = df['일시']col2 = df['평균기온(℃)']''' pandas data frame으..
[Matplotlib] 기후 나선 그리기 1: NASA Climate Change 그림 설명 및 사용할 자료 설명
·
대기과학/프로그래밍
- 개요우린 NASA Climate Change의 그림을 그대로 따라그려야 하므로,그림에서 나오는 숫자들에 무슨 의미가 있고 그림이 어떻게 그려졌는지 분석할 필요가 있습니다. 이번 포스트에서는 먼저 NASA Climate Change의 Climate spiral 그림에 대해 간단히 알아보겠습니다.전 다른 기온 자료를 쓸 것이기에 이 그림에서 사용한 계산과정을 완전히 따라할 경우 문제가 좀 있습니다.그러므로 기온 자료 처리과정에서의 다른 점을 설명하고자 합니다. - Climate sprial 그림 설명먼저 NASA Climate Change에서 올린 영상의 설명을 요약해봅시다.NASA Climate Change는 1880년부터 2021년까지 전지구 평균 월평균 기온 아노말리를 시각화했고, 자료의 출처는 G..
[Matplotlib] 기후 나선 그리기 0: 프롤로그
·
대기과학/프로그래밍
안녕하세요.2024년은 8월, 9월이 정말 덥습니다.기후가 변하고 있기 때문일까요? 제 최근 포스트에서 최근 서울이 얼마나 더운지 알아보긴 했습니다.여름 온도, 습도의 변화 시각화 https://climate-data-science.tistory.com/3047108 서울 관측소 시각화 https://climate-data-science.tistory.com/31 위의 두 가지 시각화 방법도 기후변화의 모습을 잘 보여주지만평소에 저는 어떤 다른 방법을 기후변화를 시각화 하는 것이 좋은지 고민하곤 합니다. 알고리즘 때문인지 유투브 추천 영상에 'NASA Climate Change'의 영상이 추천되더군요.NASA Climate Change는 다양한 시각화 방법으로 기후변화를 보여줍니다.그래서 저도 여기 나온..
[Matplotlib] 기상청 ASOS/AWS 그래프 따라 그리기 9: 그리드 라인 그리기, 배경색 변경
·
대기과학/프로그래밍
- 개요방금 전에 8번째 포스트를 마쳤는데 어째다보니 작업이 금방 끝나서기상청 ASOS/AWS 그래프 따라 그리기의 마지막 포스트를 연재합니다. 오늘은 그리드 라인을 그리고, 배경색을 회색으로 변경하겠습니다. - 그리드 라인 그리기 및 회색 배경원본에서 그리드 라인이 어떻게 그려졌는지 확인해봅시다.아래의 원본을 보시면 세로 선은 3시간 간격으로 그려져 있고 00시는 검정색, 나머지 시간에서는 회색입니다.가로 선은 ytick라벨이 적힌 곳에 그려져 있습니다.모두 회색이며 중간에 위치하는 선만 실선 나머지는 dashed line입니다.마지막으로 원본의 배경색은 회색입니다. matplotlib에서는 gridline을 그리는 옵션이 따로 있긴 하지만저는 ax.axvline과 axhline을 사용하겠습니다ax.a..