Spaces:
Sleeping
Sleeping
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']
|