在当前的电子商务环境中,淘宝作为中国最大的在线购物平台之一,对于各类商品的销售情况具有重要的参考价值。本文主要利用天猫某一月的订单数据做数据可视化分析。
本文数据可在公众号后台回复:“天猫订单数据” 获取。
一、数据预处理
先导入库
import pandas as pd
import matplotlib.pyplot as plt
from pyecharts import options as opts
from pyecharts.charts import Map, Timeline, Bar, Line, Pie
读取数据
df = pd.read_csv(r"D:\浏览器下载\tmall_order_report.csv")
df.head()
查看数据基本信息
# 查看数据基本信息
df.info()
# 查看数据集列标签
df.columns
收货地址那儿有一个空白符,把它去掉
# 去除列标签中的空白符
df.columns = df.columns.str.strip()
df.columns
#查看是否有重复值
df.duplicated().sum()
查看缺失值
#查看数据缺失情况
df.isnull().sum()
许多顾客都是点击购买后没有付款,导致有许多的订单付款时间是空值。
接下来统计该月各省订单量
#各省订单量
df.收货地址.value_counts()
通过对各省订单量的统计,我们发现经济发达地区的订单量更多,欠发达地区订单零较少。
接下来对省份名称进行规范化处理,你也可以根据自己的需求进行处理。
# 规范省份名称
def rename(p):
if p in ['北京', '上海', '天津', '重庆']:
return p+"市"
return p
df.收货地址 = df.收货地址.map(rename)
df.收货地址.value_counts()
去除订单付款时间中的空值
#过滤掉(删掉)没有付款的订单数据
df[df.订单付款时间.notnull()]
去除订单付款时间的空值之后,各省的下单量。换言之也就是统计各省实际下单量
#统计各省订单数量
res = df[df.订单付款时间.notnull()]
res = res.收货地址.value_counts()
data = res.to_dict()
data
二、数据可视化
导入图形在jupyter中显示的必要依赖,我的pyecharts版本号为2.0.6,如果你加上我的这句话后图像还是不显示,尽量去pyecharts库官网进行查看最新版本的依赖。
from pyecharts.globals import CurrentConfig, NotebookType # 使图表在jupyter显示
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB
c = (
Map(init_opts=opts.InitOpts(width="1000px", height="600px"))
.add('各省份订单量',
[list(i) for i in zip(data.keys(), data.values())],
'china',
is_map_symbol_show=False
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=True))
.set_global_opts(
title_opts=opts.TitleOpts(title='各省份天猫订单数量'),
visualmap_opts=opts.VisualMapOpts(
max_=3100,
is_piecewise=True, #定义图例为分段型,默认为连续的图例
pos_top= "middle", #分段位置
pos_left="left",
orient="vertical",
split_number=10
)
)
)
c.load_javascript()
这个图是可以放大的,但是在这里因为截图的原因,就比较难看
c.render_notebook()
对每天的订单量进行统计分析
df['订单创建时间'] = pd.to_datetime(df.订单创建时间)
df['订单付款时间'] = pd.to_datetime(df.订单付款时间)
df.head()
# 格式化日期格式
order_time = df.订单创建时间.map(lambda x: x.strftime('%Y-%m-%d'))
df['order_add_time' ] = order_time
# 统计每天下单数量
cnt = pd.pivot_table(df, index='order_add_time', values='订单编号', aggfunc='count')
result = cnt.to_dict()['订单编号']
cnt
c = (
Line()
.add_xaxis(list(result.keys()))
.add_yaxis(
'订单量',
list(result.values())
)
.set_series_opts(
label_opts=opts.LabelOpts(is_show=False),
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(type_='max')
]
)
)
.set_global_opts(
title_opts=opts.TitleOpts(title='每天订单量')
)
)
c.render_notebook()
通过上图可以看出,到月底之后,订单量明显比月初时订单量多得多。
统计每小时的订单
order_add_time2 = df.订单创建时间.map(lambda x: x.strftime('%H'))
# 统计每小时下单数量
cnt = df.groupby(order_add_time2).agg({"订单编号": "count"}).to_dict()["订单编号"]
# 可视化结果
c = (
Bar()
.add_xaxis( list(cnt.keys()) )
.add_yaxis('订单量', list(cnt.values()))
.set_series_opts(
label_opts=opts.LabelOpts(is_show=False),
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(type_='max')
]
)
)
.set_global_opts(
title_opts=opts.TitleOpts(title='每小时订单量')
)
)
c.render_notebook()
上图可以看出,晚上九点是购物下单最多的时间段。
接下里对订单转换率进行可视化分析
# 计算各阶段订单量
create_order = df.订单编号.count()
print('下单数量为:',create_order)
buy_order = df[~df.订单付款时间.isnull()].订单编号.count()
print('支付订单数量为:',buy_order)
finish_order = df[df.买家实际支付金额 > 0].订单编号.count()
print('成交订单数量为:',finish_order)
whole_finish_order = df[df.总金额 == df.买家实际支付金额].订单编号.count()
print('全额成交订单量为:',whole_finish_order)
# 计算各阶段转化率
transform = [['创建订单',(round(create_order / df.shape[0],2))*100%],
['支付订单',(round(buy_order / df.shape[0],2))*100],
['成交订单',(round(finish_order / df.shape[0],2))*100],
['全额成交订单',(round(whole_finish_order / df.shape[0],2))*100]]
transform
import pyecharts.options as opts
from pyecharts.charts import Funnel
(
Funnel()
.add(
series_name="",
data_pair=transform,
gap=4,
tooltip_opts=opts.TooltipOpts(trigger="item", formatter='{b}%:{c}%'),
label_opts=opts.LabelOpts(is_show=True, position="inside", formatter='{b}%:{c}%'),
itemstyle_opts=opts.ItemStyleOpts(border_color="#fff", border_width=1),
)
.set_global_opts(title_opts=opts.TitleOpts(title="订单转换率漏斗图"))
.render_notebook()
)
学习永无止境,今天的分享就到这里啦,如果有用的话就点个赞吧。当然本文也只是对部分数据做了可视化分析,还有一部分没有做,读者可以根据自己的需求自行完善。
喜欢的话就点个赞吧