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

news2025/2/6 5:01:57

在这里插入图片描述

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

作者: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.coloradmin.cn/o/2293594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3.5常用特性整理

Vue3.5 发布已近半年&#xff0c;抽空整理下常用的新增/改动特性 响应式 Props 解构 Vue3.5 中 Props 正式支持解构了&#xff0c;并添加了响应式跟踪 设置默认值 使用 JavaScript 原生的默认值语法声明 props 默认值 以前 const props withDefaults(defineProps<{ co…

2024年12月 Scratch 图形化(一级)真题解析 中国电子学会全国青少年软件编程等级考试

202412 Scratch 图形化&#xff08;一级&#xff09;真题解析 中国电子学会全国青少年软件编程等级考试 一、单选题(共25题&#xff0c;共50分) 第 1 题 点击下列哪个按钮&#xff0c;可以将红框处的程序放大&#xff1f;&#xff08; &#xff09; A. B. C. D. 标…

游戏引擎学习第87天

当直接使用内存时&#xff0c;可能会发生一些奇怪的事情 在直接操作内存时&#xff0c;一些意外的情况可能会发生。由于内存实际上只是一个大块的空间&#xff0c;开发者可以完全控制它&#xff0c;而不像高级语言那样必须遵守许多规则&#xff0c;因此很容易发生错误。在一个…

【物联网】ARM核常用指令(详解):数据传送、计算、位运算、比较、跳转、内存访问、CPSR/SPSR

文章目录 指令格式&#xff08;重点&#xff09;1. 立即数2. 寄存器位移 一、数据传送指令1. MOV指令2. MVN指令3. LDR指令 二、数据计算指令1. ADD指令1. SUB指令1. MUL指令 三、位运算指令1. AND指令2. ORR指令3. EOR指令4. BIC指令 四、比较指令五、跳转指令1. B/BL指令2. l…

Qt展厅播放器/多媒体播放器/中控播放器/帧同步播放器/硬解播放器/监控播放器

一、前言说明 音视频开发除了应用在安防监控、视频网站、各种流媒体app开发之外&#xff0c;还有一个小众的市场&#xff0c;那就是多媒体展厅场景&#xff0c;这个场景目前处于垄断地位的软件是HirenderS3&#xff0c;做的非常早而且非常全面&#xff0c;都是通用的需求&…

html中的表格属性以及合并操作

表格用table定义&#xff0c;标签标题用caption标签定义&#xff1b;用tr定义表格的若干行&#xff1b;用td定义若干个单元格&#xff1b;&#xff08;当单元格是表头时&#xff0c;用th标签定义&#xff09;&#xff08;th标签会略粗于td标签&#xff09; table的整体外观取决…

html的字符实体和颜色表示

在HTML中&#xff0c;颜色可以通过以下几种方式表示&#xff0c;以下是具体的示例&#xff1a; 1. 十六进制颜色代码 十六进制颜色代码以#开头&#xff0c;后面跟随6个字符&#xff0c;每两个字符分别表示红色、绿色和蓝色的强度。例如&#xff1a; • #FF0000&#xff1a;纯红…

unordered_map/set的哈希封装

【C笔记】unordered_map/set的哈希封装 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】unordered_map/set的哈希封装前言一. 源码及框架分析二.迭代器三.operator[]四.使用哈希表封装unordered_map/set后言 前言 哈…

idea中git的简单使用

提交&#xff0c;推送直接合并 合到哪个分支就到先切到哪个分支

Fastdds学习分享_xtpes_发布订阅模式及rpc模式

在之前的博客中我们介绍了dds的大致功能&#xff0c;与组成结构。本篇博文主要介绍的是xtypes.分为理论和实际运用两部分.理论主要用于梳理hzy大佬的知识&#xff0c;对于某些一带而过的部分作出更为详细的阐释&#xff0c;并在之后通过实际案例便于理解。案例分为普通发布订阅…

开发板上Qt运行的环境变量的三条设置语句的详解

在终端中运行下面三句命令用于配置开发板上Qt运行的环境变量&#xff1a; export QT_QPA_GENERIC_PLUGINStslib:/dev/input/event1 export QT_QPA_PLATFORMlinuxfb:fb/dev/fb0 export QT_QPA_FONTDIR/usr/lib/fonts/设置成功后可以用下面的语句检查设置成功没有 echo $QT_QPA…

语言月赛 202412【顽强拼搏奖的四种发法】题解(AC)

》》》点我查看「视频」详解》》》 [语言月赛 202412] 顽强拼搏奖的四种发法 题目描述 在 XCPC 竞赛里&#xff0c;会有若干道题目&#xff0c;一支队伍可以对每道题目提交若干次。我们称一支队伍对一道题目的一次提交是有效的&#xff0c;当且仅当&#xff1a; 在本次提交…

自定义数据集 使用scikit-learn中svm的包实现svm分类

引入必要的库 import numpy as np from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import accuracy_score, classification_report 生成自定义数据集 X, y ma…

有用的sql链接

『SQL』常考面试题&#xff08;2——窗口函数&#xff09;_sql的窗口函数面试题-CSDN博客 史上最强sql计算用户次日留存率详解&#xff08;通用版&#xff09;及相关常用函数 -2020.06.10 - 知乎 (zhihu.com) 1280. 学生们参加各科测试的次数 - 力扣&#xff08;LeetCode&…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.27 NumPy+Pandas:高性能数据处理的黄金组合

2.27 NumPyPandas&#xff1a;高性能数据处理的黄金组合 目录 #mermaid-svg-x3ndEE4hrhO6WR6H {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-x3ndEE4hrhO6WR6H .error-icon{fill:#552222;}#mermaid-svg-x3ndEE4hr…

第一个3D程序!

运行效果 CPP #include <iostream> #include <fstream> #include <string> #include <cmath>#include <GL/glew.h> #include <GLFW/glfw3.h> #include <glm/glm.hpp> #include <glm/gtc/type_ptr.hpp> #include <glm/gtc/…

NeuralCF 模型:神经网络协同过滤模型

实验和完整代码 完整代码实现和jupyter运行&#xff1a;https://github.com/Myolive-Lin/RecSys--deep-learning-recommendation-system/tree/main 引言 NeuralCF 模型由新加坡国立大学研究人员于 2017 年提出&#xff0c;其核心思想在于将传统协同过滤方法与深度学习技术相结…

第二十三章 MySQL锁之表锁

目录 一、概述 二、语法 三、特点 一、概述 表级锁&#xff0c;每次操作锁住整张表。锁定粒度大&#xff0c;发生锁冲突的概率最高&#xff0c;并发度最低。应用在MyISAM、InnoDB、BDB等存储引擎中。 对于表级锁&#xff0c;主要分为以下三类&#xff1a; 1. 表锁 2. 元数…

【Uniapp-Vue3】获取用户状态栏高度和胶囊按钮高度

在项目目录下创建一个utils文件&#xff0c;并在里面创建一个system.js文件。 在system.js中配置如下代码&#xff1a; const SYSTEM_INFO uni.getSystemInfoAsync();// 返回状态栏高度 export const getStatusBarHeight ()> SYSTEM_INFO.statusBarHeight || 15;// 返回胶…

通向AGI之路:人工通用智能的技术演进与人类未来

文章目录 引言:当机器开始思考一、AGI的本质定义与技术演进1.1 从专用到通用:智能形态的范式转移1.2 AGI发展路线图二、突破AGI的五大技术路径2.1 神经符号整合(Neuro-Symbolic AI)2.2 世界模型架构(World Models)2.3 具身认知理论(Embodied Cognition)三、AGI安全:价…