用户画像分析案例-家电类目分析

1,具体场景

假设我们的运营同事发现京东电商平台的小家电类目的订单数量、产品浏览量、搜索数量等有所下降,计划对小家电类目进行一次季末促销活动。希望我们能针对小家电的用户特征进行分析,给出一些有针对性的促销建议。

2,项目主要步骤


数据收集和分析:导入数据集,分析数据的行数、列数和缺失值,并对二进制属性列进行可视化。
数据预处理: 填充缺失值、合并相似属性列、删除无用的列。
探索性数据分析: 使用Matplotlib、Seaborn进行数据可视化,帮助我们更好了解数据分布和关联。
客户聚类: 使用K-Means聚类算法将客户分为不同的群体,找到合适的聚类数量。可视化和报告: 将不同客户群体与其他属性进行可视化,并撰写报告以总结客户个性类型,并给出促销建议

3,具体代码

import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime

# 读取数据
data = pd.read_csv('jd_user_data.csv')

#确认无空值
print(data.info())

#如果有缺失值,且缺失比较小,影响不大,可直接去掉
# 数据清洗,去除缺失值
#data.dropna(inplace=True)

#如果是异常或者逻辑错误
# 删除数值列中大于或小于指定阈值的异常值(去掉那个条件即可)
#data = data[(data['column'] > threshold_lower) & (data['column'] < threshold_upper)]

data.head()

09327e215cfe4e2ab9aafb487b8cd8bc.png

#差看缺失得有没有补上,数据是否完整
#查看数据类型,确认数据类型是否恰当进行修改
#以及尽可能把object这类不是数值型变成可量化得数值型数据
data.info()

from sklearn.preprocessing import LabelEncoder

# 初始化LabelEncoder
le_gender = LabelEncoder()
le_marital = LabelEncoder()
le_city = LabelEncoder()
le_education = LabelEncoder()
le_profession = LabelEncoder()
le_browser = LabelEncoder()
le_order = LabelEncoder()
le_evelate = LabelEncoder()
le_find = LabelEncoder()

# 进行编码
data['性别'] = le_gender.fit_transform(data['性别'])
data['婚姻状况'] = le_marital.fit_transform(data['婚姻状况'])
data['城市'] = data['城市'].map(lambda x: 1 if x in ['北京', '上海', '广州', '深圳'] else 0)
education_mapping = {'大专': 0, '本科': 1, '博士': 2, '硕士': 3}
data['学历'] = data['学历'].map(education_mapping)

# 创建映射字典
occupation_mapping = {'律师': 3, '医生': 2, '互联网': 4, '其他': 0, '教师': 1}
product_category_mapping = {'健康电器': 3, '厨房电器': 1, '生活电器': 2, '清洁电器': 0}
evaluation_mapping = {'非常好用': 3, '性价比高': 2, '一般': 1, '不满意': 0}
find_mapping = {'电饭煲': 0, '电风扇': 1, '吸尘器': 2, '空气净化器': 3}

# 对'职业'字段进行编码
data['职业'] = data['职业'].map(occupation_mapping)
# 对'浏览产品类别'字段进行编码
data['浏览产品类别'] = data['浏览产品类别'].map(product_category_mapping)
# 对'订单产品类别'字段进行编码
data['订单产品类别'] = data['订单产品类别'].map(product_category_mapping)
# 对'评价内容'字段进行编码
data['评价内容'] = data['评价内容'].map(evaluation_mapping)
data['搜索关键词'] = data['搜索关键词'].map(find_mapping)

# 检查转换后是否有NaN值
#print(data.isnull().sum())

# 查看转换后的数据
print(data.head())

数据预处理完成,进行探索性分析啦

data.describe()

避免后续绘图中文不显示

import matplotlib.pyplot as plt

# 设置全局中文字体为SimHei
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.sans-serif'] = ['SimHei']

# 解决负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False
# 用户基础属性分析
user_attributes = data[['性别', '年龄', '婚姻状况', '孩子数量', '城市', '学历', '职业', '收入']]
user_attributes.describe()

import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(12, 6))
ax = sns.histplot(data['年龄'], bins=20, kde=True)
plt.title('用户年龄分布')
plt.xlabel('年龄')
plt.ylabel('数量')

# 添加具体的数据标签
for p in ax.patches:
    ax.annotate(f'{p.get_height():.0f}', (p.get_x() + p.get_width() / 2., p.get_height()), ha='center', va='bottom', color='black', fontsize=10, xytext=(0, 5), textcoords='offset points')

# 旋转 x 轴标签
plt.xticks(rotation=45)

plt.show()

import matplotlib.pyplot as plt

# 计算性别分布
gender_counts = data['性别'].value_counts()
labels = gender_counts.index
sizes = gender_counts.values

# 绘制饼图
plt.figure(figsize=(6, 6))
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140, colors=['skyblue', 'pink'])
plt.axis('equal')  # 使饼图比例相等
plt.title('用户性别比例')
plt.show()

import matplotlib.pyplot as plt

# 计算性别分布
gender_counts = data['婚姻状况'].value_counts()
labels = gender_counts.index
sizes = gender_counts.values

# 绘制饼图
plt.figure(figsize=(6, 6))
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140, colors=['skyblue', 'pink'])
plt.axis('equal')  # 使饼图比例相等
plt.title('用户婚姻状况比例')
plt.show()

import matplotlib.pyplot as plt

data['孩子数量'].value_counts().plot(kind='bar', color='skyblue')

plt.title('不同孩子数量的数量分布')
plt.xlabel('孩子数量')
plt.ylabel('数量')

plt.show()

