当前位置: 首页 > article >正文

电商用户画像数据可视化分析

在这里插入图片描述

电商用户画像数据可视化分析

作者:i阿极

作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页

😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍

📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪


专栏案例:数据可视化分析案例
数据分析:某电商优惠卷数据分析
数据分析:旅游景点销售门票和消费情况分析
数据分析:消费者数据分析
数据分析:餐厅订单数据分析
数据分析:基于随机森林(RFC)对酒店预订分析预测
数据分析:基于K-近邻(KNN)对Pima人糖尿病预测分析

文章目录

  • 电商用户画像数据可视化分析
  • 1、前言
    • 1.1什么是用户画像?
    • 1.2描述电商用户画像维度
  • 2、数据处理
  • 3、数据可视化
    • 3.1性别交易差异
    • 3.2婚姻交易差异
    • 3.3 文化程度
    • 3.4 年龄段差异
  • 4.用户画像仪表盘
  • 总结


1、前言

1.1什么是用户画像?

用户画像是指根据用户的属性、行为、需求等信息而抽象出的一个标签化的用户模型。它是对用户信息进行标签化的过程,以方便计算机处理。用户画像的作用主要表现在以下几个方面:

  • 精准营销:通过用户画像,企业可以了解目标用户的需求和偏好,从而制定更精准的营销策略,提高营销效果。
  • 个性化推荐:基于用户画像,可以为用户提供个性化的产品和服务推荐,提升用户满意度和忠诚度。
  • 产品优化:通过分析用户画像,企业可以了解用户的需求和痛点,针对性地优化产品功能和设计,提高产品的用户体验。
  • 市场分析:用户画像可以帮助企业了解市场的整体趋势和用户需求变化,从而指导企业的市场决策。

因此,用户画像在电商、互联网、金融等各个领域都得到了广泛的应用。对于电商平台而言,建立准确的用户画像有助于更好地理解用户需求,提升用户体验,实现精准营销和个性化服务。

1.2描述电商用户画像维度

  • 基础信息维度:包括用户的年龄、性别、地域、职业等基础信息,这些信息有助于了解用户的基本特征和背景。
  • 购买行为维度:包括用户的购买频率、购买时间、购买商品种类等,这些信息可以揭示用户的购买习惯和购买力。

2、数据处理

首先,导入数据,数据包含基础信息维度,比如出生日期、性别、婚姻状况、文化程度等,以及购买行为维度,比如购买时间、购买频率、购买金额等。

import pandas as pd 
data = pd.read_csv( r"D:\mydata\CSDNdata\用户画像数据.csv",encoding='gbk') 
data.head()

在这里插入图片描述
查看数据基本维度,如果有缺失值数据,可对缺失值数据做填充。

#查看是否有缺失值
data.info()

在这里插入图片描述
为了确保数据处理的准确性,对数据类型进行适当的检查和转换是非常重要的,如果两个不同类型的数据进行运算,可能会产生错误或不可预知的结果。比如,在算术运算中,如果一个是整数类型,另一个是字符串类型,那么这可能导致错误,因为这两种类型的数据无法进行数学运算。

#查看数据类型
data.dtypes

在这里插入图片描述
将用户出生日期处理为为日期数据类型

data['用户出生日期'] = pd.to_datetime(data['用户出生日期'],format='%Y/%m/%d') 

将交易日期处理为日期数据类型

data['下单时间'] = pd.to_datetime(data['下单时间'],format='mixed').dt.date

将用户ID和订单ID转化为字符型数据

data['用户ID']=data['用户ID'].astype('str')
data['订单ID']=data['订单ID'].astype('str')

按照间隔天数近似计算用户的年龄。

# 假设2023-11-11是计算当天,求交易日期至计算当天的距离天数  
data['间隔天数'] = pd.to_datetime('2023-11-11') - data['用户出生日期']

# 从时间距离中获取天数  
data['间隔天数'] = data['间隔天数'].dt.days
data['年龄']=(data['间隔天数']/365).round(0)
data.head()

