Kaggle竞赛,初级入门,泰坦尼克号
kaggle泰坦尼克号
一、训练数据探索
1、观察数据维度
import pandas as pd
import pandas_profiling
from autoviz.AutoViz_Class import AutoViz_Class
data=pd.read_csv('.\\train.csv')
维度:‘PassengerId’, ‘Survived’, ‘Pclass’, ‘Name’, ‘Sex’, ‘Age’, ‘SibSp’,
‘Parch’, ‘Ticket’, ‘Fare’, ‘Cabin’, ‘Embarked’
survived,即为y变量,0为死,1为生。
report=pandas_profiling.ProfileReport(data)
report.to_file(output_file=(".\\census_report.html"))
#自动生成一段数据分析视图
如图所示
还可以显示各个字段的情况例如这个PassengerId,乘客id,无重复值等等。
这个相关性还是很赞的,看出的,passengerId、age、sibsp与survived,相关性较低。parch有一些相关性,但不明显。
年龄有部分缺失值,船舱缺失较多。对于船舱的缺失有两种猜测:1、确实是缺失了。
2、只有一部分人能拥有单独的船舱号,也就是说这部分人在各自阶级比较高。
data[data['Cabin'].isna()].groupby(by=['Survived'])['Pclass'].count()data[~data['Cabin'].isna()].groupby(by=['Survived'])['Pclass'].count()
有船舱号的乘客生存比例确实远超无船舱号乘客的。
2、数据清洗
前面提到Cabin的存在与否影响到survive结果,因此有Cabin产生一个新的变量
import numpy as np
data['is_cabin']=data['Cabin'].apply(lambda x: 0 if x is np.nan else 1)
#删去Cabin
data=data.drop(columns=['Cabin'])
data=data.drop(columns='PassengerId','Ticket','Name'])
PassengerId、ticket,Name在我看来没有特别在意的地方,因此直接删除
age年龄有部分缺失值,需要补全,我选择的是插值法;
Embarked.直接用众数
data['Embarked'].dropna().mode()[0]
data['Embarked']=data['Embarked'].fillna('S')
data['Age']=data['Age'].interpolate()
data["new_age"] = pd.cut(data["Age"], 5,precision=0)
data.groupby(by=['new_age','Survived'])['Pclass'].count()
#切分,主要是16岁以下算是少年,因此切成五份
接下来是数据离散化,吧fare也切分为5份,字符型转化为int类型,。就可以开始预测了。