数据源:Kaggle网站上一个“blackFriday.csv”文件(Kaggle网站是一个流行的数据科学竞赛平台),下载下来的数据字段如下:

2020-10-19 13:13:29 上传

下载附件 (195.69 KB)

本节通过该数据,练习使用数据的三维图形化、字段之间的相关性及相关性热力图,直观地查看出哪些因素影响购买力,其三维散点图是怎样的。

一、怎样查看哪些因素影响购买力?

方法1:逐一探索各字段对购买力的影响趋势

数据量较小时,可以逐一查看每个字段与购买额字段的相关系数。相关系数较大的,影响力就大。

而本文件数据量较大(53万条),不便直接展示各字段与购买额之间的散点图,所以可将研究字段比如年龄,可以按年龄段分组后取均值,然后再研究。

但该方法需要研究的字段较多,逐一探索的方法效率较低。因此考虑使用方法2。

方法2:使用Dataframe的corr()函数查看各字段之间的相关性

该方法可以更快地分析出各字段之间的相关性,自然也可以看出每个字段与购买额字段的相关系数,从而更快捷、更方便地观察出最具影响力的属性。

二、图形化展示某因素对购买力的影响

根据方法2,逐步在python中实现,步骤如下:

Step1、看各因素之间的相关性

使用pd.read_csv()读入数据,生成DataFrame类型的变量。

使用dataframe.corr(),查看各字段之间的相关性。

【脚本及结果】

2020-10-19 13:13:30 上传

下载附件 (109.09 KB)

我们发现,没有年龄、城市类别和居住时长与其他字段之间的关联,原因是,这三个字段的值不是数值类型的。

将其转换为数值类型后,重新查看各字段之间的相关性。

【脚本】importpandasaspddata=pd.read_csv(r'D:\cpda\python\data\BlackFriday.csv')pd.set_option('display.max_columns',None)#将年龄、居住时长调整为数值型data['Age']=data['Age'].apply(lambdax:x[0])#表示输入一个字符串x,输出x[0] , 在此不能直接使用int()函数,因为系统认为apply(lambda x: x[0])是一个序列data.loc[data['Stay_In_Current_City_Years']=='4+','Stay_In_Current_City_Years']=4#将该列异常数据用正常数据代替data['Age']=data['Age'].astype(int)#数据类型转换data['Stay_In_Current_City_Years']=data['Stay_In_Current_City_Years'].astype(int)corr1=data.corr()print(corr1)【结果】

2020-10-19 13:13:30 上传

下载附件 (71.97 KB)

相关性矩阵

显然,这里数据量较大,不太容易一眼看出哪些字段相关性较强,所以我们需要可视化。

Step2、将相关性图形化

Seaborn是基于matplotlib的图形可视化python包,它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表。Seaborn要求原始数据的输入类型为 pandas 的 Dataframe或 Numpy 数组。这里我们使用他的heatmap()和clustermap()两个函数,可以展现相关性热力图,以及聚类情况。【脚本】sbn.heatmap(corr1)sbn.clustermap(corr1)plt.show()【结果】

2020-10-19 13:13:30 上传

下载附件 (42.27 KB)heatmap()的结果

由heatmap()与相关性矩阵来看,与销售额相关性较强的属性并不多,甚至产品类别1和产品类别2还与购买力成负相关。年龄好像与购买力有相关性,但比较弱。

此外,我们从图中还可以看出,年龄与婚否有相关性,这与我们的正常认知一致。几个产品类别之间也有较强的相关性。当然这些不在我们本次研究范围内。

我们再看clustermap()的结果:

2020-10-19 13:13:30 上传

下载附件 (39.21 KB)

clustermap()的结果

对比heatmap()图和clustermap()图,发现后者将系数相近的类别聚在了一些,全图深色浅色各聚一簇,以便我们做聚类分析。

Step3、看单一因素的影响力

因为我们研究的目标是“什么样的用户购买的更多”,所以尽管产品类别与销售额有明显地负相关性,却因不是研究主体“人”的属性,所以在此不做仔细观察。我们着重看人的年龄、职业、居住时长及婚否这些属性,可以详细查看相应的散点图。如:

