지난 20년의 데이터를 읽고, 앞으로 10년의 추세선을 그리며, 대한민국의 미래를 위한 정책을 개발하는 데이터 분석 프로젝트
숫자로 읽는
대한민국의 지속가능한 내일
온실가스, 에너지, 인구, 지역, 산업 데이터를 분석하면 대한민국이 어떤 미래로 가고 있는지 예측할 수 있습니다. 데이터는 정책의 출발점입니다.
Q1. 지난 20년 동안 지속가능성 지표는 어떻게 변했는가?
Q2. 현재 추세가 10년 더 이어지면 대한민국의 미래는 어떤 모습인가?
Q3. 정부·학교·지역사회는 어떤 정책을 개발해야 하는가?
| 구분 | 내용 |
|---|---|
| 대주제 | 지속가능 발전과 대한민국의 미래 |
| 권장 지표 | 온실가스 배출량, 재생에너지 비중, 전력 사용량, 인구구조, 미세먼지, 지역 일자리 |
| 분석 범위 | 지난 20년 자료 + 앞으로 10년 추세선 |
| 분석 도구 | 공공데이터 API, pandas, matplotlib, scikit-learn 선형회귀 |
| 결과물 | 추세선 그래프, 인사이트, 정책 개발안, 공공데이터 활용 포스터 |
# ============================================================
# 공공데이터 API 인증키 활용 프로젝트
# 주제: 지속가능 발전과 대한민국의 미래
# 분석: 지난 20년 + 앞으로 10년 추세선, 인사이트, 정책 개발
# ============================================================
import requests
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from xml.etree import ElementTree as ET
from sklearn.linear_model import LinearRegression
SERVICE_KEY = "여기에_공공데이터_API_인증키를_입력하세요"
API_URL = "https://apis.data.go.kr/B551177/AirportGreenGas/getGreenGasInfo"
def fetch_public_data():
params = {"serviceKey": SERVICE_KEY, "pageNo": 1, "numOfRows": 100, "type": "xml"}
try:
response = requests.get(API_URL, params=params, timeout=10)
response.raise_for_status()
root = ET.fromstring(response.content)
rows = []
for item in root.iter("item"):
year = item.findtext("year") or item.findtext("stdYear") or item.findtext("baseYear") or item.findtext("yr")
value = item.findtext("emission") or item.findtext("ghgEmis") or item.findtext("totEmis") or item.findtext("value")
if year and value:
rows.append({"year": int(year), "value": float(str(value).replace(",", ""))})
df = pd.DataFrame(rows)
if df.empty:
return make_sample_data()
return df
except Exception as e:
print("API 호출 또는 XML 파싱 실패:", e)
print("수업용 샘플 데이터를 사용합니다.")
return make_sample_data()
def make_sample_data():
years = np.arange(2006, 2026)
# 값이 높을수록 지속가능성 위험이 크다고 가정한 수업용 예시 지표
values = [62,64,66,69,71,73,75,76,78,79,81,82,80,79,77,75,73,71,69,67]
return pd.DataFrame({"year": years, "value": values})
df = fetch_public_data()
df = df.dropna().sort_values("year")
current_year = df["year"].max()
df_20 = df[df["year"] >= current_year - 19].copy()
X = df_20[["year"]]
y = df_20["value"]
model = LinearRegression()
model.fit(X, y)
future_years = np.arange(df_20["year"].min(), current_year + 11)
future_X = pd.DataFrame({"year": future_years})
predicted = model.predict(future_X)
first_value = df_20.iloc[0]["value"]
last_value = df_20.iloc[-1]["value"]
future_value = predicted[-1]
past_change_rate = (last_value - first_value) / first_value * 100
future_change_rate = (future_value - last_value) / last_value * 100
print("[핵심 인사이트]")
print(f"지난 20년 변화율: {past_change_rate:.2f}%")
print(f"현재 값: {last_value:.2f}")
print(f"10년 후 예측값: {future_value:.2f}")
print(f"현재 대비 10년 후 예측 변화율: {future_change_rate:.2f}%")
if future_change_rate > 0:
print("판단: 현재 추세가 이어지면 지속가능성 위험이 커질 수 있습니다.")
else:
print("판단: 현재 추세가 이어지면 지속가능성 위험이 완화될 가능성이 있습니다.")
plt.rcParams["font.family"] = "Malgun Gothic"
plt.rcParams["axes.unicode_minus"] = False
plt.figure(figsize=(12, 7))
plt.plot(df_20["year"], df_20["value"], marker="o", linewidth=2, label="실제 지표")
plt.plot(future_years, predicted, linestyle="--", linewidth=2, label="추세선 및 10년 예측")
plt.axvline(current_year, linestyle=":", label="현재 기준 연도")
plt.title("지속가능 발전과 대한민국의 미래: 20년 추세와 10년 전망")
plt.xlabel("연도")
plt.ylabel("지속가능 미래지표")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.savefig("korea_sustainable_future_trend.png", dpi=200)
plt.show()
policies = [
"탄소중립 전환 가속 정책",
"미래세대 인구·교육 정책",
"지역균형 지속가능 도시 정책",
"데이터 공개형 정책 평가",
"학교 참여형 지속가능 프로젝트",
"녹색산업 일자리 육성 정책"
]
print("\n[정책 개발안]")
for i, policy in enumerate(policies, start=1):
print(f"{i}. {policy}")공공건물 에너지 효율 개선, 재생에너지 설비 확대, 산업 공정 저탄소화를 동시에 추진합니다.
저출생·고령화에 대응하여 돌봄, 교육, 청년 일자리, 지역 정주 여건을 함께 개선합니다.
지역별 친환경 산업, 대중교통, 생활 SOC를 확충하여 수도권 집중을 완화합니다.
온실가스, 에너지, 인구, 일자리 지표를 대시보드로 공개하고 정책 효과를 매년 평가합니다.
학생들이 공공데이터 API를 활용해 지역 문제를 분석하고 포스터·정책 제안서를 제작하도록 지원합니다.
재생에너지, 전기차, 스마트그리드, 탄소포집, 기후테크 분야의 미래 일자리를 확대합니다.