타이타닉 생존률 예측하기 (머신러닝)
데이터는 kaggle에 있는 자료를 사용했다 (https://www.kaggle.com/competitions/titanic).
Titanic - Machine Learning from Disaster | Kaggle
www.kaggle.com
데이터 별 의미:
변수 | 의미 | Key |
survival | 생존여부 | 0 = No, 1 = Yes |
pclass | 티켓 등급 | 1 = 1st, 2 = 2nd, 3 = 3rd |
sex | 성별 | |
Age | 승객 나이 | |
sibsp | 타이타닉호에 탄 형제와 배우자의 수 | |
parch | 타이타닉호에 탄 부모나 자녀의 수 | 만약에 친척이랑 왔으면 = 0 |
ticket | 티켓 번호 | |
fare | 승객 비용 | |
cabin | 선실 번호 | |
embarked | 승선한 항구 | C = Cherbourg, Q = Queenstown, S = Southampton |
Data 불러오기:
import numpy as np
import pandas as pd
import os
# 데이터 읽기
train_data = pd.read_csv("data/train.csv")
test_data = pd.read_csv("data/test.csv")
# 데이터 head 출력해보기(앞에 있는 5열만 출력)
train_data.head()
test_data.head()
- 성별에 따른 생존률
# 여성 생존률
women = train_data.loc[train_data.Sex == 'female']['Survived']
rate_women = sum(women)/len(women)
print("percentage of women who survived: ", rate_women)
percentage of women who survived: 0.7420382165605095
# 남성 생존률
men = train_data.loc[train_data.Sex == 'male']['Survived']
rate_men = sum(men)/len(men)
print("percentage of men who survived: ", rate_men)
percentage of men who survived: 0.18890814558058924
--------------------------------------------------------------------------------------------------------------------------------------
분석
# data analysis and wrangling
import pandas as pd
import numpy as np
import random as rnd
# visualization
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
# machine learning
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC, LinearSVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.linear_model import Perceptron
from sklearn.linear_model import SGDClassifier
from sklearn.tree import DecisionTreeClassifier
train_df = pd.read_csv('data/train.csv')
test_df = pd.read_csv('data/test.csv')
combine = [train_df, test_df]
train_df.info()
print('_'*40)
test_df.info()
- Null 데이터 및 empty values
: traing데이터 셋에서는 Cabin > Age > Embarked 순으로 null 데이터를 가지고 있었고, test 데이터셋에서는 Cabin > Age 순으로 완성되지 않은 데이터를 가지고 있었다.
- 데이터 타입 확인:
- 7개의 숫자형 데이터(int, float), 그 중 6개는 test dataset에 있었다.
- 5개의 문자형 데이터(string). 여기서는 object로 표시된다
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 PassengerId 891 non-null int64
1 Survived 891 non-null int64
2 Pclass 891 non-null int64
3 Name 891 non-null object
4 Sex 891 non-null object
5 Age 714 non-null float64
6 SibSp 891 non-null int64
7 Parch 891 non-null int64
8 Ticket 891 non-null object
9 Fare 891 non-null float64
10 Cabin 204 non-null object
11 Embarked 889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB
________________________________________
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 418 entries, 0 to 417
Data columns (total 11 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 PassengerId 418 non-null int64
1 Pclass 418 non-null int64
2 Name 418 non-null object
3 Sex 418 non-null object
4 Age 332 non-null float64
5 SibSp 418 non-null int64
6 Parch 418 non-null int64
7 Ticket 418 non-null object
8 Fare 417 non-null float64
9 Cabin 91 non-null object
10 Embarked 418 non-null object
dtypes: float64(2), int64(4), object(5)
memory usage: 36.1+ KB
- 데이터 분석:
- 전체 샘플은 891개로, 타이타닉호에 탑승한 실제 탑승객의 수(2,224명)의 40%이다.
- 'Survived’는 0 또는 1 값을 가진다.
- 약 38%의 샘플이 생존했는데, 이 중 실제 생존률은 32%입니다.
- 대부분의 승객들(> 75%)은 부모나 자녀와 함께 여행하지 않았습니다.
- 승객들 중 거의 30%가 형제자매와/또는 배우자와 함께 탑승했습니다.
- 요금은 상당히 다양했으며, 소수의 승객들(상위 1%)이 최대 $512까지 지불했습니다.
- 65-80세 범위의 노인 승객은 거의 없었습니다(1% 미만).
reference code:
1) https://www.kaggle.com/code/startupsci/titanic-data-science-solutions
2) https://www.kaggle.com/code/alexisbcook/titanic-tutorial
tip. 주피터 노트북 단축키
- Command Mode (코드 입력칸 밖)
: 단축키를 실행하기 전에 셀 선택 상태에서 단축키를 눌러야한다. (셀 선택 단축키 = [ESC] or [Ctrl]+[m])
단축키 | 설명 |
[a] | 위에 새로운 셀 추가 |
[b] | 아래에 새로운 셀 추가 |
[c] | 셀 복사 |
[v] | 셀 붙여넣기 |
[x] | 셀 잘라내기 |
[dd] | 셀 삭제 |
[p] | 셀 아래에 붙여넣기 |
[o] | 실행결과 열기/닫기 |
[m] | Markdown으로 변경 |
[y] | Code로 변경 |
[Shift] + [m] | 선택 셀과 아래 셀과 합치기 |
[Ctrl] + [s] | 파일 저장 |
[Enter] | 선택 셀의 코드 입력 모드로 돌아가기 |
- Edit Mode(코드 입력칸 안)
: 단축키를 실행하기전에 코드 입력칸 안에 있어야 한다. 코드 입력 모드로 바꾸는 단축키 = [Enter]
단축키 | 설명 |
Ctrl + Enter | 입력 셀 실행 |
Shift + Enter | 입력 셀 실행 후 아래 셀로 이동 (없으면 새로운 셀 추가) |
Alt + Enter | 입력영역 실행 후 아래 새로운 영역 추가 |
Ctrl + a | 선택 셀의 코드 전체 선택 |
Ctrl + z | 선택 셀 내 실행 취소 |
Ctrl + y | 선택 셀 내 다시 실행 |
Ctrl + / | 커서 위치 라인 주석처리 |
Shitf + Ctrl + - | 커서 위치에서 셀 둘로 나누기 |
출처: https://planharry.tistory.com/22 [planharry:티스토리]
'AIoT' 카테고리의 다른 글
AIoT 정규 52일차 (0) | 2024.03.25 |
---|---|
AIoT 정규 51일차 (0) | 2024.03.21 |
AIoT 정규 49일차 (0) | 2024.03.13 |
AIoT 정규 48일차 (0) | 2024.03.12 |
AIoT 정규 47일차 (0) | 2024.03.12 |