Introducción a la predicción de la tasa de supervivencia de Kaggle-Titanic (proceso completo)

1. Ver los datos faltantes a través del mapa de calor

sns.heatmap(train.isnull(), yticklabels=False, cbar=False, cmap='viridis')

consejo: para algunos conjuntos de datos, es posible que no haya valores perdidos explícitos, pero los valores perdidos se reemplazan con caracteres especiales. En este caso, primero puede reemplazar los caracteres especiales con np.nan y luego usar isnull () función.

2. Ver las propiedades de variables discretas y continuas

# 统计离散变量的属性:离散变量为字符串,属性为'object'
train.describe(include=['O'])
# 统计连续变量的属性
train.describe()

3. Gráfica de recuento para ver la proporción de supervivientes y no supervivientes

# 设置白色网格为主题
# 使用countplot 对'存活'的一个标签进行计数绘图,使用x表示横轴上的图,y表示纵轴 上的图
sns.set_style('whitegrid')
sns.countplot(x='Survived',data=train)

4. Recuento y vista grupal de la relación entre las personas sobrevivientes y el género

# 设置白色网格为主题
# 使用countplot 对'存活'和'性别'两个标签进行计数绘图
sns.set_style('whitegrid')
sns.countplot(x='Survived',hue='Sex',data=train)

train[['Sex', 'Survived']].groupby(['Sex'], as_index=False).mean().sort_values(by='Survived', ascending=False)

5. Representar y ver en grupo la relación entre las personas supervivientes y el nivel de la cabina

sns.set_style('whitegrid')
sns.countplot(x='Survived', hue='Pclass', data=train)

train[['Pclass', 'Survived']].groupby(['Pclass'], as_index=False).mean().sort_values(by='Survived', ascending=False)

6. distplot para ver la distribución de la edad

# 根据开始的空值判断中,可以得出age中有空值,所以需要进行drop

# 通过displot绘制直方图的观测值的单变量分布:纵坐标表示的是比率
# kde为高斯核函数,bins为直方图的宽
sns.distplot(train['Age'].dropna(), kde=False, bins=30)

7. Cuente y vea en grupo la relación familiar de los pasajeros del barco y la relación con la supervivencia.

sns.countplot(x='SibSp', data=train)

train[['SibSp', 'Survived']].groupby(['SibSp'], as_index=False).mean().sort_values(by='Survived', ascending=False)

8. hist ver distribución de tarifas de pasajeros

# 当然这里也可以用seaborn的displot进行绘制,但是displot的纵坐标是比率,hist的纵坐标是实际个数count;
# figsize调整画布大小
train['Fare'].hist(color='green', bins=30, figsize=(8,4))

En contraste, la diferencia entre la distribución de histograma de hist y distplot
usando la distribución de histograma, la ordenada es el valor de conteo,
usando la distribución de histograma de displot, la ordenada es la radio de relación;

9. Cuadro de cuadro para ver la distribución por edad y clase de cabina

Los diagramas de caja se pueden utilizar no solo para encontrar valores atípicos, sino también para ilustrar la distribución de muestras :

  1. Si la caja es relativamente plana, significa que la distribución es relativamente cercana,
    si la caja es relativamente larga, significa que la distribución es relativamente discreta;
  2. Es para determinar dónde está el rango del mapa de caja;
plt.figure(figsize=(12,7))
sns.boxplot(x='Pclass', y='Age', data=train)

Inserte la descripción de la imagen aquí
Se puede juzgar aproximadamente a partir del diagrama de caja: la distribución por edades de los pasajeros en la cabina de tercera clase es relativamente pequeña y la distribución por edades de los pasajeros en la cabina de primera clase es relativamente grande.

10. Complete los valores faltantes

Hay muchas formas de completar los valores faltantes, aquí se basa en el diagrama de caja anterior: la distribución por edades de los pasajeros en la tercera clase es relativamente pequeña y la distribución por edades de los pasajeros en la primera clase es relativamente grande. Entonces, de acuerdo con la categoría de cabina, complete la edad promedio de la categoría.

# 首先得出各个船舱年龄的平均值
[train[train['Pclass'] == i]['Age'].mean() for i in range(1,4)]

def infer_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
 # 使用apply方法应用函数
 train['Age'] = train[['Age', 'Pclass']].apply(infer_age, axis=0)

11. Quite las columnas de datos irrelevantes

# 票号和船舱号是无关的特征,将它们去除掉
# axis的0轴匹配的是index, 涉及上下运算;1轴匹配的是columns, 涉及左右运算
train.drop(['Ticket', 'Cabin'], axis=1, inplace=True)

12. Considere las características del nombre de una persona y solo mantenga el apellido anterior

# 通过正则表达式留下.之前的形式
train['Title'] = train.Name.str.extract('([A-Za-z]+)\.', expand=False)

Inserte la descripción de la imagen aquí

13. Comprueba si el nombre corresponde al género.

pd.crosstab(train['Title'], train['Sex'])

Inserte la descripción de la imagen aquí

14. Agregue diferentes tipos de títulos según el número

for dataname in [train, test]:
    dataname['Title'] = dataname['Title'].replace(['Lady', 'Countess', 'Capt', 'Col', 'Don', 'Dr', 'Major', \
                                            'Rev', 'Sir', 'Jonkheer', 'Dona'], 'Rare')
    dataname['Title'] = dataname['Title'].replace(['Mlle', 'Ms'], 'Miss')
    dataname['Title'] = dataname['Title'].replace('Mme', 'Mrs')

train[['Title', 'Survived']].groupby(['Title'], as_index=False).mean()

15. Continuar el valor discreto de la variable del nombre por mapa

title_mapping = {
    
    'Mr': 1, 'Miss': 2, 'Mrs': 3, 'Master': 4, 'Rare': 5}
train['Title'] = train['Title'].map(title_mapping)

16. Eliminar datos faltantes

# inplace表示在原地操作,不返回对象
train.dropna(inplace=True)

17. Convierta el sexo y el lugar de embarque en variables discretas

# drop_first = True的含义是使用k-1个哑变量来表示k个特征
sex = pd.get_dummies(train['Sex'], drop_first=True)
embark = pd.get_dummies(train['Embarked'], drop_first=True)
# 删除原来的离散变量,并将新的哑变量的dataframe与原来的连接
train.drop(['Sex','Embarked','Name', 'PassengerId'], axis=1, inplace=True)
train = pd.concat([train, sex, embark], axis=1)

18. Dividir el conjunto de datos

Dividir el conjunto de datos para el entrenamiento es principalmente para evitar el sobreajuste.

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.2, random_state=2019)

19. Modelo de formación

Supongo que te gusta

Origin blog.csdn.net/qq_29027865/article/details/103430472
Recomendado
Clasificación