因数据量较大,散点图太多,可以将年龄等字段分组后取均值,以看整体效果。

【脚本】

# 将年龄、居住时长调整为数值型

data['Age'] = data['Age'].apply(lambda x: x[0])

# 表示输入一个字符串x,输出x[0] , 在此不能直接使用int()函数,因为系统认为apply(lambda x: x[0])是一个序列

data.loc[data['Stay_In_Current_City_Years'] == '4+', 'Stay_In_Current_City_Years'] = 4  # 将该列异常数据用正常数据代替

data['Age'] = data['Age'].astype(int)  # 数据类型转换

data['Stay_In_Current_City_Years'] = data['Stay_In_Current_City_Years'].astype(int)

y = data[['Purchase']].groupby(data['Age']).mean()

z = data[['Purchase']].groupby(data['Stay_In_Current_City_Years']).mean()

# 可视化相关性,二维

plt.scatter(y['Purchase'], y.index, c=y['Purchase']/10, s=y['Purchase']/10)

plt.show()

plt.scatter(z['Purchase'], z.index, c=z['Purchase']/10, s=z['Purchase']/10)

plt.show()

【结果】

2020-10-19 13:13:31 上传

下载附件 (15.53 KB)

年龄与购买额相关性

2020-10-19 13:16:29 上传

下载附件 (18.72 KB)

居住时长与购买额相关性

从上图可以看出,年龄、及居住时长都会对购买力产生影响。

此外,我们还可以查看这些因素的三维散点图。方法如下:

【脚本】

from mpl_toolkits.mplot3d import axes3d

result = data.groupby([data['Stay_In_Current_City_Years'], data['Age']]).mean()

# ax =plt.subplot(projection='3d')

fig = plt.figure('3D scatter')

ax3d = axes3d.Axes3D(fig)

ax3d.scatter(result['Purchase'], result.index.codes[0], result.index.codes[1],

color=cm.ScalarMappable().to_rgba(result['Purchase']), s=200)

plt.show()

【结果】

2020-10-19 13:13:31 上传

下载附件 (124.2 KB)

【看图分析】

上图中,X轴为购买额,Y轴为居住时长,Z轴为年龄段,我们可以看到:随着年龄段和居住时间的增加,购物额也在不断增加。

【特别说明】

针对3d可视化脚本,老师讲使用以下脚本即可:

ax =plt.subplot(projection='3d')

ax.scatter(result['Purchase'], result.index.codes[0], result.index.codes[1],

color=cm.ScalarMappable().to_rgba(result['Purchase']), s=200)

但实际在我机器上使用时,却报“Unknown projection '3d'”的错误,百度一下,发现“matplotlib版本和python版本的更新问题”,所以使用了以上解决方案。见https://blog.csdn.net/weixin_40051325/article/details/102896416

三、总结

对我个人来说,本节学到的内容有:

1、      数据相关性的分析方法,使用dataframe.corr()

2、      相关性的图形化展示,使用Seaborn库下的heatmap()和clustermap()两个函数

3、  3d图形展示时,如果不能直接使用plt.subplot(projection='3d'),则引入axes3d( 3D图形绘制)。

