对kaggle获取的超市销售情况进行数据分析【Sql】

简单说点

本次项目所采用的数据集比较小,共1000条,数据比较干净,而且数据波动不大,怀疑数据被预处理过,所以直接选用Sql进行简单的数据分析,可视化比较少。


一、数据处理

根据从kaggle获取的数据源,对数据进行简单的数据处理,便于后续的数据分析。

源数据如下
数据源

首先,修改表格数据类型,便于后续计算

源数据日期类型是“月/日/年 如:5/18/2019”,个人认为有点难理解,使用STR_TO_DATE函数将其转化为“年-月-日”的日期类型,一并设置主键以及将金额相关的设置为NUMERIC数据类型。

-- 设置主键
ALTER TABLE supermarket_sales_data MODIFY invoice_id VARCHAR ( 255 ) PRIMARY KEY;

-- 设置其他时间数据类型【注意分隔符】

-- 时间类型
UPDATE supermarket_sales_data set buy_date = STR_TO_DATE(buy_date,'%m/%d/%Y');
UPDATE supermarket_sales_data set buy_Time = STR_TO_DATE(buy_Time,"%H:%i");

-- 设置numeric数据类型
ALTER TABLE supermarket_sales_data MODIFY Unit_price NUMERIC (12,2),
MODIFY `Tax_5%` NUMERIC (12,2),MODIFY Total NUMERIC(12,2),
MODIFY cogs NUMERIC (12,2),MODIFY gross_income NUMERIC (12,2),
MODIFY gross_margin_percentage NUMERIC (12,2);

其次,剔除空值、重复值等垃圾数据。

这里采取一种新的思路,如果数据字段较多,一个一个字段重复的检查会比较繁琐,所以利用源数据重新创建一张无空值和重复值的数据表。

-- 删除空值【这里只检测Total,因为源数据无空值】
INSERT INTO supermarket_sales_data(invoice_id) VALUES("555");
DELETE FROM supermarket_sales_data AS s WHERE Total is null;

-- 删除重复值【这里采用新思路,直接创建一个无重复值的新表,空值也可以,如果字段太多】
CREATE TABLE supermarket_perfect_data ( SELECT DISTINCT * FROM supermarket_sales_data )

最后,检查有无其他垃圾数据

因为该数据是2019年第一季度的销售数据,所以排除其他无关数据。

-- 筛选无关数据
SELECT *
FROM supermarket_sales_data
WHERE buy_Date NOT BETWEEN "2019-01-01" AND "2019-04-01"

二、数据分析

1.计算不同商店月环比

*月环比公式:(本月营收-上月营收)/ 上月营收 100%

使用with as 语句简化sql子查询,并用round函数保留两位小数,最后用concat函数将数值和“%”连接。这样做又有一个缺点,就是数据类型变了。

注意:需要判断这个月是不是1月以及上个月是否有数据,因为环比是跟上个月数据作比较,今年1月的上一个月就是去年的12月,如果上个月没数据的话,那除数就是0,会出错

-- 月环比计算

-- 1.计算月收入
WITH monthIncome AS
(
	SELECT Branch,YEAR(buy_Date) AS 年份,MONTH(buy_Date) AS 月份,SUM(gross_income) AS 月销售总收入
	FROM supermarket_sales_data
	GROUP BY Branch,MONTH(buy_Date)
	ORDER BY Branch
)

-- 2.分别计算不同品牌的月环比
SELECT t1.Branch,CONCAT(t1.年份,"-",t1.月份) AS 时期,t1.月销售总收入,
(CASE
	WHEN t2.月销售总收入 IS NULL THEN "上月无销售数据"
	ELSE t2.月销售总收入
END) AS 上月销售总收入,
(CASE
	WHEN t2.月销售总收入 IS NULL THEN "上月无销售数据"
	ELSE
		CONCAT(ROUND((t1.月销售总收入 - t2.月销售总收入)/t2.月销售总收入,2)*100,"%")
END) AS 上月环比
FROM monthIncome as t1 LEFT JOIN monthIncome AS t2 on (t1.Branch = t2.Branch)
AND ((t1.月份 - t2.月份 = 1 AND t1.年份 = t2.年份) OR (t1.月份 = 1 AND t2.月份 = 12 AND t1.年份 = t2.年份 +1))

月环比效果图

2.购物高峰期和各个超市的季度利润

