美文网首页
天猫订单分析

天猫订单分析

作者: Mandygoon | 来源:发表于2020-06-08 11:41 被阅读0次

    项目:利用Python 对天猫2月订单进行销售分析

    一、数据来源
    和鲸社区:[https://www.kesci.com/home/dataset/5eb60cab366f4d002d779163/document]

    二、分析内容
    1、订单每个环节的转化转化率
    2、订单成交的时间(按天)趋势(按实际成交)
    3、订单数在地图上的分布

    三、进行数据处理和分析

      In [1]
    # # 读取数据
    import numpy as np
    import pandas as pd
    
    file_path = 'D:/py4e/hejing/tmall_order_report.csv'
    df = pd.read_csv(file_path)
    
    # 查看数据的前几行数据信息,以及字段信息
    print(df.head())
    print(df.info())
    
    image.png
    In[2]
    # 处理数据,规范字段名称
    # 将’收获地址‘和’订单付款时间‘中的空格删除
    df = df.rename(columns = {'收货地址 ':'收获地址','订单付款时间 ':'订单付款时间'})
    print(df.columns)
    
    image.png
    In[3]
    # 判断有没有重复值
    df.duplicated().sum()
    
    image.png
    In[4]
    # 判断有没有缺失值
    df.isnull().sum()
    
    image.png
    In[5]
    # 一、订单转化率--漏斗模型
    # 1.总体转化率
    # 计算每个环节的订单数
    dict_counts = dict()
    # 总订单数
    dict_counts['总订单数'] = len(df)
    # 付款订单数
    dict_counts['付款订单数'] = len(df[df['订单付款时间'].notnull()])
    # 到款订单数——买家实际支付的金额不为0,则卖家收到付款金额
    dict_counts['到款订单数'] = len(df[df['买家实际支付金额'] != 0 ])
    # 全额到款订单数
    dict_counts['全额到款订单数'] = len(df[(df['买家实际支付金额'] != 0) & (df['退款金额'] == 0)])
    print(dict_counts)
    
    In[6]
    # 画出漏斗模型
    # 将dict转为Dataframe形式
    df_counts = pd.DataFrame.from_dict(dict_counts, orient = 'index', columns = ['订单数'])
    
    In[7]
    # 添加总体转化率,每个环节除以总订单数
    rate_1 = df_counts['订单数']/df_counts.loc['总订单数','订单数'] * 100
    df_counts['总体转化率'] = rate_1.apply(lambda x: round(x,0))
    
    In[8]
    # 导入funnel模块画图
    from pyecharts.charts import Funnel
    from pyecharts import options as opts
    
    In[9]
    # 输入漏斗数据
    # 将总体转化率转化为[(key1, value1), (key2, value2),...]
    data_1 = list()
    for i in zip(df_counts.index, df_counts['总体转化率']):
        data_1.append(i)
    print(data_1)
    
    image.png
    In[10]
    funnel = Funnel(init_opts=opts.InitOpts(width = '800px', height = '600px')).add( 
    series_name = '环节',data_pair = data_1, is_selected = True, sort_ = 'descending', 
    label_opts = opts.LabelOpts(position = 'inside'))
    
    funnel.set_series_opts(tooltip_opts = opts.TooltipOpts( formatter = '{a}<br/>{b}:{c}%'))
    funnel.set_global_opts( title_opts = opts.TitleOpts(title = '总体转化率'))
    
    funnel.render_notebook()
    
    image.png
    In[11]
    # 2. 单一环节转化率
    # 先将df_counts的订单数这一栏数据下移一位
    df_counts_one = df_counts.shift(1)
    # 填充数据框df_counts_one第一行“总订单数”缺失的数据
    df_counts_one = df_counts_one.fillna(df_counts.loc['总订单数','订单数'])
    
    In[12]
    # 计算单一环节的转化率
    rate_2 = df_counts['订单数']/df_counts_one['订单数'] * 100
    df_counts['单一转化率'] = rate_2.apply(lambda x : round(x,0))
    
    In[13]
    # 画出漏斗模型
    data_2 = list()
    for z in zip(df_counts.index, df_counts['单一转化率']):
        data_2.append(z)
    
    In[14]
    funnel = Funnel(init_opts=opts.InitOpts(width = '800px', height = '600px')).add( 
    series_name = '环节',data_pair = data_2, is_selected = True, sort_ = 'descending', 
    label_opts = opts.LabelOpts(position = 'inside'))
    
    funnel.set_series_opts(tooltip_opts = opts.TooltipOpts( formatter = '{a}<br>{b}:{c}%'))
    funnel.set_global_opts( title_opts = opts.TitleOpts(title = '单一转化率'))
    
    funnel.render_notebook()
    
    image.png
    In[15]
    # 二、查看整体订单数趋势(按天查看)
    # 查看到款订单数
    chart = df[df['买家实际支付金额'] != 0]
    
    In[16]
    # 转化日期时间的格式
    chart.loc[:,"订单创建时间"] = pd.to_datetime(chart.loc[:,'订单创建时间'])
    
    In[17]
    # 将订单创建时间作为索引以此统计订单数
    chart = chart.set_index('订单创建时间')
    jishu = chart.resample('D')['订单编号'].count()
    
    In[18]
    # 画出趋势图
    from matplotlib import pyplot as plt
    import ch
    ch.set_ch()
    jishu.plot()
    plt.grid(alpha = 0.4)
    
    image.png
    In[19]
    # 将具体的数值呈现出来
    from pyecharts.charts import Line
    line = Line(init_opts = opts.InitOpts(
        width = '800px', height = '600px')).add_xaxis(
        xaxis_data = list(jishu.index.day.map(str))
             ).add_yaxis(series_name = '订单数',y_axis = jishu,).set_global_opts(
        yaxis_opts = opts.AxisOpts(splitline_opts = opts.SplitLineOpts(is_show = True)))
    line.render_notebook()
    
    image.png
    In[20]
    # 销量区域分布地理图
    # 按照收获地址计算订单数数量并降序排序
    df_map = chart.groupby(by = '收获地址')['收获地址'].count().sort_index(ascending = False)
    
    fig = plt.figure(figsize = (10,7),dpi = 80)
    df_map.plot(kind = 'bar')
    
    image.png
    In[21]
    # 将收获地址的名称简化
    def strip_region(iterable):
        qvyu = []
        for i in iterable:
            if i.endswith('自治区'):
                if i == '内蒙古自治区':
                    i = i[:3]
                    qvyu.append(i)
                else:
                    qvyu.append(i)
            return qvyu
    
    In[22]
    # 对自治区进行处理
    df_map.index = df_map.index.str.strip('省')
    
    In[23]
    # 画出地图
    # 导入Map
    from pyecharts.charts import Map
    
    In[24]
    a = Map().add(
        series_name = '订单数',data_pair= [list(i) for i in df_map.items()]).set_global_opts(
        visualmap_opts=opts.VisualMapOpts(max_=max(df_map)))
    a.render_notebook()
    
    image.png

    现象及结论:
    1、受疫情影响,许多企业在2月上半个月处于停产状态,下半个月,企业逐渐复工,生产恢复,订单数量增加。
    2、东部沿海和川渝、广东地区产生的订单数较多。

    相关文章

      网友评论

          本文标题:天猫订单分析

          本文链接:https://www.haomeiwen.com/subject/snhltktx.html