캐글(Kaggle)/프로젝트

Kaggle(캐글) - 타이타닉 생존자 예측 초보자 튜토리얼[Hellfer](2)

Hellfer 2024. 6. 28. 15:28
728x90

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

 

 

728x90