文章目录
一、数据读取
import pandas as pd
# 训练样本
data_train = pd.read_csv('./data/train.csv')
# 测试样本
data_test = pd.read_csv('./data/test.csv')
二、数据探索与分析
2.1 简单的描述性统计分析
data_train.head() # 查看训练样本前5行
data_test.head() # 查看测试样本前5行
data_train.shape # 查看训练样本的形状
data_train.columns # 查看训练样本的列名称
# 统计训练样本
explore_train = data_train.describe(percentiles=[],include='all').T # T:转置(转换行列位置)
explore_train['null'] = data_train.isnull().sum() # 计算每一个字段缺失值个数
explore_train = explore_train[['null','max','min']] # 筛选字段
def explore_data(data=None):
'''
实现对数据进行描述性统计
param data:数据
return:描述性统计结果(空值、最大值、最小值)
'''
d_d = data.describe(percentiles=[],include='all').T # 对数据做描述统计
d_d['null'] = data.isnull().sum() # 计算每一个字段缺失值个数
d_d = d_d[['null','max','min']] # 筛选字段
return d_d # 返回结果
explore_test = explore_data(data_test) # 对测试样本进行描述性统计
2.2 分析用户消费行为信息
2.2.1 绘制2016年1-6月份各月份用户消费次数折线图
'''
1、合并数据
2、处理date字段
3、提取月份
4、对各个月份用户消费次数进行统计
5、绘制用户消费次数折线图
'''
# 合并数据
data1 = pd.concat([data_train,data_test],axis=0,join='outer')
# 处理date字段
data1['date'] = pd.to_datetime(data1['date'].astype(str).apply(lambda x:x.split('.')[0]))
# 提取月份
data_month = data1['date'].apply(lambda x:x.month)
# 对各个月份用户消费次数进行统计
month_count = data_month.value_counts().sort_index(ascending=True)
# 绘制各个月份用户消费次数折线图
'''
1、设置画布大小(创建一张指定大小的画布)
2、设置正常显示中文
3、添加一下画布组件
4、绘制折线图
5、图表展示
'''
import matplotlib.pyplot as plt
plt.figure(figsize=(8,5)) # 设置画布大小
plt.rcParams['font.sans-serif'] = 'FangSong' # 设置正常显示中文
plt.title('2016年1-6月各月用户消费次数') # 添加画布标题
plt.xlabel('月份') # 添加x轴标签
plt.ylabel('消费次数') # 添加y轴标签
plt.plot(month_count.index,month_count.values,color='skyblue',linewidth=3.0,linestyle='-.') # 绘制折线图
plt.show() # 图表展示
2.2.2 绘制用户领券次数与优惠券消费次数的柱状图
'''
1、处理date_received字段
2、提取date_received字段的月份
3、对各个月份用户领券次数进行统计
4、获取领券后消费的数据(优惠券id不为空且date不为空)
5、统计1-7月份领券消费次数
6、绘制用户领券次数与优惠券消费次数柱状图
'''
# 处理date_received字段
data1['date_received'] = pd.to_datetime(data1['date_received'].astype(str).apply(lambda x:x.split('.')[0]))
# 提取date_received字段的月份
received_month = data1['date_received'].apply(lambda x:x.month)
# 对各个月份用户领券次数进行统计
received_count = received_month.value_counts().sort_index(ascending=True)
# 获取领券后消费的数据(优惠券id不为空且date不为空)
consume_data = data1.loc[data1['coupon_id'].notnull() & data1['date'].notnull(),'date']
# 部分电脑遇到的报错:date字段找不到
consume_data = data1.loc[data1['coupon_id'