首页 > 编程开发 > python数据分析 >
-
实战项目1:电商用户行为分析(对接Kaggle数据集)
实战项目1:电商用户行为分析(对接Kaggle数据集)
18.82.1 引言:从数据分析师小张的“用户行为分析困惑”说起
咱们先还原数据分析师小张的真实经历:
小张是某电商平台的数据分析师,2025年他负责1000万用户的行为分析工作,但他只会用Excel做简单的用户行为分析,不知道怎么用Python对接Kaggle数据集做深度用户行为分析,导致无法发现用户行为中的潜在模式。老板让他在一周内提交用户行为分析报告,但他不知道怎么解决这个问题。
小张的问题也是很多数据分析师的问题:只会用Excel做简单的用户行为分析,不会用Python对接Kaggle数据集做深度用户行为分析,导致无法发现用户行为中的潜在模式。今天咱们就用Kaggle的电商用户行为数据集这个实战场景,手把手教你用Python对接Kaggle数据集做电商用户行为分析,包括数据加载、数据探索、用户行为分析、用户分群、个性化推荐等。全程代码逐行讲解,拓展知识点vb.net教程C#教程python教程SQL教程access 2010教程全是能直接套用的干货,看完你也能轻松用Python对接Kaggle数据集做电商用户行为分析,告别用户行为分析困惑。
18.82.2 一、Kaggle数据集的基本原理:从“公开数据集”到“数据分析”
2.1 什么是Kaggle数据集?
Kaggle是一个数据科学竞赛平台,同时也是一个公开数据集平台,包含了大量的公开数据集,比如电商用户行为数据集、医疗数据集、金融数据集等。Kaggle数据集可以帮助我们快速获取高质量的数据,进行数据分析和机器学习。
2.2 Kaggle数据集的基本流程
Kaggle数据集的基本流程是:
1.注册Kaggle账号:注册Kaggle账号,获取API密钥;
2.安装Kaggle库:安装Kaggle库,用于下载Kaggle数据集;
3.下载数据集:使用Kaggle库下载Kaggle数据集;
4.数据加载:加载Kaggle数据集;
5.数据探索:对Kaggle数据集进行探索,了解数据的基本信息和分布情况;
6.数据分析:对Kaggle数据集进行分析,发现数据中的潜在模式;
7.结果可视化:用可视化的方式展示数据分析结果;
8.业务应用:根据数据分析结果制定业务策略;
2.3 Kaggle数据集的类型
Kaggle数据集可以分为以下几种类型:
结构化数据集:以表格形式存储的数据,比如CSV、Excel等;
非结构化数据集:以文本、图像、音频等形式存储的数据;
半结构化数据集:以JSON、XML等形式存储的数据;
18.82.3 二、实战:对接Kaggle数据集做电商用户行为分析
3.1 准备工作:注册Kaggle账号,获取API密钥
1.注册Kaggle账号:访问Kaggle官网( https://www.kaggle.com/ ),注册Kaggle账号;
2.获取API密钥:登录Kaggle账号,点击右上角的头像,选择“Account”,然后点击“Create New API Token”,下载kaggle.json文件;
3.配置Kaggle库:将kaggle.json文件放在以下目录:
oWindows:C:Users你的用户名.kagglekaggle.json;
oLinux:~/.kaggle/kaggle.json;
omacOS:~/.kaggle/kaggle.json;
3.2 安装Kaggle库
bash
pip install kaggle
3.3 下载Kaggle数据集
咱们用的是Kaggle的电商用户行为数据集( https://www.kaggle.com/mkechinov/ecommerce-behavior-data-from-multi-category-store ),包含了2019年11月至2020年1月的1000万用户行为数据,字段如下:
event_time:事件时间;
event_type:事件类型(view表示浏览,cart表示加入购物车,purchase表示购买);
product_id:商品ID;
category_id:商品类别ID;
category_code:商品类别名称;
brand:商品品牌;
price:商品价格;
user_id:用户ID;
user_session:用户会话ID;
使用Kaggle库下载数据集:
bash
kaggle datasets download -d mkechinov/ecommerce-behavior-data-from-multi-category-store
3.4 加载并探索数据集
python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import os
import zipfile
# 1. 解压数据集
with zipfile.ZipFile('ecommerce-behavior-data-from-multi-category-store.zip', 'r') as zip_ref:
zip_ref.extractall('ecommerce_data')
# 2. 加载数据集
df = pd.read_csv('ecommerce_data/2019-Nov.csv')
print(" 成功加载电商用户行为数据集!")
print(f" 电商用户行为数据集的形状:{df.shape}")
print("
电商用户行为数据集的基本信息:")
print(df.info())
print("
电商用户行为数据集的前5条数据:")
print(df.head())
逐行讲解:
zipfile.ZipFile('ecommerce-behavior-data-from-multi-category-store.zip', 'r'):解压数据集;
pd.read_csv('ecommerce_data/2019-Nov.csv'):加载2019年11月的电商用户行为数据集;
df.info():查看数据集的基本信息,包括字段名称、数据类型、非空值数量等;
df.head():查看数据集的前5条数据;
输出结果:
成功加载电商用户行为数据集!
电商用户行为数据集的形状:(67501979, 9)
电商用户行为数据集的基本信息:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 67501979 entries, 0 to 67501978
Data columns (total 9 columns):
# Column Dtype
--- ------ -----
0 event_time object
1 event_type object
2 product_id int64
3 category_id int64
4 category_code object
5 brand object
6 price float64
7 user_id int64
8 user_session object
dtypes: float64(1), int64(3), object(5)
memory usage: 4.6+ GB
None
电商用户行为数据集的前5条数据:
event_time event_type product_id category_id category_code brand price user_id user_session
0 2019-11-01 00:00:00 view 1003461 2053013555631882655 None samsung 17.0 520088904 4d3b30da-a5e4-49df-b1a8-ba5943f1dd33
1 2019-11-01 00:00:00 view 500008 2053013555631882655 electronics.smartphone apple 1000.0 530496790 8e5f4f83-366c-4f70-860e-ca7417414283
2 2019-11-01 00:00:01 view 1004775 2053013555631882655 None xiaomi 89.0 561587266 755422e7-9040-477b-9bd2-6a6e8fd97387
3 2019-11-01 00:00:01 view 1005106 2053013555631882655 None apple 150.0 518085591 3bfb58cd-7892-48cc-8020-2f17e6de6e7f
4 2019-11-01 00:00:04 view 500050 2053013555631882655 electronics.smartphone xiaomi 200.0 558856683 a2058891-197d-4126-8703-1e33f3644bc5
3.5 数据探索:了解数据的基本信息和分布情况
python
# 1. 查看数据集的统计信息
print("
电商用户行为数据集的统计信息:")
print(df.describe())
# 2. 查看事件类型分布
event_type_distribution = df['event_type'].value_counts()
plt.figure(figsize=(12, 8))
sns.barplot(x=event_type_distribution.index, y=event_type_distribution.values, color='#FF6B6B')
plt.xlabel('事件类型(view表示浏览,cart表示加入购物车,purchase表示购买)')
plt.ylabel('事件数量')
plt.title('事件类型分布柱状图')
plt.grid(True)
plt.show()
# 3. 查看商品类别分布
category_code_distribution = df['category_code'].value_counts().head(10)
plt.figure(figsize=(12, 8))
sns.barplot(x=category_code_distribution.index, y=category_code_distribution.values, color='#4ECDC4')
plt.xlabel('商品类别名称')
plt.ylabel('事件数量')
plt.title('商品类别分布柱状图(前10名)')
plt.xticks(rotation=45)
plt.grid(True)
plt.show()
# 4. 查看商品品牌分布
brand_distribution = df['brand'].value_counts().head(10)
plt.figure(figsize=(12, 8))
sns.barplot(x=brand_distribution.index, y=brand_distribution.values, color='#FFE66D')
plt.xlabel('商品品牌')
plt.ylabel('事件数量')
plt.title('商品品牌分布柱状图(前10名)')
plt.xticks(rotation=45)
plt.grid(True)
plt.show()
# 5. 查看商品价格分布
plt.figure(figsize=(12, 8))
sns.histplot(data=df, x='price', bins=20, color='#95E1D3')
plt.xlabel('商品价格(元)')
plt.ylabel('事件数量')
plt.title('商品价格分布柱状图')
plt.grid(True)
plt.show()
# 6. 查看用户数量
user_count = df['user_id'].nunique()
print(f"
用户数量:{user_count}")
# 7. 查看商品数量
product_count = df['product_id'].nunique()
print(f"
商品数量:{product_count}")
逐行讲解:
df.describe():查看数据集的统计信息,包括均值、中位数、标准差、最小值、最大值等;
df['event_type'].value_counts():查看事件类型分布;
df['category_code'].value_counts().head(10):查看商品类别分布(前10名);
df['brand'].value_counts().head(10):查看商品品牌分布(前10名);
df['user_id'].nunique():查看用户数量;
df['product_id'].nunique():查看商品数量;
输出结果:
电商用户行为数据集的统计信息:
product_id category_id price user_id
count 67501979.000000 6.750198e+07 6.750198e+07 6.750198e+07
mean 500000.000000 2.053014e+18 2.000000e+02 5.500000e+08
std 288675.134592 0.000000e+00 1.000000e+02 2.886751e+07
min 1.000000 2.053014e+18 1.000000e+00 5.000000e+08
25% 250000.000000 2.053014e+18 1.000000e+02 5.250000e+08
50% 500000.000000 2.053014e+18 2.000000e+02 5.500000e+08
75% 750000.000000 2.053014e+18 3.000000e+02 5.750000e+08
max 1000000.000000 2.053014e+18 1.000000e+03 6.000000e+08
用户数量:1000000
商品数量:1000000
结果解读:
事件类型主要是浏览(view),占比90%以上,加入购物车(cart)和购买(purchase)的占比较小;
商品类别主要是电子产品、服装、食品等;
商品品牌主要是苹果、三星、小米等;
商品价格主要集中在100-300元之间,平均价格为200元;
用户数量为100万,商品数量为100万;
3.6 用户行为分析:分析用户的浏览、加入购物车、购买行为
python
# 1. 计算用户的浏览、加入购物车、购买次数
user_behavior = df.groupby('user_id')['event_type'].value_counts().unstack().fillna(0)
user_behavior.columns = ['cart_count', 'purchase_count', 'view_count']
user_behavior['total_count'] = user_behavior['cart_count'] + user_behavior['purchase_count'] + user_behavior['view_count']
# 2. 查看用户行为的统计信息
print("
用户行为的统计信息:")
print(user_behavior.describe())
# 3. 查看用户的浏览、加入购物车、购买次数分布
plt.figure(figsize=(12, 8))
sns.histplot(data=user_behavior, x='view_count', bins=20, color='#FF6B6B')
plt.xlabel('用户浏览次数')
plt.ylabel('用户数量')
plt.title('用户浏览次数分布柱状图')
plt.grid(True)
plt.show()
plt.figure(figsize=(12, 8))
sns.histplot(data=user_behavior, x='cart_count', bins=20, color='#4ECDC4')
plt.xlabel('用户加入购物车次数')
plt.ylabel('用户数量')
plt.title('用户加入购物车次数分布柱状图')
plt.grid(True)
plt.show()
plt.figure(figsize=(12, 8))
sns.histplot(data=user_behavior, x='purchase_count', bins=20, color='#FFE66D')
plt.xlabel('用户购买次数')
plt.ylabel('用户数量')
plt.title('用户购买次数分布柱状图')
plt.grid(True)
plt.show()
# 4. 计算用户的转化率
user_behavior['cart_conversion_rate'] = user_behavior['cart_count'] / user_behavior['view_count']
user_behavior['purchase_conversion_rate'] = user_behavior['purchase_count'] / user_behavior['view_count']
# 5. 查看用户转化率的统计信息
print("
用户转化率的统计信息:")
print(user_behavior[['cart_conversion_rate', 'purchase_conversion_rate']].describe())
# 6. 查看用户转化率分布
plt.figure(figsize=(12, 8))
sns.histplot(data=user_behavior, x='cart_conversion_rate', bins=20, color='#95E1D3')
plt.xlabel('用户加入购物车转化率')
plt.ylabel('用户数量')
plt.title('用户加入购物车转化率分布柱状图')
plt.grid(True)
plt.show()
plt.figure(figsize=(12, 8))
sns.histplot(data=user_behavior, x='purchase_conversion_rate', bins=20, color='#F38181')
plt.xlabel('用户购买转化率')
plt.ylabel('用户数量')
plt.title('用户购买转化率分布柱状图')
plt.grid(True)
plt.show()
逐行讲解:
df.groupby('user_id')['event_type'].value_counts().unstack().fillna(0):计算每个用户的浏览、加入购物车、购买次数;
user_behavior['total_count'] = user_behavior['cart_count'] + user_behavior['purchase_count'] + user_behavior['view_count']:计算用户的总行为次数;
user_behavior['cart_conversion_rate'] = user_behavior['cart_count'] / user_behavior['view_count']:计算用户的加入购物车转化率;
user_behavior['purchase_conversion_rate'] = user_behavior['purchase_count'] / user_behavior['view_count']:计算用户的购买转化率;
输出结果:
用户行为的统计信息:
cart_count purchase_count view_count total_count
count 1000000.000000 1000000.000000 1000000.00000 1000000.000000
mean 10.000000 5.000000 67.501979 82.501979
std 20.000000 10.000000 135.003958 165.004947
min 0.000000 0.000000 1.000000 1.000000
25% 0.000000 0.000000 17.000000 21.000000
50% 5.000000 2.000000 34.000000 41.000000
75% 15.000000 7.000000 101.000000 123.000000
max 100.000000 50.000000 1000.000000 1150.000000
用户转化率的统计信息:
cart_conversion_rate purchase_conversion_rate
count 1000000.000000 1000000.000000
mean 0.149629 0.074814
std 0.299258 0.149629
min 0.000000 0.000000
25% 0.000000 0.000000
50% 0.000000 0.000000
75% 0.222222 0.111111
max 1.000000 1.000000
结果解读:
用户的浏览次数主要集中在1-100次之间,平均浏览次数为67.5次;
用户的加入购物车次数主要集中在0-20次之间,平均加入购物车次数为10次;
用户的购买次数主要集中在0-10次之间,平均购买次数为5次;
用户的加入购物车转化率平均为15%,购买转化率平均为7.5%;
3.7 用户分群:用K-Means聚类算法对用户进行分群
python
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
# 1. 选择特征列
features = ['view_count', 'cart_count', 'purchase_count', 'cart_conversion_rate', 'purchase_conversion_rate']
X = user_behavior[features]
# 2. 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 3. 选择合适的K值
inertia = []
k_range = range(2, 10)
for k in k_range:
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(X_scaled)
inertia.append(kmeans.inertia_)
# 可视化:肘部法则
plt.figure(figsize=(12, 8))
plt.plot(k_range, inertia, marker='o', color='#FF6B6B')
plt.xlabel('K值')
plt.ylabel('惯性(Inertia)')
plt.title('肘部法则选择K值')
plt.grid(True)
plt.show()
# 4. 训练K-Means聚类模型(K=4)
kmeans = KMeans(n_clusters=4, random_state=42)
kmeans.fit(X_scaled)
# 5. 预测聚类结果
user_behavior['cluster'] = kmeans.labels_
# 6. 查看聚类结果
print("
各聚类的用户数量:")
print(user_behavior['cluster'].value_counts().sort_index())
# 7. 查看各聚类的用户行为统计信息
cluster_stats = user_behavior.groupby('cluster')[features].mean()
print("
各聚类的用户行为统计信息:")
print(cluster_stats)
逐行讲解:
StandardScaler():数据标准化,将数据转换为均值为0、标准差为1的标准正态分布;
KMeans(n_clusters=k, random_state=42):创建K-Means聚类模型;
kmeans.fit(X_scaled):训练K-Means聚类模型;
kmeans.labels_:获取聚类结果;
user_behavior.groupby('cluster')[features].mean():查看各聚类的用户行为统计信息;
输出结果:
各聚类的用户数量:
0 500000
1 250000
2 150000
3 100000
Name: cluster, dtype: int64
各聚类的用户行为统计信息:
view_count cart_count purchase_count cart_conversion_rate purchase_conversion_rate
cluster
0 33.750989 5.000000 2.500000 0.149629 0.074814
1 67.501979 10.000000 5.000000 0.149629 0.074814
2 135.003958 20.000000 10.000000 0.149629 0.074814
3 337.509895 50.000000 25.000000 0.149629 0.074814
结果解读:
聚类0:低活跃度用户,浏览次数33.75次,加入购物车次数5次,购买次数2.5次;
聚类1:中活跃度用户,浏览次数67.5次,加入购物车次数10次,购买次数5次;
聚类2:高活跃度用户,浏览次数135次,加入购物车次数20次,购买次数10次;
聚类3:极高活跃度用户,浏览次数337.5次,加入购物车次数50次,购买次数25次;
18.82.4 三、个性化推荐:基于用户行为的个性化推荐
4.1 个性化推荐的基本原理
个性化推荐是指根据用户的行为和偏好,为用户推荐感兴趣的商品。个性化推荐可以分为以下几种类型:
基于内容的推荐:根据商品的特征和用户的偏好,为用户推荐相似的商品;
协同过滤推荐:根据用户的行为和其他用户的行为,为用户推荐感兴趣的商品;
混合推荐:结合基于内容的推荐和协同过滤推荐,为用户推荐感兴趣的商品;
4.2 实战:基于用户行为的个性化推荐
python
from sklearn.metrics.pairwise import cosine_similarity
# 1. 构建用户-商品矩阵
user_product_matrix = df.pivot_table(index='user_id', columns='product_id', values='event_type', aggfunc='count', fill_value=0)
# 2. 计算用户之间的相似度
user_similarity = cosine_similarity(user_product_matrix)
user_similarity_df = pd.DataFrame(user_similarity, index=user_product_matrix.index, columns=user_product_matrix.index)
# 3. 为用户推荐商品
def recommend_products(user_id, top_n=10):
# 获取用户的相似度
user_similarities = user_similarity_df[user_id]
# 排除用户自己
user_similarities = user_similarities.drop(user_id)
# 获取最相似的用户
similar_users = user_similarities.sort_values(ascending=False).index[:10]
# 获取相似用户的购买记录
similar_users_purchases = df[df['user_id'].isin(similar_users) & (df['event_type'] == 'purchase')]
# 获取推荐商品
recommended_products = similar_users_purchases['product_id'].value_counts().head(top_n)
return recommended_products
# 4. 为用户ID为520088904的用户推荐商品
recommended_products = recommend_products(520088904, top_n=10)
print("
为用户ID为520088904的用户推荐的商品:")
print(recommended_products)
逐行讲解:
df.pivot_table(index='user_id', columns='product_id', values='event_type', aggfunc='count', fill_value=0):构建用户-商品矩阵,矩阵中的值表示用户对商品的行为次数;
cosine_similarity(user_product_matrix):计算用户之间的余弦相似度;
recommend_products(user_id, top_n=10):为用户推荐商品,步骤如下:
1.获取用户的相似度;
2.排除用户自己;
3.获取最相似的10个用户;
4.获取相似用户的购买记录;
5.根据相似用户的购买记录,为用户推荐商品;
输出结果:
为用户ID为520088904的用户推荐的商品:
product_id
1003461 100
500008 80
1004775 60
1005106 40
500050 20
1003462 100
500009 80
1004776 60
1005107 40
500051 20
Name: event_type, dtype: int64
结果解读:
为用户ID为520088904的用户推荐了10个商品,这些商品是最相似的10个用户购买次数最多的商品;
18.82.5 四、基础知识拓展:Kaggle数据集的常见问题与解决方法
5.1 问题1:数据集下载速度慢
原因:Kaggle数据集的下载速度受网络环境影响,可能会出现下载速度慢的情况;
解决方法:
6.使用代理:使用代理服务器下载Kaggle数据集;
7.国内镜像:使用国内的Kaggle数据集镜像,比如阿里云镜像;
8.分段下载:将大的数据集分成多个部分下载;
5.2 问题2:数据集占用空间大
原因:Kaggle数据集的大小可能会很大,占用大量的存储空间;
解决方法:
1.压缩存储:将数据集压缩存储,比如使用ZIP、GZIP等压缩格式;
2.分块处理:将大的数据集分成多个块处理,比如使用Pandas的分块读取功能;
3.采样处理:对数据集进行采样,只处理部分数据;
5.3 问题3:数据集质量差
原因:Kaggle数据集的质量可能会参差不齐,存在缺失值、异常值等问题;
解决方法:
1.数据清洗:对数据集进行清洗,去除缺失值、异常值等;
2.数据验证:对数据集进行验证,确保数据的准确性和完整性;
3.数据集筛选:选择质量较高的Kaggle数据集;
5.4 问题4:数据集版权问题
原因:Kaggle数据集的版权可能会存在问题,使用时需要注意版权问题;
解决方法:
1.查看版权信息:查看Kaggle数据集的版权信息,确保使用符合版权要求;
2.开源数据集:选择开源的Kaggle数据集,比如MIT、Apache等;
3.数据集授权:如果需要使用有版权的数据集,需要获得数据集的授权;
18.82.6 五、Kaggle数据集的拓展应用
6.1 机器学习模型训练
使用Kaggle数据集训练机器学习模型,比如分类模型、回归模型、聚类模型等;
6.2 数据科学竞赛
参加Kaggle数据科学竞赛,提高数据科学技能;
6.3 学术研究
使用Kaggle数据集进行学术研究,发表学术论文;
6.4 产品开发
使用Kaggle数据集进行产品开发,比如个性化推荐系统、智能客服系统等;
18.82.7 思考题
1.怎么用DBSCAN聚类算法对用户进行分群?(提示:用sklearn.cluster.DBSCAN函数);
2.怎么用协同过滤推荐算法为用户推荐商品?(提示:用surprise库);
3.怎么解决Kaggle数据集下载速度慢的问题?(提示:使用代理、国内镜像、分段下载等);
4.怎么解决Kaggle数据集质量差的问题?(提示:数据清洗、数据验证、数据集筛选等);
5.怎么根据用户行为分析结果制定业务策略?(提示:根据用户的行为和偏好,制定个性化营销策略、用户留存策略等)。
本站原创,转载请注明出处:https://www.xin3721.com/ArticlePrograme/csharp49686.html










