파이썬 데이터 분석 시리즈: 실제 데이터로 데이터 분석하기
이전 시리즈에서는 데이터 분석을 위한 필수적인 과정인 데이터 클린징과 전처리에 대해 알아보았습니다. 이번 시리즈에서는 sklearn 라이브러리에서 제공하는 실제 데이터셋을 사용하여 데이터 클린징과 전처리 그리고 분석을 어떻게 진행하는지 실전 예제를 통해 알아보겠습니다.
데이터셋 소개
사용할 데이터셋은 sklearn 라이브러리에 내장되어 있는 'Titanic' 데이터셋입니다. 이 데이터셋은 타이타닉호의 승객들에 대한 정보를 포함하고 있습니다.
from sklearn.datasets import fetch_openml
# fetch_openml 함수를 사용하여 타이타닉 데이터셋을 불러옵니다.
titanic = fetch_openml('titanic', version=1, as_frame=True)
df = titanic.frame
데이터 클린징과 전처리
데이터셋을 분석하기 전에는 반드시 데이터 클린징과 전처리 과정을 거쳐야 합니다. 이 과정을 통해 데이터의 품질을 향상시키고, 분석 결과의 신뢰성을 높일 수 있습니다.
결측치 처리
결측치는 다양한 이유로 발생할 수 있습니다. 이러한 결측치를 찾아내어 적절한 값으로 대체하는 것이 중요합니다. 결측치가 있는지 확인해봅시다.
# isnull().sum() 함수를 이용하여 각 컬럼별로 결측치가 있는지 확인합니다.
df.isnull().sum()
결측치를 처리하는 방법은 다양합니다. 이번에는 'age' 컬럼의 결측치를 중앙값으로 대체해 보겠습니다.
# fillna 함수를 이용하여 'age' 컬럼의 결측치를 중앙값으로 대체합니다.
df['age'].fillna(df['age'].median(), inplace=True)
이상치 검출
이상치는 분석 결과를 왜곡할 수 있으므로, 이를 찾아내어 제거하거나 대체하는 작업이 필요합니다. 이번 예제에서는 IQR을 이용해 이상치를 찾아보겠습니다.
# IQR 방법을 이용하여 'age' 컬럼의 이상치를 찾습니다.
Q1 = df['age'].quantile(0.25)
Q3 = df['age'].quantile(0.75)
IQR = Q3 - Q1
filter = (df['age'] >= Q1 - 1.5 * IQR) & (df['age'] <= Q3 + 1.5 *IQR)
df = df.loc[filter]
데이터 형식 수정
특정 열의 데이터 형식이 일관되지 않을 경우, 분석에 어려움이 발생할 수 있습니다. 이를 통일하는 과정이 필요합니다. 이번 예제에서는 'sex' 컬럼을 숫자 형식으로 바꾸어 보겠습니다.
# map 함수를 이용하여 'sex' 컬럼의 'male', 'female'을 각각 0, 1로 바꿉니다.
df['sex'] = df['sex'].map({'male': 0, 'female': 1})
데이터 스케일링
데이터의 범위가 서로 다르면, 일부 알고리즘이 제대로 작동하지 않을 수 있습니다. 따라서, 모든 데이터를 동일한 범위로 조정하는 스케일링이 필요합니다. 이를 위해 StandardScaler를 사용합니다.
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
# 'age' 컬럼만 스케일링을 진행하겠습니다.
df[['age']] = scaler.fit_transform(df[['age']])
모델 학습과 평가
데이터 전처리가 완료되었다면, 이제 머신러닝 모델을 학습시키고 평가해보는 단계를 진행해보겠습니다. 이번 예제에서는 'survived' 컬럼을 예측하는 로지스틱 회귀 모델을 사용해보겠습니다.
학습 데이터와 테스트 데이터 분리
from sklearn.model_selection import train_test_split
# 'survived' 컬럼을 제외한 나머지를 피처로 사용합니다.
X = df.drop('survived', axis=1)
y = df['survived']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
모델 학습
from sklearn.linear_model import LogisticRegression
# 로지스틱 회귀 모델을 학습시킵니다.
model = LogisticRegression()
model.fit(X_train, y_train)
모델 평가
학습된 모델의 성능을 평가해봅시다. 이번에는 정확도를 이용해 평가해보겠습니다.
from sklearn.metrics import accuracy_score
# 테스트 데이터셋을 이용하여 예측을 수행합니다.
y_pred = model.predict(X_test)
# 예측 결과와 실제 값의 정확도를 계산합니다.
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
이로써 실제 데이터를 활용한 데이터 분석 과정을 모두 진행해보았습니다. 데이터 클린징과 전처리를 통해 데이터의 품질을 높이고, 학습된 모델을 통해 미래의 결과를 예측하는 데이터 분석의 전체 과정을 이해하는데 도움이 되었기를 바랍니다.