File size: 1,860 Bytes
a45270b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
"""Data loading and preprocessing utilities for Titanic dataset."""
import numpy as np
import pandas as pd
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import streamlit as st

SEED = 42


@st.cache_data
def load_titanic():
    """Load Titanic dataset from seaborn (no Kaggle account needed)."""
    return sns.load_dataset('titanic')


def preprocess_titanic(df):
    """ํƒ€์ดํƒ€๋‹‰ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ ํ•จ์ˆ˜ (๋…ธํŠธ๋ถ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ)"""
    data = df.copy()

    features = ['pclass', 'sex', 'age', 'sibsp', 'parch', 'fare', 'embarked']
    target = 'survived'

    data = data[features + [target]].copy()

    # ๊ฒฐ์ธก๊ฐ’ ์ฒ˜๋ฆฌ
    data['age'].fillna(data['age'].median(), inplace=True)
    data['fare'].fillna(data['fare'].median(), inplace=True)
    data['embarked'].fillna(data['embarked'].mode()[0], inplace=True)

    # ๋ฒ”์ฃผํ˜• โ†’ ์ˆซ์ž
    data['sex'] = (data['sex'] == 'male').astype(int)
    embarked_map = {'S': 0, 'C': 1, 'Q': 2}
    data['embarked'] = data['embarked'].map(embarked_map)

    # ํŒŒ์ƒ ํ”ผ์ฒ˜
    data['family_size'] = data['sibsp'] + data['parch']

    return data


@st.cache_data
def get_train_test_data():
    """Return preprocessed train/test split with scaling."""
    df = load_titanic()
    data = preprocess_titanic(df)

    X = data.drop('survived', axis=1)
    y = data['survived']

    X_train, X_test, y_train, y_test = train_test_split(
        X, y, test_size=0.2, random_state=SEED, stratify=y
    )

    scaler = StandardScaler()
    X_train_scaled = scaler.fit_transform(X_train)
    X_test_scaled = scaler.transform(X_test)

    return X_train, X_test, y_train, y_test, X_train_scaled, X_test_scaled, scaler


def get_feature_names():
    return ['pclass', 'sex', 'age', 'sibsp', 'parch', 'fare', 'embarked', 'family_size']