-- 购物高峰期
SELECT HOUR(buy_Time) AS 时间,COUNT(*) AS 进店人数
FROM supermarket_sales_data
GROUP BY HOUR(buy_Time)
ORDER BY 进店人数 DESC

-- 计算各个超市的利润
SELECT City,SUM(Total - cogs) as profit
FROM supermarket_sales_data
GROUP BY City
ORDER BY profit;

3.会员人数及热销商品

-- 会员人数
SELECT Customer_type,count(*) 人数
FROM supermarket_sales_data
GROUP BY Customer_type

-- 热销商品
SELECT Product_line,count(*) AS 销售数量
FROM supermarket_sales_data
GROUP BY Product_line
ORDER BY 销售数量 DESC

4.不同支付方式

-- 不同超市支付方式占比
-- 获取不同超市名称及所消费人数
WITH cntAll AS (
	SELECT Branch,COUNT(*)  AS cnt
	FROM supermarket_sales_data 
	GROUP BY Branch 
	),
-- 获取不同支付方式的人数
cntOwn AS(	
SELECT sp.Branch AS 品牌,Payment AS 支付方式,COUNT(*) AS 本商店计数,cnt 
FROM supermarket_sales_data AS sp JOIN cntAll ON sp.Branch = cntAll.Branch
GROUP BY sp.Branch,Payment
ORDER BY sp.Branch
)
-- 计算占比
SELECT 品牌,支付方式,本商店计数,CONCAT(ROUND(本商店计数/cnt,2)*100,"%") AS 本店占比
FROM cntOwn

三、可视化

由于这个数据非常简单,并且数据量较少,我直接使用了Navicat Premium进行简单的可视化分析

不同分店的支付人数占比

从上图可以看出,每个分店的进店支付人数相对均衡,可以说明该超市受众群体大致相同

品牌营收额

从上品牌营收额图表也可以看出各个不同品牌之间的营收额差距并不大,可以看出该超市的各个产品都受人喜爱,或者是产品类较少等其他原因,购买的人较少,因为营收额都不高

城市分店营收额

从上营收额数据表可以看出,三个不同城市的超市分店营收额大致相同但是相对来说,营收额偏低。


总结

我们使用了Sql对从kaggle获取的数据进行分析,在分析过程中及以上图表,大家可以看出该超市的不同分店各个方面都相对均衡,包括进店消费人数、评分、会员等情况,并且营收额都不算太高,我们可以猜测,该超市的规模不算太大,且受众群体变化不大,一般以老顾客为主,收入比较稳定;也可以间接推断出该超市所在城市较小,人员流动较少。 还有一种可能是该数据被人修改过,并不是源数据。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQL客户数据分析案例的具体实施可以根据客户的需求不同而有所不同。通常可以从以下几个方面入手:1)调查客户的业务,确定分析目标;2)收集和清理数据;3)使用SQL技术分析客户数据;4)将分析结果可视化展示出来;5)对分析结果进行总结和分析,以支持客户的决策。 ### 回答2: SQL客户数据分析案例是指通过SQL语言对企业的客户数据进行分析和挖掘,从中得出有价值的信息和洞见,为企业决策和战略制定提供支持。 一个实际的案例是某电商企业进行客户行为分析。该企业想要了解客户的购物喜好、消费水平和购买行为等信息,以便制定精确的营销策略和个性化推荐。 首先,从企业的数据库中提取所需的客户数据。通过SQL语句,可以选择需要的数据表和字段,并进行筛选和排序,如选择购买时间、购买金额、商品种类、用户性别等信息。 接下来,可以使用聚合函数和GROUP BY语句进行统计分析。例如,可以使用COUNT函数计算总客户数、购买次数。使用SUM函数计算总销售额、平均购买金额等。通过GROUP BY语句,还可以按照商品种类或地理位置对客户进行分组,进一步进行分析。 另外,还可以通过SQL语句进行数据的关联和连接,得出更全面的分析结论。例如,可以将客户的购买行为与其个人资料信息进行连接,来分析不同性别、年龄段或地区的客户消费习惯。 最后,通过SQL语句提取出的结果,可以使用可视化工具进行图表展示,如柱状图、饼图等,更直观地向决策者展示分析结果。 总之,SQL客户数据分析案例通过对数据的提取、排序、统计和关联等操作,可以帮助企业进行客户行为分析和市场营销策略的制定,提高企业的竞争力和盈利能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值