该项目来自和鲸社区天猫订单数据分析
该项目本来使用的是Python语言,但因自身的SQL+Excel实战经验较少,使用SQL+Excel进行分析。
分享给大家,如有错误,烦请指出!
对2020年2月份的真实天猫订单成交数据(共28010条记录)进行数据分析,阐述销售现状、挖掘潜在规律、发现存在问题、提出可行性建议。
数据集介绍:
数据集来自和鲸,包含了天猫2020年2月份的共28010条订单数据,有以下7个字段:
MySQL、VScode、Excel、Python
分析目的:天猫2月份的订单情况,给出策略以提高销售额
思路:因为该数据只有订单的信息,首先使用多维度拆解分析方法把订单拆解为付款金额、付款时间、付款地区,并根据付款的业务流程,分析提交订单、付款以及退款的转化率。
1、根据付款金额区间将订单进行分组,查看每个区间的订单量分布。使用对比方法分析不同区间的数据指标。例如不同区间的销售额、销量、退款率。
2、根据付款金额将订单进行分组,查看月、周、日销售额、销量的变化趋势
3、根据付款地区将订单进行分组,查看每个地区的销售额和销量
优质的数据总是胜过优质的模型。
参考:将CSV文件导入MySQL表
从和鲸社区下载order_report.csv 数据集,保存至mysql.ini文件规定的目录下
SQL语句创建表tmall
CREATE TABLE tmall(
order_id int NOT NULL PRIMARY KEY COMMENT 'Primary Key',
total_amount float(9,1) NOT NULL COMMENT 'total amount',
actual_amount float(9,1) NOT NULL COMMENT 'actual amount',
address VARCHAR(255) NOT NULL COMMENT 'content',
order_time DATETIME NOT NULL,
pay_time DATETIME,
refund_amount float(9,1)
) DEFAULT CHARSET UTF8 COMMENT 'newTable';
将数据从csv文件导入tmall表中
LOAD DATA INFILE 'C:/web/xxxx/uploads/order_report.csv'
INTO TABLE tmall
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
查看tmall表结构
desc tmall
用count函数计算每个字段不为NULL的行数
发现实际付款金额存在缺失值,但实际生活中存在下单但是不付款的情况,而且在建表时’订单付款时间’数据字段设置可空,因此没有出现错误数据,判断不需要对其进行处理。
忽视异常值的存在是十分危险的,如果不加剔除地把异常值包括进数据的计算分析过程中,那么将对结果会带来不良影响。
参考知乎博客:异常值处理
计算数字的关键特征。可以运用五数概括法对每个变量进行分析:最小值(min)、下四分位数(第 25 个百分位数)、平均值(mean)或中位数(median)、上四分位数(第 75 个百分位数)和最大值(max)。并通过箱线图、直方图进行可视化分析。
使用python绘制了总金额的箱线图:
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('C:/web/xxx/uploads/order_report.csv')
plt.boxplot((data['总金额']),labels=('x'))
plt.show()
发现有一个订单总金额超过了175000,并且通过查找该订单也没有实际付款,所以该订单被认为是异常值删除。
对实际支付金额、退款金额进行箱线图可视化,均为发现有异常值。
验证使用count(distinct xx)计算的行数是否和总行数一致,如果一致说明没有出现重复值。
也可以通过group by查找重复的行
描述性分析的目的是展现样本的关键数字特征,它应该阐明可以概括数据内分布的关键数字
例如:最小值(min)、下四分位数(第 25 个百分位数)、平均值(mean)或中位数(median)、上四分位数(第 75 个百分位数)、最大值(max)、分布类型等等。
计算2月份每天的成交金额GMV和订单数。
GMV:成交金额,属于电商平台的成交类指标,主要指拍下订单的总金额,包含付款和未付款两部分。
select DATE_FORMAT(order_time,"%Y-%m-%d") as day, sum(total_amount) as gmv,
count(*) as order_num
from tmall
group by day
order by day
into outfile 'C:/web/mysql-8.0.19-winx64/uploads/day_order.csv' fields terminated by "," escaped by '' optionally enclosed by '' lines terminated by '\n' ;
信息获取
1、2.17日之前,销售额都很少
2、2.10-2.16销售额都仅在1000内
3、2.17日的销售额持续增长,且在2.25日达到了本月最高销售额33.9万
原因分析
分析一周内的销售趋势
需要思考如何把时间类型转换为周,参考date_format函数
这里还需注意,每个月多少个周一、周二是不固定的,需要求平均
select week,
case week when 6 then order_num/5
else order_num/4 end as order_num,
case when week = 6 then total/5
else total/4 end as total
from (
select DATE_FORMAT(order_time,"%w") as week, count(*) as order_num,sum(actual_amount) as total
from tmall
group by week
order by week) t
观察到的信息:
1、每周周五销售额最高,其次是周二和周四
2、周末和周一销售额最低
分析
1、周五下班开启周末生活,大多数人可能会选择在周五购物来放松
2、周末大多数人会选择外出休闲,不会花费时间在电商购物
3、促销活动可以安排在周五
分析一天中每小时的销售趋势
# 日销售情况
select DATE_FORMAT(order_time,"%H") as hour, count(*) as order_num,sum(actual_amount) as total
from tmall
where actual_amount != 0
group by hour
order by hour
观察到的信息
1、从早上六点,销量开始提升,中午11点左右、16点左右、22点左右出现销售高峰
2、销量最高是晚上22点,销量最低是凌晨5点
分析
1、在三个销量高峰时期,可以多推送促销信息,增加销量
计算订单在每个区间的数量,和占比
使用interval()函数 和 elt()函数 对生成价格区间
使用窗口函数计算每个区间的订单量的占比
SELECT *,SUM(num)OVER(PARTITION BY price)/SUM(num)OVER() as rate
from (
SELECT ELT(interval(actual_amount,0,100,200,300,400,500),'0-100','100-200','200-300','300-400','400-500','>500') as price, count(*) as num
from tmall
group by price) t
观察到的信息
1、用户每次提交订单的额度大多在0-200内
2、用户更喜欢在20-40内下单,订单量最多
3、20元以下和400以上的订单就很少了
建议:
产品推广以价格0-200的产品为主,尤其着重推广20-40元的产品,这个价格区间的产品的订单量是最多的。
select address, sum(actual_amount) as total, count(*) as order_num
from tmall
group by address
order by total desc
获得信息
销售额最高的省市是上海,其次是北京、江苏、广东、浙江;
销售额高的省市主要集中在东部和南部沿海,以及四川省;
销售额最少的省市为西藏、青海、湖北、新疆、宁夏, 主要为西部地区。
建议
西南、中部以及东北地区有很大的发展潜力,建议先从这些地区开始开展促销提高销量。
本项目中,用户行为路径为:创建订单 -> 订单付款 -> 订单成交 -> 订单全额成交
因此计算该业务流程中的转化率。思路:需要分别计算用户提交订单数量作为下单数,用户付款的数量作为付款数,用户实际支付不为空的数量作为成交数,用户实际支付不为空且没有退款的数量作为全成交数。(这里需注意付款数和成交数不一样,付款数包括用户虽然付款但是全额退款的数量)
select pay_order/order_num, actual/order_num, fullrich/order_num
from (
SELECT count(*) as order_num, count(if(pay_time, 1, null)) as pay_order, count(if(actual_amount!=0, 1, null)) as actual,
count(if(actual_amount !=0 and refund_amount=0, 1, null)) as fullrich
from tmall) t
观察的信息
1、从0.86到0.67说明有一部分用户提交订单但是全额退款了。
2、从0.67到0.66存在1%的客户部分退款
3、绝大部分的退款行为都是全额退款
建议
需要找出大部分全额退款的原因,例如质量不达标、实物与图片不符、尺寸与标注不符、包装不好导致商品破损、快递运输过慢、发货出错、价格高于其他店铺…
2月总销售额为190.25万元。
为了增加销售,可以从以下几方面开展行动:
找到导致高退款率的原因并解决,这是目前最重要的事情;
促销活动可以安排在周五开始;
促销信息、产品推广广告的推送时间最好安排在晚上9点,其次是10点、15点;
产品推广以价格20-200的产品为主,尤其着重推广20-40元的产品;
保持优势省市的订单量,大力发展西南、中部以及东北地区的销量。