在这里插入图片描述
年龄求分位数

print('年龄最小值: {}'.format(data['年龄'].min()))
print('年龄平均值: {}'.format(data['年龄'].mean()))
print('年龄最大值: {}'.format(data['年龄'].max()))

在这里插入图片描述
使用pd.qcut函数,将用户的年龄自动分组,按照相同的组距分为不同的年龄段

#自动分组
age_qcut=pd.qcut(data['年龄'],10)
data['年龄分组']=age_qcut
data.head()

在这里插入图片描述

3、数据可视化

3.1性别交易差异

性别分析作为用户画像中的重要组成部分,对于数据分析从业者来说,掌握其精髓并运用到实际工作中,无疑将为企业在激烈的市场竞争中获得更多的优势。这样的细分分析能够为企业提供更丰富的市场细分策略,帮助企业确定最有潜力的目标市场。

#不使用科学计数法,格式化为小数点后保留一位
pd.set_option('display.float_format', lambda x: '%.1f' % x)

df_pay_sex=data.groupby('性别')['交易金额'].sum().reset_index()
df_pay_sex

在这里插入图片描述


x=df_pay_sex['交易金额'].tolist()
labels = df_pay_sex['性别'].tolist()

#饼图
plt.pie(x,#导入数据
        autopct='%.1f%%',#数据标签
        labels=labels,
        startangle=90, #初始角度
        pctdistance=0.87,  # 设置百分比标签与圆心的距离
        explode=[0.01,0], # 突出显示数据
        textprops = {'fontsize':12, 'color':'k'}, # 设置文本标签的属性值
        counterclock = False, # 是否逆时针
                   )

plt.title("不同性别交易金额占比")

plt.show()

在这里插入图片描述

3.2婚姻交易差异

婚姻状况分析对于经管专业的学习者来说是一项重要的任务。通过深入了解和分析用户的婚姻状况,企业能够更准确地把握用户需求和市场趋势,从而制定出更加精准有效的营销策略,提升市场竞争力。

#不使用科学计数法,格式化为小数点后保留一位
pd.set_option('display.float_format', lambda x: '%.1f' % x)

df_pay_mary=data.groupby('婚姻状况')['交易金额'].sum().reset_index()
df_pay_mary

在这里插入图片描述

import pandas as pd
import matplotlib.pyplot as plt 
import matplotlib.style as psl

#魔法命令,用于在笔记本内联显示matplotlib图表
%matplotlib inline 
#确保图表以SVG格式显示
%config InlineBackend.figure_format = 'svg' 

plt.rcParams["font.sans-serif"] = 'Microsoft YaHei' #解决中文乱码问题
plt.rcParams['axes.unicode_minus'] = False #解决负号无法显示

psl.use('ggplot')
#plt.figure(figsize=(9, 6)) #设置图表画布大小

x=df_pay_mary['婚姻状况'].tolist()
y1=df_pay_mary['交易金额'].tolist()

#绘制圆环图
plt.pie(y1,#用于绘制饼图的数据,表示每个扇形的面积
        labels=x,#各个扇形的标签,默认值为 None。
        radius=1.0,#设置饼图的半径,默认为 1
        startangle=90, #初始角度
        explode=[0.01,0], # 突出显示数据
        wedgeprops= dict(edgecolor = "w",width = 0.4),#指定扇形的属性,比如边框线颜色、边框线宽度等
        autopct='%.1f%%',#设置饼图内各个扇形百分比显示格式,%0.1f%% 一位小数百分比
        pctdistance=0.8#指定 autopct 的位置刻度
        )

#设置标题
plt.title("不同婚姻状况交易金额占比", loc = "center")

#图像展示
plt.show()

在这里插入图片描述

3.3 文化程度

data['文化程度'].tolist()[:10]

在这里插入图片描述

#导入词云图包
from wordcloud import WordCloud  
import matplotlib.pyplot as plt  

#魔法命令,用于在笔记本内联显示matplotlib图表
%matplotlib inline 
#确保图表以SVG格式显示
%config InlineBackend.figure_format = 'svg' 
  
