kaggle竞赛——泰坦尼克号获救

本文通过对Kaggle泰坦尼克号数据集的探索性数据分析,包括处理缺失值、转换非数值特征、特征工程等步骤,构建机器学习模型预测乘客生存情况。在特征选择和超参数调优后,模型性能得到提升,最终应用于未知数据集的预测。
摘要由CSDN通过智能技术生成

数据来源:Kaggle数据集 → 共有1309名乘客数据,其中891是已知存活情况(train.csv),剩下418则是需要进行分析预测的(test.csv)

字段意义:

PassengerId: 乘客编号

Survived :存活情况(存活:1 ; 死亡:0)

Pclass : 客舱等级

Name : 乘客姓名

Sex : 性别

Age : 年龄

SibSp : 同乘的兄弟姐妹/配偶数

Parch : 同乘的父母/小孩数

Ticket : 船票编号

Fare : 船票价格

Cabin :客舱号

Embarked : 登船港口

目的:通过已知获救数据,预测乘客生存情况

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
titanic_train = pd.read_csv("titanic_train.csv")
titanic_train.head(5)


PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
titanic_test = pd.read_csv("test.csv")
titanic_test.head(5)
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 892 3 Kelly, Mr. James male 34.5 0 0 330911 7.8292 NaN Q
1 893 3 Wilkes, Mrs. James (Ellen Needs) female 47.0 1 0 363272 7.0000 NaN S
2 894 2 Myles, Mr. Thomas Francis male 62.0 0 0 240276 9.6875 NaN Q
3 895 3 Wirz, Mr. Albert male 27.0 0 0 315154 8.6625 NaN S
4 896 3 Hirvonen, Mrs. Alexander (Helga E Lindqvist) female 22.0 1 1 3101298 12.2875 NaN S
探索性数据分析
print(titanic_train.describe())
print(titanic_train.info())
       PassengerId    Survived      Pclass         Age       SibSp  \
count   891.000000  891.000000  891.000000  714.000000  891.000000   
mean    446.000000    0.383838    2.308642   29.699118    0.523008   
std     257.353842    0.486592    0.836071   14.526497    1.102743   
min       1.000000    0.000000    1.000000    0.420000    0.000000   
25%     223.500000    0.000000    2.000000   20.125000    0.000000   
50%     446.000000    0.000000    3.000000   28.000000    0.000000   
75%     668.500000    1.000000    3.000000   38.000000    1.000000   
max     891.000000    1.000000    3.000000   80.000000    8.000000   

            Parch        Fare  
count  891.000000  891.000000  
mean     0.381594   32.204208  
std      0.806057   49.693429  
min      0.000000    0.000000  
25%      0.000000    7.910400  
50%      0.000000   14.454200  
75%      0.000000   31.000000  
max      6.000000  512.329200  
<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
None
print(titanic_test.describe())
print(titanic_test.info())
       PassengerId      Pclass         Age       SibSp       Parch        Fare
count   418.000000  418.000000  332.000000  418.000000  418.000000  417.000000
mean   1100.500000    2.265550   30.272590    0.447368    0.392344   35.627188
std     120.810458    0.841838   14.181209    0.896760    0.981429   55.907576
min     892.000000    1.000000    0.170000    0.000000    0.000000    0.000000
25%     996.250000    1.000000   21.000000    0.000000    0.000000    7.895800
50%    1100.500000    3.000000   27.000000    0.000000    0.000000   14.454200
75%    1204.750000    3.000000   39.000000    1.000000    0.000000   31.500000
max    1309.000000    3.000000   76.000000    8.000000    9.000000  512.329200
<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.0+ KB
None

train数据集:

  • Age只有714,而不是891,说明存在缺失值
  • cabin存在缺失值
  • embarked存在缺失值,889<891

test数据集:

  • age、cabin、fare缺失
#绘制单个属性分布图来进行探测

#coding:utf-8
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号



#存活人数
print(titanic_train['Survived'].value_counts())
bar_sur=titanic_train['Survived'].value_counts()
bar_sur.plot.bar(color='r')
plt.xlabel('存活类别(生/死)')
plt.ylabel('人数')
plt.show()

#客舱等级
print(titanic_train['Pclass'].value_counts())
bar_pclass=titanic_train['Pclass'].value_counts()
bar_pclass.plot.bar(color='y')
plt.xlabel('客舱等级')
plt.ylabel('人数')
plt.show()

#性别
print(titanic_train['Sex'].value_counts())
bar_sex=titanic_train['Sex'].value_counts()
bar_sex.plot.bar(color='b')
plt.xlabel('性别')
plt.ylabel('人数')
plt.show()

#同乘的兄弟姐妹/配偶数
print(titanic_train['SibSp'].value_counts())
bar_SibSp=titanic_train['SibSp'].value_counts()
bar_SibSp.plot.bar(color='black')
plt.xlabel('同乘的兄弟姐妹/配偶数')
plt.ylabel('人数')
plt.show()

#同乘的父母/小孩数
print(titanic_train['Parch'].value_counts())
bar_parch=titanic_train['Parch'].value_counts()
bar_parch.plot.bar(color='g')
plt.xlabel('同乘的父母/小孩数')
plt.ylabel('人数')
plt.show()

#登船港口
print(titanic_train['Embarked'].value_counts())
bar_Emb=titanic_train['Embarked'].value_counts()
bar_Emb.plot.bar(color='orange')
plt.xlabel('登船港口')
plt.ylabel('人数')
plt.show()
0    549
1    342
Name: Survived, dtype: int64

在这里插入图片描述

3    491
1    216
2    184
Name: Pclass, dtype: int64

在这里插入图片描述

male      577
female    314
Name: Sex, dtype: int64

在这里插入图片描述

0    608
1    209
2     28
4     18
3     16
8      7
5      5
Name: SibSp, dtype: int64

在这里插入图片描述

0    678
1    118
2     80
5      5
3      5
4      4
6      1
Name: Parch, dtype: int64

在这里插入图片描述

S    644
C    168
Q     77
Name: Embarked, dtype: int64

在这里插入图片描述

  • 预测存活类别分布较均衡
  • 客舱等级人数,等级3>1>2
  • 性别:男人比女人多
  • 同乘的兄弟姐妹/配偶数以及乘的父母/小孩数大多为0
  • 登船港口人数:S>C>Q
#绘制票价分布图
plt.hist(titanic_train['Fare'])
(array([732., 106.,  31.,   2.,  11.,   6.,   0.,   0.,   0.,   3.]),
 array([  0.     ,  51.23292, 102.46584, 153.69876, 204.93168, 256.1646 ,
        307.39752, 358.63044, 409.86336, 461.09628, 512.3292 ]),
 <BarContainer object of 10 artists>)

在这里插入图片描述

可以看出大部人买的便宜的票

#绘制年龄分布图
plt.hist(titanic_train['Age'],color='r')
(array([ 54.,  46., 177., 169., 118.,  70.,  45.,  24.,   9.,   2.]),
 array([ 0.42 ,  8.378, 16.336, 24.294, 32.252, 40.21 , 48.168, 56.126,
        64.084, 72.042, 80.   ]),
 <BarContainer object of 10 artists>)

在这里插入图片描述

大部分人在20-40年龄段

数据预处理

sex不是数字量,变成数值量,male为0,female为1

#对训练集处理
print(titanic_train['Sex'].unique())
titanic_train.loc[titanic_train['Sex']=='male','Sex']=0
titanic_train.loc[titanic_train['Sex']=="female",'Sex']=1
['male' 'female']
titanic_train.head()
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值