当前位置: 移动技术网 > IT编程>脚本编程>Python > 泰坦尼克数据集+seaborn画图+逻辑回归

泰坦尼克数据集+seaborn画图+逻辑回归

2020年07月16日  | 移动技术网IT编程  | 我要评论

训练集https://download.csdn.net/download/qq_42363032/12615443
测试集https://download.csdn.net/download/qq_42363032/12615448

'''
Seaborn是一个用Python制作统计图形的库。它构建在matplotlib之上,并与pandas数据结构紧密集成。 以下是seaborn提供的一些功能:

一个面向数据集的API,用于检查多个变量之间的关系
专门支持使用分类变量来显示观察结果或汇总统计数据
用于可视化单变量或双变量分布以及在数据子集之间比较它们的选项
各种因变量线性回归模型的自动估计与绘图
方便查看复杂数据集的总体结构
用于构造多图网格的高级封装,可以轻松地构建复杂的数据图表
使用几个内置主题对matplotlib图形样式进行简洁控制
用于选择能够真实显示数据中模式的调色板的工具
Seaborn的目标是使可视化成为探索和理解数据的核心部分。它面向数据集的绘图功能对包含整个数据集的数据流和数组进行操作,并在内部执行必要的语义映射和统计聚合以生成信息图。
'''
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 读取训练集和测试集
train = pd.read_csv('titanic_train.csv')
test = pd.read_csv('titanic_test.csv')

# PassengerId, Survived, Pclass, Name, Sex, Age, SibSp, Parch, Ticket, Fare, Cabin, Embarked

seaborn创建一个简单的热图来查看我们缺失数据的位置-----对测试集的缺失值查看。

# seaborn创建一个简单的热图来查看我们缺失数据的位置-----对测试集的缺失值查看。
sns.heatmap(test.isnull(), yticklabels=False, cbar=False, cmap='viridis', )  # yticklabels=False 不显示纵轴   cmap 颜色组
plt.title('缺失值查看')
plt.show()

在这里插入图片描述

Survived幸存下来0,1----对训练集的幸存下来画图分析

# Survived幸存下来0,1----对训练集的幸存下来画图分析
sns.set_style('whitegrid')
sns.countplot(x='Survived', data=train, palette='RdBu_r')
plt.show()

在这里插入图片描述

Survived幸存下来0,1----对训练集的幸存下来男女画图分析

# Survived幸存下来0,1----对训练集的幸存下来男女画图分析
sns.set_style('whitegrid')
sns.countplot(x='Survived', hue='Sex', data=train, palette='RdBu_r')
plt.show()

在这里插入图片描述

按乘客级别检查平均年龄画图展示1,2,3个级别

# 按乘客级别检查平均年龄画图展示1,2,3个级别
plt.figure(figsize=(12, 7))
sns.boxplot(x='Pclass', y='Age', data=train, palette='winter')
plt.show()

在这里插入图片描述

将性别转化成0,1数字格式 get_dummies相当于LabelEncoder+one-hot Encoder的基本思想

# 将性别转化成0,1数字格式     get_dummies相当于LabelEncoder+one-hot Encoder的基本思想
sex = pd.get_dummies(train['Sex'], drop_first=True)  # drop_first去掉第一个分类
# 将Embarked转化成0,1代表S,,,00代表C,,10代表Q
embark = pd.get_dummies(train['Embarked'], drop_first=True)

完整代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False


# 读取训练集和测试集
train = pd.read_csv('titanic_train.csv')
test = pd.read_csv('titanic_test.csv')

# PassengerId, Survived, Pclass, Name, Sex, Age, SibSp, Parch, Ticket, Fare, Cabin, Embarked
# seaborn创建一个简单的热图来查看我们缺失数据的位置-----对测试集的缺失值查看。
sns.heatmap(test.isnull(), yticklabels=False, cbar=False, cmap='viridis', )  # yticklabels=False 不显示纵轴
plt.title('缺失值查看')
plt.show()

# Survived幸存下来0,1----对训练集的幸存下来画图分析
sns.set_style('whitegrid')
sns.countplot(x='Survived', data=train, palette='RdBu_r')
plt.show()

# Survived幸存下来0,1----对训练集的幸存下来男女画图分析
sns.set_style('whitegrid')
sns.countplot(x='Survived', hue='Sex', data=train, palette='RdBu_r')
plt.show()

# 按乘客级别检查平均年龄画图展示1,2,3个级别
plt.figure(figsize=(12, 7))
sns.boxplot(x='Pclass', y='Age', data=train, palette='winter')
plt.show()


# 较高的阶层年龄较大,所以判断级别返回不同年龄
def impute_age(cols):
    Age = cols[0]
    Pclass = cols[1]

    if pd.isnull(Age):
        if Pclass == 1:
            return 37  # 填充平均值,按照乘客的等级
        elif Pclass == 2:
            return 29
        else:
            return 24
    else:
        return Age


# 按级别对缺失值年龄进行填充--测试训练都进行填充
train['Age'] = train[['Age', 'Pclass']].apply(impute_age, axis=1)
test['Age'] = test[['Age', 'Pclass']].apply(impute_age, axis=1)
# seaborn创建一个简单的热图来查看我们缺失数据的位置---对训练集
sns.heatmap(train.isnull(), yticklabels=False, cbar=False, cmap='viridis')
plt.show()

print(train.columns)
# 我们放弃Cabn列和Embarked行中的NaN
train.drop('Cabin', axis=1, inplace=True)  # del train['Cabin']
test.drop('Cabin', axis=1, inplace=True)
train.dropna(inplace=True)
# print(train.head())
# 填充完成后根据热成像图像反应以及没有缺失值
sns.heatmap(train.isnull(), yticklabels=False, cbar=False, cmap='viridis')
plt.show()
print(train.columns)

# 查看信息
print(train.info())

# 将性别转化成0,1数字格式     get_dummies相当于LabelEncoder+one-hot Encoder的基本思想
sex = pd.get_dummies(train['Sex'], drop_first=True)  # drop_first去掉第一个分类
# 将Embarked转化成0,1代表S,,,00代表C,,10代表Q
embark = pd.get_dummies(train['Embarked'], drop_first=True)
# 删除'Sex','Embarked','Name','Ticket'
train.drop(['Sex', 'Embarked', 'Name', 'Ticket'], axis=1, inplace=True)
train = pd.concat([train, sex, embark], axis=1)  # 合并特征
print(train.head())

# 训练集一开始特征
# PassengerId  Survived  Pclass Name Sex Age  SibSpParch Ticket Fare Embarked
# 训练集删除后剩的特征
# PassengerId  Survived  Pclass   Age  SibSp  Parch     Fare  male  Q  S
# 测试集特征
# PassengerId  Survived Pclass Name Sex Age  SibSp Parch Ticket Fare Embarked

# 训练测试拆分
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(train.drop('Survived', axis=1), train['Survived'], test_size=0.30,
                                                    random_state=101)
# 训练和预测
from sklearn.linear_model import LogisticRegression

logmodel = LogisticRegression()
logmodel.fit(X_train, y_train)
predictions = logmodel.predict(X_test)
# 我们可以使用分类报告检查精确度,召回率,f1分数!
from sklearn import metrics

print(metrics.classification_report(y_test, predictions))
print("Accuracy:", metrics.accuracy_score(y_test, predictions))
# 混淆矩阵、ROC曲线、AUC面积

本文地址:https://blog.csdn.net/qq_42363032/article/details/107346527

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网