정말 간만에 포스티입니다
현생이 너무 바빠서 오랜만에 쓰는 것 같습니다
제 블로그 누적 방문자수가 드디어 1만명을 넘었습니다! 많은 관심 감사드리고
앞으로도 유용한 코드 많이 기록해보겠습니다!
오늘은 특정 데이터에서 특정 날짜와 최대, 최소를 추출하는 법을 써보겠습니다
먼저 이 코드를 만들게 된 계기는 같은 학과 후배의 도움 요청으로 하게 되었습니다
이 코드가 하는 일은 1973년부터 2023년까지의 9월 평균기온, 최고기온, 최저기온을 가져옵니다
9월 1일부터 30일 별로 최고기온, 최소기온을 모아서 새로운 리스트를 동적변수를 사용해서 만듭니다
그리고 30일치의 최고기온에서 최대, 최소, 최저기온에서도 최대 최소를 각각 뽑아내어 그림을 그릴겁니다
코드입니다
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv("/content/drive/MyDrive/extremum_20231016112557.csv", encoding = 'cp949')
max_l = df['최고기온(℃)'][1500:]
mean_l = df['평균기온(℃)'][1500:]
min_l = df['최저기온(℃)'][1500:]
for i in np.arange(1, 31, 1):
globals()['z{}'.format(i)] = []
globals()['x{}'.format(i)] = []
#-----------------------------------------------------------------
big = []
small = []
b_big = []
b_small = []
s_big = []
s_small =[]
for k in np.arange(1, 31, 1):
start = -1
for j in np.arange(start + k, 1530, 30):
a = df['최고기온(℃)'][j]
globals()['z{}'.format(k)].append(a)
b = df['최저기온(℃)'][j]
globals()['x{}'.format(k)].append(b)
big.append(np.array(globals()['z{}'.format(k)]).max())
small.append(np.array(globals()['x{}'.format(k)]).min())
b_big.append(np.array(globals()['z{}'.format(k)]).max())
b_small.append(np.array(globals()['z{}'.format(k)]).min())
s_big.append(np.array(globals()['x{}'.format(k)]).max())
s_small.append(np.array(globals()['x{}'.format(k)]).min())
#-----------------------------------------------------------------
fig, ax = plt.subplots(figsize = (15, 9))
ax.scatter(np.arange(1, 31, 1), big, color = 'k')
ax.scatter(np.arange(1, 31, 1), small, color = 'k')
ax.plot(np.arange(1, 31, 1), max_l, color = 'r')
ax.plot(np.arange(1, 31, 1), mean_l, color = 'g')
ax.plot(np.arange(1, 31, 1), min_l, color = 'b')
ax.grid()
ax.set_ylabel("Temperature (\u00b0C)", fontsize = 15)
ax.set_xlabel("Date (day)", fontsize = 15)
ax.set_title("September Temperature Series", fontsize = 20)
#-----------------------------------------------------------------
import matplotlib.pyplot as plt
# Horizontal bar plot with gaps
fig, ax = plt.subplots(figsize = (15, 9))
plt.ylim(0, 40)
ax.grid(zorder = 1)
for h in np.arange(1, 31, 1):
ax.bar(h, b_big[h-1] - b_small[h-1], bottom = b_small[h-1], color = 'red', alpha = 0.5, zorder = 2)
ax.bar(h, s_big[h-1] - s_small[h-1], bottom = s_small[h-1], color = 'blue', alpha = 0.5, zorder = 2)
ax.set_ylabel("Temperature (\u00b0C)", fontsize = 15)
ax.set_xlabel("Date (day)", fontsize = 15)
ax.set_title("September Temperature Series", fontsize = 20)
globals 부분을 집중적으로 보겠습니다
for i in np.arange(1, 31, 1):
globals()['z{}'.format(i)] = []
globals()['x{}'.format(i)] = []
globals는 위에 코드처럼 동적으로 한 번에 여러 변수들을 만들 때 자주 사용됩니다
globals 뒤에 있는 [ ]안에 설정한 형식으로 변수를 만들 수 있고 format문과 함께 사용합니다
for 문에서 1~30 까지의 숫자가 반복이 되는데 z1 ~ z30까지의 변수를 만드는 것입니다
그리고 그 변수들에는 일별로 추출한 데이터를 입력할 빈 리스트를 만들어줍니다
for k in np.arange(1, 31, 1):
start = -1
for j in np.arange(start + k, 1530, 30):
a = df['최고기온(℃)'][j]
globals()['z{}'.format(k)].append(a)
b = df['최저기온(℃)'][j]
globals()['x{}'.format(k)].append(b)
big.append(np.array(globals()['z{}'.format(k)]).max())
small.append(np.array(globals()['x{}'.format(k)]).min())
b_big.append(np.array(globals()['z{}'.format(k)]).max())
b_small.append(np.array(globals()['z{}'.format(k)]).min())
s_big.append(np.array(globals()['x{}'.format(k)]).max())
s_small.append(np.array(globals()['x{}'.format(k)]).min())
추후에 다시 호출할 때도 똑같이 사용해주시면 됩니다
for k in np.arange(1, 31, 1):
big.append(np.array(globals()['z{}'.format(k)]).max())
이 부분만 따로 때놓고 생각해보면
for k in np.arange(1, 31, 1):
big.append(np.array(z1)).max())
이런 식으로 코드가 돌아가게 되는 겁니다
전역 변수 선언은 굉장히 유용하게 쓰이니 알아두시면 좋을 것 같습니다
결과 그림입니다
막대 그래프는 bottom을 사용해서 그렸습니다
다시 한 번 누적 방문 1만명에 감사드리며 오늘도 긴 글 읽어주셔서 감사합니다!
'파이썬' 카테고리의 다른 글
Mayavi 라이브러리를 이용해서 전구 기압 분포 3D 시각화 (0) | 2023.11.28 |
---|---|
Python 환경에서 지역 변수와 전역 변수 (global) (0) | 2023.11.06 |
건조공기의 이상기체 방정식 그래프 그리기(대기 열역학) (0) | 2023.09.25 |
Monin-Obukhov Similarity Theory Curve 파이썬으로 그려보기 (0) | 2023.09.19 |
WRF-PYTHON 라이브러리로 WRF 결과물 시각화 (getvar, smooth2d) (2) | 2023.09.01 |