ABC부트캠프 데이터 탐험가 과정

[25일차] ABC 부트캠프 미니 프로젝트

hwibeenjeong 2024. 8. 7. 18:44

 

0. 들어가기 앞서

인공지능 관련 수업이 얼추 진행되었다. 지금까지 배운 내용들을 토대로 미니 프로젝트를 진행하였다.

 

1. 주제 선정 발표

미니 프로젝트 주제를 선정하여 해당 주제에 대한 발표를 진행하였다. 우리 조는 폐기물 발생량과 온실가스 배출량 분석을 통한 지속 가능한 삶 제안이라는 주제로 이번 프로젝트를 진행하려한다.

폐기물이 발생하고 폐기물을 처리하는 과정을 자세히 살펴보면, 소각과 매립이 주를 이루고 있다. 그렇기 때문에 해당 과정에서 발생하는 온실가스 배출량을 확인한다. 상관관계 분석을 진행하고, 온실가스가 지구온난화를 가속화 시킨다는 것과, 지구 온난화로 인한 이상기후들에 대한 데이터들을 분석하고 예측하여, 지금처럼 폐기물이 발생된다면 머지 않아 환경을 악화시킬 수 있다는 것을 보여줄 예정이다. 마지막으로 폐기물 중 높은 비중을 차지하는 건설, 상업 폐기물들에 대해 기업은 ESG 경영을 실천해야한다는 결론에 도달하는 것이 이번 프로젝트의 목표이다. 

 

그 중 내가 맡은 분야는 폐기물 발생량과 온실가스 배출량에 대한 상관관계를 분석하고, 상관관계 분석한 내용을 시각화하는 부분이었다. 폐기물 발생량과 온실가스 배출량에 대한 데이터는 '지표누리'에서 가져왔다. 아래의 코드들을 살펴보자.

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
import numpy as np
import koreanize_matplotlib

# Pandas의 read_csv를 통해 데이터 로드
df_gas = pd.read_csv('2001-2021 연도별 온실가스 발생량 총합.csv', encoding='cp949')
df_waste = pd.read_csv('2001-2022 연도별 폐기물 발생량 총합.csv', encoding='cp949')

# 잘못된 레이블에 대한 수정
df_gas = df_gas.rename(columns={"Unnamed: 0": "온실가스 종류"})
df_gas.set_index("온실가스 종류", inplace=True)
df_waste = df_waste.rename(columns={"Unnamed: 0": "폐기물 종류"})
df_waste.set_index("폐기물 종류", inplace=True)

# 많은 데이터들 중 총합 값만을 추출
df_gas_total = pd.DataFrame(df_gas.loc['전체']).reset_index()
df_gas_total.columns = ['연도', '총 배출량']

# 많은 데이터들 중 총합 값만을 추출
df_waste_total = pd.DataFrame(df_waste.loc['전체']).reset_index()
df_waste_total.columns = ['연도', '총 발생량']

# 연도에 관한 값들을 정수형으로 변환
df_gas_total['연도'] = df_gas_total['연도'].astype(int)
df_waste_total['연도'] = df_waste_total['연도'].astype(int)

# 연도별 오름차순 정렬
df_gas_total = df_gas_total.sort_values(by='연도')
df_waste_total = df_waste_total.sort_values(by='연도')

# 상관관계 분석을 위해 두 데이터프레임을 병합
merged_df = pd.merge(df_gas_total, df_waste_total, on='연도', how='inner')

# 데이터 정규화 진행
scaler = MinMaxScaler()
values = scaler.fit_transform(merged_df[['총 배출량', '총 발생량']])

# 정규화가 완료된 데이터들을 다시 데이터프레임화 진행
scaled_df = pd.DataFrame(values, columns=['온실가스 배출량', '폐기물 발생량'])
scaled_df['연도'] = merged_df['연도']

# 두 요소에 대한 상관관계 분석
corr_score = np.corrcoef(scaled_df['온실가스 배출량'], scaled_df['폐기물 발생량'])[0, 1]

# 상관계수 시각화
plt.figure(figsize=(12, 8))
plt.scatter(scaled_df['온실가스 배출량'], scaled_df['폐기물 발생량'], c='blue', alpha=0.7)
plt.title('온실가스 배출량과 폐기물 배출량에 관한 상관 관계 분석')
plt.xlabel('온실가스 배출량')
plt.ylabel('폐기물 배출량')

# 산점도의 점들에 대한 설명
for i, 연도 in enumerate(scaled_df['연도']):
    plt.annotate(연도, (scaled_df['온실가스 배출량'][i], scaled_df['폐기물 발생량'][i]))

# 시각화
plt.figtext(0.15, 0.85, f"두 변수간 상관계수: {corr_score:.2f}", fontsize=12, bbox={"facecolor":"orange", "alpha":0.5, "pad":5})

plt.show()

 

해당 코드의 결과물은 아래와 같다.

 

이렇게 내가 맡은 부분은 모두 해결하였다. 내일 발표가 모두 진행되고나면 머신러닝 관련 코드를 해석할 것이다.