比例数据可视化(Python实现板块层级图绘制)——Instacart Market Basket Analysis
【实验名称】
实验一:绘制板块层级图
【实验目的】
1. 掌握数据文件读取
2. 掌握数据处理的方法
3. 实现板块层级图的绘制
【数据介绍】Instacart Market Basket Analysis
1. 数据说明
数据共有300 0000orders,
20 0000users,
5000products,
每个user提供有4-100个orders
2. 各数据内容了解
aisles:产品摆放位置说明
order_products__prior:订单产品关联表
orders.csv: 用户下单记录表。
products.csv: 产品ID分类,及其摆放位置的关系表
departments.csv: 产品分类表
3. 目标分析
目标是预测用户下次购买时,可能再次购买的产品。
即,用户历史购买的产品,那些是用户下次购买还会购买的。
4. 训练数据构建
order_id, product_id(订单中的一个产品), lable(是否下次购买)。
(1)产品特征
1)产品被购买次数。
2)产品被重复购买次数
3)产品被重复购买次数/总的购买次数。
4)产品在不同week被购买次数
5)产品在不同hour被购买次数。
(2)用户特征
1)用户总下单次数。
2)用户总购买量。
3)用户每单平均购买量。
4)用户距离上一次购物时间。
5)用户频繁购买是周几。
6)用户购买当天小时。
7)用户购买商品数(去重)
8)用户购买最多的商品
7)用户购买最少的商品。
9)用户在不同week购买最多,以及最少的商品。
10)用户在不同hour购买最多,以及最少的商品。
(3)user_products特征
1)该用户购买该商品次数/该用户下单次数。
2)该用户上一次购买该商品距离现在天数。
3)该用户上一次购买该商品平均week日期。
4)该用户上一次购买该商品平均时间。
5)该用户购买该商品的频率
Instacart 的数据科学团队在提供这种令人愉悦的购物体验方面发挥着重要作用。目前,他们使用交易数据来开发模型,以预测用户在会话期间会再次购买、首次尝试或下次添加到购物车的产品。
无论您是从精心策划的购物清单中购物,还是让奇思妙想引导您放牧,我们独特的美食仪式都定义了我们是谁。Instacart 是一款杂货订购和送货应用程序,旨在让您在需要时轻松地将您个人最喜欢的和主食装满您的冰箱和食品储藏室。通过 Instacart 应用程序选择产品后,个人购物者会查看您的订单并为您进行店内购物和送货。
Instacart 的数据科学团队在提供这种令人愉悦的购物体验方面发挥着重要作用。目前,他们使用交易数据来开发模型,以预测用户在会话期间会再次购买、首次尝试或下次添加到购物车的产品。最近,Instacart 开源了这些数据 - 请参阅他们的博客文章 300 万个 Instacart 订单。
【实验原理】
板块层级图(treemap)是一种基于面积的可视化方式,通过每一个板块(通常为矩形)的尺寸大小进行度量。外部矩形代表父类别,而内部矩形代表子类别。我们也可以通过板块层级图简单的呈现比例关系,不过它更擅于呈现树状结构的数据。
读取绘图所用的数据,并对数据进行处理将数据处理成我们可以使用的形式,绘制板块层级图,设置标签和标题。
【实验环境】
Windows 11,python3.11.1,pycharm professional 2024.2.1,jupyter notebook
【实验步骤】
题目一:安装pandas、matplotlib、seaborn、squarify
1、输入命令:pip install pandas
![]()
2、输入命令:pip install matplotlib
![]()
3、输入命令:pip install seaborn

-
输入命令:pip install squarify
![]()

题目二:读取数据

在这里我们使用pandas库中的read_csv函数来读取这3个数据文件。
import pandas as pdproducts_df = pd.read_csv('products.csv')
aisles_df = pd.read_csv('aisles.csv')
departments_df = pd.read_csv('departments.csv')
aisles_df.head(10)
数据读取的结果(aisles_df部分数据读取结果):

题目三:数据预处理
我们需要根据源表对目标表进行匹配查询,使用merge函数进行操作。
order_products_prior_df = pd.merge(products_df, aisles_df, on='aisle_id', how='left')
order_products_prior_df = pd.merge(order_products_prior_df, departments_df, on='department_id', how='left')
order_products_prior_df.head()
temp = order_products_prior_df[['product_name', 'aisle', 'department']]
temp = pd.concat([order_products_prior_df.groupby('department')['product_name'].nunique().rename('products_department'),order_products_prior_df.groupby('department')['aisle'].nunique().rename('aisle_department')
], axis=1).reset_index()
temp = temp.set_index('department')
temp2 = temp.sort_values(by="aisle_department", ascending=False)
进行匹配操作后的数据。
print(temp)

print(temp2)

