【快乐Kaggle入门】Kaggle入门之比赛基本流程

目录

1.数据读取

2.数据清洗

3.数据重构

4.建模预测提交

 5.总结


比赛的基本流程由四个部分组成:

数据读取、数据清洗、数据重构、建模预测提交

导包:

import numpy as np
import pandas as pd
import pandas_profiling as ppf
import joblib  # 模型的保存
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")  # 关闭警告模块

1.数据读取

train = pd.read_csv("competitive-data-science-predict-future-sales/sales_train.csv")  # 训练集
test = pd.read_csv("competitive-data-science-predict-future-sales/test.csv")  # 测试集
shops = pd.read_csv("competitive-data-science-predict-future-sales/shops.csv")  # 商品集
items = pd.read_csv("competitive-data-science-predict-future-sales/items.csv")
items_categories = pd.read_csv("competitive-data-science-predict-future-sales/item_categories.csv")

print("-" * 50)
print(train.head())
print("-" * 50)
print(test.head())
print("-" * 50)
print(shops.head())
print("-" * 50)
print(items.head())
print("-" * 50)
print(items_categories.head())
print("-" * 50)

# 检查维度
print("Shape of train:", train.shape)
print("Shape of test:", test.shape)
print("Shape of shops:", shops.shape)
print("Shape of items:", items.shape)
print("Shape of items_categories:", items_categories.shape)

2.数据清洗

数据清洗的一般流程主要有两个操作:一是删除异常值,二是填补缺失值。【下面的代码是删除异常值】

# 先对每日销售的产品数量进行修改
train = train[train.item_cnt_day < 1001]
train = train[train.item_cnt_day > 0]
# 再对产品的销售价格进行修改
train = train[train.item_price < 250000]
train = train[train.item_price > 1]

3.数据重构

先把训练数据的date列改为标准的格式:

train["date"] = pd.to_datetime(train["date"], format="%d.%m.%Y")

将数据转换为月度销售数据:

%%time
# 制作仅包含月度销售数据的数据集 [分组]
data = train.groupby([train["date"].apply(lambda x:x.strftime("%Y-%m")),"item_id","shop_id"]).sum().reset_index()

# 指定我们要添加到的数据的重要属性
data = data[["date", "item_id", "shop_id", "item_cnt_day"]]

# 最后,我们可以从数据集中选择重要的特定属性
data = data.pivot_table(index=["item_id", "shop_id"], columns="date", values="item_cnt_day", fill_value=0).reset_index()

print(data.shape)
print(data.head())
print("-" * 50)
print(data.head())
print("-" * 50)
print(data)
# 目的是把每一个月的数据放到一起

训练集应该和测试集变成相同的格式

未处理前的测试数据:

【快乐Kaggle入门】Kaggle入门之比赛基本流程_第1张图片

 处理后的测试数据:

# 将数据进行组合
test = pd.merge(test, data, on = ["item_id", "shop_id"], how = "left")

# 将空值填充为0
test.fillna(0, inplace=True)

# 看一下这个数据集
test.head()

【快乐Kaggle入门】Kaggle入门之比赛基本流程_第2张图片

接下来创建实际的训练集:

# 现在创建实际的训练集
x_train = test.drop(["2015-10", "item_id", "shop_id"], axis = 1)  # 和提交格式有关
y_train = test["2015-10"]

# 删除第一列,以便于预测未来的销售数据
x_test = test.drop(["2013-01", "item_id", "shop_id"], axis = 1)  # 保持和训练集一样特征数

# 检查一下数据的维度
print("Shape of x_train:", x_train.shape)
print("Shape of x_test:", x_test.shape)
print("Shape of y_train:", y_train.shape)

看一下训练数据的特征值:

【快乐Kaggle入门】Kaggle入门之比赛基本流程_第3张图片

 看一下训练数据的目标值:

【快乐Kaggle入门】Kaggle入门之比赛基本流程_第4张图片

看一下测试集的特征值:

【快乐Kaggle入门】Kaggle入门之比赛基本流程_第5张图片

4.建模预测提交

先进行模型的构建,训练后保存模型为GBR2.pkl。

%%time

# 用GradientBoostingRegressor进行预测
from sklearn.ensemble import GradientBoostingRegressor
GBR = GradientBoostingRegressor()
GBR.fit(x_train, y_train)
mode2 = GBR.predict(x_test).clip(0,20)  # 把预测结果限制在0到20之间
joblib.dump(GBR, "GBR2.pkl")  # 模型保存

 取出预测值“item_cnt_month”,

mode2 = pd.DataFrame(mode2, columns=["item_cnt_month"])

 把预测结果存为submission.csv文件,这个文件就是需要提交到官网的文件。

mode2.to_csv("submission.csv", index_label="ID")

看一下需要提交的数据:

【快乐Kaggle入门】Kaggle入门之比赛基本流程_第6张图片

 5.总结

以上的四个部分是比赛的基本流程,可以提交获取一个基本的排名,若要再提升成绩,需要在特征工程数据增强方面再做努力。

你可能感兴趣的:(机器学习,深度学习,数据挖掘)