文章目录
前言
数据为阿里巴巴手机电商平台的交易数据,该数据集有12256906条记录,时间是从2014-11-18到 2014-12-18. 现在拿这个数据练习可视化,展示交易数据在某个时间维度的变化趋势,以及绘制漏斗图查看各流程的转化率。
一、查看数据
1.引入库
先把所需要的库都引入了
import pandas as pd
import numpy as np
import datetime
import time
import matplotlib.pyplot as plt
import seaborn as sns
import sklearn
import pyecharts
from sklearn.preprocessing import LabelEncoder
np.set_printoptions(suppress=True)
pd.set_option('display.float_format', lambda x: '%.4f' % x)
user=pd.read_csv("tianchi_mobile_recommend_train_user.csv")
2.观察数据
阿里天池上的字段解释:
- user_id:Identity of users
- item_id:Identity of items
- behavior_type:The user behavior type.Including click, collect,add-to-cart and payment, the corresponding values are 1, 2, 3 and 4,respectively.
- user_geohash:Latitude(user location when the behavior occurs,whichmay be null)
- item_category:The category id of the item
- time:The time of the behavior.To the nearest hours
user.head(5)
同时从前五条数据中看到,我们可以对time做一下处理,分开日期和小时。方便之后做一个月内每天的交易数据波动,一天内每小时的交易数据波动。
user.info()
user.isna().sum()
这里结果就不展示了,从上面的几行代码观察到只有user_geohash有空值,有8334824行的空值。但是我们在做分析做可视化中不需要这一个字段。
二、处理数据
1.日期数据
user["date"]=user["time"].apply(lambda x: x.split(" ")[0])
user["date"]=user["date"].apply(lambda x: datetime.datetime.strptime(x,"%Y-%m-%d"))
user["hour"]=user["time"].apply(lambda x: int(x.split(" ")[1]))
user["week"]=user["date"].apply(lambda x: x.isoweekday())
2.其他数据
behavior_type_dict={
1:"click",2:"collect",3:"add to cart",4:"paid"}
user["behavior"]=user["behavior_type"].map(behavior_type_dict)
这样做是为了方便之后pivot_table方便统计
三、数据可视化
1.时间趋势变化
1.1 一个月内每天的变化趋势
这里想要提取出月份和日期,不把年份显示出来防止xlabel太长。
user["monthdate"]=user["date"].apply(lambda x:x.strftime("%m%d"))
behviour_date=user.pivot_table(index="behavior",columns="monthdate",values="behavior_type",aggfunc="count")
behviour_date
x_data=behviour_date.columns.to_list()
f, ax = plt.subplots(4,1,figsize=(14, 10),sharex=True)
ax[0].plot(x_data,behviour_date.loc["click",:].tolist(),marker='.')
ax[0].set_title("The change of click number per day"