工作常用的机器学习预测案例:

绘制饼图显示Top商品销售占比
绘制地区销售额热力图
绘制用户购买频率直方图
绘制促销活动对比柱状图

绘制销售额随时间变化的折线图

好的,我们将展示如何进行这些常见的数据可视化任务。为了演示这些方法,我们需要使用一些常用的数据分析和可视化库,如 pandasnumpymatplotlib 以及 seaborn。首先,让我们创建一个示例DataFrame来模拟原始数据,并逐步应用这些可视化任务。

创建示例数据

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 创建示例时间序列数据
dates = pd.date_range(start='2023-01-01', end='2025-06-30', freq='D')
np.random.seed(42)
sales_data = np.cumsum(np.random.normal(loc=100, scale=20, size=len(dates)))

data = {
    'order_date': dates,
    'product_id': np.random.choice(['P{}'.format(i) for i in range(1, 101)], len(dates)),
    'category_code': np.random.choice(['C{}'.format(i) for i in range(1, 11)], len(dates)),
    'amount': sales_data,
    'quantity': np.random.randint(1, 5, size=len(dates)),
    'customer_id': np.random.randint(1, 1001, size=len(dates)),
    'region': np.random.choice(['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen'], len(dates)),
    'promotion': np.random.choice([True, False], len(dates))
}

df = pd.DataFrame(data)

# 设置时间为索引
df.set_index('order_date', inplace=True)

print("原始数据:")
print(df.head())

1. 绘制饼图显示Top商品销售占比

# 按产品ID聚合销售额
top_products = df.groupby('product_id')['amount'].sum().sort_values(ascending=False).head(10)

# 绘制饼图
plt.figure(figsize=(8, 8))
plt.pie(top_products, labels=top_products.index, autopct='%1.1f%%', startangle=140)
plt.title('Top 10 商品销售占比')
plt.show()

2. 绘制地区销售额热力图

# 按地区聚合销售额
region_sales = df.groupby('region')['amount'].sum()

# 将地区销售额转换为DataFrame
region_sales_df = region_sales.reset_index()

# 绘制热力图
plt.figure(figsize=(10, 6))
sns.heatmap(region_sales_df.pivot('region', 'region', 'amount'), annot=True, fmt=".0f", cmap="YlGnBu")
plt.title('地区销售额热力图')
plt.show()

3. 绘制用户购买频率直方图

# 计算每个用户的订单次数
user_orders = df.groupby('customer_id')['order_id'].count().reset_index()
user_orders.columns = ['customer_id', 'Order_Count']

# 绘制用户购买频率直方图
plt.figure(figsize=(10, 6))
sns.histplot(user_orders['Order_Count'], bins=30, kde=True)
plt.title('用户购买频率分布')
plt.xlabel('订单次数')
plt.ylabel('频数')
plt.show()

4. 绘制促销活动对比柱状图

# 按促销状态聚合销售额
promotion_effect = df.groupby('promotion')['amount'].sum()

# 绘制促销活动对比柱状图
plt.figure(figsize=(8, 6))
sns.barplot(x=promotion_effect.index.map({False: 'No Promotion', True: 'With Promotion'}), y=promotion_effect.values)
plt.title('促销活动对销售额的影响')
plt.xlabel('促销状态')
plt.ylabel('销售额')
plt.show()

5. 绘制销售额随时间变化的折线图

# 按天聚合销售额
daily_sales = df['amount'].resample('D').sum()

# 绘制销售额随时间变化的折线图
plt.figure(figsize=(14, 7))
plt.plot(daily_sales, label='Daily Sales')
plt.title('每日销售额变化趋势')
plt.xlabel('日期')
plt.ylabel('销售额')
plt.legend()
plt.show()

综合以上步骤,最终的数据可视化结果如下:

这段代码展示了从原始数据到经过全面数据可视化的结果的过程。你可以根据实际需求调整每一步的操作。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 创建示例时间序列数据
dates = pd.date_range(start='2023-01-01', end='2025-06-30', freq='D')
np.random.seed(42)
sales_data = np.cumsum(np.random.normal(loc=100, scale=20, size=len(dates)))

data = {
    'order_date': dates,
    'product_id': np.random.choice(['P{}'.format(i) for i in range(1, 101)], len(dates)),
    'category_code': np.random.choice(['C{}'.format(i) for i in range(1, 11)], len(dates)),
    'amount': sales_data,
    'quantity': np.random.randint(1, 5, size=len(dates)),
    'customer_id': np.random.randint(1, 1001, size=len(dates)),
    'region': np.random.choice(['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen'], len(dates)),
    'promotion': np.random.choice([True, False], len(dates))
}

df = pd.DataFrame(data)

# 设置时间为索引
df.set_index('order_date', inplace=True)

# 按产品ID聚合销售额
top_products = df.groupby('product_id')['amount'].sum().sort_values(ascending=False).head(10)

# 绘制饼图
plt.figure(figsize=(8, 8))
plt.pie(top_products, labels=top_products.index, autopct='%1.1f%%', startangle=140)
plt.title('Top 10 商品销售占比')
plt.show()

# 按地区聚合销售额
region_sales = df.groupby('region')['amount'].sum()

# 将地区销售额转换为DataFrame
region_sales_df = region_sales.reset_index()

# 绘制热力图
plt.figure(figsize=(10, 6))
sns.heatmap(region_sales_df.pivot('region', 'region', 'amount'), annot=True, fmt=".0f", cmap="YlGnBu")
plt.title('地区销售额热力图')
plt.show()

# 计算每个用户的订单次数
user_orders = df.groupby('customer_id')['order_id'].count().reset_index()
user_orders.columns = ['customer_id', 'Order_Count']

# 绘制用户购买频率直方图
plt.figure(figsize=(10, 6))
sns.histplot(user_orders['Order_Count'], bins=30, kde=True)
plt.title('用户购买频率分布')
plt.xlabel('订单次数')
plt.ylabel('频数')
plt.show()

# 按促销状态聚合销售额
promotion_effect = df.groupby('promotion')['amount'].sum()

# 绘制促销活动对比柱状图
plt.figure(figsize=(8, 6))
sns.barplot(x=promotion_effect.index.map({False: 'No Promotion', True: 'With Promotion'}), y=promotion_effect.values)
plt.title('促销活动对销售额的影响')
plt.xlabel('促销状态')
plt.ylabel('销售额')
plt.show()

# 按天聚合销售额
daily_sales = df['amount'].resample('D').sum()

# 绘制销售额随时间变化的折线图
plt.figure(figsize=(14, 7))
plt.plot(daily_sales, label='Daily Sales')
plt.title('每日销售额变化趋势')
plt.xlabel('日期')
plt.ylabel('销售额')
plt.legend()
plt.show()