LZH
基于 python 的超市销售数据分析
目录
一、超市销售背景及销售数据分析目的.................................................1
二、数据预处理与统计............................................................................. 2
2.1 数据预处理..................................................................................... 2
2.1.1 加载和查看数据....................................................................2
2.1.2 缺失值处理............................................................................ 2
2.1.3 数据类型规范化处理............................................................3
2.1.4 重复值处理............................................................................ 4
2.2 数据统计....................................................................................... 5
2.2.2 统计各中类商品的促销销售金额和非促销销售金额....... 6
2.2.3 统计生鲜类产品和一般产品的每周销售金额................... 7
2.2.4 统计各顾客的月消费额及总消费天数............................... 9
三、 数据分析与可视化.........................................................................13
3.1 生鲜类商品和一般商品的日销售金额分析.............................. 13
3.2 各大类商品月销售金额分析.......................................................16
3.3 促销商品和非促销商品的销售金额分析...................................19
四、 用户画像与促销策略.....................................................................22
4. 1 用户画像...................................................................................... 22
4.2 各大类商品的销售情况及规律...................................................23
4.3 分析促销对商品销售的影响.......................................................25
I
LZH
基于 python 的超市销售数据分析
一、超市销售背景及销售数据分析目的
近些年来,由于网络的快速普及,网购的兴起以及新零售行业的
改革与发展,消费者在购买商品时有了更多的对比和选择,使得传统
的超市行业面临着巨大的冲击和挑战,这也迫使超市必须改善自己的
经营理念,以及自身定位的清晰化。
超市在经营和管理中会产生大量的数据,对这些数据进行分析,超市
可以了解自身的优点与缺点,或许这些数据正是超市得以继续对抗社
会种种变化的关键。
1
LZH
基于 python 的超市销售数据分析
二、数据预处理与统计
2.1 数据预处理
2.1.1 加载和查看数据
在进行数据的处理之前,一般步骤都会先对数据进行大致上的观
察,了解数据的结构和特征。pandas 提供了大量能速便捷地处理数
据的函数和方法,它是使 Python 成为强大而高效的数据分析环境的
重要因素之一。这里使用到了 pandas 的 read_csv 函数来读取数据源。
#导入数据处理中会用到的库
import numpy as np
import pandas as pd
#读取数据源
data=pd.read_csv('../附件.csv',encoding='gbk') #这里使用了 gbk 编码对数
据源进行编译
导入进来数据之后,用 print 函数打印出数据源后方可查看到数
据。
print(data)#查看数据源
数据预览:
2.1.2 缺失值处理
在对数据进行处理和分析之前,手中的数据一般都是不太“干净”
2
LZH
基于 python 的超市销售数据分析
的,这时就需要对其进行数据的清洗工作,而缺失值往往是比较容易
被发现且比较重要的部分。
#使用 for 循环遍历出现缺失值的列
for column in list(data.columns[data.isnull().sum()>0]):
#输出存在缺失值的列
print(column)
print(data[data[column].isnull()])
#输出存在缺失值的行
数据预览:
100
运行代码后可以看到,销售数量这一列存在缺失值,并且可以知
道总共有两条记录的销售数量存在缺失值。进一步观察这两条记录发
现,其是否促销列均存在异常值(是否促销列的值只有是或否两个,
9.9 明显不满足要求)的情况。
删除存在缺失值的行记录。
#删除存在缺失值的行,上面通过对存在缺失值的行的分析,对比填充缺失值而
言将其整行数据删掉更佳合理
data.dropna(axis=0, how='any', inplace=True)
2.1.3 数据类型规范化处理
在大致观察数据源的时候,注意到了销售日期列的数值非正常日
期格式,下面进一步确定它的数据格式。
#检验销售日期的数据类型
for i in data['销售日期']:
print(type(i))
数据预览:
3
LZH
基于 python 的超市销售数据分析
从代码的运行结果可以得知销售日期列的数据为 int 格式,为了
方便后续的数据分析工作需要对其转换为日期格式。
#销售日期列的数据类型是 int 类型,将销售日期列的数据转换为 datetime 格式,
后面的数据处理会顺畅的多
data['销售日期']=data['销售日期'].astype('str')#转换成 datetime 格式
前,需要先把 int 格式转换为 str 格式
data['销售日期'] = pd.to_datetime(data['销售日期
'],format='%Y%m%d',errors='coerce')
再次验证销售日期列的数据类型后输出的结果:
销售日期列的数据类型已经由 int 格式转换为可进行多种日期
函数操作的日期格式。
2.1.4 重复值处理
重复值去重是数据清洗工作中经常碰到的问题,重复和多余的数
据会影响到数据分析的结果,但不是所有的重复数据就一定要去重。
本次处理的数据表中,经过观察可以得知,其各列的值都不能显示出
数据的唯一性。
4
LZH
基于 python 的超市销售数据分析
原数据中没有具体的订单编号等信息来求证数据是否是重复,因
为一个顾客可以在同一天之内买同一件商品,而这两条销售记录它所
有列的值都是相同的,但并不能规定这两条记录就是重复的,他们都
有自己存在的意义,而不是错误导致的重复。
2.2 数据统计
2.2.1 统计各大类商品的销售金额
源数据:
现在需要统计每个大类商品的销售金额,所以只需要用到表中的
大类名称和销售金额,其他列的数据不需要使用到。
#将原数据按‘大类名称’列进行分组且只列出‘销售金额’列的数据,然后存入新的表
max_categoriesx=data.groupby(by='大类名称').sum()['销售金额
'].sort_values(ascending=False)
print (max_categoriesx)
数据预览:
5
LZH
基于 python 的超市销售数据分析
统计完数据之后,再把刚刚新建的 DataFrame 格式的表保存到外
部文件。DataFrame 格式的表自带转换成 csv 文件的函数,可以快速
的进行数据的存储。
#将表格保存成 csv 文件
max_categoriesx.to_csv("task1_2.csv", index=True)
2.2.2 统计各中类商品的促销销售金额和非促销销售金额
原数据:
现在需要统计每个中类商品的促销销售金额和非促销销售金额,
才能得知两种销售方式之间的对比情况。
#分别从原数据中筛选中促销和非促销的销售记录并用‘中类名称’列进行分组,且只使
用‘销售金额’列的数据,然后存入新建的两个表中
middle_categoriesx_true=data[data['是否促销']=='是'].groupby('中类名称
')['销售金额'].sum()
middle_categoriesx_false=data[data['是否促销']=='否'].groupby('中类名
称')['销售金额'].sum()
# print(middle_categoriesx_true)
# print(middle_categoriesx_false)
输出这两个刚创建的表:
6