케글 데이터 소개
Spaceship Titanic
Spaceship Titanic | Kaggle
www.kaggle.com
"Spaceship Titanic" 데이터 셋은 2912년에 일어난 가상의 우주 사고를 기반으로 합니다. 이 데이터 셋은 거의 13,000명의 승객을 운송하던 우주선 'Spaceship Titanic'이 우주 먼지 구름 안에 숨겨진 시공간 이상 현상과 충돌한 사건을 다룹니다.
이 사건으로 인해 승객들의 절반 가량이 다른 차원으로 이동했으며, 구조팀을 도와 승객들을 찾기 위해 우주선의 손상된 컴퓨터 시스템에서 복구된 기록을 사용하여 어떤 승객들이 이상 현상에 의해 이동되었는지 예측해야 합니다.
파일 및 데이터 필드 설명
train.csv - 약 2/3 (~8700명)의 승객에 대한 개인 기록으로, 훈련 데이터로 사용
PassengerId - 각 승객에 대한 고유 ID. 각 ID는 gggg_pp 형태를 가지며, 여기서 gggg는 승객이 함께 여행하는 그룹을 나타냄. pp는 그룹 내에서의 번호이며, 그룹에 있는 사람들은 대부분 가족으로 구성
HomePlanet - 승객이 출발한 행성으로, 일반적으로 그들의 영구 거주 행성
CryoSleep - 승객이 여행 기간 동안 중단된 애니메이션 상태에 놓이기로 선택했는지 여부를 나타냄. CryoSleep 상태의 승객들은 객실에 제한
Cabin - 승객이 머무르는 객실 번호. deck/num/side 형태를 가지며, 여기서 side는 Port를 나타내는 P 또는 Starboard를 나타내는 S가 됨
Destination - 승객이 하차할 행성
Age - 승객의 나이
VIP - 승객이 여행 동안 특별한 VIP 서비스를 이용했는지 여부
RoomService, FoodCourt, ShoppingMall, Spa, VRDeck - 승객이 타이타닉 우주선의 다양한 고급 편의 시설에서 청구한 금액
Name - 승객의 이름
Transported - 승객이 다른 차원으로 이동했는지 여부. 이것이 목표로, 예측하려는 열
test.csv - 나머지 1/3 (~4300명)의 승객에 대한 개인 기록으로, 테스트 데이터로 사용되며 이 세트의 승객에 대해 Transported 값을 예측하는 것이 작업
sample_submission.csv - 올바른 형식의 제출 파일
PassengerId - 테스트 세트의 각 승객에 대한 ID
Transported - 목표로 각 데이터셋 설명
코드
# 라이브러리 불러오기
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import LabelEncoder
from sklearn.impute import SimpleImputer
# 데이터 미리보기
print(train_data.head())
print(test_data.head())
PassengerId HomePlanet CryoSleep Cabin Destination Age VIP \
0 0001_01 Europa False B/0/P TRAPPIST-1e 39.0 False
1 0002_01 Earth False F/0/S TRAPPIST-1e 24.0 False
2 0003_01 Europa False A/0/S TRAPPIST-1e 58.0 True
3 0003_02 Europa False A/0/S TRAPPIST-1e 33.0 False
4 0004_01 Earth False F/1/S TRAPPIST-1e 16.0 False
RoomService FoodCourt ShoppingMall Spa VRDeck Name \
0 0.0 0.0 0.0 0.0 0.0 Maham Ofracculy
1 109.0 9.0 25.0 549.0 44.0 Juanna Vines
2 43.0 3576.0 0.0 6715.0 49.0 Altark Susent
3 0.0 1283.0 371.0 3329.0 193.0 Solam Susent
4 303.0 70.0 151.0 565.0 2.0 Willy Santantines
Transported
0 False
1 True
2 False
3 False
4 True
PassengerId HomePlanet CryoSleep Cabin Destination Age VIP \
0 0013_01 Earth True G/3/S TRAPPIST-1e 27.0 False
1 0018_01 Earth False F/4/S TRAPPIST-1e 19.0 False
2 0019_01 Europa True C/0/S 55 Cancri e 31.0 False
3 0021_01 Europa False C/1/S TRAPPIST-1e 38.0 False
4 0023_01 Earth False F/5/S TRAPPIST-1e 20.0 False
RoomService FoodCourt ShoppingMall Spa VRDeck Name
0 0.0 0.0 0.0 0.0 0.0 Nelly Carsoning
1 0.0 9.0 0.0 2823.0 0.0 Lerome Peckers
2 0.0 0.0 0.0 0.0 0.0 Sabih Unhearfus
3 0.0 6652.0 0.0 181.0 585.0 Meratz Caltilter
4 10.0 0.0 635.0 0.0 0.0 Brence Harperez
# 결측치 확인
print(train_data.isnull().sum())
print(test_data.isnull().sum())
PassengerId 0
HomePlanet 201
CryoSleep 217
Cabin 199
Destination 182
Age 179
VIP 203
RoomService 181
FoodCourt 183
ShoppingMall 208
Spa 183
VRDeck 188
Name 200
Transported 0
dtype: int64
PassengerId 0
HomePlanet 87
CryoSleep 93
Cabin 100
Destination 92
Age 91
VIP 93
RoomService 82
FoodCourt 106
ShoppingMall 98
Spa 101
VRDeck 80
Name 94
dtype: int64
# 데이터 요약하기
train_data.describe()
# 데이터 정보 확인
print(train_data.info())
print(test_data.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8693 entries, 0 to 8692
Data columns (total 14 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 PassengerId 8693 non-null object
1 HomePlanet 8492 non-null object
2 CryoSleep 8476 non-null object
3 Cabin 8494 non-null object
4 Destination 8511 non-null object
5 Age 8514 non-null float64
6 VIP 8490 non-null object
7 RoomService 8512 non-null float64
8 FoodCourt 8510 non-null float64
9 ShoppingMall 8485 non-null float64
10 Spa 8510 non-null float64
11 VRDeck 8505 non-null float64
12 Name 8493 non-null object
13 Transported 8693 non-null bool
dtypes: bool(1), float64(6), object(7)
memory usage: 891.5+ KB
None
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4277 entries, 0 to 4276
Data columns (total 13 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 PassengerId 4277 non-null object
1 HomePlanet 4190 non-null object
2 CryoSleep 4184 non-null object
3 Cabin 4177 non-null object
4 Destination 4185 non-null object
5 Age 4186 non-null float64
6 VIP 4184 non-null object
7 RoomService 4195 non-null float64
8 FoodCourt 4171 non-null float64
9 ShoppingMall 4179 non-null float64
10 Spa 4176 non-null float64
11 VRDeck 4197 non-null float64
12 Name 4183 non-null object
dtypes: float64(6), object(7)
memory usage: 434.5+ KB
None
# 타겟 변수 분포 확인
sns.countplot(x='Transported', data=train_data)
plt.show()
# 수치형 변수 분포 확인
train_data.hist(figsize=(10, 10))
plt.tight_layout()
plt.show()
# 범주형 변수 분포 확인
categorical_features = ['HomePlanet', 'CryoSleep', 'Cabin', 'Destination', 'VIP']
for feature in categorical_features:
sns.countplot(x=feature, data=train_data)
plt.show()
# 훈련 데이터와 테스트 데이터 합치기
all_data = pd.concat([train_data, test_data], axis=0)
# 레이블 인코딩
le = LabelEncoder()
categorical_features = ['HomePlanet', 'CryoSleep', 'Cabin', 'Destination', 'VIP']
for feature in categorical_features:
all_data[feature] = le.fit_transform(all_data[feature].astype(str))
# 결측치 처리
imputer = SimpleImputer(strategy='most_frequent')
train_data_without_target = train_data.drop(['Transported'], axis=1)
imputer.fit(train_data_without_target)
train_data_imputed = pd.DataFrame(imputer.transform(train_data_without_target))
test_data_imputed = pd.DataFrame(imputer.transform(test_data))
train_data_imputed.columns = train_data_without_target.columns
test_data_imputed.columns = train_data_without_target.columns
train_data_imputed['Transported'] = train_data['Transported']
# 'PassengerId'와 'Name' 열 제거
train_data_imputed = train_data_imputed.drop(['PassengerId', 'Name'], axis=1)
test_data_imputed = test_data_imputed.drop(['PassengerId', 'Name'], axis=1)
# 범주형 변수를 수치형으로 변환
ohe = OneHotEncoder(handle_unknown='ignore')
train_data_without_target_encoded = ohe.fit_transform(train_data_imputed.drop(['Transported'], axis=1))
test_data_encoded = ohe.transform(test_data_imputed)
# 데이터 분할
X_train = train_data_without_target_encoded
y_train = train_data_imputed['Transported']
X_test = test_data_encoded
# 모델 학습
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
# 예측
predictions = rf.predict(X_test)
# 결과 출력
print(predictions)
[ True False True... True False False]
# 예측 결과를 DataFrame으로 변환
predictions_df = pd.DataFrame(predictions, columns=['Transported'])
# PassengerId 열 추가
predictions_df['PassengerId'] = test_data['PassengerId']
# 'PassengerId'를 첫 번째 열로 이동
cols = predictions_df.columns.tolist()
cols = cols[-1:] + cols[:-1]
predictions_df = predictions_df[cols]
# 예측 결과를 CSV 파일로 저장
predictions_df.to_csv('submission.csv', index=False)
Submission
'BOOTCAMP > 프로그래머스 인공지능 데브코스' 카테고리의 다른 글
[10주차] 신경망 기초 (0) | 2023.06.24 |
---|---|
[9주차] ML_basics - Linear Regression (0) | 2023.06.23 |
[8주차 - Day2] monthly project2 (0) | 2023.06.22 |
[7주차 - Day5] ML_basics - 실습 (0) | 2023.06.22 |
[7주차 - Day4] ML_basics - Probability Distributions (Part 2) (0) | 2023.06.22 |