基于电商营销场景学习Numpy库

python 复制代码
import numpy as np

# ======================
# 1. 模拟电商数据集生成
# ======================
np.random.seed(42)  # 固定随机种子

# 生成模拟数据(1000条记录)
sales_data = np.random.randn(1000) * 500 + 2000  # 正态分布模拟销售额
sales_data = sales_data.astype(np.int32)  # 转换为整型金额
user_ids = np.random.randint(1000, 9999, 1000)  # 生成用户ID
product_ids = np.random.choice(['A', 'B', 'C', 'D'], 1000)  # 商品类别
purchase_dates = np.arange('2023-01', '2023-12', dtype='datetime64[D]')  # 日期序列
purchase_dates = np.random.choice(purchase_dates, 1000)  # 随机选择日期

print("=== 数据样例 ===")
print("销售额:", sales_data[:5])
print("用户ID:", user_ids[:5])
print("购买日期:", purchase_dates[:5])

# ======================
# 2. 基础统计分析
# ======================
# 计算关键指标
mean_sales = np.mean(sales_data)
median_sales = np.median(sales_data)
std_sales = np.std(sales_data)
percentile_25 = np.percentile(sales_data, 25)
percentile_75 = np.percentile(sales_data, 75)

print("\n=== 统计指标 ===")
print(f"均值: {mean_sales:.2f}")
print(f"中位数: {median_sales}")
print(f"标准差: {std_sales:.2f}")
print(f"25%分位数: {percentile_25}")
print(f"75%分位数: {percentile_75}")

# ======================
# 3. 用户行为分析
# ======================
# 找出最活跃用户
unique_users, counts = np.unique(user_ids, return_counts=True)
most_active_user = unique_users[np.argmax(counts)]

# 计算用户购买次数统计
purchase_counts = np.bincount(counts)
print("\n=== 用户行为 ===")
print(f"最活跃用户ID: {most_active_user}")
print("购买次数分布:", purchase_counts)

# ======================
# 4. 促销效果预测
# ======================
# 创建时间序列索引
days_since_start = (purchase_dates - np.min(purchase_dates)).astype('timedelta64[D]').astype(int)

# 多项式回归预测
X = days_since_start
Y = sales_data
coeff = np.polyfit(X, Y, deg=2)  # 二次多项式拟合
poly_func = np.poly1d(coeff)
predicted_sales = np.polyval(coeff, X)

print("\n=== 促销预测 ===")
print("回归系数:", coeff)
print("预测模型:", poly_func)

# ======================
# 5. 数据分箱分析
# ======================
# 将用户按年龄分组(模拟年龄数据)
user_ages = np.random.randint(18, 60, 1000)
age_bins = [18, 25, 35, 45, np.inf]
age_groups = np.digitize(user_ages, bins=age_bins)

# 计算各年龄组总销售额
grouped_sales = np.bincount(age_groups, weights=sales_data)
print("\n=== 分箱分析 ===")
print("年龄分组销售额:", grouped_sales)

# ======================
# 6. 销售趋势分析
# ======================
# 计算日销售额环比
daily_sales = np.zeros(30, dtype=np.float32)
for day in range(30):
    mask = (purchase_dates.astype('datetime64[D]') == np.datetime64('2023-01-01') + day)
    daily_sales[day] = np.sum(sales_data[mask])

growth_rate = np.diff(daily_sales) / daily_sales[:-1]  # 环比增长率
print("\n=== 趋势分析 ===")
print("日销售额环比:", growth_rate)

# ======================
# 7. 数据标准化处理
# ======================
# Z-score标准化
normalized_sales = (sales_data - np.mean(sales_data)) / np.std(sales_data)

# 小数定标标准化
scaled_sales = sales_data / 10**np.ceil(np.log10(np.max(np.abs(sales_data))))

print("\n=== 标准化 ===")
print("Z-score标准化样例:", normalized_sales[:5])
print("小数定标标准化样例:", scaled_sales[:5])

# ======================
# 8. 矩阵运算应用
# ======================
# 创建用户-商品矩阵
user_product_matrix = np.zeros((len(unique_users), 4), dtype=int)
for i, user in enumerate(unique_users):
    user_mask = (user_ids == user)
    for j, product in enumerate(['A', 'B', 'C', 'D']):
        user_product_matrix[i, j] = np.sum(product_ids[user_mask] == product)

# 计算相似度矩阵(余弦相似度)
norms = np.linalg.norm(user_product_matrix, axis=1, keepdims=True)
similarity_matrix = np.dot(user_product_matrix, user_product_matrix.T) / (norms * norms.T)