import matplotlib.pyplot as plt

city_counts = data['城市'].value_counts()
colors = ['lightcoral', 'lightskyblue']

plt.pie(city_counts, colors=colors, autopct='%1.1f%%', labels=city_counts.index, startangle=140)
plt.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.

plt.title('城市分布情况')

plt.show()


import matplotlib.pyplot as plt

data['职业'].value_counts().plot(kind='bar', color='skyblue')

plt.title('不同职业用户订单数量分布')
plt.xlabel('职业')
plt.ylabel('订单数')

plt.show()

import matplotlib.pyplot as plt

plt.hist(data['收入'], bins=20, color='skyblue', edgecolor='black')

plt.xlabel('收入')
plt.ylabel('订单数量')
plt.title('收入分布情况')

plt.show()

接下来到客户聚类啦

#如果是用户基本属性区分明显,可以直接聚类进行用户分群,再根据用户分群去分析用户行为特征
from sklearn.cluster import KMeans

#聚类分析
kmeans = KMeans(n_clusters=3, random_state=0).fit(user_attributes)
data['用户群体'] = kmeans.labels_

# 查看聚类结果
print(data['用户群体'].value_counts())

上面分析了基本用户属性,接下来是用户行为属性啦

import matplotlib.pyplot as plt

data['浏览产品类别'].value_counts().plot(kind='bar', color='skyblue')

plt.title('不同浏览产品类别订单数量分布')
plt.xlabel('浏览产品')
plt.ylabel('订单数')

plt.show()

import matplotlib.pyplot as plt

data['浏览产品类别'].value_counts().plot(kind='bar', color='skyblue')

plt.title('不同浏览产品类别订单数量分布')
plt.xlabel('浏览产品')
plt.ylabel('订单数')

plt.show()

import matplotlib.pyplot as plt

data['搜索关键词'].value_counts().plot(kind='bar', color='skyblue')

plt.title('搜索关键词订单数量分布')
plt.xlabel('搜索关键词')
plt.ylabel('订单数')

plt.show()

import matplotlib.pyplot as plt

data['订单产品类别'].value_counts().plot(kind='bar', color='skyblue')

plt.title('不同订单产品类别订单数量分布')
plt.xlabel('订单产品')
plt.ylabel('订单数')

plt.show()


# 转换时间戳
data['浏览时间'] = pd.to_datetime(data['浏览时间戳'], unit='s')
data['订单时间'] = pd.to_datetime(data['订单时间戳'], unit='s')

# 按星期和小时统计订单数量
data['订单日期'] = data['订单时间'].dt.date
data['订单小时'] = data['订单时间'].dt.hour
weekday_order_distribution = data.groupby(data['订单时间'].dt.weekday).size()
hourly_order_distribution = data.groupby('订单小时').size()

# 绘制订单按星期分布图
plt.figure(figsize=(12, 6))
weekday_order_distribution.plot(kind='bar')
plt.title('订单按星期分布')
plt.xlabel('星期')
plt.ylabel('订单数量')
plt.show()

# 绘制订单按小时分布图
plt.figure(figsize=(12, 6))
hourly_order_distribution.plot(kind='bar')
plt.title('订单按小时分布')
plt.xlabel('小时')
plt.ylabel('订单数量')
plt.show()

# 按星期和小时统计浏览数量
data['浏览日期'] = data['浏览时间'].dt.date
data['浏览小时'] = data['浏览时间'].dt.hour
weekday_order_distribution = data.groupby(data['浏览时间'].dt.weekday).size()
hourly_order_distribution = data.groupby('浏览小时').size()

# 绘制订单按星期分布图
plt.figure(figsize=(12, 6))
weekday_order_distribution.plot(kind='bar')
plt.title('浏览按星期分布')
plt.xlabel('星期')
plt.ylabel('浏览数量')
plt.show()

# 绘制订单按小时分布图
plt.figure(figsize=(12, 6))
hourly_order_distribution.plot(kind='bar')
plt.title('浏览按小时分布')
plt.xlabel('小时')
plt.ylabel('浏览数量')
plt.show()


import matplotlib.pyplot as plt

data['评价内容'].value_counts().plot(kind='bar', color='skyblue')

plt.title('不同评价内容订单数量分布')
plt.xlabel('评价内容')
plt.ylabel('订单数')

plt.show()

4,结论

小家电消费用户的特征:
多数为来自一线城市的男性,年龄在30左右,已婚,有孩,学历水平较高,从事互联网、教师等高收入行业。

他们喜欢在周二和周六的早上10点左右和晚上10点左右下单。他们关注产品的促销活动,喜欢追求有生活品味,有良好的口碑的产品。他们关心家庭,但是因为生活节奏和工作压力却又没有时间在家庭生活上付出很多时间和精力。
对于促销活动的建议:
文案:采取无性别风格的文案,突出 产品对于家庭生活品质的提升,突出产品口碑产品:选择口碑好的净水器、饮水机、加湿器等产品
时间:活动应该选在周二和周六的早 9点和晚9点进行推送

还想看更多,来啦!!!

1,大数据比赛篇全国职业院校技能大赛-大数据比赛心得体会_全国职业职业技能比赛 大数据-CSDN博客

2,求职简历篇(超实用)大学生简历写作指南:让你的简历脱颖而出-CSDN博客

3,AIGC心得篇aigc时代,普通人需要知道的-CSDN博客

4,数据分析思维篇学习数据分析思维的共鸣-CSDN博客

5,中年危机篇“中年危机”如何转变为“中年机遇”-CSDN博客

其他需求,看主页哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据爬坡ing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值