天猫订单分析
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')