JupyterLab+pyecharts天猫订单数据可视化项目

编程 · 01-22 · 263 人浏览

读取数据

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()
Python 数据可视化
Theme Jasmine by Kent Liao