JupyterLab+pyecharts天猫订单数据可视化项目
读取数据
import pandas as pd
data = pd.read_csv("天猫订单.csv")
data.head()
data.shape
数据处理
data.info() # 订单付款时间 24087 non-null
data.columns
data.columns = data.columns.str.strip() # 去除列名中首尾空格
重复值查看:data.duplicated().sum()
,重复数据:109
缺失值查看:data.isnull().sum()
,缺失数据:订单付款时间 3923
数据可视化
各省订单量
def province_map(p):
if p in ["北京", "天津", "上海", "重庆"]:
return p + "市"
return p
data.收货地址 = data.收货地址.map(province_map)
# 统计各省订单量,去除没有付款的订单数据
result = data[data.订单付款时间.notnull()]
# 统计各省订单量
result2 = result.groupby("收货地址")[["订单编号"]].count().to_dict()["订单编号"]
from pyecharts import options as opts
from pyecharts.charts import Bar, Line, Map, Pie, Timeline
from pyecharts.globals import CurrentConfig, NotebookType
# 不同notebook坏境有不同渲染要求,pyecharts在底层做了适配处理
# 但因为无法在import pyecharts时知道具体使用哪种noteboook坏境,所以需要在使用时声明坏境类型
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB
c = (
Map()
.add("各省订单量", [*result2.items()], "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_=2000),
)
)
# c.load_javascript() # 第一次渲染,要调用load_javascript方法
c.render_notebook()
时间序列分析
# 转成时间类型
data.订单创建时间 = pd.to_datetime(data.订单创建时间)
data.订单付款时间 = pd.to_datetime(data.订单付款时间)
每天订单量
order_add_time = data.订单创建时间.map(lambda x: x.strftime("%Y-%m-%d"))
result3 = data.groupby(order_add_time).agg({"订单编号": "count"}).to_dict()["订单编号"]
result3
c = (
Line()
.add_xaxis(list(result3.keys()))
.add_yaxis("订单量", list(result3.values()))
.set_series_opts(
label_opts=opts.LabelOpts(is_show=False),
markpoint_opts=opts.MarkAreaOpts(data=[opts.MarkPointItem(type_="max")]),
)
.set_global_opts(title_opts=opts.TitleOpts(title="每天订单量"))
)
c.render_notebook()
每小时订单量
order_add_time2 = data.订单创建时间.map(lambda x: x.strftime("%H"))
result4 = data.groupby(order_add_time2).agg({"订单编号": "count"}).to_dict()["订单编号"]
result4
c = (
Bar()
.add_xaxis(list(result4.keys()))
.add_yaxis("订单量", list(result4.values()))
.set_series_opts(
label_opts=opts.LabelOpts(is_show=False),
markpoint_opts=opts.MarkAreaOpts(data=[opts.MarkPointItem(type_="max")]),
)
.set_global_opts(title_opts=opts.TitleOpts(title="每小时订单量"))
)
c.render_notebook()