基于电商营销场景学习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中分块执行观察中间结果。实际应用时可根据具体需求调整参数和数据处理逻辑。

相关推荐
止语Lab25 分钟前
好的 DX 不等于少写代码——三种语言的摩擦力设计课
后端
吃饱了得干活25 分钟前
别再手动解析 LLM 输出了!LangChain 四种结构化输出方案对比
后端·python·langchain
程序员天天困30 分钟前
Arthas trace 命令怎么用?一行定位最慢那行代码
jvm·后端
Huiturn31 分钟前
GPT 5.6 连续编码 10 小时,纯 Python 啃下 Word 二进制格式——doc2docx 实现拆解
后端
用户2986985301437 分钟前
Python 实现 Excel 与 Markdown 互转的实用指南
后端·python·excel
用户772831049084039 分钟前
krono-job:零侵入、单二进制交付的分布式任务调度平台(开源)
后端
Conan在掘金1 小时前
鸿蒙报错速查:Function lacks ending return statement,返回路径漏 return 就炸,根因 + 真解法
后端
人间凡尔赛1 小时前
AI-Native 云原生架构:2026 年从容器编排到智能体编排的范式革命
后端·云原生·架构
IT_陈寒1 小时前
Vue的响应式让我加班到凌晨3点,原来问题出在这
前端·人工智能·后端
卷无止境2 小时前
提升 Python 代码健壮性的方法大盘点
后端·python