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

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

作者:i阿极

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

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

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


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

文章目录


1、前言

1.1什么是用户画像?

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

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

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

1.2描述电商用户画像维度

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

2、数据处理

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

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

查看数据基本维度,如果有缺失值数据,可对缺失值数据做填充。

python 复制代码
#查看是否有缺失值
data.info()

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

python 复制代码
#查看数据类型
data.dtypes

将用户出生日期处理为为日期数据类型

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

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

python 复制代码
data['下单时间'] = pd.to_datetime(data['下单时间'],format='mixed').dt.date

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

python 复制代码
data['用户ID']=data['用户ID'].astype('str')
data['订单ID']=data['订单ID'].astype('str')

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

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

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

年龄求分位数

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

使用pd.qcut函数,将用户的年龄自动分组,按照相同的组距分为不同的年龄段

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

3、数据可视化

3.1性别交易差异

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

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

df_pay_sex=data.groupby('性别')['交易金额'].sum().reset_index()
df_pay_sex
python 复制代码
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婚姻交易差异

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

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

df_pay_mary=data.groupby('婚姻状况')['交易金额'].sum().reset_index()
df_pay_mary
python 复制代码
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 文化程度

python 复制代码
data['文化程度'].tolist()[:10]
python 复制代码
#导入词云图包
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 年龄段差异

python 复制代码
df_age=data.groupby(['年龄分组'])['交易金额'].sum().reset_index()
df_age
python 复制代码
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.用户画像仪表盘

python 复制代码
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博客 ,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒

📢你的支持和鼓励是我创作的动力❗❗❗

相关推荐
weixin_3077791319 分钟前
AWS门店人流量数据分析项目的设计与实现
python·数据分析·系统架构·云计算·aws
CodeClimb41 分钟前
【华为OD-E卷 - 115 数组组成的最小数字 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
CodeClimb43 分钟前
【华为OD-E卷 - 114 找最小数 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
白白糖1 小时前
Day 27 卡玛笔记
python·力扣
亲持红叶1 小时前
Boosting 框架
人工智能·python·机器学习·集成学习·boosting
CesareCheung2 小时前
pycharm集成通义灵码应用
ide·python·pycharm
zf_prm2 小时前
Flask+gevent 实现异步请求处理
后端·python·flask
天才测试猿3 小时前
Pytest+selenium UI自动化测试实战实例
自动化测试·软件测试·python·selenium·测试工具·ui·pytest
java—大象3 小时前
基于JavaWeb开发的Java+Jsp+SpringMVC漫威手办商城系统设计和实现
java·开发语言·数据库·spring boot·python·课程设计