데이터 분석 공부 기록

[kaggle]캐나다 소득 조사 분석 The CIS (Canadian Income Survey) Dataset

note818 2025. 3. 22. 01:55

Income Survey | Finance Analysis

 

Income Survey | Finance Analysis

Analyzing Income, Employment, and Financial Well-being.

www.kaggle.com

 

오늘 분석할 자료는 CIS 데이터는 캐나다에 거주하는 다양한 사람들의 인구 통계, 고용, 소득, 복지에 대한 정보를 담고 있는 방대한 데이터셋입니다 처음 데이터를 열어봤을 때는 변수도 많고(무려 36개!), 숫자와 범주형 값들이 섞여 있어서 좀 복잡하게 느껴졌어요. 근데 자세히 들여다보니, 이 데이터 안에는 캐나다 사람들의 나이, 성별, 결혼 여부부터 시작해서, 얼마나 일했는지, 얼마를 벌었는지, 어떤 복지 혜택을 받았는지 같은 정보들이 다 담겨있어 분석할것이 많아보이네요 

한번 시작해보겠습니다

 

 

1. 열 확인 

df.info()

 

 

PERSONID 각 개인의 고유 식별자
Weight 표본 대표성을 조정하기 위해 각 개인에게 부여된 조사 가중치
Province 개인이 거주하는 주(州)
MBMREGP 시장 바구니 측정 지역 코드(빈곤 수준 평가용)
Age_gap 연령대 또는 연령 구간 분류
Gender 개인의 성별 (예: 남성, 여성, 기타)
Marital_status 개인의 혼인 여부 (예: 미혼, 기혼, 이혼, 사별 등)
Highschool 고등학교 졸업 여부 (예: 예/아니오)
Highest_edu 개인이 이수한 최고 교육 수준
Work_ref 고용 상태 (예: 취업, 실업, 은퇴 등)
Work_yearly 연간 총 근무 연수
Emp_week_ref 기준 기간 동안 근무한 주(週) 수
Total_hour_ref 기준 기간 동안 근무한 총 시간
paid_emp_ref 유급 근로자로 일한 주 수
self_emp_ref 자영업자로 일한 주 수
Immigrant 개인의 이민자 여부 (예: 예/아니오)
Year_immigrant 개인이 이민 온 연도
income_after_tax 세금 공제 후 총 소득
Cap_gain 자본 이득(주식 등 자산 매각으로 발생한 이익)
Childcare_expe 육아 관련 지출 총액
Child_benefit 정부로부터 받은 육아 보조금
CPP_QPP 캐나다 연금 계획(CPP) 또는 퀘벡 연금 계획(QPP) 납부액
Earning 공제 전 총 근로 소득
Guaranteed_income 보장 소득 보조금 수령액
Investment 투자 수익 총액
Old_age_pension 노령 연금 수령액 (OAS 등)
Private_pension 사설 연금 기여금
Self_emp_income 자영업 수입
Pension 다양한 출처로부터의 총 연금 소득
Total_income 공제 전 모든 소득의 총합
Emp_insurance 고용 보험 수당 수령액
Salary_wages 급여 및 임금 수입
compensation 업무 관련 보상금
Family_mem 가구 내 가족 구성원 수
CFCOMP 가족 구성 유형 분류
CONDMP 주거 유형 또는 주택 상태
RENTM 월 임대료

 

 

2. 남녀 비율 확인 

df['Gender'].value_counts()

1이 남자 2가 여자인듯하다

3. 남녀 소득 평균 확인해보기 

gender_income_mean = df.groupby('Gender')['Total_income'].mean()

gender_income_mean

저걸 연소득이고 캐나다달러라고 한다면 

113,634 CAD × 1,000원 ≒ 1억 1,363만 원

108,863 CAD × 1,000원 ≒ 1억 886만 원

4.문제 발생 

df['Age_gap'].value_counts()

df['Highest_edu'].value_counts()

 

같이 첨부된 데이터 사전 파일에 숫자가 뭘 의미하는지에 대한 설명이 없었다 1살 15살 이럴일은 없을테고 의미가 있을텐데 외부에서 조사해봤는데 의미파악하는데 시간을 너무 빼앗겼다 알아보는데도 실패 

5. 예측으로 진행 (Chat GPT)

 

 

6.학력별 소득 분포 확인하기 

edu_map_predicted = {
    1: "교육 없음 또는 초등 중퇴",
    2: "초등학교 또는 중학교 졸업",
    3: "고등학교 졸업",
    4: "대학 일부 수료 또는 중퇴",
    6: "대학 졸업 (전문대 포함)",
    9: "학사 학위 이상"
}

df['Highest_edu_label_predicted'] = df['Highest_edu'].map(edu_map_predicted)
income_by_edu = df.groupby('Highest_edu_label_predicted')['Total_income'].mean().sort_values(ascending=False)
income_by_edu

 

7.청년층 장년층 노년층 소득평균 확인하기 

 

import pandas as pd
import matplotlib.pyplot as plt

# 연령대 그룹 매핑
def map_age_group(age_code):
    if 4 <= age_code <= 7:
        return "Youth (15–34)"
    elif 8 <= age_code <= 12:
        return "Adult (35–59)"
    elif 13 <= age_code <= 15:
        return "Senior (60+)"
    else:
        return "Excluded"

# Age group 컬럼 추가
df['Age_group'] = df['Age_gap'].apply(map_age_group)

# 제외할 연령대 (예: 1~3세, 어린이)
df_age_filtered = df[df['Age_group'] != "Excluded"]

# 그룹별 평균 총소득 계산
income_by_age_group = df_age_filtered.groupby('Age_group')['Total_income'].mean().sort_values(ascending=False)

# 시각화
plt.figure(figsize=(8, 5))
income_by_age_group.plot(kind='bar', color='mediumseagreen')
plt.title("Average Total Income by Age Group", fontsize=14)
plt.xlabel("Age Group", fontsize=12)
plt.ylabel("Average Total Income (CAD)", fontsize=12)
plt.xticks(rotation=0)
plt.grid(axis='y', linestyle='--', alpha=0.6)
plt.tight_layout()
plt.show()

 

  • 장년층(35–59세)이 평균적으로 가장 높은 소득을 보이며, 약 12만 5천 CAD (1억 2천만 원대)
  • 청년층(15–34세)도 상대적으로 높은 편이며, 약 11만 7천CAD 약 117,542,000 원
  • 노년층(60세 이상)은 은퇴자의 비중이 많기 때문에 소득이 가장 낮은 경향 약 83,389,000 원

 

 

 

마무리

이번 포스팅에서는 실제 데이터를 바탕으로 데이터 분석책에 나와있는 기본적인 분석방법을 참고해 작성되었습니다

분석하다 느낀것은 chat gpt 가 내가 머리 싸매서 하는것보다 빠르고 낫다 시간적 가치에서도 더 앞서는 모습을보며 내가 어떻게 공부를 해야하는건가 ? 데이터분석 문법같은걸 외워야 한다는 생각이 있었는데  질문하는 사고력을 길러야 하는걸까 생각이 들었네요 글 읽어주셔서 감사합니다