•
raw데이터 조사 및 정제
1.광역시별 15-29세 실업자수
2.
광역시별 15-29세 고용률
분기 고용률
시도 | 고용률(%) | 분기 |
부산광역시 | 46.7 | 2024.3/4 |
대구광역시 | 36.6 | 2024.3/4 |
인천광역시 | 49.2 | 2024.3/4 |
광주광역시 | 38.8 | 2024.3/4 |
대전광역시 | 44.2 | 2024.3/4 |
시도별 × 분기 고용률
시도 | 2024.3/4 | 2024/4 | 2025.1/4 | 2025.2/4 |
광주광역시 | 38.8 | 36.3 | 37.2 | 37.1 |
대구광역시 | 36.6 | 35.6 | 38.0 | 40.7 |
대전광역시 | 44.2 | 42.8 | 44.6 | 46.0 |
부산광역시 | 46.7 | 46.0 | 43.8 | 44.0 |
울산광역시 | 40.8 | 41.0 | 41.5 | 43.7 |
인천광역시 | 49.2 | 48.0 | 46.0 | 45.1 |
import pandas as pd
import re
# 1) 서울 제외 광역시 조건 (부산/대구/인천/광주/대전/울산)
metros_no_seoul = ["부산광역시","대구광역시","인천광역시","광주광역시","대전광역시","울산광역시"]
# 2) df3에서 조건 필터 (df3가 이미 15-29세만 담고 있지 않을 수도 있으니 안전하게 한 번 더 체크)
mask_city = df3["시도별"].isin(metros_no_seoul)
mask_age = df3["연령계층별"].eq("15 - 29세") if "연령계층별" in df3.columns else True
sub = df3.loc[mask_city & mask_age].copy()
# 3) '고용률(%)' 컬럼만 자동 선택
# - 패턴 예: 2024.3/4(총인구), 2024.3/4.1(경제활동인구), 2024.3/4.2(비경제활동인구),
# 2024.3/4.3(경제활동참가율), 2024.3/4.4(고용률)
# - 따라서 고용률은 ".4"로 끝나는 컬럼들
emp_rate_cols = [c for c in sub.columns if re.match(r"^\d{4}\.\d/4\.4$", c)]
# 4) long 형태 (시각화/가공에 편리)
emp_long = (
sub[["시도별"] + emp_rate_cols]
.melt(id_vars="시도별", var_name="분기_raw", value_name="고용률(%)")
)
# 숫자 변환 + 분기 라벨 정리(뒤의 ".4" 제거)
emp_long["고용률(%)"] = pd.to_numeric(emp_long["고용률(%)"], errors="coerce")
emp_long["분기"] = emp_long["분기_raw"].str.replace(".4", "", regex=False)
emp_long = emp_long.drop(columns=["분기_raw"])
# 5) pivot 형태 (광역시 × 분기 표)
emp_pivot = emp_long.pivot(index="시도별", columns="분기", values="고용률(%)")
# 확인
print(emp_long.head()) # long 미리보기 (시도별, 분기, 고용률)
print(emp_pivot) # pivot 표 (시도별 × 분기 고용률)
Python
복사
KOSIS 실업률 지도 시각화 직접 진행
※참고 CSV 파일 :
코드 정리
※번외 15 ~ 29세 전체 실업률과 광주 실업률 점선 그래프 (한글 깨짐 방지 코드 까먹음)
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
import platform
# Colab 환경에서 한글 폰트 설정
if platform.system() == 'Linux':
!apt-get -qq install -y fonts-nanum
import matplotlib.font_manager as fm
matplotlib.rcParams['font.family'] = 'NanumGothic'
plt.rcParams['axes.unicode_minus'] = False
#폰트 설정 (한글 깨짐 방지용 – Colab 한정). 차트 출력 전 미리 실행해야 함!!
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
#실행 후 세션 다시시작
# 1) CSV 경로 지정 (Colab에 업로드했거나 앞 단계에서 생성한 파일)
path = "시도별_분기별_15-29세_경제활동인구_실업자_실업률.csv"
df = pd.read_csv(path)
# 숫자형 보장
for col in ["경제활동인구(천명)", "실업자(천명)", "실업률(%)"]:
df[col] = pd.to_numeric(df[col], errors="coerce")
# 2) 분기 정렬 키
def qkey(s):
y, rest = s.split('.', 1)
q = rest.split('/')[0]
return (int(y), int(q))
# 3) 전국 실업률(가중 평균) = (Σ실업자 / Σ경제활동인구) * 100
nat = (
df.groupby("분기")
.agg({"경제활동인구(천명)":"sum", "실업자(천명)":"sum"})
.reset_index()
)
nat["전국 실업률(%)"] = (nat["실업자(천명)"] / nat["경제활동인구(천명)"] * 100)
# 4) 광주광역시 실업률 시계열
gwangju = df[df["시도별"] == "광주광역시"][["분기", "실업률(%)"]].copy()
gwangju = gwangju.rename(columns={"실업률(%)":"광주 실업률(%)"})
# 5) 정렬 및 병합(공통 분기)
nat = nat.sort_values("분기", key=lambda s: s.map(qkey)).reset_index(drop=True)
gwangju = gwangju.sort_values("분기", key=lambda s: s.map(qkey)).reset_index(drop=True)
plot_df = pd.merge(nat[["분기","전국 실업률(%)"]], gwangju, on="분기", how="inner")
# 6) 점선 그래프 (matplotlib, 단일 플롯, 색상 지정 없음)
plt.figure(figsize=(10, 5))
plt.plot(plot_df["분기"], plot_df["전국 실업률(%)"], linestyle="--", marker="o", label="전국")
plt.plot(plot_df["분기"], plot_df["광주 실업률(%)"], linestyle="--", marker="s", label="광주광역시")
plt.title("15–29세 실업률: 전국 vs 광주광역시")
plt.xlabel("분기")
plt.ylabel("실업률(%)")
plt.xticks(rotation=45)
plt.grid(True, linestyle=":")
plt.legend()
plt.tight_layout()
plt.show()
Python
복사




.png&blockId=25e2dc3e-f514-8026-a115-daea1d62897e)