# 商品类别列表
product_categories = data['文化程度'].tolist()
    
# 使用字典统计商品类别数量  
category_counts = dict()  
for category in product_categories:  
    if category in category_counts:  
        category_counts[category] += 1  
    else:  
        category_counts[category] = 1  

#创建词云对象  
wordcloud = WordCloud(font_path='D:\\mydata\\CSDNdata\\msyh.ttf', background_color='white').generate_from_frequencies(category_counts)
  
# 使用matplotlib绘制词云图  
plt.figure(figsize=(9, 6))  
plt.imshow(wordcloud, interpolation='bilinear')  
plt.axis("off") 

#图像展示
plt.show()

在这里插入图片描述

3.4 年龄段差异

df_age=data.groupby(['年龄分组'])['交易金额'].sum().reset_index()
df_age

在这里插入图片描述

import pandas as pd
import matplotlib.pyplot as plt 
import matplotlib.style as psl

#魔法命令,用于在笔记本内联显示matplotlib图表
%matplotlib inline 
#确保图表以SVG格式显示
%config InlineBackend.figure_format = 'svg' 

plt.rcParams["font.sans-serif"] = 'Microsoft YaHei' #解决中文乱码问题
plt.rcParams['axes.unicode_minus'] = False #解决负号无法显示

#psl.use('ggplot')
plt.figure(figsize = (9, 6)) #设置图表画布大小

x=df_age['年龄分组'].astype('str').tolist()
y=df_age['交易金额'].tolist()

#绘制柱状图
plt.bar(x,y,width=0.5,align="center",label="金额")

plt.title("不同年龄段交易情况", loc="center")#设置标题

#添加数据标签
for a,b in zip(x, y):
    plt.text(a,b,f'{b/10000:.1f}万',ha = "center", va = "bottom", fontsize = 10)

plt.xlabel("年龄分段",labelpad=5)#设置x和y轴的名称
plt.ylabel("交易金额")

plt.xticks(rotation=15,fontsize=9,color='k')#设置X坐标轴刻度
plt.yticks([])#设置不显示Y坐标轴刻度

plt.legend(fontsize=9,)#显示图例

plt.show()

在这里插入图片描述

4.用户画像仪表盘

import pandas as pd
import matplotlib.pyplot as plt 
import matplotlib.style as psl

#魔法命令,用于在笔记本内联显示matplotlib图表
%matplotlib inline 
#确保图表以SVG格式显示
%config InlineBackend.figure_format = 'svg' 

plt.rcParams["font.sans-serif"] = 'Microsoft YaHei' #解决中文乱码问题
plt.rcParams['axes.unicode_minus'] = False #解决负号无法显示

psl.use('ggplot')
plt.figure(figsize = (9, 7)) #设置图表画布大小

#饼图
plt.subplot(2,2,1)
#导入数据
x=df_pay_sex['交易金额'].tolist()
labels = df_pay_sex['性别'].tolist()


plt.pie(x,#导入数据
        autopct='%.1f%%',#数据标签
        labels=labels,
        startangle=90, #初始角度
        pctdistance=0.8,  # 设置百分比标签与圆心的距离
        explode=[0.01,0], # 突出显示数据
        textprops = {'fontsize':9, 'color':'k'}, # 设置文本标签的属性值
        counterclock = False, # 是否逆时针
                   )
plt.title("不同性别交易金额占比",fontsize=12,color='k')

#圆环图
plt.subplot(2,2,2)

x=df_pay_mary['婚姻状况'].tolist()
y1=df_pay_mary['交易金额'].tolist()

#绘制圆环图
plt.pie(y1,#用于绘制饼图的数据,表示每个扇形的面积
        labels=x,#各个扇形的标签,默认值为 None。
        radius=1.0,#设置饼图的半径,默认为 1
        startangle=90, #初始角度
        explode=[0.01,0], # 突出显示数据
        wedgeprops= dict(edgecolor = "w",width = 0.4),#指定扇形的属性,比如边框线颜色、边框线宽度等
        autopct='%.1f%%',#设置饼图内各个扇形百分比显示格式,%0.1f%% 一位小数百分比
        textprops = {'fontsize':9, 'color':'k'}, # 设置文本标签的属性值
        pctdistance=0.8#指定 autopct 的位置刻度
        )

