大数据作业——泰坦尼克号数据分析

一、应用案例介绍

泰坦尼克号的沉没是历史上最臭名昭著的海难之一。

1912年4月15日,在她的处女航中,被广泛认为的“沉没” RMS泰坦尼克号与冰山相撞后沉没。不幸的是,船上没有足够的救生艇供所有人使用,导致2224名乘客和机组人员中的1502人死亡。

虽然幸存有一些运气,但似乎有些人比其他人更有可能生存。

针对其生存与遇难的人的数据,来分析“什么样的人更有可能生存?”

主要使用乘客数据(即姓名,年龄,性别,社会经济舱等)来进行分析。

主要使用的编程语言为python,软件为pycharm和jupyter

主要使用里面工具库为:pandas、numpy、matplotlib、sklearn

二、数据内容

数据来源

数据下载自kaggle挑战赛:泰坦尼克号:从灾难中学习机器公开数据

数据预览

该数据集共三个csv文件,其中一个训练集(train.csv)共891条数据,一个测试集(test.csv)共418条数据,一个测试集的结果数据(是否生还)。

这里我总体浏览了训练集的前几行数据

在这里插入图片描述

其中:

PassengerId: 乘客的id号,这个对生存率没影响。

Survived : 生存的标号,1表示生存,0表示遇难。

Pclass : 船舱等级。这个属性会对生产率有影响。

Name : 名字,这个应该不影响生存率,但有些姓氏可能是贵族的,也可能影响,这个之后再考虑。

Sex :性别,女士优先,这列数据是有用的

Age: 年龄,尊老爱幼,这个保留。

SibSp :兄弟姐妹,就是有些人和兄弟姐妹一起上船的。这个会有影响,因为有可能因为救他们而导致自己没有上救生船船。保留这列

Parch : 父母和小孩。就是有些人会带着父母小孩上船的。这个也可能因为要救父母小孩耽误上救生船。保留

Ticket : 票的编号。这个应该没有影响。

Fare : 费用。这个和Pclass有相同的道理,有钱人和权贵比较有势力和影响力。这列保留

Cabin :舱号。住的船舱的等级是有影响的,但舱号是没有影响的。

Embarked :上船的地方。这列可能有影响。因为登陆地点不同,可能显示人的地位之类的不一样。

生存比例

可以看到生存比例为38.38%
在这里插入图片描述

数据统计

这里info()函数展示了该训练数据一共12列,每一列的总数以及数据类型,其中年龄CabinEmbarked是有数据缺失的。
在这里插入图片描述
同样这是测试集的数据总体内容

在这里插入图片描述

上述数据分析

由显示数据可得,Cabin缺失值太多,所以基本没用,年龄Age缺失相对较少,多以可以对缺失值直接删除或者补充为均值。

这是train.csv里面数据的int和double类型的求和,求均值最值等数据的统计特征

在这里插入图片描述
同样这是测试集的统计特征
在这里插入图片描述
还可以查看离散变量的统计特征
在这里插入图片描述

三、数据分析

船舱等级与生存率的关系

船舱就三个等级,可以先分别看每一个等级的生存率,计算公式为: 生 存 人 数 / 总 人 数 生存人数/总人数 /

将船舱等级和获救情况单独拿出来,因为只有0和1,所以可以直接用mean()函数来作为其存活率,然后Survived从大到小排序

在这里插入图片描述

结论:船舱等级越高获救率越高

性别与生存率的关系

同样的代码可以查看性别与生存率的关系

在这里插入图片描述
结论:女性比男性生存率高

登陆港口与生存率的关系

在这里插入图片描述
结论:不同登陆港口的生存率是不同的,2和3号登陆港口生存率较大

有父母和小孩与生存率的关系

在这里插入图片描述
结论:有父母孩子的比没有父母或孩子的生存率要大

年龄与生存率的关系

在这里插入图片描述
结论,获救的普遍在40岁以下,遇难者多为20到40岁的青中年

数据清洗

训练集

综上数据分析,在train.csv中提取了对生存率相关性较大的某些特征:Pclass,Sex,Age,Fare,SibSp
在这里插入图片描述
删除空缺值后每个特征都有714条数据。
在这里插入图片描述

