1.项目说明
对泰坦尼克号乘客数据进行分析,挖掘获救乘客和遇难乘客的数据特点以及与其他因素的相关性
2.项目具体要求
1、整体来看,存活比例如何?
要求:
① 读取已知生存数据train.csv
② 查看已知存活数据中,存活比例如何?
2、结合性别和年龄数据,分析幸存下来的人是哪些人?
要求:
① 年龄数据的分布情况
② 男性和女性存活情况
③ 老人和小孩存活情况
3、结合 SibSp、Parch字段,研究亲人多少与存活的关系
要求:
① 有无兄弟姐妹/父母子女和存活与否的关系
② 亲戚多少与存活与否的关系
4、结合票的费用情况,研究票价和存活与否的关系
要求:
① 票价分布和存活与否的关系
② 比较研究生还者和未生还者的票价情况
5、利用KNN分类模型,对结果进行预测
要求:
① 模型训练字段:'Survived','Pclass','Sex','Age','Fare','Family_Size'
② 模型预测test.csv样本数据的生还情况
3.实现思路:
1.先计算整体的存活率,查看男女的存活率有什么差异,然后深入分析男性和女性的不同年龄段的存活人数和占比,
来分析性别和年龄和存活率有什么联系。通过分析不同等级舱和年龄存活率,来分析等级舱和年龄和存活率的关系。
单独分析不同年龄存活率的分布来查看老人和儿童存活率是怎么样。
2.基础数据中有乘客小孩即家庭成员的数据,因此可以使用饼图来直观展示有小孩和没有小孩乘客的存活率有何差异,
有家人的乘客和没有家人的乘客存活率有和差异。如果有明显差异,可以深入分析小孩和家庭成员的数量对存活率是否有联系。
3.分析票价和存活是否有关可以先分析所有乘客的票价分布情况,以及不同等级舱的票价分布情况,然后通过分析幸存者和
遇难者的票价的平均值即标准差来分析票价与存活率的联系。
4.通过已有的乘客的数据来预测乘客是否可以生还,这里可使用KNN分类模型来对已有数据进行机器学习,根据以上分析我们可以
与生还有关的一些数据,可以用这些数据进行学习,生成预测模型来对测试数据中的乘客的生还情况进行预测
4.实现过程:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import os
import time
sns.set_style('darkgrid' )
import warnings
warnings.filterwarnings('ignore' )
os.chdir(r'D:\IT\python数据分析师\项目15\项目15泰坦尼克号获救问题' )
train_data=pd.read_csv('train.csv' )
test_data=pd.read_csv('test.csv' )
sns.set()
sns.set_style("ticks" )
plt.axis('equal' )
train_data['Survived' ].value_counts().plot.pie(autopct = '%.2f%%' )
print('存活比例为38.38%' )
'''
2、结合性别和年龄数据,分析幸存下来的人是哪些人?
要求:
① 年龄数据的分布情况
② 男性和女性存活情况
③ 老人和小孩存活情况
'''
age_data = train_data[['Survived' ,'Age' ,'Sex' ]].dropna()
plt.figure(figsize=(12 ,5 ))
plt.subplot(121 )
age_data['Age' ].hist(bins=70 ,color = 'gray' ,edgecolor = 'white' )
plt.xlim([0 ,90 ])
plt.xlabel('Age' )
plt.ylabel('Num' )
plt.subplot(122 )
age_data.boxplot(column='Age' ,showfliers=False )
plt.savefig('age_hist_box.png' )
age_data['Age' ].describe()
print('总体年龄分布: 去掉缺失值后样本有714,平均年龄约为30岁,标准差14岁,最小年龄0.42,最大年龄80.' )
sex_count = train_data[['Survived' ,'Sex' ]]
sex_sur = sex_count.groupby('Sex' ).mean().reset_index()
sex_sur.plot(kind = 'bar' ,x = 'Sex' ,y = 'Survived' ,color = 'blue' ,alpha = 0.7 ,label = 'Survived' ,figsize = (8 ,6 ))
plt.grid(linestyle = '--' )
plt.savefig('sex_survived.png' )
print(sex_sur)
pr