kaggle竞赛系列3----python数据挖掘时间序列时间量分析(以elo竞赛为例)

今天要分析的一个kernel是一个关于elo的loyalty关于时间序列的关系的研究的kernel。
关于竞赛介绍及基础知识见:
我的上一篇内核分析:https://blog.csdn.net/ssswill/article/details/85217702
这篇kernel来自:
A Closer Look at Date Variables

写在前面:个人认为这篇kernel与比赛关系不大,之所以分析它是因为里面有很多图像可视化的画法,对后面的学习肯定是有帮助的,同时这篇kernel包含了很多对时间变量的处理,也是很常见的一种处理方式,基于这两点原因,我觉得还是做一些分析留作知识储备。
同时,kaggle系列博客会一直更新下去。但是仅适用于新手入门学习使用,在放假时,我会抽出时间写出kaggle很多实用的功能与小提示,例如数据集的创建,本地训练结果的提交等,网上关于这方面的东西还是很少的,我之前也是踩过一些坑。所以希望写出来希望可以帮助一些刚接触kaggle的人。
好了,话不多说,直接开始这篇kernel的学习吧!
我们再来稍微回顾下这个elo推荐竞赛,是给你一些用户的数据,让你来预测用户的忠诚度target。这是一个回归问题。同时,用户信息包含了一些时间序列,例如用户第一次活跃的时间,以及每一次消费的时间。这些肯定很重要,但是有一些时间量我个人认为这些不会影响target,或者影响的比较少。例如不能说一个经常在周二买东西的人忠诚度就会比经常在周三买的人高,也不能说经常早上消费的人忠诚度就要比晚上消费的高。但这都是直观看法,带着这些疑问来走进这篇kernel吧!

import warnings
import datetime
import calendar
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from datetime import time
from dateutil.relativedelta import relativedelta
# to ignore future warnings,忽略warning
warnings.simplefilter(action = 'ignore', category = FutureWarning)
# set size of seaborn plots
sns.set(rc={
   'figure.figsize':(10, 7)})
## read data
train = pd.read_csv('../input/train.csv', sep = ',')
test = pd.read_csv('../input/test.csv', sep = ',')
merchants = pd.read_csv('../input/merchants.csv', sep = ',')
new_merchant = pd.read_csv('../input/new_merchant_transactions.csv', sep = ',')

这里sep是分隔符的意思。默认分隔符就是逗号,所以不用在意。

train.head()

在这里插入图片描述
再来看看merchants(商人信息)与new_merchant(参考日期之后的购物记录)
在这里插入图片描述
在这里插入图片描述

## prepare data
# this is not a valid approach if you want to build models from the data
#有一些重复列都去掉了。
# drop some redundant columns
dropping = ['merchant_category_id', 'subsector_id', 'category_1', 'city_id', 'state_id',
            'category_2']
for var in dropping:
    merchants = merchants.drop(var, axis = 1)
# merge merchants with new_merchants
data = pd.merge(merchants, new_merchant, on = 'merchant_id')

# merge data with train data
data = pd.merge(data, train, on = 'card_id')

第一个data是融合了merchants, new_merchant的df,可以看到二者有相同的列,所以在上面代码中去掉了一些重复的列,合并后是一个扩展版的用户购物信息。
之后再与train合并。得到了最终研究的数据:
在这里插入图片描述
在这里插入图片描述
这两张图都是一个dataframe的。
这个df是用户在参考日期之后2个月购物信息的完整版。但是这里没有做history的信息,但是思路是类似的。

The variables in question here are *first_active_month* 
and *purchase_time*. 
Let's take a brief look at their number of unique values
 and the first five values:

上面这些英文意思就是:虽然表格里信息很多,但是我们现在研究的是时间序列,所以只关注first_active_monthpurchase_time. 两列信息。first_active_month就是这张卡第一次激活或者活跃的时间,purchase_time是这张卡每次购物的时间。所以:来看看这两个量有多少个不同的值与大概信息
所以:
对于每个用户,或者每个卡,他们的first_active_month都只有一个,但是purchase_time可能不是唯一一个,因为每张卡不可能都只购物一次。
好了,理清楚这个了,继续往下走:

print(len(data['first_active_month'].unique()))
#print(data['first_active_month'].nunique())与上句一样意思
data['first_active_month'][:5]
74
0    2013-11
1    2013-11
2    2013-11
3    2013
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值