#设置标题
plt.title("不同婚姻状况交易金额占比",loc = "center",fontsize=12,color='k')

#词云图
plt.subplot(2,2,3)
# 商品类别列表
product_categories = data['文化程度'].tolist()
    
# 使用字典统计商品类别数量  
category_counts = dict()  
for category in product_categories:  
    if category in category_counts:  
        category_counts[category] += 1  
    else:  
        category_counts[category] = 1  

#创建词云对象  
wordcloud = WordCloud(font_path='D:\\mydata\\CSDNdata\\msyh.ttf', background_color='white').generate_from_frequencies(category_counts)  
  
# 使用matplotlib绘制词云图  
plt.title("不同文化程度交易情况", loc="center",fontsize=12,color='k',y=1.3)#设置标题 
plt.imshow(wordcloud, interpolation='bilinear')  
plt.axis("off") 

#柱形图
plt.subplot(2,2,4)  
x=df_age['年龄分组'].astype('str').tolist()
y=df_age['交易金额'].tolist()

plt.bar(x,y,width=0.5,align="center",label="金额")
plt.title("不同年龄段交易情况", loc="center",fontsize=12,color='k')#设置标题

#添加数据标签
for a,b in zip(x, y):
    plt.text(a,b,f'{b/10000:.1f}万',ha="center",va ="bottom",fontsize =9)

plt.xlabel("年龄分段",labelpad=5,fontsize =9,color='k')#设置x和y轴的名称
plt.ylabel("交易金额",fontsize =9,color='k')

plt.xticks(rotation=25,fontsize=8,color='k')#设置X坐标轴刻度
plt.yticks([])#设置不显示Y坐标轴刻度

plt.suptitle("用户画像仪表盘",fontsize=16,color='k')
plt.show()
#plt.savefig('my_figure1.png')

在这里插入图片描述


总结

此项目适合毕设和课设学习等等。如果需要数据集或源码(每个代码详解)可在博主首页的“资源”下载。

📢文章下方有交流学习区!一起学习进步!💪💪💪
📢首发CSDN博客,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗


http://www.kler.cn/a/533227.html

相关文章:

  • 【学术投稿-2025年计算机视觉研究进展与应用国际学术会议 (ACVRA 2025)】从计算机基础到HTML开发:Web开发的第一步
  • 排序算法--插入排序
  • 院校联合以项目驱动联合培养医工计算机AI人才路径探析
  • 刷题记录 动态规划-7: 63. 不同路径 II
  • git进阶--3---git pull和git fetch的区别与联系
  • Autosar-以太网是怎么运行的?(Davinci配置部分)
  • 基于MODIS/Landsat/Sentinel/国产卫星遥感数据与DSSAT作物模型同化的作物产量估算
  • 使用 Redisson 实现分布式并发限流
  • Spring 面试题【每日20道】【其三】
  • 力扣73矩阵置零
  • 【Leetcode 每日一题】541. 反转字符串 II
  • Vue3 完整学习笔记 - 第二部分
  • Vue.js组件开发-实现广告图片浮动随屏幕滚动
  • LeetCode:115.不同的子序列
  • C++实现有限元三维杆单元计算 Bar3D2Node类(纯自研 非套壳)
  • 在 Ubuntu 22.04 上运行 Filebeat 7.10.2
  • vue2语法速通
  • 猫眼Java开发面试题及参考答案(上)
  • Cassandra的下载与安装
  • Java的String与StringBuilder例题
  • 如何学习大数据治理:轻松上手指南
  • 大语言模型概述
  • Redis的通用命令
  • 98,【6】 buuctf web [ISITDTU 2019]EasyPHP
  • 计算机网络安全与运维的关键 —— 常用端口全解析
  • 【JAVA】Netty使用教程