目录
一、案例背景
在电商行业的激烈竞争中,精准把握用户需求、实施个性化营销策略成为企业脱颖而出的关键。构建详细准确的用户画像,能够深入了解用户特征、行为习惯和消费偏好,为企业决策提供有力支撑。据 eMarketer 数据显示,2024 年全球电商销售额达到 5.5 万亿美元,预计 2025 年将增长至 6.2 万亿美元。在如此庞大的市场规模下,通过数据分析实现精准营销的需求愈发迫切。本案例运用 Python 技术,对某电商平台用户数据进行深度挖掘,构建用户画像,并基于此制定针对性营销策略 。
二、代码实现
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.cluster import KMeans
2.1 数据收集与导入
假设从电商平台数据库获取了包含用户基本信息、购买记录、浏览行为等多维度数据,存储为 CSV 格式 。
user_data = pd.read_csv('ecommerce_user_info.csv')
purchase_data = pd.read_csv('ecommerce_purchase_records.csv')
browse_data = pd.read_csv('ecommerce_browse_behavior.csv')
2.2 数据探索性分析
# 查看用户数据基本信息
print(user_data.info())
# 查看购买数据前几行
print(purchase_data.head())
# 统计浏览数据中各字段的缺失值情况
print(browse_data.isnull().sum())
# 查看用户年龄的描述性统计信息
print(user_data['age'].describe())
2.3 数据清洗
# 处理用户数据缺失值,例如填充用户性别缺失值为未知
user_data['gender'] = user_data['gender'].fillna('Unknown')
# 去除购买数据中的重复订单
purchase_data = purchase_data.drop_duplicates()
# 处理浏览数据异常值,以浏览时长为例,去除超过3倍标准差的数据
mean_browse_time = browse_data['browse_time'].mean()
std_browse_time = browse_data['browse_time'].std()
browse_data = browse_data[(browse_data['browse_time'] >= mean_browse_time - 3 * std_browse_time) & (browse_data['browse_time'] <= mean_browse_time + 3 * std_browse_time)]
2.4 用户画像构建
2.4.1 人口统计学特征
# 计算不同性别用户数量
gender_count = user_data['gender'].value_counts()
# 绘制年龄分布直方图
plt.figure(figsize=(10, 6))
sns.histplot(user_data['age'], kde=True)
plt.title('Age Distribution of Users')
plt.xlabel('Age')
plt.ylabel('Number of Users')
plt.show()
2.4.2 消费行为特征
# 按用户ID分组,计算每个用户的总购买金额和购买次数
user_purchase_summary = purchase_data.groupby('user_id').agg({'purchase_amount':'sum', 'order_id': 'count'}).reset_index()
user_purchase_summary.rename(columns={'purchase_amount': 'total_purchase_amount', 'order_id': 'purchase_count'}, inplace=True)
# 计算用户平均购买金额
user_purchase_summary['average_purchase_amount'] = user_purchase_summary['total_purchase_amount'] / user_purchase_summary['purchase_count']
# 绘制购买金额与购买次数的散点图
plt.figure(figsize=(10, 6))
sns.scatterplot(x='purchase_count', y='total_purchase_amount', data=user_purchase_summary)
plt.title('Relationship between Purchase Count and Total Purchase Amount')
plt.xlabel('Purchase Count')
plt.ylabel('Total Purchase Amount')
plt.show()
2.4.3 浏览行为特征
# 按用户ID分组,计算每个用户的总浏览时长和浏览商品种类数
user_browse_summary = browse_data.groupby('user_id').agg({'browse_time':'sum', 'product_category': 'nunique'}).reset_index()
user_browse_summary.rename(columns={'browse_time': 'total_browse_time', 'product_category': 'unique_product_categories_browsed'}, inplace=True)
# 绘制浏览时长与浏览商品种类数的相关性热力图
correlation = user_browse_summary[['total_browse_time', 'unique_product_categories_browsed