超市销售数据分析python_Python实现超市关键指标数据分析

超市月报表关键指标计算

业务背景:

现在有一个超市2017年和2016年1月和4月的经营数据,需要了解2017年4月的营业情况如何,营业情况的核心指标用销售额、客流量、客单价这三个指标来反映,这三个指标将会直接影响公司的盈利情况。

但是如何去评判这三个指标的发展情况呢?我们可以通过对比来进行比较,那么和谁去对比呢,最先对比的就是相邻的时间段,也就是和上个月比;再然后就是和相邻时间段的同一时间段,也就是去年的同期做对比,这样就可以综合反映本月各指标的发展情况。

计算指标:

1、计算2017年4月销售额、客流量、客单价

2、计算2017年4月的同比销售额、客流量、客单价

3、计算2017年4月的环比销售额、客流量、客单价

说明:

1、销售额 = 售价 乘 销量 = ["Price"] 乘 ["Qty"]

2、客流量 = 订单量(客流量用订单量代替)

3、客单价 = 销售额/客流量

4、同比是指相邻时间段内的相同时间段内的数据之比,2017年的4月的同比是2016年4月的数据

5、环比是指相邻时间段内的数据之比,2017年4月的环比是2017年3月的数据。(这里没有2017年3月的数据,用2017年1月的数据代替)。

导入相关库

%matplotlib inline

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

from dateutil.parser import parse # 将字符串 转换为日期格式

plt.rcParams["font.sans-serif"]="SimHei" # 解决中文乱码

plt.rcParams["axes.unicode_minus"]=False # 解决正负号无法正确显示

导入数据

data_2017=pd.read_csv(open(r"C:\Python数据分析\2017年1月&2017年4月数据.csv"))

data_2017.head()

2017年前五行数据

2017年数据详情

data_2016=pd.read_csv(open(r"C:\Python数据分析\2016年1月&20164月数据.csv"))

data_2016.head()

2016年前五行数据

2016年数据详情

数据预处理

1、去除重复项

去重

2、时间处理

目前明细数据中已有的时间字段是SDate和STime,SDate是非时间格式,需要将该字段解析为时间格式,STime是时间格式,但是该字段是分秒粒度的,我们目前需要月维度的数据,所以需要将这两个字段中其中一个转化为月维度的数据,这里选择将SDate转化为月维度的数据。

data_2016["date"]=[parse(str(time)) for time in data_2016["SDate"]]

data_2017["date"]=[parse(str(time)) for time in data_2017["SDate"]]

data_2016["月份"]=[time.month for time in data_2016["date"]]

data_2017["月份"]=[time.month for time in data_2017["date"]]

可以看出2017年和2016年各有两个月的数据,即201601、201604、201701、201704的数据

月份

报表制作

1、本月累计数据计算

# 筛选出2017年4月数据

April_data=data_2017[data_2017['date']>=parse('2017-04-01')]

April_data.head()

2017.4数据

2017.4销售额

2017.4客流量

2017.4客单价

2、上月同期计算

# 筛选出2017年3月数据(1月代替3月)

March_data=data_2017[(data_2017["date"]>=parse("2017-01-01"))&(data_2017["date"]<=parse("2017-01-31"))]

March_data.head()

2017.3数据

2017.3销售额

2017.03客流量

2017.3客单价

3、去年同期计算

# 筛选出2016年4月数据

last_april=data_2016[data_2016["date"]>=parse("2016-04-01")]

last_april.head()

2016.4数据

2016.4销售额

2016.4客流量

2016.4客单价

编写函数减少代码

def get_month_data(data):

sale_sum=(data["Price"]*data["Qty"]).sum()

traffic_sum=data["SheetID"].drop_duplicates().count()

customer_price=sale_sum/traffic_sum

return(sale_sum,traffic_sum,customer_price)

image.png

报表汇总

data={"本月累计":[round(sale_sum),round(traffic_sum),round(customer_price)],

"环比上月":[round(sale_sum3),round(traffic_sum3),round(customer_price3)],

"去年同期":[round(sale_sum_last),round(taffic_sum_last),round(customer_price_last)]}

columns=["本月累计","环比上月","去年同期"]

index=["销售额","客流量","客单价"]

