关于超市零售数据的Python数据分析实战!有超市找我做外包的吗?

本文通过对一家全球超市四年的销售数据进行Python分析,涵盖销售额、销量、利润、复购率等方面,揭示了销售额季节性、商品结构、用户行为等关键信息,为提升销量提供了策略建议。
摘要由CSDN通过智能技术生成

一、明确需求和目的

  • 对一家全球超市的四年(2011-2014)销售数据进行“人、货、场”分析,并给出提升销量的针对性建议。
  • 场:整体运营情况分析,包括销售额、销量、利润、客单价、市场布局等具体情况分析。
  • 货:商品结构、优势/爆款商品、劣势/待优化商品等情况分析。
  • 人:客户数量、新老客户、RFM模型、复购率、回购率等用户行为分析。

二、数据介绍

  • 数据来源于Kaggle平台,这是一份全球大型超市五年的零售数据集,数据详尽。
  • 数据集为superstore_dataset2011-2015.csv,共有51290条数据,每条数据共24个特征。

三、数据预处理

3.1 加载相关库和数据集

# 加载数据分析需要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings

plt.rcParams['font.sans-serif'] = ['SimHei']  # 替换sans-serif字体
plt.rcParams['axes.unicode_minus'] = False  # 解决坐标轴负数的负号显示问题
warnings.filterwarnings('ignore')  # 抑制第三方警告

# 使用"unicode-escape"编码方式加载数据集
df = pd.read_csv('./superstore_dataset2011-2015.csv', encoding='unicode-escape')
df.head()

首先看一下数据集的大小:

df.shape
> (51290, 24)

再看一下数据的分布概况:

df.describe()

3.2 列名重命名

从上面展示的数据可以发现其列名不符合Python的命名规范,因此采用下划线命名法对列名进行重命名:

df.rename(columns=lambda x: x.replace(' ', '_').replace('-', '_'), inplace=True)
df.columns

3.3 数据类型处理

首先查看各列的数据类型:

df.dtypes

可以看到大部分列的数据类型是object,其中销量(Quantity)、销售额(Sales)、利润(Profit)等为数值型,不需要进行数据类型转换。另外,订单日期(Order_Date)的类型应为datetime,因此需要对其进行转换。

df['Order_Date'] = pd.to_datetime(df['Order_Date'])
df['Order_Date'].sample(5)

为了便于分析每年和每月的销售情况,增加“Year”列和“Month”列:

df['Year'] = df['Order_Date'].dt.year
df['Month'] = df['Order_Date'].values.astype('datetime64[M]')
df[['Year', 'Month']].sample(5)

3.4 缺失值处理

先查看一下数据的缺失情况:

df.isnull().sum(axis=0)

发现“Postal_Code”列的缺失值非常多,该列表示的是邮编信息,显然对我们的分析没有太大作用,因此可直接删除该列。

df.drop(['Postal_Code'], axis=1, inplace=True)

3.5 异常值处理

df.describe()

从上面展示的结果可以确定没有明显的异常值,因此不需要进行处理。

3.6 重复值处理

先查看一下是否有重复值:

df.duplicated().sum()
> 0

说明没有重复值,因此不需要进行处理。

四、数据分析

4.1 整体销售情况分析

首先构造整体销售情况的子数据集:

# 包含:订单日期、年份、月份、销售额、销量、利润
sales_data = df[['Order_Date', 'Year', 'Month', 'Sales', 'Quantity', 'Profit']]
sales_data.sample(5)

然后按照年份、月份对销售子数据集进行分组求和:

sales_year = sales_data.groupby(['Year', 'Month']).sum()
sales_year

接着对以上进行分组求和后的数据进行拆分,将每一年的数据作为独立的表:

year_2011 = sales_year.loc[2011:2011,:].reset_index()
year_2012 = sales_year.loc[2012:2012,:].reset_index()
year_2013 = sales_year.loc[2013:2013,:].reset_index()
year_2014 = sales_year.loc[2014:2014,:].reset_index()
year_2014

4.1.1 销售额分析

# 构建销售额表
sales = pd.concat([year_2011['Sales'],year_2012['Sales'],
                  year_2013['Sales'],year_2014['Sales']], axis=1)

# 对行名和列名进行重命名
sales.columns = ['Sales_2011', 'Sales_2012', 'Sales_2013', 'Sales_2014']
sales.index = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']

# 添加颜色:颜色越深表示销售额越高
sales.style.background_gradient()

  • 从上图可以看出基本上每一年下半年的销售额都比上半年要高,而且随着年份的增大ÿ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值