电商数据分析

天猫订单分析
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')
原文地址:https://www.cnblogs.com/spp666/p/13654064.html