python电商用户购买力分析_Python + pandas + 不同客户购买力图形显示相关推荐

  1. Flink_大数据技术之电商用户行为分析

    大数据技术之电商用户行为分析 第1章 项目整体介绍 1.1 电商的用户行为 电商平台中的用户行为频繁且较复杂,系统上线运行一段时间后,可以收集到大量的用户行为数据,进而利用大数据技术进行深入挖掘和分析 ...

  2. Spark项目实战—电商用户行为分析

    文章目录 一.[SparkCore篇]项目实战-电商用户行为分析 前言:数据准备 1.数据规则如下: 2.详细字段说明: 3.样例类 (一)需求1:TOP10热门品类 1.需求说明 2.代码实现方案1 ...

  3. 电商用户行为分析大数据平台相关系列1-环境介绍

    最近在自学Spark,看了一些书籍和视频,总是感觉无从下手.拿着一个想法总是无从下手.追其原因,主要是没有系统的学习和使用.对于IT,一切新技术都需要不断实践.不断动手.本着动手的原则,本人通过各种渠 ...

  4. 数据分析实战(六):英国电商用户行为分析

    案例:英国电商用户行为数据分析 Part 1. 数据获取 1.1 数据集简介 https://archive.ics.uci.edu/ml/datasets/online+retail# 该数据集为英 ...

  5. 某电商用户行为分析-提升GMV

    目录 1. 明确项目背景和需求 项目目的: 分析思路: 2 数据探索(EDA) 2.1 数据集信息 2.2数据预览 2.2.1 new_user 2.2.2 age 2.2.3 sex 2.2.4 m ...

  6. 电商用户行为分析大数据平台

    简介 对电商用户行为: 访问行为 购物行为 广告点击 进行复杂的分析 结果 辅助PM 数据分析师 管理分析现有状况 改进产品设计 调整公司战略业务 提升业绩 营业额以及市场占有率提升 技术简介 业务模 ...

  7. 【Flink】基于 Flink 的电商用户行为分析(二)

    1.市场营销商业指标统计分析 模块创建和数据准备 继续在 UserBehaviorAnalysis 下新建一个 maven module 作为子项目,命名为 MarketAnalysis. 这个模块中 ...

  8. Python 数据分析实战之电商用户行为分析(万字干货)

    作者:freedom_lime https://juejin.im/post/6844904202590748679#heading-0 1 项目背景 项目对京东电商运营数据集进行指标分析以了解用户购 ...

  9. 毕业设计 大数据电商用户行为分析 -python 大数据

    文章目录 0 前言 一.背景描述 二.项目背景 三.数据来源 四.提出问题 五.理解数据 六.数据清洗 6.1缺失值处理 6.2查看数据 6.3一致化处理 6.4查看data_user数据集数据类型: ...

最新文章

  1. 方法传递java_Java 程序将方法作为参数传递给其他方法
  2. 编写你的第一个 Django 应用,第 4 部分
  3. ASP.NET WEBAPI设计(文摘)
  4. Java实验二猜数字游戏,JAVA-第2周实验-猜数字游戏
  5. python路径规划算法可视化_路径规划问题:DIJKSTRA算法 以及Python实现
  6. linux centos 7.0 安装配置,CentOS7.0安装配置CouchBase
  7. erl_nif中解决调用enif_get_XX错误问题
  8. 单片机 自动更改日期_自动螺丝机不可或缺之功能
  9. viper12a电源电路图_viper12a引脚功能图与引脚电压
  10. oeasy教您玩转linux-010110内容回顾
  11. php自动关机代码,win7定时关机命令是什么
  12. 你会在本地搭建 Web 版 VS Code 吗,看完这一篇你就能轻松实现了!
  13. 《地球概论》(第3版)笔记 第三章 地球的运动
  14. 对 算术基本定理 的研究
  15. postman Error: connect ECONNREFUSED xxx
  16. Two Teams Composing
  17. PHP扩展undefined symbol,基于phpx的扩展运行报错undefined symbol
  18. Markdown 语法学习
  19. 【香蕉OI】GCD 和 LCM (莫比乌斯反演)
  20. Python安装第三方库方法教程

热门文章

  1. 【Elasticsearch】Elasticsearch 索引生命周期管理
  2. 【Java】Java 集合相关的博客积累
  3. Docker : Docker 查看容器 IP 地址以及相关信息
  4. 【Flink】Flink RecordWriterOutput pushToRecordWriter InterruptedException
  5. Spring : Spring 深入理解lombok
  6. java自动转换需要的开头_字符串和数值型进行运算时,字符串如果不是数字开头,会自动转换成什么?...
  7. ORA-00257 archiver error. 错误的处理方法
  8. matlab arctan 反函数,arctanx的导数是什么 反函数求导公式
  9. [转]我的数据结构不可能这么可爱!——珂朵莉树(ODT)详解
  10. VB.Command()的参数