zoukankan      html  css  js  c++  java
  • 电商数据分析

    天猫订单分析
    Logout 
    
    Python 3  
    
    可信的
    File
    Edit
    View
    Insert
    Cell
    Kernel
    Widgets
    Help
    
    
    
    
    
    
    
    运行
    
    
    
    
    
    
    In [44]:
    
    
    ​
    '''
    根据天猫定订单数据集进行订单的综合分析
    共有28010条数据
    ​
    字段的说明:
        订单编号:订单编号
        总金额:订单总金额
        买家实际支付金额:总金额 - 退款金额(在已付款的情况下)
        收货地址:各个省份
        订单创建时间:下单时间
        订单付款时间:付款时间
        退款金额:付款后申请退款的金额。
        
    分析的目的:
        订单每个环节的转化转化率
        订单成交的时间(按天)趋势(按实际成交)
        订单数(各省)
     '''
    
    
    Out[44]:
    '
    根据天猫定订单数据集进行订单的综合分析
    共有28010条数据
    
    字段的说明:
        订单编号:订单编号
        总金额:订单总金额
        买家实际支付金额:总金额 - 退款金额(在已付款的情况下)
        收货地址:各个省份
        订单创建时间:下单时间
        订单付款时间:付款时间
        退款金额:付款后申请退款的金额。
        
    分析的目的:
        订单每个环节的转化转化率
        订单成交的时间(按天)趋势(按实际成交)
        订单数在地图上的分布
     '
    In [45]:
    
    
    ​
    # 导入相关的数据包
    import numpy as np 
    import matplotlib.pyplot as plt 
    import pandas as pd 
    import os 
    import warnings
    warnings.filterwarnings('ignore')
    
    
    
    In [46]:
    
    
    # 读取数据
    df = pd.read_csv('tmall_order_report.csv',engine='python',encoding='utf8')
    
    
    
    In [47]:
    
    
    df.head().append(df.tail()) #查看数据的前5行及后5行。.head()默认前五行
    
    
    Out[47]:
    
    订单编号
    总金额
    买家实际支付金额
    收货地址
    订单创建时间
    订单付款时间
    退款金额
    0
    1
    178.8
    0.0
    上海
    2020-02-21 00:00:00
    NaN
    0.0
    1
    2
    21.0
    21.0
    内蒙古自治区
    2020-02-20 23:59:54
    2020-02-21 00:00:02
    0.0
    2
    3
    37.0
    0.0
    安徽省
    2020-02-20 23:59:35
    NaN
    0.0
    3
    4
    157.0
    157.0
    湖南省
    2020-02-20 23:58:34
    2020-02-20 23:58:44
    0.0
    4
    5
    64.8
    0.0
    江苏省
    2020-02-20 23:57:04
    2020-02-20 23:57:11
    64.8
    28005
    28006
    37.0
    37.0
    四川省
    2020-02-27 00:01:00
    2020-02-27 00:01:10
    0.0
    28006
    28007
    69.0
    0.0
    上海
    2020-02-27 00:00:18
    NaN
    0.0
    28007
    28008
    69.0
    0.0
    上海
    2020-02-27 00:00:17
    NaN
    0.0
    28008
    28009
    37.0
    37.0
    辽宁省
    2020-02-27 00:00:09
    2020-02-27 00:00:17
    0.0
    28009
    28010
    37.0
    37.0
    广东省
    2020-02-27 00:00:06
    2020-02-27 00:00:11
    0.0
    In [ ]:
    
    
    ​
    
    
    
    In [48]:
    
    
    # 处理数据
    df.columns   #查看数据字段名
    
    
    Out[48]:
    Index(['订单编号', '总金额', '买家实际支付金额', '收货地址 ', '订单创建时间', '订单付款时间 ', '退款金额'], dtype='object')
    In [49]:
    
    
    # 将字段名中的空格去掉
    df = df.rename (columns = {'收货地址 ':'收货地址','订单付款时间 ':'订单付款时间'})
    # df = df.rename( columns = {'收货地址 ':'收货地址','订单付款时间 ':'订单付款时间'} )
    
    
    
    In [50]:
    
    
    df.info()   #查看数据有多少行,是否有缺失值,以及每列的数据类型
    
    
    
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 28010 entries, 0 to 28009
    Data columns (total 7 columns):
    订单编号        28010 non-null int64
    总金额         28010 non-null float64
    买家实际支付金额    28010 non-null float64
    收货地址        28010 non-null object
    订单创建时间      28010 non-null object
    订单付款时间      24087 non-null object
    退款金额        28010 non-null float64
    dtypes: float64(3), int64(1), object(3)
    memory usage: 1.5+ MB
    In [51]:
    
    
    df.duplicated().sum()   #查看是否有重复值
    
    
    Out[51]:
    0
    In [52]:
    
    
    df.isnull().sum()   #查看是否有缺失值
    
    
    Out[52]:
    订单编号           0
    总金额            0
    买家实际支付金额       0
    收货地址           0
    订单创建时间         0
    订单付款时间      3923
    退款金额           0
    dtype: int64
    In [ ]:
    
    
    ​
    
    
    
    In [53]:
    
    
    '''
    订单转化率:
        总订单数
        付款订单数  (订单提交后并将钱付给第三方)
        到款订单数   (客户成功收货并没有申请退换货,完成交易)
        全额到款订单数
    '''
    
    
    Out[53]:
    '
    订单转化率:
        总订单数
        付款订单数  (订单提交后并将钱付给第三方)
        到款订单数   (客户成功收货并没有申请退换货,完成交易)
        全额到款订单数
    '
    In [54]:
    
    
    # 订单总数
    buy_dict = dict()  #创建一个交易信息统计字典
    key = '总订单数'
    buy_dict[key] = len(df)
    buy_dict[key]
    
    
    Out[54]:
    28010
    In [56]:
    
    
    # 付过款的订单数
    key = '付款的订单数'
    df_payed = df[df['订单付款时间'].notnull()]
    buy_dict[key] = len(df_payed)
    buy_dict[key]
    # df[df['订单付款时间'].notnull()]
    
    
    Out[56]:
    24087
    In [57]:
    
    
    # 到款订单数(卖家实际支付的金额!=0,说明订单商家收到过款)
    key = '到款订单数'
    df_trans = df_payed[df_payed['买家实际支付金额'] !=0]
    buy_dict[key]=len(df_trans)
    buy_dict[key]
    
    
    Out[57]:
    18955
    In [59]:
    
    
    # 全额贷款订单数
    key = '全额贷款订单数'
    df_trans_full = df_payed[df_payed['退款金额'] ==0]
    buy_dict[key]=len(df_trans_full)
    buy_dict[key]
    
    
    Out[59]:
    18441
    In [60]:
    
    
    # 查看转化数据
    buy_dict
    
    
    Out[60]:
    {'总订单数': 28010, '付款的订单数': 24087, '到款订单数': 18955, '全额贷款订单数': 18441}
    In [61]:
    
    
    df_convs = pd.Series(buy_dict,name ='订单数' ).to_frame()
    df_convs
    
    
    Out[61]:
    
    订单数
    总订单数
    28010
    付款的订单数
    24087
    到款订单数
    18955
    全额贷款订单数
    18441
    In [62]:
    
    
    # 总体转化率
    # 添加总体转化率,每个环节除以总订单数
    name = '总体转化率'
    total_convs = df_convs['订单数']/df_convs.loc['总订单数','订单数'] * 100
    df_convs[name] = total_convs.apply(lambda x : round(x,0))
    df_convs
    
    
    Out[62]:
    
    订单数
    总体转化率
    总订单数
    28010
    100.0
    付款的订单数
    24087
    86.0
    到款订单数
    18955
    68.0
    全额贷款订单数
    18441
    66.0
    In [63]:
    
    
    # 单一转化率
    # 添加单一环节转化率,每个环节除以上个环节
    name = '单一环节转化率'
    single_convs = df_convs['订单数'].shift()
    df_convs[name] = single_convs.fillna(df_convs.loc['总订单数','订单数'])
    df_convs[name] = round((df_convs['订单数']/df_convs[name] * 100),0)
    df_convs
    ​
    ​
    
    
    Out[63]:
    
    订单数
    总体转化率
    单一环节转化率
    总订单数
    28010
    100.0
    100.0
    付款的订单数
    24087
    86.0
    86.0
    到款订单数
    18955
    68.0
    79.0
    全额贷款订单数
    18441
    66.0
    97.0
    In [ ]:
    
    
    ​
    
    
    
    In [67]:
    
    
    # 整体订单数趋势
    df_trans['订单创建时间'] = df_trans['订单创建时间'].astype('datetime64')
    df_trans = df_trans.set_index("订单创建时间")
    df_trans.head()
    
    
    Out[67]:
    
    订单编号
    总金额
    买家实际支付金额
    收货地址
    订单付款时间
    退款金额
    订单创建时间
    
    
    
    
    
    
    2020-02-20 23:59:54
    2
    21.0
    21.0
    内蒙古自治区
    2020-02-21 00:00:02
    0.0
    2020-02-20 23:58:34
    4
    157.0
    157.0
    湖南省
    2020-02-20 23:58:44
    0.0
    2020-02-20 23:56:39
    6
    327.7
    148.9
    浙江省
    2020-02-20 23:56:53
    178.8
    2020-02-20 23:56:36
    7
    357.0
    357.0
    天津
    2020-02-20 23:56:40
    0.0
    2020-02-20 23:56:12
    8
    53.0
    53.0
    浙江省
    2020-02-20 23:56:16
    0.0
    In [75]:
    
    
    import matplotlib
    matplotlib.rcParams['font.sans-serif'] = ['SimHei']
    se_trans_month = df_trans.resample('D')['订单编号'].count()
    se_trans_month.plot()
    se_trans_month.name
    
    
    Out[75]:
    '订单编号'
    
    
    In [70]:
    
    
    # 可以看到在二月的上半月,企业很多由于新年而未复工,快递大多停运,无法发货
    # 下半月企业复工,订单逐渐上涨。
    
    
    
    In [71]:
    
    
    df_trans['买家实际支付金额'].mean()
    
    
    Out[71]:
    100.36861777895066
    In [ ]:
    
    
    ​
    ​
    
    
    
    In [74]:
    
    
    
    
    # 销量区域分布
    import matplotlib
    matplotlib.rcParams['font.sans-serif'] = ['SimHei']
    se_trans_map = df_trans.groupby('收货地址')['收货地址'].count().sort_values(ascending=False)
    plt.figure(dpi=100)
    se_trans_map.plot(kind='bar')
    
    
    Out[74]:
    <matplotlib.axes._subplots.AxesSubplot at 0x2ed0d0ef668>
    
    
    In [ ]:
    
    
    ​
    '''
    根据天猫定订单数据集进行订单的综合分析
    共有28010条数据
    
    字段的说明:
        订单编号:订单编号
        总金额:订单总金额
        买家实际支付金额:总金额 - 退款金额(在已付款的情况下)
        收货地址:各个省份
        订单创建时间:下单时间
        订单付款时间:付款时间
        退款金额:付款后申请退款的金额。
        
    分析的目的:
        订单每个环节的转化转化率
        订单成交的时间(按天)趋势(按实际成交)
        订单数(各省)
     '''
    
    
    # 导入相关的数据包
    import numpy as np 
    import matplotlib.pyplot as plt 
    import pandas as pd 
    import os 
    import warnings
    warnings.filterwarnings('ignore')
    
    # 读取数据
    df = pd.read_csv('tmall_order_report.csv',engine='python',encoding='utf8')
    
    df.head().append(df.tail()) #查看数据的前5行及后5行。.head()默认前五行
    
    
    
    # 处理数据
    df.columns   #查看数据字段名
    
    # 将字段名中的空格去掉
    df = df.rename (columns = {'收货地址 ':'收货地址','订单付款时间 ':'订单付款时间'})
    # df = df.rename( columns = {'收货地址 ':'收货地址','订单付款时间 ':'订单付款时间'} )
    
    df.info()   #查看数据有多少行,是否有缺失值,以及每列的数据类型
    
    df.duplicated().sum()   #查看是否有重复值
    
    df.isnull().sum()   #查看是否有缺失值
    
    
    
    '''
    订单转化率:
        总订单数
        付款订单数  (订单提交后并将钱付给第三方)
        到款订单数   (客户成功收货并没有申请退换货,完成交易)
        全额到款订单数
    '''
    
    # 订单总数
    buy_dict = dict()  #创建一个交易信息统计字典
    key = '总订单数'
    buy_dict[key] = len(df)
    buy_dict[key]
    
    # 付过款的订单数
    key = '付款的订单数'
    df_payed = df[df['订单付款时间'].notnull()]
    buy_dict[key] = len(df_payed)
    buy_dict[key]
    # df[df['订单付款时间'].notnull()]
    
    # 到款订单数(卖家实际支付的金额!=0,说明订单商家收到过款)
    key = '到款订单数'
    df_trans = df_payed[df_payed['买家实际支付金额'] !=0]
    buy_dict[key]=len(df_trans)
    buy_dict[key]
    
    # 全额贷款订单数
    key = '全额贷款订单数'
    df_trans_full = df_payed[df_payed['退款金额'] ==0]
    buy_dict[key]=len(df_trans_full)
    buy_dict[key]
    
    # 查看转化数据
    buy_dict
    
    df_convs = pd.Series(buy_dict,name ='订单数' ).to_frame()
    df_convs
    
    # 总体转化率
    # 添加总体转化率,每个环节除以总订单数
    name = '总体转化率'
    total_convs = df_convs['订单数']/df_convs.loc['总订单数','订单数'] * 100
    df_convs[name] = total_convs.apply(lambda x : round(x,0))
    df_convs
    
    # 单一转化率
    # 添加单一环节转化率,每个环节除以上个环节
    name = '单一环节转化率'
    single_convs = df_convs['订单数'].shift()
    df_convs[name] = single_convs.fillna(df_convs.loc['总订单数','订单数'])
    df_convs[name] = round((df_convs['订单数']/df_convs[name] * 100),0)
    df_convs
    
    
    
    
    
    # 整体订单数趋势
    df_trans['订单创建时间'] = df_trans['订单创建时间'].astype('datetime64')
    df_trans = df_trans.set_index("订单创建时间")
    df_trans.head()
    
    import matplotlib
    matplotlib.rcParams['font.sans-serif'] = ['SimHei']
    se_trans_month = df_trans.resample('D')['订单编号'].count()
    se_trans_month.plot()
    se_trans_month.name
    
    # 可以看到在二月的上半月,企业很多由于新年而未复工,快递大多停运,无法发货
    # 下半月企业复工,订单逐渐上涨。
    
    df_trans['买家实际支付金额'].mean()
    
    
    
    
    # 销量区域分布
    import matplotlib
    matplotlib.rcParams['font.sans-serif'] = ['SimHei']
    se_trans_map = df_trans.groupby('收货地址')['收货地址'].count().sort_values(ascending=False)
    plt.figure(dpi=100)   
    se_trans_map.plot(kind='bar')
  • 相关阅读:
    震撼光效:Geomerics Enlighten Demo at GDC 2010
    CryEngine3SDK尝鲜
    李嘉诚:没有人愿意贫穷,但出路在哪(转自意林)
    OGRE手册脚本<texture_unit>
    《OgreBeginner'sGuidede》第七章翻译(原)
    李彦宏15年前搜索专利曝光:谷歌创始人拾惠(转)
    中国大侠vs生化战士(转)
    OGRE主要渲染流程简介(转)
    好运设计(史铁生散文)
    游戏设计的秘密——翻译GDC2010 blizzard的一个演讲【转】
  • 原文地址:https://www.cnblogs.com/spp666/p/13654064.html
Copyright © 2011-2022 走看看