影响乘客生还的因素很多,这里只对乘客的性别、年龄、乘客等级这三个因素感兴趣,看看这三个因素是否会影响乘客的生还率。
- 性别是否会影响生还率
- 年龄是否会影响生还率
- 乘客等级会否会影响乘客率
- 性别和等级共同对生还率的影响
- 年纪和性别共同对生还率的影响
- 年纪和等级共同对生还率的影响
这里:乘客的性别、年龄、等级是三个自变量,生还率是因变量
1、导入数据
import pandas as pd
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = [u'SimHei'] # SimHei就是中文字体
# 因为设置了中文后,负号就乱码了,所以还要设置负号的编码
plt.rcParams['axes.unicode_minus'] = False # 修改坐标轴中符号的编码
df = pd.read_csv('train.csv')
2、查看基本信息
df.info()
可以看到,一共有 891 条数据,其中 Age 、 Carbin、Embarked 字段有缺失值或为NaN
熟悉数据
PassengerId:乘客ID Survived:是否获救,用1和Rescued表示获救,用0或者not saved表示没有获救 Pclass:乘客等级,“1”表示Upper,“2”表示Middle,“3”表示Lower Name:乘客姓名 Sex:性别 Age:年龄 SibSp:乘客在船上的配偶数量或兄弟姐妹数量) Parch:乘客在船上的父母或子女数量 Ticket:船票信息 Fare:票价 Cabin:是否住在独立的房间,“1”表示是,“0”为否 embarked:表示乘客上船的码头距离泰坦尼克出发码头的距离,数值越大表示距离越远
查看前5条数据
df.head()
查看数据的摘要信息
df.describe()
从数据摘要中可以看出。乘客的生还率大约在38%,超过50%的乘客在3等级,乘客的平均年龄在30岁左右,普遍比较年轻。
3、数据清洗和处理缺失值
因为这里只研究年龄、性别、等级对乘客生还率的影响,所以只对年龄的缺失值进行处理。处理Age的缺失值2种方案
- 删除缺失行dropna
- 填充 fillna() ,填充中位数或平均数
因为Age是连续的,所以可以使用其平均数来填充缺失值
age_mean = df['Age'].mean()
# 重新赋值给 Age字段,修改源数据
df['Age'] = df['Age'].fillna(age_mean)
再次查看数据信息可以发现Age已经被填充
处理性别数据原数据中性别数据值是字符串类型,不便于计算和绘图,需要换成数值,用1代表男性,用0代表女性,将性别数值化。
使用apply函数
def sex_value(Sex):
if Sex=='male':
return 1
else:
return 0
df['Sex'] .apply(sex_value)
使用map函数
df['Sex'] = df['Sex'].map({'male':1,'female':0})
df.head()
4、
获取生还乘客的DataFrame,即 Survived 为1
survives_passenger_df = df[df['Survived']==1]
survives_passenger_df.head()
计算生还者中男性和女性的人数
# 按性别分组,再统计其数量
survives_passenger_df.groupby('Sex', as_index=False)['Sex'].count()
获取到具体数值,并绘制饼状图
male = survives_passenger_df.groupby('Sex', as_index=False)['Sex'].count().iloc[1][0]
female = survives_passenger_df.groupby('Sex', as_index=False)['Sex'].count().iloc[0][0]
plt.pie([male, female], labels=['男','女'], autopct='%1.1f%%')
plt.show()
可以直观看到,生还者中,女性人数是男性人数的两倍还多。但是还不能说明性别是否会影响生还率。需要看占比情况
分别获取乘客中男性、女性人数
male_count = df[df['Sex']==1]['Sex'].count()
female_count = df[df['Sex']==0]['Sex'].count()
分别计算男、女性生还者占总人数的比值
a = male/male_count*100
b = female/female_count*100
使用表格形式呈现
survives_df = pd.DataFrame({'生还人数':[male,female], '总人数':[male_count,female_count], '生还率':['%.3f%%'%a,'%.3f%%'%b]},index=['男','女'])
survives_df
这样,就可以发现,女性生还率远远高于男性生还率,说明性别会影响生还率。
标签:数据分析,count,生还,--,乘客,Sex,df,泰坦尼克,性别 From: https://blog.51cto.com/u_16200991/6842579