우당탕탕 개발일지
[대기오염 예측모델 개발] 월별 대기오염물질 농도 꺾은선 그래프 그리기 본문
꺾은선 그래프 그리는 방법 매번 까먹어서 정리하는 글.
groupby 함수로 월별 평균값 정리하기
df_train = df_train.groupby(['year', 'month'])[['no2', 'o3', 'co', 'so2', 'pm10', 'pm2.5']].mean().reset_index()
이렇게 해서 월별 각 대기오염물질의 평균농도를 담은 데이터프레임 df_train을 생성한다.
꺾은선 그래프 그리는 방법
꺾은선 그래프를 그리려면 일단 x값과 y값을 명시해야 한다.
내가 그리고자 하는 건 월별 대기오염물질 농도니까 x, y를 다음과 같이 설정한다.
x: df_train['month']
y: df_train['no2']
그 다음에 plot을 그려주면 된다.
plt.figure(figsize=(10,6))
plt.plot(df_train_2019['month'], df_train_2019['no2'], marker='o', linestyle='-', color='b', label = '2019')
plt.title('Monthly no2 Concentration')
plt.xlabel('Month')
plt.ylabel('no2 Concentration')
plt.xticks(df_train_2019['month']) # Ensure all months are shown on x-axis
plt.grid(True)
plt.show()
4개년을 하나의 그래프에 그리기
2019년, 2020년, 2021년, 2022년 - 총 4개년을 하나의 그래프에 나타내려면 단순하게 코드를 한 줄씩 추가하면 된다.
plt.figure(figsize=(10,6))
plt.plot(df_train_2019['month'], df_train_2019['no2'], marker='o', linestyle='-', color='b', label = '2019')
plt.plot(df_train_2020['month'], df_train_2020['no2'], marker='o', linestyle='-', color='b', label = '2020')
plt.plot(df_train_2021['month'], df_train_2021['no2'], marker='o', linestyle='-', color='b', label = '2021')
plt.plot(df_train_2022['month'], df_train_2022['no2'], marker='o', linestyle='-', color='b', label = '2022')
plt.title('Monthly no2 Concentration')
plt.xlabel('Month')
plt.ylabel('no2 Concentration')
plt.xticks(df_train_2019['month']) # Ensure all months are shown on x-axis
plt.legend(fontsize = 20, bbox_to_anchor = (1, 0.5), loc = 'center left')
plt.grid(True)
plt.show()
다른 미세먼지물질에 대해서도 그래프 그리기
단순히 for문을 사용해서 반복수행하면 된다.
# Create DataFrame
df_train_2019 = df_train[df_train['year'] == 2019]
df_train_2020 = df_train[df_train['year'] == 2020]
df_train_2021 = df_train[df_train['year'] == 2021]
df_train_2022 = df_train[df_train['year'] == 2022]
# Plotting the NO2 concentration for 2019 by month
plt.figure(figsize=(10,6))
for n in ['no2', 'o3', 'co', 'so2', 'pm10', 'pm2.5']:
plt.plot(df_train_2019['month'], df_train_2019[n], marker='o', linestyle='-', color='b', label = '2019')
plt.plot(df_train_2020['month'], df_train_2020[n], marker='o', linestyle='-', color='r', label = '2020')
plt.plot(df_train_2021['month'], df_train_2021[n], marker='o', linestyle='-', color='g', label = '2021')
plt.plot(df_train_2022['month'], df_train_2022[n], marker='o', linestyle='-', color='y', label = '2022')
plt.title(f'Monthly {n} Concentration')
plt.xlabel('Month')
plt.ylabel(f'{n}Concentration')
# Add legend
plt.legend(fontsize = 20, bbox_to_anchor = (1, 0.5), loc = 'center left')
plt.xticks(df_train_2019['month']) # Ensure all months are shown on x-axis
plt.grid(True)
plt.show()
결과 해석
1. NO2 농도
겨울철, 봄철에 NO2농도가 높고, 늦여름부터 초가을에 가장 농도가 낮다.
겨울에는 난방 사용 증가로 인해 NO2 농도가 높아진다.이 외에도 차량 배기가스, 공장 및 발전소에서 NO2를 방출한다. 더불어 찬 공기가 대기 순환을 방해해 농도가 높아지기도 한다.
여름에는 대기 순환이 원활해지고, 햇빛에 의해 광화학 반응이 증가해서 O3로 전환된다.
2. O3 농도
오존은 햇빛이 강하고 온도가 높은 여름에 농도가 올라간다. 4개년 모두 5, 6월에 집중적으로 o3가 높은 양상을 보인다.
그에 비해 겨울에는 태양 복사열이 줄어들기 때문에 농도가 낮아진다.
3. CO 농도
일산화탄소는 겨울에 난방과 교통량 증가로 인해 농도가 증가하고, 여름에는 대기 흐름이 원활하고 난방 수요가 줄어 농도가 상대적으로 낮다.
4. SO2 농도
CO와 동일한 양상. 같은 이유.
5. PM10 농도(미세먼지)
미세먼지는 황사가 주로 발생하는 봄에 농도가 높다. 겨울에는 난방 및 산업 활동으로 인해 농도가 높고, 여름에는 대기 중 수분 함량 증가와 비로 인해 농도가 감소한다.
6. PM2.5 농도(초미세먼지)
PM10과 동일한 양상. 같은 이유
결론
결론짓자면, NO2, CO, SO2, PM10, PM2.5 모두 겨울에 높고 여름에 낮은 양상을 보인다.
반면에 O3는 겨울에 낮고 여름에 높은 양상을 보인다.
'인공지능' 카테고리의 다른 글
[대기오염 예측모델 개발] XGBoost 모델을 사용하여 다중 클래스 분류 문제를 해결 (1) | 2024.10.04 |
---|---|
[대기오염 예측모델 개발] 연도별 자치구별 대기오염물질 농도 히트맵 그리기 (1) | 2024.10.03 |
[대기오염 예측모델 개발] EDA, 데이터 전처리, 데이터 합치기 - aux_data_MonthlyCar (0) | 2024.09.28 |
[대기오염 예측모델 개발] EDA, 데이터 전처리, 데이터 합치기 - aux_data_MonthlyBike (0) | 2024.09.28 |
[대기오염 예측모델 개발] EDA, 데이터 전처리, 데이터 합치기 - aux_data_DailyRain (1) | 2024.09.28 |