kaggle入门

时间:2021-10-10
本文章向大家介绍kaggle入门,主要包括kaggle入门使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Kaggle入门Titanic数据处理

  问题相关数据官方下载地址:https://www.kaggle.com/c/titanic/data

# 导入需要的库
import sys
import pandas as pd
import numpy as np
import sklearn
import random
import time
from sklearn import ensemble
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import LabelEncoder
from sklearn import feature_selection
from sklearn import model_selection
from sklearn import metrics
import matplotlib
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

Pandas加载源数据集

我的文件树

读取源数据集

data_raw = pd.read_csv('data/train.csv')
data_val = pd.read_csv('data/test.csv')
# 查看前五行内容
data_raw.head()
# 查看数据基本信息
data_raw.info

为了便于操作,我们将列名转换成小写形式,也可以自定义修改列名

# 列名称转换成小写
data_raw.columns = data_raw.columns.str.lower()
data_val.columns = data_val.columns.str.lower()

根据幸存绘制图形,有一个大概了解

#绘制图形
sns.countplot(data_raw['survived'])

进行数据清洗

合并训练集与测试集进行统一清洗操作

data_all = [data_raw, data_val]

查看全部数据集空值等基础信息,对其进行清洗操作如对缺失值进行补全或删除某些无用的特征值

data_raw.isnull().sum() #查看训练集中的空值
data_val.isnull().sum() #查看验证集空值
data_raw.describe(include='all') # 对数据集进行描述

#用数据的统计数据对空值进行补全
#对原始数据集(数据集+验证集)进行清洗
for dataset in data_all:
    #补足空缺值
    dataset['age'].fillna(dataset['age'].median(), inplace=True)  #用中位数补足年龄空缺值,inplace=True 设置为直接填充在原始表中
    dataset['fare'].fillna(dataset['fare'].median(), inplace=True)
    dataset['embarked'].fillna(dataset['embarked'].mode()[0], inplace=True)#mode返回出现次数最多的元素

#删除一些字段
drop_columns = ['cabin', 'passengerid', 'ticket']
data_raw.drop(drop_columns, axis=1, inplace=True)
data_val.drop(drop_columns, axis=1, inplace=True)
    

特征构建,选取有用的属性值对其进行进一步处理(如编码操作,分类操作等),便于后续计算机处理

for dataset in data_all:
    # 构建新字段 family_size 家庭规模 sibs+parch 合并
    dataset['family_size'] = dataset['sibsp'] + dataset['parch'] + 1
    #构建第二个字段 single 是否单身 1表示单身 0 表示非单身
    dataset['single'] = 1
    dataset['single'].loc[dataset['family_size'] > 1] = 0
    #第三个字段title:身份 name中的称谓隐藏着身份信息
    dataset['title'] = dataset['name'].str.split(', ', expand=True)[1].str.split('.', expand= True)[0]
    #dataset['title'] = dataset['name'].apply(lambda x: x.split(', ')[1]).apply(lambda x : x.split('.')[1])
    #票价 fare_bin 分组
    dataset['fare_bin'] = pd.qcut(dataset['fare'], 4) # 给票价分成4组,qcut分组后每组人数一致
    #年龄分组 age_bin
    dataset['age_bin'] = pd.cut(dataset['age'].astype(int), 5) #将年龄分成五组,每组人数不一定一致
#统计title个数
data_raw['title'].value_counts()
title_names = (data_raw['title'].value_counts() < 10)
# title: 将那些称谓人数小于10的数据全部归为一类
data_raw['tltle'] = data_raw['title'].apply(lambda x : 'other' if title_names[x] else x)

构建新的字段 基于scikit-learn中的LabelEncoder()

label = LabelEncoder()
for dataset in data_all:
    # 构建sex-code,对于一些字符串类型进行编码
    dataset['sex_code'] = label.fit_transform(dataset['sex'])
    
    dataset['embarked_code'] = label.fit_transform(dataset['embarked'])
    
    dataset['title_code'] = label.fit_transform(dataset['title'])
    
    dataset['age_bin_code'] = label.fit_transform(dataset['age_bin'])
    
    dataset['fare_bin_code'] = label.fit_transform(dataset['fare_bin'])

特征选择(任意选择可能对结果有所影响的属性),在这里就随便选几个了

Target = ['survived']# 标签
data_columns_one = ['sex', 'pclass', 'embarked', 'title', 'sibsp', 'parch', 'age', 'fare', 'family_size',
                   'single']
# 通过pandas中的get_dummies()进行编码转换
data_one_dummy = pd.get_dummies(data_raw[data_columns_one])
data_one_dummy_list = data_one_dummy.columns.tolist()# 获得列名列表

原文地址:https://www.cnblogs.com/sevent/p/15388946.html