一、读入titanic.xlsx文件,按照教材示例步骤,完成数据清洗。
titanic数据集包含11个特征,分别是:
Survived:0代表死亡,1代表存活
Pclass:乘客所持票类,有三种值(1,2,3)
Name:乘客姓名
Sex:乘客性别
Age:乘客年龄(有缺失)
SibSp:乘客兄弟姐妹/配偶的个数(整数值)
Parch:乘客父母/孩子的个数(整数值)
Ticket:票号(字符串)
Fare:乘客所持票的价格(浮点数,0-500不等)
Cabin:乘客所在船舱(有缺失)
Embark:乘客登船港口:S、C、Q(有缺失)
1.读入titanic.xlsx文件,显示文件前5行数据
import pandas as pd titanic = pd.DataFrame(pd.read_excel('titanic.xlsx')) titanic.head()
结果如下:
2.删除无效列与行(embark_town)
titanic.drop('embark_town',axis = 1,inplace = True) titanic.head()
结果如下:
3.重复值处理
用duplicated函数用于查找并显示数据表中的重复值:
titanic.duplicated()
结果如下图,一共891行数据,可以看出索引为886的行是一个重复值行。
通过drop_duplicates函数删除重复值
titanic = titanic.drop_duplicates()
titanic.duplicated()
结果如下图,删除重复值行后,数据只剩784行。
4.空值与缺失值处理
首先使用函数isnull()统计“age”这个字段的空值情况,该函数可以根据字段判断是否为空值;然后使用value_counts()统计空值个数。
titanic['age'].isnull().value_counts()
结果如下图,True为空值,所以这个字段一共有106行空值。
使用fillna方法填充‘age’字段的空值,填充数据为‘age’字段的平均值。
titanic['age'] = titanic['age'].fillna(titanic['age'].mean()) titanic['age'].isnull().value_counts()
结果如下图,可以看出‘age’字段的空值已经没有了,说明空值已经被填充。
5.空格处理
DataFrame中的map函数与str.strip函数结合能够很好地清除数据中的 空格,通常有下面三种方式:
titanic['fare'] = titanic['fare'].map(str.strip)#删除数据两边空格 titanic['fare'] = titanic['fare'].map(str.lstrip)#删除数据左边空格 titanic['fare'] = titanic['fare'].map(str.rstrip)#删除数据右边空格
6.异常值处理
使用describe()查看每列的统计数据
titanic.describe()
结果如下,mean代表平均值,std代表标准差
假设“fare”字段的最大值512.329200为异常值,可以调用replace方法,将异常值替换为平均值。
titanic = titanic.replace([512.329200],titanic['fare'].mean()) titanic.describe()
结果如下,可以看到‘fare’字段的最大值变成了263.000000。
二、对titanic数据集完成以下统计操作
1.统计乘客死亡和存活人数
titanic['survived'].value_counts()
结果如下:
2.统计乘客中男女性别人数
titanic['sex'].value_counts()
结果如下:
3.统计男女获救的人数
pd.crosstab(titanic['survived'],titanic['sex'])
结果如下:
4.统计乘客所在的船舱等级的人数
titanic['pclass'].value_counts()
结果如下:
5.使用corr()函数,判断两个属性是否具有相关性,分析舱位的高低和存活率的关系
titanic.survived.corr(titanic.pclass)
结果如下:
舱位与存活率的关系
import numpy as np titanic.pivot_table(values = 'survived',index = 'pclass',aggfunc = np.mean)
结果如下:
说明船舱等级与存活率呈负相关,船舱等级越高,存活率越低。
6.画出乘客票价与舱位等级的箱体图Boxplot,从图中能够得到哪些结论?
import seaborn as sns sns.boxplot(x = 'pclass',y = 'fare',data = titanic)
结果如下:
上图是船舱各等级的票价分布图,从图中可以看出,船舱等级1的票价平均值>船舱等级2的票价平均值>船舱等级3的票价平均值,说明票价与乘客的存活率相关。