↑ 点击上方 “凹凸数据” 关注 + 星标 ~
每天更新,干活&福利不断
温馨提醒:万字长文
1 分析背景:
这是kaggle上的一份巴西传统线下汽车服务类连锁店的实际销售数据,大小约3.43G,包含了从2017年3月31日到2020年4月1日大约2600万多的销售数据。
分析该数据集可以探究该连锁店的销售情况,产品的分布,可以对客户进行细分,精细化销售,对员工的生产力进行分析。
这里是利用Python结合Tableau来进行分析,可视化用的Tableau,部分分析用的Python。
数据解读:
2 分析框架
3 数据清洗
3.1 读取数据,看看总体情况
这里的数据集比较大,Anaconda加载的数据都暂时存在内存里,笔者刚开始用的8G内存,一下子就满了,这里建议8-12G的内存左右,或者关闭一些暂时不用先的软件。
# 导入相关包
import numpy as np
import pandas as pd
# 读取数据,设置分割符号
file_path = r'F:\ales Report.csv\Sales Report.csv'
df = pd.read_csv(file_path, iterator=True, sep=';')
data = df.get_chunk(30000000)
data.info()
输出:
这里的销售时间是object类型,要转换成datetime类型,先记录下。
# 查看NULL的数据:
data.isnull().sum()
输出:
这里的数据比较干净,都没有NULL值这些。
查看数据的标准差,最大,最下值这些:
data.describe()
输出:
这里的数据量比较多,数据相对比较大,这里很明显可以看出的Product Cost这里有个负数,查看这些数据:
data[data['Product Cost'] <= 0]
输出:
len(data[data['Product Cost'] < 0])
输出:
这里按照字面的意思理解是每销售出一个该产品的成本,这里为负数,暂且这里当异常数据去处理,这里的数据量也不多,只有20条,直接删除处理。实际,得和业务进行沟通,查看该指标的具体意思,和该负数情况的发生是出于什么情况来进行分析。
删除这些数据:
data.drop(index=data[data['Product Cost'] < 0].index, inplace=True)
3.2 删除重复的数据
# 数据清洗,这里有489567条数据是重复的,删除这些数据
data[data.duplicated()]
输出:
# 删除重复的数据
# 这里的重复的数据是完全重复的,所有的值都是相同的,
# 这里只能判断为异常数据,直接删除掉
data.drop(index=data[data.duplicated()].index, inplace=True)
3.3 日期转换格式
data['Sale Date Time'] = pd.to_datetime(data['Sale Date Time'])
data.info()
输出:
至此,数据清洗完毕,可以进行分析。
4 分析
4.1 总体情况
4.2 时间角度
4.2.1 年销售额情况
2017年只有前9个月的销售额,2020年只有前4个月的销售额。
2019年总销售额达到718306933,环比2018年的680191151,增长5.6%。
4.2.2 季度的销售额情况
2017第二季度开始到2018年底订单量成直线式上涨,2019年较平稳。
2017年该连锁店出于疯狂生长期,订单量、销售额均呈现直线上升趋势。
2019年第四季度订单量:208548,销售额达到206513981,订单量、销售金额均达到历史峰值。
4.2.3 月的销售情况
2017年各月份的销售金额,呈上涨趋势,其中17年下半年上涨趋势较明显,18、19年呈现较稳定的状态;结合各月份,连锁店的数量。
可以得出结论:2017年下半年连锁店数量的增加带动销售金额明显的上涨。
结合2018、2019年对比,该连锁店的销售额不受季节的影响,12月为了冲业绩,销售额会上涨一些。
4.2.4 周的销售情况
周的销售金额总体上先呈现上升,然后趋向于较稳定的状态。
周的订单量处于动态的平衡当中,可以看出随着时间的增长,每张订单的购买金额逐渐增加。
4.2.5 日的销售情况
总体来说,这里只有2018年6月1日左右时间段的销售金额有异常,这段时间既有极大值,也有极小值。具体原因可以深入查明一下。
这里的日销售额呈现周期性规律,也就是有6天销售额处于较高的,有一天的销售额是处于最低的,结合工作日权重,可以看出,巴西人民再周日的购买欲望较低,或者该商圈处于写字楼附近。