题目四:绘制板块层级图
1.绘制初始的板块层级图
cmap = matplotlib.cm.viridis
mini, maxi = temp2.products_department.min(), temp2.products_department.max()
norm = matplotlib.colors.Normalize(vmin=mini, vmax=maxi)
colors = [cmap(norm(value)) for value in temp2.products_department]
colors[1] = "#FBFCFE"
labels = ["%s\n%d aisle num\n%d products num" % (label) for label inzip(temp2.index, temp2.aisle_department, temp2.products_department)]
fig = plt.figure(figsize=(12, 10))
ax = fig.add_subplot(111, aspect="equal")
ax = squarify.plot(temp2.aisle_department, color=colors, label=labels, ax=ax, alpha=.7)
绘制结果

2.设置x、y轴的属性
ax.set_xticks([])
ax.set_yticks([])
3.添加图表标题
fig.suptitle("How are aisles organized within departments", fontsize=20 )
4.添加数据标签
img = plt.imshow([temp2.products_department], cmap=cmap)
img.set_visible(False)
fig.colorbar(img, orientation="vertical", shrink=.96)
fig.text(.76, .9, "numbers of products", fontsize=14)
这样我们的板块层级图就绘制完毕了

附录:总代码
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib
import squarify
color = sns.color_palette()
pd.options.mode.chained_assignment = None # default='warn'
products_df = pd.read_csv('products.csv')
aisles_df = pd.read_csv('aisles.csv')
departments_df = pd.read_csv('departments.csv')
order_products_prior_df = pd.merge(products_df, aisles_df, on='aisle_id', how='left')
order_products_prior_df = pd.merge(order_products_prior_df, departments_df, on='department_id', how='left')
order_products_prior_df.head()
temp = order_products_prior_df[['product_name', 'aisle', 'department']]
temp = pd.concat([order_products_prior_df.groupby('department')['product_name'].nunique().rename('products_department'),order_products_prior_df.groupby('department')['aisle'].nunique().rename('aisle_department')
], axis=1).reset_index()
temp = temp.set_index('department')
temp2 = temp.sort_values(by="aisle_department", ascending=False)
print(temp)
print(temp2)
x = 0
y = 0
width = 100
height = 100
cmap = matplotlib.cm.viridis
mini, maxi = temp2.products_department.min(), temp2.products_department.max()
norm = matplotlib.colors.Normalize(vmin=mini, vmax=maxi)
colors = [cmap(norm(value)) for value in temp2.products_department]
colors[1] = "#FBFCFE"
labels = ["%s\n%d aisle num\n%d products num" % (label) for label inzip(temp2.index, temp2.aisle_department, temp2.products_department)]
fig = plt.figure(figsize=(12, 10))
ax = fig.add_subplot(111, aspect="equal")
ax = squarify.plot(temp2.aisle_department, color=colors, label=labels, ax=ax, alpha=.7)
fig.suptitle("How are aisles organized within departments", fontsize=20 )
ax.set_xticks([])
ax.set_yticks([])
img = plt.imshow([temp2.products_department], cmap=cmap)
img.set_visible(False)
fig.colorbar(img, orientation="vertical", shrink=.96)
fig.text(.76, .9, "numbers of products", fontsize=14)
plt.show()
相关文章:
比例数据可视化(Python实现板块层级图绘制)——Instacart Market Basket Analysis
【实验名称】 实验一:绘制板块层级图 【实验目的】 1. 掌握数据文件读取 2. 掌握数据处理的方法 3. 实现板块层级图的绘制 【数据介绍】Instacart Market Basket Analysis 1. 数据说明 数据共有300 0000orders, 20 0000users, …...
C++研发笔记8——C语言程序设计初阶学习笔记6
在第一部分——课前准备的学习中,我就提到了学习C语言的过程中,练习是必不可少的环节,所以本篇笔记我们来进行记录我们学习《C语言程序设计初阶》阶段的第一篇练习文章。 题目一 下面哪个不是C语言内置的数据类型: A.char B.d…...
0softmax和背后的最大熵(极大似然法)
只要无穷阶矩都一样,那么两个分布一定一样。 整理思路:1、设定样本的概率模型与目标概率模型一致(两个模型特性函数一致)建立服从伯努利分布的变量(此处需要理解样本空间及变量的关系)对两个模型进行降维&a…...
6,000 个网站上的假 WordPress 插件提示用户安装恶意软件
黑客使用窃取的凭证感染 WordPress 网站,并向其发送虚假插件,通过虚假的浏览器更新提示向最终用户发送恶意软件和信息窃取程序。 该恶意活动基于ClickFix假浏览器更新恶意软件的新变种,自 2024 年 6 月以来已使用假 WordPress 插件感染了超过…...
最新Compose环境版本
1.gradle gradle 8.10.2 插件版本 8.7.1 Android Studio Ladybug | 2024.2.1 Patch 1 2.model 下 的 build.gradle.kts plugins {alias(libs.plugins.android.application)alias(libs.plugins.kotlin.android)alias(libs.plugins.kotlin.compose)id("kotlin-kapt&qu…...
流媒体协议.之(RTP,RTCP,RTSP,RTMP,HTTP)(一)
闲着没事做,记录一下开发项目用过的协议,项目中,大多是是实时显示播放的,通过私有协议,传输到上位机,实时播放,延时小于200ms,仿照这些协议,定义的数据格式。如果用这些协…...
【智能大数据分析 | 实验四】Spark实验:Spark Streaming
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘,以提取有价值的信息和洞察。它结合了大数据技术、人工智能(AI)、机器学习(ML&a…...
es实现自动补全
目录 自动补全 拼音分词器 安装拼音分词器 第一步:下载zip包,并解压缩 第二步:去docker找到es-plugins数据卷挂载的位置,并进入这个目录 第三步:把拼音分词器的安装包拖到这个目录下 第四步:重启es 第…...
【日志】Unity3D模型导入基本问题以及浅谈游戏框架
2024.10.22 真正的谦逊从来不是人与人面对时的谦卑,而是当你回头看那个曾经的自己时,依旧保持肯定与欣赏。 【力扣刷题】 暂无 【数据结构】 暂无 【Unity】 导入外部模型资源报错问题 在导入外部资源包的时候一般都会报错,不是这个资源模…...
1.8K Star,简洁易用 Web 端创意画板
Hi,骚年,我是大 G,公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目,一分钟 get 一个优秀的开源项目,挖掘开源的价值,欢迎关注。 在数字创作的时代,找到一款功能强大且易于使用的绘图工具…...
WPF中的<Style.Triggers>
Triggers介绍 在XAML中,Triggers是Style元素的一部分,用于定义在特定条件触发时应用的样式更改。这些触发器可以响应各种事件和属性值的变化,例如控件的状态变化(如鼠标悬停、焦点状态)、数据绑定值的变化等。 以下是…...
pod相关面试题总结(持续更新)
1:当一个Pod有多个容器时,如果连接到指定的容器? #查看当前空间下的pod [rootmaster210 pods]# kubectl get pods NAME READY STATUS RESTARTS AGE linux85-nginx-tomcat 2/2 Running 0 63s [rootmaster210 …...
Matlab学习03-符号的替换及运算(接上一篇)
在上一篇的学习中,我知道了符号变量的声明👇 Matlab学习02-matlab中的数据显示格式及符号变量-CSDN博客 接下来开始学习符号运算相关的内容,并学习最为核心的matlab程序设计。之前的学习都是为了程 序设计做铺垫,程序设计又是为了…...
Windows中API-磁盘管理笔记
硬盘是由一组堆积的盘片组成类似于圆柱体组成,每个盘片的数据都以电磁方式存储在同心圆或轨道中,轨道的最小可寻址单元是扇区;基本磁盘:最常用于windows的存储类型,指的是**包含分区的磁盘。**在基本磁盘上只能创建和删…...
010 操作符详解 上
写代码的实质是在写方法体 —— 刘铁猛 操作符概览 操作符本质 操作符的本质是函数的“简记法” 操作符 简写Add函数 34 等同Add(3,4)操作符不能脱离与它关联的数据类型可以说操作符就是与固定数据类型关联的一套算法的简记法 如下图所示算法的简记法 操作符的优先级 可以使…...
【贪心算法】(第十篇)
目录 加油站(medium) 题目解析 讲解算法原理 编写代码 单调递增的数字(medium) 题目解析 讲解算法原理 编写代码 加油站(medium) 题目解析 1.题目链接:. - 力扣(LeetCode&a…...
029.爬虫专用浏览器-抓取跨域#document下的内容
一、iframe下的#document是什么 #document 是一个特殊的 HTML 元素,表示 <iframe> 元素内部的文档对象。当你在 HTML 页面中嵌入一个 <iframe> 元素时,浏览器会创建一个新的文档对象来表示 <iframe> 内部的内容。这 个文档对象就是 #…...
SIP 业务举例之 Call Hold(呼叫保持)
目录 1. Call Hold(呼叫保持)简介 2. 信令流程 呼叫保持 呼叫恢复开始 恢复通话完成 3. 本例 Call Hold 建立了几个 Dialog? 博主wx:yuanlai45_csdn 博主qq:2777137742 想要 深入学习 5GC IMS 等通信知识(加入 51学通信),或者想要 cpp 方向修改简历,模拟面试,学习…...
eks节点的网络策略配置机制解析
参考链接 vpc-cni网络策略最佳实践,https://aws.github.io/aws-eks-best-practices/security/docs/network/#additional-resourcesvpc cni网络策略faq,https://github.com/aws/amazon-vpc-cni-k8s/blob/0703d03dec8afb8f83a7ff0c9d5eb5cc3363026e/docs/…...
【C】用c写贪吃蛇
1.输入正确的账号密码及其用户名,登录成功进入贪吃蛇游戏界面, 2.随机生成蛇头★、食物▲的位置(x,y),并使用□打印地图 3.使用w s a d按键,完成蛇头的上下左右移动 4.蛇头碰撞到食物后,吃下食物变成蛇身的一部分●…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...
