Kaggle(캐글) - 타이타닉 생존자 예측 초보자 튜토리얼[Hellfer](2)
https://www.kaggle.com/code/shivadumnawar/titanic-a-complete-tutorial-for-beginners
Titanic : A Complete Tutorial For Beginners
Explore and run machine learning code with Kaggle Notebooks | Using data from multiple data sources
www.kaggle.com
위의 튜토리얼을 보고 참고하여 진행하였습니다.
다음은 2번째 단계인 데이터 누락된 값 처리에 대해 알아보겠습니다.
데이터 전처리란?
- 데이터 분석 또는 머신러닝 모델 학습을 위해 데이터를 준비하는 과정으로 과정은 다음과 같습니다.
1. 데이터 수집 (Data Collection)
- 데이터베이스, 웹 스크래핑, API 등으로부터 데이터를 수집함.
2. 데이터 확인 및 이해 (Data Inspection and Understanding)
- 데이터의 전반적인 구조와 내용을 이해하기 위해 요약 통계량, 데이터 타입, 결측치 등을 확인함.
3. 데이터 정제 (Data Cleaning)
- 결측치 처리 : 평균(mean), 중앙값(median), 최빈값(mode) 등으로 대체.
- 중복 데이터 제거.
- 이상치 처리 : IQR(Interquartile Range), Z-score 등 / 시각적 방법 : 박스 플롯(Box plot), 산점도(Scatter plot) 등
4. 데이터 변환 (Data Transformation)
- 스케일링 (Scaling) : 데이터를 표준화하거나 정규화하여 값의 범위를 조정.
- 인코딩 (Encoding) : 범주형 데이터를 수치형 데이터로 변환. (원 - 핫 인코딩, 레이블 인코딩)
- 로그 변환 (Log Transformation) : 분포가 비대칭적인 데이터를 로그 변환하여 정규 분포에 가깝게 만듦.
5. 데이터 통합 (Data Intergration)
- 여러 데이터를 통합하여 하나의 일관된 데이터셋을 생성
6. 데이터 축소 (Data Reduction)
- 차원 축소 : PCA(주성분 분석), LDA(선형 판별 분석) 등을 사용하여 데이터의 차원을 축소
- 특성 선택 : 모델의 중요한 특성만 선택하여 데이터의 크기를 축소
7. 데이터 분할 (Data Splitting)
- 학습 데이터와 테스트 데이터로 분할하여 모델의 학습 및 평가에 사용
import 순서 다음으로 데이터에서 중요하지 않은 변수를 제거해 보겠습니다.
axis = 1 은 열을 기준으로 작동하도록 지정합니다. (기본값은 axis = 0으로 행을 기준으로 작동)
inplace = True는 원본 데이터프레임을 직접 수정합니다. (기본값은 inplace = False로 새로운 데이터프레임을 반환)
train.drop(columns=['PassengerId', 'Name', 'Ticket', 'Cabin'], axis=1, inplace=True)
test.drop(columns= ['PassengerId', 'Name', 'Ticket', 'Cabin'], axis=1, inplace= True)
따라서 train과 test 데이터프레임에서 'Passenger', 'Name', 'Ticket', 'Cabin' 열이 제거되고, 나머지 열만 남게 됩니다.
null 값을 중앙값, 최빈값으로 채웁니다.
train['Age'].median()
28.0
train['Embarked'].mode()[0]
'S'
train의 'Age' 결측값이 중앙값으로 'Embarked' 결측값이 최빈값으로 채워집니다.
train['Age'].fillna(train['Age'].median(), inplace=True)
train['Embarked'].fillna(train['Embarked'].mode()[0], inplace=True)
print(train.isnull().sum())
따라서 train의 null값이 없어진 것을 확인해 볼 수 있습니다.
Survived 0
Pclass 0
Sex 0
Age 0
SibSp 0
Parch 0
Fare 0
Embarked 0
dtype: int64
test['Fare'].median()
14.4542
test['Age'].median()
27.0
test의 'Age' , 'Fare'의 결측값이 각각 중앙값으로 채워집니다.
test['Age'].fillna(test['Age'].median(), inplace=True)
test['Fare'].fillna(test['Fare'].median(), inplace=True)
print(test.isnull().sum())
test의 null 값이 없어진 것을 확인해 볼 수 있습니다.
Pclass 0
Sex 0
Age 0
SibSp 0
Parch 0
Fare 0
Embarked 0
dtype: int64
value_counts() 함수는 고윳값의 개수를 제공합니다.
train 데이터프레임의 'Survived' 변수의 개수를 확인해 보겠습니다.
train['Survived'].value_counts()
생존하지 못한 사람들이 549명, 생존한 사람들이 345명으로 구성되어 있습니다.
Survived
0 549
1 342
Name: count, dtype: int64
train 데이터프레임의 'Pclass' 변수의 개수를 확인해 보겠습니다.
train['Pclass'].value_counts()
3등석(Pclass = 3) 승객이 491명, 2등석(Pclass = 2) 승객이 216명, 1등석 (Pclass = 1) 승객이 184명으로 구성되어 있습니다.
Pclass
3 491
1 216
2 184
Name: count, dtype: int64
train 데이터프레임의 'Sex' 변수의 개수를 확인해 보겠습니다.
train['Sex'].value_counts()
남성이 (male) 577명, 여성이 (female) 314명으로 구성되어 있습니다.
Sex
male 577
female 314
Name: count, dtype: int64
train 데이터프레임의 'SibSp' 변수의 개수를 확인해 보겠습니다.
train['SibSp'].value_counts()
형제자매 및 배우자가 없는 승객(SibSp = 0)이 608명
형제자매 및 배우자가 1명인 승객(SibSp = 1)이 209명 등으로 구성되어 있습니다.
SibSp
0 608
1 209
2 28
4 18
3 16
8 7
5 5
Name: count, dtype: int64
train 데이터프레임의 'Parch' 변수의 개수를 확인해 보겠습니다.
train['Parch'].value_counts()
부모 및 자녀가 없는 승객(Parch = 0)이 678명
부모 및 자녀가 1명인 승객(Parch = 1)이 118명 등으로 구성되어 있습니다.
Parch
0 678
1 118
2 80
5 5
3 5
4 4
6 1
Name: count, dtype: int64
train 데이터프레임의 'Embarked' 변수의 개수를 확인해 보겠습니다.
train['Embarked'].value_counts()
항구번호 'S'에서 탑승한 승객이 646명, 'C'에서 탑승한 승객이 168명, 'Q'에서 탑승한 승객이 77명으로 구성되어 있습니다.
Embarked
S 646
C 168
Q 77
Name: count, dtype: int64
test 데이터프레임의 'Pcalss' 변수의 개수를 확인해 보겠습니다.
test['Pclass'].value_counts()
3등석(Pclass = 3) 승객이 218명, 2등석(Pclass = 2) 승객이 93명, 1등석 (Pclass = 1) 승객이 107명으로 구성되어 있습니다.
Pclass
3 218
1 107
2 93
Name: count, dtype: int64
test 데이터프레임의 'Sex' 변수의 개수를 확인해 보겠습니다.
test['Sex'].value_counts()
남성이 (male) 266명, 여성이 (female) 152명으로 구성되어 있습니다.
Sex
male 266
female 152
Name: count, dtype: int64
test 데이터프레임의 'SibSp' 변수의 개수를 확인해 보겠습니다.
test['SibSp'].value_counts()
형제자매 및 배우자가 없는 승객(SibSp = 0)이 283명
형제자매 및 배우자가 1명인 승객(SibSp = 1)이 110명 등으로 구성되어 있습니다.
SibSp
0 283
1 110
2 14
3 4
4 4
8 2
5 1
Name: count, dtype: int64
test 데이터프레임의 'Parch' 변수의 개수를 확인해 보겠습니다.
test['Parch'].value_counts()
부모 및 자녀가 없는 승객(Parch = 0)이 324명
부모 및 자녀가 1명인 승객(Parch = 1)이 52명 등으로 구성되어 있습니다.
Parch
0 324
1 52
2 33
3 3
4 2
9 2
6 1
5 1
Name: count, dtype: int64
test 데이터프레임의 'Embarked' 변수의 개수를 확인해 보겠습니다.
test['Embarked'].value_counts()
항구번호 'S'에서 탑승한 승객이 270명, 'C'에서 탑승한 승객이 102명, 'Q'에서 탑승한 승객이 46명으로 구성되어 있습니다.
Embarked
S 270
C 102
Q 46
Name: count, dtype: int64