采用PYTHON进行泰坦尼克号生存者预测

采用PYTHON进行泰坦尼克号生存者预测
参考资料:

来自kaggle中的笔记

问题说明

采用PYTHON进行泰坦尼克号生存者预测。了解特征预处理,算法等流程

代码及说明

准备工作

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
pd.set_option('display.max_columns', None)  # Show all columns
pd.set_option('display.width', 1000)
# Ignore all DeprecationWarnings
warnings.filterwarnings("ignore", category=DeprecationWarning)
from scipy.stats import chi2_contingency

train_df=pd.read_csv('D:\下载文件\\Titanic data\\Titanic data\\train.csv')
test_df=pd.read_csv("D:\下载文件\\Titanic data\\Titanic data\\test.csv")

数据预处理

对数据有一个基本的认识

print('Train Dataset Shape',train_df.shape)
print('------------------------------------')
print('Test Dataset Shape',test_df.shape)

结果:
在这里插入图片描述
可见Train.csv文件有891行数据,共12列,Test.csv文件有418行数据,共11列.
将两个表数据合并,并再添一列表示数据来自哪个表

train_df['dataset_type']='train'
test_df['dataset_type']='test'
df=pd.concat([train_df,test_df])
df.head()

print('Combine Dataset Shape',df.shape)
df['dataset_type'].value_counts()

输出
在这里插入图片描述
检查重复数据

df.duplicated().sum()

测试为0
再检查缺失数据

df.info()
plt.figure(figsize=(10,5))
records=df.isnull().mean()*100
plt.xlabel('Features')
plt.ylabel('Percentage Of Missing Values')
plt.title('Missing Value Plot')
ax = records.plot(kind='bar')

for i, value in enumerate(records):
    plt.text(i, value + 0.5, f'{
     value:.2f}%', ha='center', va='bottom')

plt.show()

结果:
在这里插入图片描述

在这里插入图片描述
根据空值分析,我们观察到 Cabin 特征大约有 77% 的缺失值。由于缺失数据的比例很高,通过插补技术解决这个问题是不切实际的,另外,舱在哪个位置对于是否获救的影响也比较小。因此,我们建议从数据集中删除 Cabin 列,以保证数据质量。
同时,票证特征具有最大的特征值,其对生存预测的概率或影响最小,因此我们从数据集中删除票证列

df.drop(['Cabin', 'Ticket'], axis=1, inplace=True)
df.head()
df.info()
df.describe(include='all')

结果
在这里插入图片描述
删除后由原来的13列变成了11列
剩下的还有Age,Fare,Embarked列有缺失,我们通过对数据的分析进行缺失值的预测
首先是Age和Fare

plt.figure(figsize=(10,5))

plt.subplot(2,2,1)
df['Age'].plot(kind='box')
plt.subplot(2,2,2)
df['Age'].plot(kind='hist')


plt.subplot(2,2,3)
df['Fare'].plot(kind='box')
plt.subplot(2,2,4)
df['Fare'].plot(kind='kde')



plt.tight_layout()

plt.show()

结果如下
在这里插入图片描述
箱线图(box):
在这里插入图片描述
再结合直方图和密度图发现Fare有明显的右偏,于是为了克服偏斜效应,我们将它们转换为分箱数据。

df[['Age','Fare']].skew()

df['Embarked'].value_counts()

print('Avg Fare',df[df['Fare']>100]['Fare'].median())
print('Avg Age',df['Age'].median())

结果
在这里插入图片描述
在这里插入图片描述
发现Embarked(登船位置)最多的是S
然后进行缺失值或空值填补

df['Age']=df['Age'].fillna(df['Age'].median())

df['Fare']=df['Fare'].fillna(df[df['Fare']>100]['Fare'].median())

df['Embarked']=df['Embarked'].fillna('S'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Z_with_z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值