泰坦尼克号沉船乘客生还逻辑分析(决策树)-通过给定泰坦尼克号乘客数据信息,通过计算机模拟和数据分析找出并发现潜藏在数据背后的生还逻辑。

 

# 导入 pandas 模块,用于数据分析
import pandas as pd
# 利用 pandas 的 read_csv 函数直接从互联网汇收集泰坦尼克号乘客数据
titanic = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')

X= titanic[['pclass', 'age', 'sex']]
y = titanic['survived']

# 首先,我们补充 age 里的数据,使用平拘束或者中位数都是对模型偏离造成最小影响的策略。
X['age'].fillna(X['age'].mean(), inplace=True)
# 对补齐的数据重新探查

# 导入数据划分模块
from sklearn.model_selection import train_test_split
# 数据拆分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=33)

# 使用 scikit-learn.feature_extraction 中的特征转换器
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer(sparse=False)

# 转换特征后,我们发现凡是类别性的特征都单独剥离出来,独成一列特征,数值型的则保持不变。
X_train = vec.fit_transform(X_train.to_dict(orient='record'))
print('训练样本特征值数据集特征名称:',vec.feature_names_)
print('训练样本特征值数据集:\n', X_train)

# 同样需要对测试数据的特征进行转换
X_test = vec.transform(X_test.to_dict(orient='record'))
print('测试样本特征值数据集:\n', X_test)

from sklearn.tree import DecisionTreeClassifier

dtc = DecisionTreeClassifier()

# 模型训练
dtc.fit(X_train, y_train)

# 输出模型的性能成绩
print('决策树算法模型的性能评估成绩:{0}'.format(dtc.score(X_test, y_test)))

# 导入算法模型评估对象
from sklearn.metrics import classification_report
# 获取测试样本特征值数据的预测结果数据集
dtcPredict = dtc.predict(X_test)
# 使用算法模型自身的预测结果与原始的测试样本标签值数据集进行比对
print('决策树算法模型性能评估报表:\n{0}'.format(classification_report(dtcPredict, y_test , target_names = ['遇难','生还'])))

# 数据抽取
data = titanic[['pclass','age','sex','survived']]
# 数据缺失值处理
data['age'].fillna(data['age'].mean(), inplace=True)

# 数据转换
data = data.replace({'pclass':{'1st':1, '2nd':2, '3rd':3},'sex':{'male':0, 'female':1}})

# 数据筛选出 生还 乘客的数据
data_survived = data[data['survived'] == 1]
# 数据筛选出 死亡 乘客的数据
data_died = data[data['survived'] == 0]

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 设置plt对象的底层参数
# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus'] = False

ax = plt.figure().add_subplot(111, projection = '3d')
# 绘制生还者散点图
ax.scatter(data_survived['pclass'], data_survived['age'], data_survived['sex'], c = 'g', marker = 'o')
# 绘制遇难者散点图
ax.scatter(data_died['pclass'], data_died['age'], data_died['sex'], c = 'r', marker = 'o')

#设置坐标轴
ax.set_xlabel('船舱等级')
ax.set_ylabel('年龄')
ax.set_zlabel('性别')
plt.show()

猜你喜欢

转载自blog.csdn.net/huanghong6956/article/details/85781555