month_report=pd.DataFrame(data,index=index,columns=columns)

month_report["环比"]=(month_report["本月累计"]/month_report["环比上月"]-1)

month_report["同比"]=(month_report["本月累计"]/month_report["去年同期"]-1)

month_report[["本月累计","环比上月","环比","去年同期","同比"]]

报表汇总

根据报表汇总各项指标,发现销售额、客流量、客单价环比和同比均为下降状态,尤其销售额环比下降近35%,客单价环比下降28%,可能是由于我们选取的数据为1月份数据,为过年前夕数据,人们大量采购,有一定失真;但是同比去年4月销售额下降21%,客流量同比去年4月下降16%,说明2017.4月整体经营状况并不理想,应采取措施改善经营状况,比如促销、或激活沉睡会员等活动。

鉴于4月整体经营状况环比和同比都为下降状态,我们需对4月的各项指标进行具体分析,找出那些原因造成了这些指标变差

我们先从时间维度进行分析,具体计算指标如下:

1.计算2017年4月每日的销售额、客流量、客单价,并用图表形式展现

2.计算 2017 年 4 月中周一至周日的销售额、客流量、客单价,并用图表形式

展现

3.随机选取 2017 年 4 月中的一天,计算一天中不同小时的销售额、客流量、

客单价,并用图表形式展现

分日趋势图

# 筛选出2017年4月数据

April_data=data_2017[data_2017['月份']==4]

April_data.head()

2017.4数据前五行

# 增加一列销售额

April_data['销售额']=April_data['Qty']*April_data['Price']

April_data.head()

2017.4销售额

sale_sum=April_data.copy().groupby('SDate')['销售额'].sum()

sale_sum.plot(title='四月销售额分日趋势图')

分日趋势图

通过上图可以看出在4月9日及4月23日左右为销售的高点,4月19日为销售的最低点;应该具体查看什么原因造成了销售的高点及低点,例如:如果为线下门店,是否因为天气原因,如为线上门店,是否为网站故障等;同理针对最高点也需分析原因,是否有促销活动等。

traffic_sum=April_data[['SDate','SheetID']].drop_duplicates().copy().groupby('SDate')['SheetID'].count()

traffic_sum.plot(title='四月客流量分日趋势图')

客流量分日趋势图

由图可以看出,客流量分日趋势图与销售额分日趋势图基本重合,可以看出是由于客流量低的原因造成了销售额降低,具体分析造成客流量减少的原因。

customer_price=sale_sum/traffic_sum

customer_price.plot(title='四月客单价分日趋势图')

客单价分日趋势图

由上图可以看出4月12日客单价最低,需要结合业务的具体情况分析为什么这天客单价低,是不是这天有新品上市或者打折促销活动。

分周数据

# 增加一列,表示周几

April_data["week_num"]=[time.weekday()+1 for time in April_data["date"]]

April_data.head()

week_num

week_num=April_data.copy().groupby('week_num')['销售额'].sum()

week_num.plot(kind='bar',title='分周销售额')

分周销售额

由上图可以看出周六、周日的销售额较高

week_traffic=April_data[['SheetID','week_num']].groupby('week_num')['SheetID'].count()

week_traffic.plot(kind='bar',title = "分周客流量")

分周客流量

week_price=week_num/week_traffic

week_price.plot(title = "分周客单价")

分周客单价

由上可以看出不论分日还是分周客流量和销售额趋势基本一致,周五的客单价最低,需要结合具体业务分析情况。

分小时数据

# 随机选择一天进行分析

April_day = April_data[April_data["SDate"] == 20170430]

April_day['小时']=[int(str(time)[11:13]) for time in April_day['STime']]

April_day.head()

增加小时列

day_sale=April_day.groupby('小时')["销售额"].sum()

day_sale.plot(title='分小时销售额')

分小时销售额

traffic_day=April_day[['小时','SheetID']].groupby('小时')['SheetID'].count()

traffic_day.plot(title='分小时客流量')

分小时客流量

可以看出一天的销售高峰时9点左右,第二个高峰时16:00,可以在这两个时间段进行一些促销活动。

day_price = day_sale/traffic_day

day_price.plot(title = "分小时客单价")

分小时客单价

你可能感兴趣的:(超市销售数据分析python)