10 Pandas+Pyecharts | 20000+天猫订单数据可视化
- 可视化系列
- 6天前
- 915热度
- 1评论
大家好,我是欧K~
本期我们通过分析20000+条天猫实际订单数据,看看全国哪里的朋友订单量比较大,以及哪些时段订单量大,希望对你有所帮助,如有疑问或者需要改进的地方可以联系小编。
涉及到的库:
- Pandas — 数据处理
- Pyecharts — 数据可视化
可视化部分:
- 散点图 — Scatter
- 地图 — Map
- 极坐标图 — Polar
1. 数据处理
1.1 导入模块
import pandas as pd
from pyecharts.charts import Scatter
from pyecharts.charts import Polar
from pyecharts.charts import Map
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ThemeType
升级 pyecharts 包:
可视化部分需要用到 pyecharts==1.9.0,已安装其他低版本的需要升级,如果未安装过pyecharts,直接pip安装就是最新版本。
1.2 读取数据
df = pd.read_excel('天猫订单.xlsx')
df.head(10)

1.3 查看数据集大小
df.shape
(28010, 6)
一共有28010条数据,包含:订单创建时间、订单付款时间、订单金额、实付金额、退款金额、收货地址等6个字段。
1.4 查看索引、数据类型和内存信息
df.info()

订单付款时间有缺失,说明有部分顾客咨询过或者有购买迹象等等,但是因为某些原因没有完成付款(属于潜在客户)
1.5 根据日期,增加星期列
df['星期'] = df['订单创建时间'].dt.dayofweek+1
df.head(5)

2. 可视化
2.1 一周每天各时段订单数量散点图
single_axis, titles = [], []
scatter = Scatter(init_opts=opts.InitOpts(width='1000px', height='800px', theme='light',bg_color='#0d0735'))
for idx, day in enumerate(weeks[::-1]):
scatter.add_xaxis(xaxis_data=hours)
single_axis.append({'left': 100,
'nameGap': 20,
'nameLocation': 'start',
'type': 'category',
'boundaryGap': False,
'data': hours,
'top': '{}%'.format(idx * 100 / 7 + 5),
'height': '{}%'.format(100 / 7 - 10),
'gridIndex': idx,
'axisLabel': {'interval': 2,'color':'#9FC131'},
})
titles.append(dict(text=day,top='{}%'.format(idx * 100 / 7 + 6), left='2%',
textStyle=dict(color='#fff200')))
scatter.add_yaxis('',
y_axis=[int(item[2]) for item in allinfo if item[0] == 7-idx],
symbol_size=JsCode('function(p) { return p[1] * 0.15;}'),
label_opts=opts.LabelOpts(is_show=False),
)
scatter.options['series'][idx]['coordinateSystem'] = 'singleAxis'
scatter.options['series'][idx]['singleAxisIndex'] = idx
scatter.options['singleAxis'] = single_axis
scatter.set_global_opts(
xaxis_opts=opts.AxisOpts(is_show=False),
yaxis_opts=opts.AxisOpts(is_show=False),
title_opts=titles,
)

从散点图可以很明确的看出:
1、周二至周五的成交订单较周一和周日的订单量要明显的多
2、一天中上午9点-12点和晚上8点-10点这两个时段的订单量较其他时段更多,尤其是晚上8点-10点时段。
2.2 一周各天订单数量分布

从极坐标图可以更清晰的看出:
1、周二和周五的成交订单均接近5000单,占总订单量的35%左右
2、周一和周日大家的购物欲比较低,大概有2500单,占总订单量的9%左右
2.3 天猫订单全国地图分布
map_chart.add('',
[list(z) for z in zip(area_group.index.values.tolist(), area_group['数量'].values.tolist())],
maptype='china',
is_map_symbol_show=False,
label_opts=opts.LabelOpts(is_show=True,color='red'),
itemstyle_opts={
'normal': {
'shadowColor': 'rgba(0, 0, 0, .5)', # 阴影颜色
'shadowBlur': 5, # 阴影大小
'shadowOffsetY': 0, # Y轴方向阴影偏移
'shadowOffsetX': 0, # x轴方向阴影偏移
'borderColor': '#fff'
}
}
)
map_chart.set_global_opts(
visualmap_opts=opts.VisualMapOpts(
is_show=True,
is_piecewise=True,
min_ = 0,
max_ = 3500,
split_number = 7,
series_index=0,
pos_top='70%',
pos_left='10%',
range_color=['#9ecae1','#6baed6','#4292c6','#2171b5','#08519c','#08306b','#d4b9da','#c994c7','#df65b0','#e7298a','#ce1256','#980043','#67001f']
),
tooltip_opts=opts.TooltipOpts(
is_show=True,
trigger='item',
formatter='{b}:{c}'
),
title_opts=opts.TitleOpts(title='天猫订单全国地图分布',subtitle='制图@公众号:Python当打之年',pos_left='center',pos_top='5%',
title_textstyle_opts=opts.TextStyleOpts(color='#fff200',font_size=20))
)
