python数据分析实战之超市零售分析

明确需求和目的

对一家全球超市四年(2011-2014)的销售数据进行 “人、货、场”分析,并给出提升销量的针对性建议。

场:整体运营情况分析,包括销售额、销量、利润、客单价、市场布局等具体情况分析。

货:商品结构、优势/爆款商品、劣势/待优化商品等情况分析。

人:客户数量、新老客户、RFM模型、复购率、回购率等用户行为分析。

数据收集

数据来源为kaggle平台,这是一份全球大型超市四年的零售数据集,数据详尽。

数据集为 “superstore_dataset2011-2015.csv”,共有51290条数据,共24个特征。

数据预处理

1、数据整合

1.1 加载相关库和数据集

使用的库主要有:pandas、numpy、matplotlib、seaborn

使用的数据集: superstore_dataset2011-2015.csv

# 加载数据分析需要使用的库
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']
warnings.filterwarnings('ignore')


# 加载零售数据集,使用'ISO-8859-1'编码方式
df = pd.read_csv('superstore_dataset2011-2015.csv',encoding='ISO-8859-1') 
df.head()

file

1.2 数据概览

首先看一下数据集大小(行列信息):

df.shape
---------------
(51290, 24)

看一下数据概况:

# df.info()
df.describe()

file

2、数据清洗

2.1 列名重命名

从上面发现列名不符合Python的命名规范,对列名进行一下重命名,采用下划线命名法:

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

看一下重命名后的列名:

df.columns
-----------------
Index(['Row_ID', 'Order_ID', 'Order_Date', 'Ship_Date', 'Ship_Mode',
       'Customer_ID', 'Customer_Name', 'Segment', 'City', 'State', 'Country',
       'Postal_Code', 'Market', 'Region', 'Product_ID', 'Category',
       'Sub_Category', 'Product_Name', 'Sales', 'Quantity', 'Discount',
       'Profit', 'Shipping_Cost', 'Order_Priority'],
      dtype='object')

2.2 数据类型处理

查看一下各个列的数据类型:

df.dtypes
-----------------
Row_ID              int64
Order_ID           object
Order_Date         object
Ship_Date          object
Ship_Mode          object
Customer_ID        object
Customer_Name      object
Segment            object
City               object
State              object
Country            object
Postal_Code       float64
Market             object
Region             object
Product_ID         object
Category           object
Sub_Category       object
Product_Name       object
Sales             float64
Quantity            int64
Discount          float64
Profit            float64
Shipping_Cost     float64
Order_Priority     object
dtype: object

从上面看到,大部分为object类型,销量、销售额、利润等为数值型,不需要进行数据类型处理。下单日期应为datetime类型,需要进行处理。

df["Order_Date"] = pd.to_datetime(df["Order_Date"]) 
df["Order_Date"].sample(5)
----------------------------------
9319    2013-04-10
30390   2012-03-19
31025   2013-08-19
32210   2014-03-20
43430   2012-11-26
Name: Order_Date, dtype: datetime64[ns]

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

df['year'] = df["Order_Date"].dt.year
df['month'] = df['Order_Date'].values.astype('datetime64[M]')

2.3 缺失值处理

查看缺失值情况:

df.isnull().sum(axis=0)
----------------------------
Row_ID                0
Order_ID              0
Order_Date            0
Ship_Date             0
Ship_Mode             0
Customer_ID           0
Customer_Name         0
Segment               0
City                  0
State                 0
Country               0
Postal_Code       41296
Market                0
Region                0
Product_ID            0
Category              0
Sub_Category          0
Product_Name          0
Sales                 0
Quantity              0
Discount              0
Profit                0
Shipping_Cost         0
Order_Priority        0
year                  0
month                 0
dtype: int64

发现有一列缺失值比较多,此列表示邮编信息,对我们的分析没有太多作用,可直接删除:

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

2.4 异常值处理

简单查看一下是否有异常值:

df.describe()

file

没发现明显的异常值,不需要进行处理。

2.5 重复值处理

看一下是否有重复值:

df.duplicated().sum()
---------------------
0

也没有重复值,不需要进行处理。

数据分析

1、整体销售情况分析

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

# 整体销售情况子数据集,包含下单日期、销售额、销量、利润、年份、月份信息
sales_data = df[['Order_Date','Sales','Quantity','Profit','year','month']]
sales_data.sample(5)  
------------------------------
        Order_Date    Sales    Quantity    Profit    year    month
45436    2014-11-27    38.040    2       
  • 9
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值