資料探勘研究與實務_鐵達尼號生存預測


作業故事背景
世紀之難-鐵達尼號
1912年4月10日,鐵達尼號展開了首航,也是唯一一次載客出航。
目的地是紐約,部分乘客是當時的富豪,和一些來自英國、愛爾蘭的及歐洲的移民,尋求在美國展開新生活發展機會。
https://www.kaggle.com/c/titanic/submissions
資料集介紹
預估乘客是否會在鐵達尼號沈船意外中生存下來


將資料集下載解壓存放至python程式檔相對目錄下



一開始先用pandas來做csv表格資料讀取進來做後續的parser





有些欄位資料為空有缺失無法直接拿來計算會出錯,因此要將空的值補齊
比方年齡為空的乘客age資料用其他有值的做加總平均回填

性別就原始資料給定的純文字內容無法做預測處裡,因此可轉為數字來取代表示,女性是1,男性是0。建立新的column叫Sex_Code再將資料回填,利於後續預測程式的訓練模型用途。


第一階段.前處理程式碼

1
2
3
4
5
6
7
8
# -*- coding: utf-8 -*-

import pandas as pd
df = pd.read_csv('./titanic/train.csv')
df['Age'] = df['Age'].fillna(df['Age'].mean())
df['SexCode'] = df['Sex'].map({'female' : 1 , 'male' : 0}).astype('int')
df['Sex'] = df['SexCode']
df



預測模型產生的3 steps
Step1.輸入特徵值及最終結果(類別、種類…)
在乎乘客是否存活,特徵值(艙等、年齡、性別….最終結果:是否有存活)

Step2.呼叫預測模型函式
採用決策樹

Step3.建立預測模型
用決策樹來fit特徵值及最終結果來訓練出模型,之後就能預測下一筆資料。

第二階段.程式碼

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# -*- coding: utf-8 -*-

import pandas as pd
df = pd.read_csv('./titanic/train.csv')
df['Age'] = df['Age'].fillna(df['Age'].mean())
df['SexCode'] = df['Sex'].map({'female' : 1 , 'male' : 0}).astype('int')
df['Sex'] = df['SexCode']
#df
from sklearn import tree
x = df[['Pclass','Sex','Age']]
y = df['Survived']
cla = tree.DecisionTreeClassifier() #創建決策樹
cla.fit(x,y) #開始training
jack_is_survived = cla.predict([[3,0,25.0]])
print("Jack:",jack_is_survived)
rose_is_survived = cla.predict([[1,1,20.0]])
print("Rose:",rose_is_survived)

x部分用於讀取特徵值
y部分用於讀取最終結果類別

Jack 偷渡客男生(0) 住最差的3等艙 大約25歲
Rose 有錢人女生(1)住一等艙 大約23歲




Jack 不幸罹難
Rose存活了


最終程式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# -*- coding: utf-8 -*-

import pandas as pd
df = pd.read_csv('./titanic/train.csv')
df['Age'] = df['Age'].fillna(df['Age'].mean())
df['SexCode'] = df['Sex'].map({'female' : 1 , 'male' : 0}).astype('int')
df['Sex'] = df['SexCode']
#df
from sklearn import tree
x = df[['Pclass','Sex','Age']]
y = df['Survived']
cla = tree.DecisionTreeClassifier() #創建決策樹
cla.fit(x,y) #開始training

#jack_is_survived = cla.predict([[3,0,25.0]])
#print("Jack:",jack_is_survived)
#rose_is_survived = cla.predict([[1,1,20.0]])
#print("Rose:",rose_is_survived)

# 讀取測試數據
test_df = pd.read_csv('./titanic/test.csv')
test_df['Age'] = test_df['Age'].fillna(test_df['Age'].mean())
test_df['SexCode'] = test_df['Sex'].map({'female' : 1 , 'male' : 0}).astype('int')
test_df['Sex'] = test_df['SexCode']
test_df

# 分割特徵
x_test = test_df[['Pclass', 'Sex', 'Age']]
# 使用模型進行預測
y_pred = cla.predict(x_test)


# 創建一個包含預測結果的DataFrame
submission_df = pd.DataFrame({'PassengerId': test_df['PassengerId'], 'Survived': y_pred})

# 保存預測結果到gender_submission.csv
submission_df.to_csv('./titanic/gender_submission.csv', index=False)


使用已經訓練好的模型進行預測,並將預測結果保存到gender_submission.csv中。然後,您可以將gender_submission.csv提交到Kaggle競賽進行評估。

https://www.kaggle.com/chousamuel


留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header