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

比例数据可视化(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

  1. 输入命令: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.设置xy轴的属性

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 元素&#xff0c;表示 <iframe> 元素内部的文档对象。当你在 HTML 页面中嵌入一个 <iframe> 元素时&#xff0c;浏览器会创建一个新的文档对象来表示 <iframe> 内部的内容。这 个文档对象就是 #…...

SIP 业务举例之 Call Hold(呼叫保持)

目录 1. Call Hold(呼叫保持)简介 2. 信令流程 呼叫保持 呼叫恢复开始 恢复通话完成 3. 本例 Call Hold 建立了几个 Dialog? 博主wx:yuanlai45_csdn 博主qq:2777137742 想要 深入学习 5GC IMS 等通信知识(加入 51学通信),或者想要 cpp 方向修改简历,模拟面试,学习…...

eks节点的网络策略配置机制解析

参考链接 vpc-cni网络策略最佳实践&#xff0c;https://aws.github.io/aws-eks-best-practices/security/docs/network/#additional-resourcesvpc cni网络策略faq&#xff0c;https://github.com/aws/amazon-vpc-cni-k8s/blob/0703d03dec8afb8f83a7ff0c9d5eb5cc3363026e/docs/…...

【C】用c写贪吃蛇

1.输入正确的账号密码及其用户名&#xff0c;登录成功进入贪吃蛇游戏界面&#xff0c; 2.随机生成蛇头★、食物▲的位置(x,y)&#xff0c;并使用□打印地图 3.使用w s a d按键&#xff0c;完成蛇头的上下左右移动 4.蛇头碰撞到食物后&#xff0c;吃下食物变成蛇身的一部分●…...

MCP服务器部署模板:容器化与CI/CD自动化实践指南

1. 项目概述&#xff1a;一个为MCP服务器量身定制的部署蓝图如果你正在开发或维护一个基于模型上下文协议&#xff08;Model Context Protocol&#xff0c; MCP&#xff09;的服务器&#xff0c;并且对如何将其优雅、可靠地部署到生产环境感到头疼&#xff0c;那么你很可能已经…...

告别闪烁屏!瑞芯微RK3399开发板Debian系统烧写保姆级教程(含DriverAssistant v5.1.1 + AndroidTool v2.69)

RK3399开发板Debian系统烧写实战&#xff1a;从屏幕闪烁到完美显示的终极解决方案 当你在RK3399开发板上成功烧写Debian系统后&#xff0c;最期待的莫过于看到系统稳定运行的画面。然而&#xff0c;不少开发者却遭遇了屏幕闪烁的困扰——这个问题看似简单&#xff0c;背后却隐藏…...

Minecraft物品堆叠架构深度解析:突破64限制的技术实现方案

Minecraft物品堆叠架构深度解析&#xff1a;突破64限制的技术实现方案 【免费下载链接】UltimateStack A Minecraft mod,can modify ur item MaxStackSize (more then 64) 项目地址: https://gitcode.com/gh_mirrors/ul/UltimateStack 在Minecraft模组开发领域&#xf…...

记一次在双 RTX 3090 工作站上部署 vLLM 与 Qwen3.6-35B-AWQ 的实战记录

记一次在双 RTX 3090 工作站上部署 vLLM 与 Qwen3.6-35B-AWQ 的实战记录 1. 升级目的 最近需要本地部署大模型推理服务&#xff0c;目标是运行 Qwen3.6-35B 的 INT4 量化版本&#xff08;AWQ 格式&#xff09;&#xff0c;并使用高性能推理引擎 vLLM 提供服务。由于模型采用 …...

Visual Paradigm 17.0 新特性解析:团队协作与项目管理效率跃升

1. Visual Paradigm 17.0 团队协作功能全面升级 Visual Paradigm 17.0 版本带来了多项针对团队协作的实用改进&#xff0c;让分布式团队的建模工作变得更加高效。作为一个长期使用该工具的老用户&#xff0c;我发现这次更新特别注重解决实际协作中的痛点问题。 首先说说模型搜索…...

别再头疼了!手把手教你用赫优讯NT151网关搞定FANUC机器人与西门子S7-1500 PLC通讯

工业现场通讯实战&#xff1a;FANUC机器人与西门子S7-1500 PLC跨协议高效对接指南 当FANUC机器人的EtherNet/IP网络需要与西门子S7-1500的PROFINET系统握手时&#xff0c;现场工程师往往会面临协议壁垒带来的调试噩梦。去年在某新能源汽车电池产线项目中&#xff0c;我们团队用…...

告别卡顿与错帧:Glide + WebPDecoder库优化WebP动图播放的完整实践

Glide WebPDecoder库深度优化&#xff1a;解决WebP动图播放三大核心难题 在移动应用开发中&#xff0c;动态图像的流畅播放直接影响用户体验。WebP格式因其优秀的压缩率和动画支持&#xff0c;正逐渐成为替代GIF的首选方案。然而&#xff0c;Android平台上使用Glide加载WebP动…...

支付宝沙箱环境:从零搭建支付测试与调试实战

1. 支付宝沙箱环境入门指南 第一次接触支付宝开放平台的开发者&#xff0c;往往会对支付功能的对接感到头疼。别担心&#xff0c;支付宝沙箱环境就是专为解决这个问题而生的。简单来说&#xff0c;这是一个完全模拟真实支付流程的测试环境&#xff0c;让你可以在不花一分钱的情…...

从‘桥接模式’到‘Pimpl惯用法’:一个被C++编译器逼出来的设计智慧

从‘桥接模式’到‘Pimpl惯用法’&#xff1a;一个被C编译器逼出来的设计智慧 在面向对象编程的演进历程中&#xff0c;设计模式往往是对语言缺陷的优雅补偿。当Java和C#开发者享受着接口天然的"编译防火墙"时&#xff0c;C社区却不得不发明Pimpl这种看似笨拙实则精妙…...

ITK-SNAP:掌握医学图像分割的5个关键步骤

ITK-SNAP&#xff1a;掌握医学图像分割的5个关键步骤 【免费下载链接】itksnap ITK-SNAP medical image segmentation tool 项目地址: https://gitcode.com/gh_mirrors/it/itksnap ITK-SNAP是一款功能强大的开源医学图像分析软件&#xff0c;专门用于3D医学影像的分割、…...