欢迎回到“公开数据探索分析”系列!这是系列的第二部分。在上一部分中,完成了一系列数据清洗与初步探索工作。具体而 […]
欢迎回到“公开数据探索分析”系列!这是系列的第二部分。在上一部分中,完成了一系列数据清洗与初步探索工作。具体而言,主要包括:
Revenue(收入)列。至此,已经获得了一个干净、可用于收入分析的Pandas DataFrame,随时可以从中挖掘洞察。本系列的目标是掌握使用Pandas进行探索性数据分析。数据爱好者可以跟随学习。
现在,重点将转向为NovaShop提供真正具有影响力的商业智能。第二部分的总体目标是回答两个基本问题:哪些产品表现最佳,以及何时是销售它们的最佳时机?
这部分内容将围绕使用强大的Pandas聚合技术(.groupby())以及利用日期时间列进行特征工程(.dt访问器)展开分析。分析将分为两个关键领域:
接下来,直接进入正题。
为了提高性能,可以将清洗后的数据集导出并重新导入进行分析。
df.to_csv('online_retail_clean.csv', index=False)
现在,可以创建一个新项目并重新开始。
加载包含日期列的CSV文件时,建议使用pd.read_csv()中的parse_dates参数。这样可以省去后续手动转换列类型的步骤,确保日期特征从一开始就是正确的。
import pandas as pd
df = pd.read_csv('online_retail_clean.csv', parse_dates=['InvoiceDate'])
print(f"成功加载清洗后的数据。总行数: {len(df)}")
输出:
成功加载清洗后的数据。总行数: 52933
加载干净数据后,直接切入产品表现分析。衡量“畅销品”有两种不同维度:按销量(售出数量)或按价值(产生的收入)。
销量列表揭示了哪些产品受欢迎且需求量大,即使其单价较低。这对于仓库备货和库存管理至关重要。
将按产品Description分组,对Quantity求和,并降序排序。
# 销量前十的畅销品(按数量)
df.groupby(‘Description’)[‘Quantity’].sum().sort_values(ascending=False).head(10)
输出:
Description
MEDIUM CERAMIC TOP STORAGE JAR 74698
WORLD WAR 2 GLIDERS ASSTD DESIGNS 9419
GIN + TONIC DIET METAL SIGN 5016
ASSORTED COLOURS SILK FAN 4684
JUMBO BAG RED RETROSPOT 4671
PACK OF 72 RETROSPOT CAKE CASES 3561
MINI PAINT SET VINTAGE 3285
ASSORTED COLOUR BIRD ORNAMENT 2783
BROCADE RING PURSE 2525
POPCORN HOLDER 2508
Name: Quantity, dtype: int64
这是NovaShop真正想了解的信息。这些产品驱动着盈利能力。它们可能不像前一个列表中的商品那样销量巨大,但其更高的单价或更大的批量订单使其价值远高于前者。
遵循相同的过程,但这次对第一部分中构建的Revenue列进行聚合。
# 收入前十的驱动产品(真正的利润贡献者)
df.groupby(‘Description’)[‘Revenue’].sum().sort_values(ascending=False).head(10)
输出:
Description
MEDIUM CERAMIC TOP STORAGE JAR 77785.74
DOTCOM POSTAGE 18456.13
REGENCY CAKESTAND 3 TIER 15093.38
AMAZON FEE 13541.33
PARTY BUNTING 9491.60
GIN + TONIC DIET METAL SIGN 9480.51
JUMBO BAG RED RETROSPOT 8996.65
Manual 8966.96
CHILLI LIGHTS 8395.20
POSTAGE 7194.51
Name: Revenue, dtype: float64
讨论:这些列表告诉NovaShop什么
这正是EDA(探索性数据分析)力量的体现,因为这两个列表讲述了一个截然不同的故事:
至此,对NovaShop销售最佳的产品有了完整的了解。接下来需要弄清楚销售时机!
已经知道什么商品卖得好。现在,需要找出销售高峰期。目标是将InvoiceDate列分解为允许按年、月、日甚至小时分组和分析销售的组件。
这是一个经典的特征工程步骤。由于已经确保InvoiceDate是一个正确的Pandas datetime对象(得益于加载步骤中的parse_dates参数),因此可以使用极其有用的.dt访问器。
为了理解季节性(月度)和运营效率(小时),将创建四个新列。
生成这些列:
print(“ — — 时间序列特征提取 — -”)从 InvoiceDate 列提取 Year, Month, DayName, 和 Hour
df[‘Year’] = df[‘InvoiceDate’].dt.year
df[‘Month’] = df[‘InvoiceDate’].dt.month
df[‘DayName’] = df[‘InvoiceDate’].dt.day_name()
df[‘Hour’] = df[‘InvoiceDate’].dt.hour
print(“已添加新的时间特征:Year, Month, DayName, Hour。”)
print(df[[‘InvoiceDate’, ‘Year’, ‘Month’, ‘DayName’, ‘Hour’]].head())
输出:
--- 时间序列特征提取 ---
已添加新的时间特征:Year, Month, DayName, Hour。
InvoiceDate Year Month DayName Hour
0 2011-06-01 12:05:00 2011 6 Wednesday 12
1 2011-05-27 17:14:00 2011 5 Friday 17
2 2011-04-21 17:05:00 2011 4 Thursday 17
3 2011-11-16 10:39:00 2011 11 Wednesday 10
4 2011-03-10 08:40:00 2011 3 Thursday 8
很好!接下来可以直接进入下一部分,绘制销售模式。
准备好时间特征后,现在可以提出并回答关于销售发生时间的问题。将从宏观(月度趋势)开始,逐步深入到微观(小时趋势)。
月度聚合对于发现季节性至关重要——即每年重复出现的可预测销售模式。这些数据用于财务预测和为旺季规划库存水平。
将按Month列分组,并计算每个月的总收入。
print(“
— — 洞察4:月度销售趋势(季节性) — -”)
# 按月份分组并汇总收入
monthly_revenue = df.groupby(‘Month’)[‘Revenue’].sum().sort_values(ascending=False)
# 打印结果,应显示季节性高峰
print(monthly_revenue)
输出:
--- 洞察4:月度销售趋势(季节性) ---
Month
11 143576.360
1 142013.420
12 133178.980
10 119533.540
9 103929.420
3 72968.270
8 71302.890
5 70424.510
6 68722.520
7 68713.831
4 51882.010
2 50178.730
Name: Revenue, dtype: float64
解读:强劲的第四季度与一月份惊喜
数据清楚地显示,NovaShop的销售严重倾向于年底,证实了典型的零售第四季度(十月、十一月、十二月)销售热潮。
季节性关乎财务和库存,而每日和每小时趋势则关乎运营。NovaShop可以利用这些信息来安排仓库人员、优化广告支出以及安排电子邮件营销活动的时间。
这里将运行两个独立的聚合:一个是按星期几,另一个是按一天中的小时。
按星期几的收入
# 1. 按星期几的收入
daily_revenue = df.groupby(‘DayName’)[‘Revenue’].sum()
print(“
— — 按星期几的收入 — -”)
print(daily_revenue)
输出:
--- 按星期几的收入 ---
DayName
Friday 163861.320
Monday 171026.230
Sunday 83125.890
Thursday 219342.980
Tuesday 282796.741
Wednesday 176271.320
Name: Revenue, dtype: float64
解读:星期二是销售主力日
数据揭示了工作日清晰且可操作的规律:
按一天中小时的收入
# 2. 按一天中小时的收入
hourly_revenue = df.groupby(‘Hour’)[‘Revenue’].sum().sort_index()
print(“
— — 按一天中小时的收入 — -”)
print(hourly_revenue)
输出:
--- 按一天中小时的收入 ---
Hour
7 2830.910
8 26597.800
9 76768.750
10 209809.971
11 115233.600
12 142474.460
13 130348.290
14 119241.520
15 145178.980
16 70620.550
17 36148.030
18 14022.790
19 4397.130
20 2751.700
解读:上午晚些时候的销售热潮
小时数据直接指向运营需求:
至此,已经完成了繁重的EDA工作!知道了什么商品卖得最好(陶瓷罐和费用),销售在哪里最强(英国),以及销售高峰何时出现(第四季度、星期二和上午10点)。
然而,仍然缺少最有价值的一块拼图:顾客是谁。优秀的公司不仅知道什么商品畅销,还知道谁是他们最有价值的顾客以及如何留住他们。
在第三部分中,将深入本系列最先进的分析技术:RFM(最近一次消费、消费频率、消费金额)顾客细分。这将能够将顾客分类为“冠军顾客”、“忠诚顾客”和“有流失风险顾客”等层级,为NovaShop提供真正的个性化营销路线图。
免费获取企业 AI 成熟度诊断报告,发现转型机会
关注公众号

扫码关注,获取最新 AI 资讯
3 步完成企业诊断,获取专属转型建议
已有 200+ 企业完成诊断