电商数据分析
天猫订单分析 Logout Python 3 可信的 File Edit View Insert Cell Kernel Widgets Help 运行 In [44]: ''' 根据天猫定订单数据集进行订单的综合分析 共有28010条数据 字段的说明: 订单编号:订单编号 总金额:订单总金额 买家实际支付金额:总金额 - 退款金额(在已付款的情况下) 收货地址:各个省份 订单创建时间:下单时间 订单付款时间:付款时间 退款金额:付款后申请退款的金额。 分析的目的: 订单每个环节的转化转化率 订单成交的时间(按天)趋势(按实际成交) 订单数(各省) ''' Out[44]: '\n根据天猫定订单数据集进行订单的综合分析\n共有28010条数据\n\n字段的说明:\n 订单编号:订单编号\n 总金额:订单总金额\n 买家实际支付金额:总金额 - 退款金额(在已付款的情况下)\n 收货地址:各个省份\n 订单创建时间:下单时间\n 订单付款时间:付款时间\n 退款金额:付款后申请退款的金额。\n \n分析的目的:\n 订单每个环节的转化转化率\n 订单成交的时间(按天)趋势(按实际成交)\n 订单数在地图上的分布\n ' 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]: '\n订单转化率:\n 总订单数\n 付款订单数 (订单提交后并将钱付给第三方)\n 到款订单数 (客户成功收货并没有申请退换货,完成交易)\n 全额到款订单数\n' 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')