本文目录导读:

我来为你展示如何使用Pandas进行季节数据分组分析的完整案例。
准备环境和数据
import pandas as pd
import numpy as np
from datetime import datetime
import matplotlib.pyplot as plt
# 创建示例数据
np.random.seed(42)
date_rng = pd.date_range(start='2022-01-01', end='2023-12-31', freq='D')
data = {
'date': date_rng,
'sales': np.random.randint(100, 1000, size=len(date_rng)),
'temperature': np.random.uniform(-5, 35, size=len(date_rng)),
'product': np.random.choice(['A', 'B', 'C'], size=len(date_rng))
}
df = pd.DataFrame(data)
print("数据预览:")
print(df.head())
创建季节列的方法
方法1:使用month属性映射季节
def get_season(month):
if month in [3, 4, 5]:
return 'Spring'
elif month in [6, 7, 8]:
return 'Summer'
elif month in [9, 10, 11]:
return 'Fall'
else:
return 'Winter'
# 提取月份并映射到季节
df['month'] = df['date'].dt.month
df['season'] = df['month'].apply(get_season)
print("\n添加季节列后的数据:")
print(df[['date', 'month', 'season', 'sales']].head())
方法2:使用字典映射
# 更高效的字典映射方式
season_map = {
1: 'Winter', 2: 'Winter', 3: 'Spring', 4: 'Spring', 5: 'Spring',
6: 'Summer', 7: 'Summer', 8: 'Summer', 9: 'Fall', 10: 'Fall', 11: 'Fall',
12: 'Winter'
}
df['season_v2'] = df['date'].dt.month.map(season_map)
print("\n验证两种方法是否一致:")
print(df[df['season'] != df['season_v2']].shape[0], "行不一致")
按季节进行分组分析
1 基础分组统计
# 按季节分组的基本统计
season_stats = df.groupby('season').agg({
'sales': ['mean', 'std', 'min', 'max', 'sum'],
'temperature': ['mean', 'min', 'max']
}).round(2)
print("\n季节维度销售量统计:")
print(season_stats)
2 多维度分组
# 按季节和产品分组
season_product_stats = df.groupby(['season', 'product']).agg({
'sales': ['sum', 'mean', 'count'],
'temperature': 'mean'
}).round(2)
print("\n季节和产品维度统计:")
print(season_product_stats)
高级分析案例
1 季节趋势分析
# 计算每个季节的日平均销售额
season_dayly_avg = df.groupby('season')['sales'].mean().sort_values()
print("\n季节日均销售额:")
print(season_dayly_avg)
# 计算各季节销售额占比
season_total = df.groupby('season')['sales'].sum()
season_percentage = (season_total / season_total.sum() * 100).round(2)
print("\n季节销售额占比(%):")
print(season_percentage)
2 季节与温度相关性分析
# 按季节分析温度与销售的关系
season_temp_sales = df.groupby('season').agg({
'sales': ['mean', 'std'],
'temperature': ['mean', 'std']
}).round(2)
print("\n各季节温度与销售关系:")
print(season_temp_sales)
# 计算每个季节的温度-销售相关系数
correlation_by_season = df.groupby('season').apply(
lambda x: x['temperature'].corr(x['sales'])
).round(3)
print("\n各季节温度-销售相关系数:")
print(correlation_by_season)
3 时间序列分析
# 将数据设为时间索引
df_time = df.set_index('date')
# 按月重采样并添加季节信息
monthly_data = df_time.resample('M').agg({
'sales': 'sum',
'temperature': 'mean'
})
# 添加季节信息到月数据
monthly_data['season'] = monthly_data.index.month.map(season_map)
print("\n月度汇总数据:")
print(monthly_data.head())
可视化分析
# 可视化不同季节的销售分布
import seaborn as sns
plt.figure(figsize=(12, 8))
# 子图1:季节箱线图
plt.subplot(2, 2, 1)
df.boxplot(column='sales', by='season')'Seasonal Sales Distribution')
plt.xlabel('Season')
plt.ylabel('Sales')
plt.xticks(rotation=45)
# 子图2:季节销售额总和
plt.subplot(2, 2, 2)
season_total = df.groupby('season')['sales'].sum()
season_total.plot(kind='bar', color=['lightblue', 'lightgreen', 'orange', 'lightcoral'])'Total Sales by Season')
plt.xlabel('Season')
plt.ylabel('Total Sales')
plt.xticks(rotation=45)
# 子图3:各季节产品分布
plt.subplot(2, 2, 3)
season_product = df.groupby(['season', 'product']).size().unstack(fill_value=0)
season_product.plot(kind='bar', stacked=True, ax=plt.gca())'Product Distribution by Season')
plt.xlabel('Season')
plt.ylabel('Count')
plt.xticks(rotation=45)
plt.legend(title='Product')
plt.tight_layout()
plt.show()
实际业务案例:销售预测
# 创建更真实的业务数据
np.random.seed(42)
business_data = {
'date': pd.date_range('2022-01-01', '2023-12-31', freq='D'),
'revenue': np.random.normal(5000, 1000, 730) +
np.sin(np.arange(730) * 2 * np.pi / 365) * 1000, # 季节波动
'customers': np.random.poisson(100, 730),
'category': np.random.choice(['Electronics', 'Clothing', 'Food', 'Books'], 730)
}
df_business = pd.DataFrame(business_data)
df_business['season'] = df_business['date'].dt.month.map(season_map)
# 季节分析报告
def seasonal_analysis_report(df):
"""生成季节分析报告"""
report = []
# 1. 总体统计
total_revenue = df['revenue'].sum()
# 2. 季节统计
for season in ['Spring', 'Summer', 'Fall', 'Winter']:
season_data = df[df['season'] == season]
season_report = {
'season': season,
'total_revenue': season_data['revenue'].sum(),
'avg_daily_revenue': season_data['revenue'].mean(),
'total_customers': season_data['customers'].sum(),
'avg_customers_per_day': season_data['customers'].mean(),
'revenue_share': (season_data['revenue'].sum() / total_revenue * 100)
}
# 3. 最佳产品类别
best_category = season_data.groupby('category')['revenue'].sum().idxmax()
season_report['best_category'] = best_category
report.append(season_report)
return pd.DataFrame(report)
report_df = seasonal_analysis_report(df_business)
print("\n季节分析报告:")
print(report_df.round(2))
实用技巧总结
1 处理季度数据
# 使用季度标识
df['quarter'] = df['date'].dt.quarter
print("\n季度分组统计:")
print(df.groupby('quarter')['sales'].agg(['mean', 'sum']))
2 自定义季节定义
# 自定义季节(南半球季节)
south_season_map = {
1: 'Summer', 2: 'Summer', 3: 'Fall', 4: 'Fall', 5: 'Fall',
6: 'Winter', 7: 'Winter', 8: 'Winter', 9: 'Spring', 10: 'Spring', 11: 'Spring',
12: 'Summer'
}
df['south_season'] = df['date'].dt.month.map(south_season_map)
这些案例展示了如何使用Pandas进行季节数据分组分析的完整流程,关键点包括:
- 日期提取:使用
dt.month或其他日期属性 - 季节映射:通过字典或函数将月份映射到季节
- 分组聚合:使用
groupby进行各种统计分析 - 多维度分析:结合多个维度进行深层分析
- 可视化:使用图表直观展示季节模式
这种分析方法广泛应用于零售、旅游、能源等多个行业。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播