print("\n=== 矩阵运算 ===")
print("用户-商品矩阵形状:", user_product_matrix.shape)
print("相似度矩阵样例:\n", similarity_matrix[:3, :3])

# ======================
# 9. 数据保存与加载
# ======================
# 保存处理后的数据
np.savetxt('processed_sales.csv', 
           np.column_stack((user_ids, sales_data)), 
           delimiter=',', 
           fmt='%d',
           header='UserID,Sales')

print("\n=== 数据保存 ===")
print("数据已保存为 processed_sales.csv")

以下是逐段功能解析和API语法说明:

  1. 数据生成
python 复制代码
np.random.seed(42)  # 固定随机数生成器状态
np.random.randn(1000)  # 生成标准正态分布数据
.astype(np.int32)  # 数据类型转换
np.random.randint()  # 生成均匀分布的整数
np.random.choice()  # 从给定数组随机选择
np.arange(..., dtype='datetime64[D]')  # 生成日期序列
  1. 统计分析
python 复制代码
np.mean()  # 计算平均值
np.median()  # 计算中位数
np.std()  # 计算标准差
np.percentile()  # 计算百分位数
np.unique(..., return_counts=True)  # 返回唯一值和计数
np.argmax()  # 返回最大值索引
np.bincount()  # 统计整数出现次数
  1. 时间序列处理
python 复制代码
.astype('timedelta64[D]')  # 时间差转换
np.polyfit()  # 多项式拟合(返回系数)
np.poly1d()  # 创建多项式函数
np.polyval()  # 计算多项式值
  1. 数据分箱
python 复制代码
np.digitize()  # 将数据分配到区间
np.bincount(..., weights=)  # 带权重的计数统计
  1. 趋势分析
python 复制代码
np.diff()  # 计算离散差分
/ 运算符  # 数组元素级除法
  1. 数据标准化
python 复制代码
(x - np.mean(x)) / np.std(x)  # Z-score标准化
np.log10()  # 计算以10为底的对数
np.ceil()  # 向上取整
10**n  # 指数运算
  1. 矩阵运算
python 复制代码
np.zeros()  # 创建全零矩阵
np.linalg.norm(..., axis=, keepdims=)  # 计算范数
np.dot()  # 矩阵乘法
.T 属性  # 矩阵转置
  1. 文件操作
python 复制代码
np.savetxt()  # 保存数组到文本文件
np.column_stack()  # 按列合并数组
delimiter=  # 指定分隔符
fmt=  # 指定数据格式

本示例覆盖了以下NumPy核心功能:

  • 数组创建(随机数、序列、类型转换)
  • 数学运算(基本运算、多项式拟合)
  • 统计函数(集中趋势、离散程度、分布分析)
  • 逻辑运算(布尔索引、掩码操作)
  • 日期时间处理
  • 矩阵运算(范数、点积、转置)
  • 文件I/O操作
  • 数据标准化方法
  • 分箱和分组操作
  • 时间序列分析

每个函数都包含以下参数说明:

  • axis:指定运算的轴向
  • dtype:指定数据类型
  • keepdims:是否保持维度
  • deg:多项式次数
  • weights:加权统计
  • bins:分箱边界定义
  • delimiter:文件分隔符
  • fmt:输出格式

此代码可直接运行测试,建议在Jupyter Notebook中分块执行观察中间结果。实际应用时可根据具体需求调整参数和数据处理逻辑。

相关推荐
Asthenia04123 小时前
浏览器缓存机制深度解析:电商场景下的性能优化实践
后端
databook4 小时前
『Python底层原理』--Python对象系统探秘
后端·python
超爱吃士力架5 小时前
MySQL 中的回表是什么?
java·后端·面试
追逐时光者6 小时前
Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
后端·.net
苏三说技术6 小时前
10亿数据,如何迁移?
后端
bobz9656 小时前
openvpn 显示已经建立,但是 ping 不通
后端
customer087 小时前
【开源免费】基于SpringBoot+Vue.JS个人博客系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
qq_459238497 小时前
SpringBoot整合Redis和Redision锁
spring boot·redis·后端
灰色人生qwer7 小时前
SpringBoot 项目配置日志输出
java·spring boot·后端
阿华的代码王国8 小时前
【从0做项目】Java搜索引擎(6)& 正则表达式鲨疯了&优化正文解析
java·后端·搜索引擎·正则表达式·java项目·从0到1做项目