天猫订单分析

2020-06-08  本文已影响0人  Mandygoon

项目:利用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、东部沿海和川渝、广东地区产生的订单数较多。

上一篇下一篇

猜你喜欢

热点阅读