ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Pandas를 활용한 실전 데이터 분석 예제
    pandas 2025. 1. 30. 22:34
    728x90

     

    이번 포스팅에서는 실제 데이터셋을 활용하여 데이터 분석을 진행해보겠습니다.
    예제로 타이타닉(Titanic) 데이터셋을 사용하여 생존자 분석을 수행하겠습니다.


    1. 데이터 불러오기

    타이타닉 데이터는 Seaborn 라이브러리에서 제공하는 데이터셋 중 하나입니다.

    import pandas as pd
    import seaborn as sns
    
    # 타이타닉 데이터셋 불러오기
    df = sns.load_dataset("titanic")
    
    # 데이터 확인
    print(df.head())  # 상위 5개 행 출력
    print(df.info())  # 데이터 정보 확인
    

    출력 결과:

       survived  pclass     sex   age  sibsp  parch     fare embarked   class  ...
    0         0       3    male  22.0      1      0   7.2500        S   Third  ...
    1         1       1  female  38.0      1      0  71.2833        C   First  ...
    
    • survived: 생존 여부 (0 = 사망, 1 = 생존)
    • pclass: 객실 등급 (1 = 일등석, 2 = 이등석, 3 = 삼등석)
    • sex: 성별
    • age: 나이
    • sibsp: 함께 탑승한 형제/배우자 수
    • parch: 함께 탑승한 부모/자녀 수
    • fare: 요금
    • embarked: 탑승 항구 (C = Cherbourg, Q = Queenstown, S = Southampton)

    2. 데이터 전처리

    (1) 결측값 확인 및 처리

    print(df.isnull().sum())  # 결측값 개수 확인
    

    age, embarked 등에 결측값이 존재하는 경우, 이를 채워야 합니다.

    df['age'].fillna(df['age'].median(), inplace=True)  # 나이의 결측값을 중앙값으로 채우기
    df['embarked'].fillna(df['embarked'].mode()[0], inplace=True)  # 탑승 항구 결측값을 최빈값으로 채우기
    

    (2) 불필요한 열 제거

    df.drop(columns=['deck', 'alive'], inplace=True)  # 필요 없는 열 제거
    

    (3) 범주형 데이터를 숫자로 변환

    Pandas의 map()과 get_dummies()를 활용하여 범주형 데이터를 숫자로 변환할 수 있습니다.

    df['sex'] = df['sex'].map({'male': 0, 'female': 1})  # 성별을 숫자로 변환
    df = pd.get_dummies(df, columns=['embarked'], drop_first=True)  # 원-핫 인코딩 적용
    

    3. 데이터 분석 및 시각화

    (1) 생존률 분석

    print(df['survived'].value_counts(normalize=True) * 100)  # 생존률 계산
    

    (2) 객실 등급에 따른 생존률

    import matplotlib.pyplot as plt
    import seaborn as sns
    
    sns.barplot(x='pclass', y='survived', data=df)
    plt.xlabel('객실 등급')
    plt.ylabel('생존률')
    plt.title('객실 등급에 따른 생존률')
    plt.show()
    

    (3) 성별에 따른 생존률

    sns.barplot(x='sex', y='survived', data=df)
    plt.xlabel('성별 (0: 남성, 1: 여성)')
    plt.ylabel('생존률')
    plt.title('성별에 따른 생존률')
    plt.show()
    

    여성 승객이 남성보다 생존 확률이 높은 것을 확인할 수 있습니다.


    (4) 나이 분포 및 생존자 분석

    sns.histplot(df['age'], bins=30, kde=True, hue=df['survived'])
    plt.xlabel('나이')
    plt.title('나이에 따른 생존자 분포')
    plt.show()
    

    4. 상관관계 분석

    데이터 간의 상관관계를 분석하면 어떤 변수가 생존에 영향을 미치는지 알 수 있습니다.

    import seaborn as sns
    
    corr_matrix = df.corr()
    sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt='.2f')
    plt.title('변수 간 상관관계')
    plt.show()
    
    • 생존(survived)과 가장 높은 상관관계를 보이는 변수 확인
    • pclass, sex, fare 등이 생존에 영향을 미치는 주요 변수임을 알 수 있음

    5. 마무리

    이번 포스팅에서는 타이타닉 데이터셋을 활용하여 데이터 분석을 진행했습니다.
    다음 글에서는 Pandas와 Scikit-Learn을 활용한 머신러닝 모델 만들기에 대해 다룰 예정이니 기대해 주세요! 😊

     

    728x90
Designed by Tistory.