作者介绍:10年大厂数据\经营分析经验,现任大厂数据部门负责人。
会一些的技术:数据分析、算法、SQL、大数据相关、python
欢迎加入社区:码上找工作
作者专栏每日更新:
LeetCode解锁1000题: 打怪升级之旅
python数据分析可视化:企业实战案例
备注说明:方便大家阅读,统一使用python,带必要注释,公众号 数据分析螺丝钉 一起打怪升级
最后附有分析的数据,和代码欢迎自取
更多学习资料 关注微信公众号 数据分析螺丝钉,回复关键词 学习资料 领取
案例:一家运动服装品牌的销售分析。这家品牌销售跑鞋、运动衣和配件,我们的目标是通过分析2018年到2023年的月度销售数据来识别产品线的表现、季节性模式和市场趋势。
分析目标
-
识别不同产品线(跑鞋、运动衣、配件)的销售趋势。
-
分析季节性销售模式和市场变化对销售的影响。
-
基于分析结果,提出产品促销和库存管理的策略建议。
步骤
-
数据准备:整理2018年至2023年每月跑鞋、运动衣和配件的销售数据。
-
趋势分析:通过长期(多年)和短期(最近一年)数据分析,识别销售趋势。
-
模式识别:识别季节性销售模式和市场趋势。
-
策略建议:根据分析结果,提出销售策略和库存管理的优化建议。
数据模拟和可视化
首先,我们将模拟销售数据并生成一个复杂的图表,该图表尝试同时展示所有信息,但可能难以理解。然后,我们会改进这个图表,通过分离不同的数据视图来简化信息呈现,使其更容易理解。
模拟数据说明
-
跑鞋:销售稳定增长,受季节影响较小。
-
运动衣:销售存在明显的季节性波动,夏季和冬季销售较好。
-
配件:销售相对平稳,小幅增长。
改进前图表
三个产品年度增长趋势图
上图展示了从2018年到2023年所有产品(跑鞋、运动衣和配件)的销售趋势。虽然这个图表提供了全面的数据视图,但同时展示三个产品线的销售数据可能会使得信息解读变得复杂,特别是当尝试分析特定产品线的季节性模式或识别具体的增长趋势时。这个图要是你拿去汇报估计很难加工资。
改进后图表
为了简化信息的呈现并提高图表的可读性,我们将分别为每个产品线创建单独的图表。这种方法可以更清楚地展示每个产品线的销售趋势,使得季节性模式和销售波动更容易被识别。
分开三个产品趋势图
这种改进后的图表方式使得以下几点更加明显:
-
跑鞋销售趋势:展示了稳定的增长模式,几乎不受季节性波动的影响,表明跑鞋是公司的一个坚实和稳定的收入来源。
-
运动衣销售趋势:清楚地展示了明显的季节性模式,尤其是在夏季和冬季销售的增加,这可能反映了顾客对于季节性运动服装的需求变化。
-
配件销售趋势:虽然总体上呈现稳定增长,但相较于跑鞋和运动衣,其销售波动较小,表明配件作为补充产品线,为公司提供了稳定的额外收入。
对于有多个产品一个Y轴的数据,往往其中一些产品的波动会被掩盖,看不出来真实的业务趋势,通过把多产品分开单独看趋势,这种改进的可视化方法不仅使得单个产品线的趋势和模式更加容易被识别和理解,而且为制定针对性的营销和库存管理策略提供了依据。例如,基于运动衣的季节性销售模式,公司可以在需求高峰前增加库存并推出促销活动,而对于跑鞋,则可以注重全年的稳定供应和推广。
关注公众号获取更多分析思路和免费资料
参考代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 设置随机种子以确保随机数据的一致性
np.random.seed(0)
# 生成模拟的销售数据
dates = pd.date_range(start="2018-01-01", end="2023-12-31", freq="M")
shoes_sales = np.random.normal(loc=20, scale=5, size=len(dates)).cumsum() + 800
clothes_sales = (np.sin(np.linspace(0, 20, len(dates))) + np.random.normal(loc=0, scale=0.5, size=len(dates))).cumsum() + 400
accessories_sales = np.random.normal(loc=5, scale=2, size=len(dates)).cumsum() + 200
# 创建销售数据DataFrame
df_sales = pd.DataFrame({
"Date": dates,
"Shoes": shoes_sales,
"Clothes": clothes_sales,
"Accessories": accessories_sales
})
# 绘制改进前的复杂图表
plt.figure(figsize=(15, 7))
plt.plot(df_sales["Date"], df_sales["Shoes"], label="Shoes", color='blue')
plt.plot(df_sales["Date"], df_sales["Clothes"], label="Clothes", color='green')
plt.plot(df_sales["Date"], df_sales["Accessories"], label="Accessories", color='red')
plt.title("Sales Trend of All Products (2018-2023)")
plt.xlabel("Date")
plt.ylabel("Sales")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()
# 绘制改进后的简化图表(分别为每个产品线)
fig, axs = plt.subplots(3, 1, figsize=(15, 15), sharex=True)
axs[0].plot(df_sales["Date"], df_sales["Shoes"], label="Shoes", color='blue')
axs[0].set_title("Shoes Sales Trend (2018-2023)")
axs[1].plot(df_sales["Date"], df_sales["Clothes"], label="Clothes", color='green')
axs[1].set_title("Clothes Sales Trend (2018-2023)")
axs[2].plot(df_sales["Date"], df_sales["Accessories"], label="Accessories", color='red')
axs[2].set_title("Accessories Sales Trend (2018-2023)")
for ax in axs:
ax.set_ylabel("Sales")
ax.legend()
ax.grid(True)
axs[2].set_xlabel("Date")
plt.tight_layout()
plt.show()