测试集

测试集分了两个csv文件,分别为test.csv和gender_submission.csv,因为test.csv中没有Survived这一列,我们要先给他加上,这样删去空缺值的时候两者就能同步删除该行了。

同样提取Pclass,Sex,Age,Fare,SibSp这几列特征作为测试集的特征值,y_test为Survived的值。
在这里插入图片描述

数据量

经过数据清洗后,训练集有714条数据,共五个特征,测试集有331条。
在这里插入图片描述

四、数据挖掘方法

决策树模型

在我之前写的博客:写给小白的机器学习之决策树算法详解(附实战源码)中,已经较为详细介绍了决策树以及随机森林的原理。这里主要写其代码实现。

# 使用单一决策树进行模型训练以及预测分析。
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report
dtc = DecisionTreeClassifier()
dtc.fit(X_train, y_train)
dtc_y_pred = dtc.predict(X_test)
# 输出单一决策树在测试集上的分类准确性,以及更加详细的精确率、召回率、F1指标。
print ('The accuracy of decision tree is', dtc.score(X_test, y_test))
print (classification_report(dtc_y_pred, y_test))

在这里插入图片描述
可见其准确率为0.773413897280966

随机森林模型

与决策树一样,通过sklearn库直接调用随机森林模型。通过微调设置树的个数为30,并用gini系数作为衡量标准进行预测。

# 使用随机森林分类器进行集成模型的训练以及预测分析。
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier(n_estimators=30,criterion='gini')
rfc.fit(X_train, y_train)
rfc_y_pred = rfc.predict(X_test)
# 输出随机森林分类器在测试集上的分类准确性,以及更加详细的精确率、召回率、F1指标。
print ('The accuracy of random forest classifier is', rfc.score(X_test, y_test))
print (classification_report(rfc_y_pred, y_test))

在这里插入图片描述
可见其准确率为0.8308157099697885

SVM模型

在我之前写的博客:支持向量机(随笔)中,已经较为详细介绍了SVM的原理。这里主要写其代码实现。

# 使用支持向量机分类器进行集成模型的训练以及预测分析。
from sklearn.preprocessing import PolynomialFeatures, StandardScaler
from sklearn.svm import LinearSVC
from sklearn.pipeline import Pipeline
import numpy as pd
# 设置随机数种子
# pd.random.seed(22)
rfc = LinearSVC()
rfc.fit(X_train, y_train)
svm_pred = rfc.predict(X_test)
# 输出支持向量机分类器在测试集上的分类准确性,以及更加详细的精确率、召回率、F1指标。
print (i,' The accuracy of random forest classifier is', rfc.score(X_test, y_test))
print (classification_report(svm_pred, y_test))

在这里插入图片描述
因为每次都是交叉验证得到的结果,验证的那部分样本是随机选取的,所以每次运行的结果都不相同,这里我们可以设置一个随机数种子来进行限制。

在这里插入图片描述

贝叶斯模型

在我之前写的博客:这就是贝叶斯—从数学基础到贝叶斯理论到实践中,已经较为详细介绍了SVM的原理。这里主要写其代码实现。

# 使用贝叶斯分类器进行集成模型的训练以及预测分析。
from sklearn.naive_bayes import GaussianNB
gaussianNB = GaussianNB()
scores = cross_val_score(gaussianNB,X_train,y_train,cv=5)
# 输出贝叶斯分类器在测试集上的分类准确性,以及更加详细的精确率、召回率、F1指标。
print (i,' The accuracy of random forest classifier is', rfc.score(X_test, y_test))
print (classification_report(svm_pred, y_test))

在这里插入图片描述
可见其准确率为0.918429003021148

五、案例评价

  1. 其内部某些特征应该是有某些关联的,如登陆地与船舱等级,性别与年龄等等,可以进一步用关联分析来进行分析。
  2. 下一步可以用小型神经网络进行分类。
  3. 对随机森林,SVM等算法可以进一步调参增高其准确度。
  4. 特征分析可以多作些图像进行多角度分析。
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页