比例数据可视化(Python实现板块层级图绘制)——Instacart Market Basket Analysis

news2024/12/25 8:51:52

【实验名称】

实验一:绘制板块层级图

【实验目的】

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 pd

products_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 in
          zip(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 in
 zip(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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2224039.html

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

相关文章

electron 打包

安装及配置 安装electron包以及electron-builder打包工具 # 安装 electron cnpm install --save-dev electron # 安装打包工具 cnpm install electron-builder -D 参考的package.json文件 其中description和author为必填项目 {"name": "appfile",&qu…

十一、数据库配置

一、Navicat配置 这个软件需要破解 密码是:123456; 新建连接》新建数据库 创建一个表 保存出现名字设置 双击打开 把id设置为自动递增 这里就相当于每一次向数据库添加一个语句,会自动增长id一次 二、数据库的增删改查 1、Vs 建一个控…

C# 创建型设计模式----工厂模式

1 、什么是工厂模式 简单来说就是由一个对象去生成不同的对象,工厂模式是用工厂方法代替new操作的一种模式。工厂方法封装了多个相关联类的new方法,每次实例化这些类的时候不需要new多次,只需要调用工厂类的对应方法即可实例化这些类&#x…

2024年项目管理新风向:敏捷开发与瀑布开发,哪个更优?

一、项目管理的多样格局 2024 年,项目管理领域展现出丰富多样的格局。数字化趋势愈发明显,项目管理软件普及度不断提高,据相关资料显示,随着云计算、大数据等技术的成熟,项目管理软件将更加普及,实现项目信…

单片机_RTOS__架构概念

经典单片机程序 void main() {while(1){函数1();函数2();}} 有无RTOS区别 裸机 RTOS RTOS程序 喂饭() {while(1){喂一口饭();} } …

容灾与云计算概念

​​​​​​基础知识容灾备份——备份技术系统架构与备份网络方案-CSDN博客 SAN,是storage area network的简称,翻译过来就是存储区域网络。 顾名思义,SAN首先是一个网络,其次它是关于存储的,区域则是指服务器和存储资…

【C语言】控制台学生成绩管理系统

文章目录 C语言编程:学生成绩管理系统一、程序概述二、代码实现三、程序解释 C语言编程:学生成绩管理系统 在这篇文章中,我们将一起探讨如何使用C语言来创建一个简单的学生成绩管理系统。这个系统将允许用户输入学生数量、学号和成绩&#x…

气膜娱乐馆:科技与自然的完美结合—轻空间

在这片拥有独特滨海风光和丰富旅游资源的地方,气膜娱乐馆应运而生,为游客和当地居民打造了一个集运动、娱乐、亲子游乐和科技互动于一体的综合性室内娱乐体验。 灵活空间,舒适体验 气膜结构为娱乐馆提供了广阔的空间灵活性,使其能…

【Markdown速成】半小时入门Markdown教程(后缀.md文件详解)

目录 一.认识Markdown Markdown Typora 二.Typora设置 三.Markdown语法 1.标题 2.正文 2.1分割线 2.2删除线 2.3下划线 2.4斜体 2.5粗体 2.6斜粗体 2.7高亮 2.8字体属性(大小及颜色) 2.9对齐方式 2.10引用 3.列表 有序列表 无序列表 …

steam新品节!GameViewr远程随时随地手机平板玩主机游戏教程

Steam平台在10月14日迎来了新品节,你可以尝试即将推出的游戏的免费试用版,将他们加入愿望单,像是《迷失之径》《贪婪大地》《疯狂手机大亨》等等。不知道大家是否已经选择好自己心怡的游戏呢?要是你想随时随地体验steam新品节的游…

大一物联网要不要转专业,转不了该怎么办?

有幸在2014年,踩中了物联网的风口,坏消息,牛马的我,一口汤都没喝上。 依稀记得,当时市场部老大,带我去上海参加电子展会,印象最深的,一些物联网云平台,靠着一份精美PPT&a…

Visual studio 下载安装

1,Visual stutdio 网址 下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux 2,下划页面,点击 较早的下载 3,选择对应的版本进行下载

IDEA关联Tomcat——最新版本IDEA 2024

1.链接Tomcat到IDEA上 添加Tomcat到IDEA上有两种方式: 第一种: (1)首先,来到欢迎界面,找到左侧的Customize选项 (2)然后找到Build、Execution、Deployment选项 (3&am…

LabVIEW中句柄与引用

在LabVIEW中,句柄(Handle) 是一种用于引用特定资源或对象的标识符。它类似于指针,允许程序在内存中管理和操作复杂的资源,而不需要直接访问资源本身。句柄用于管理动态分配的资源,如队列、文件、网络连接、…

使用query-string库出现错误Module parse failed: Unexpected token

环境 node v12query-string 9.1.0 报错信息 Failed to compile../node_modules/query-string/base.js 350:14 Module parse failed: Unexpected token (350:14) File was processed with these loaders:* ./node_modules/babel-loader/lib/index.js You may need an additio…

Hadoop:yarn的Rust API接口

今天头一次接触了yarn的Rust API接口,在本地搭建了集群,能够得到每个任务的详细信息。 (一)得到所有任务的所有信息命令: 默认是json格式,也可以指定xml的格式,如(curl --compressed -H "Accept: application/x…

个性化头像新选择:A1快速定制你的专属头像

个性化头像是彰显个人特色的绝佳方式,许多人为了表达自我,都会选择定制专属头像。然而,传统的定制头像服务往往价格不菲,且效果难以预测。幸运的是,AI绘画技术的发展为这一问题提供了解决方案。尽管许多AI绘画平台需要…

Windows server 2003服务器的安装

Windows server 2003服务器的安装 安装前的准备: 1.镜像SN序列号 图1-1 Windows server 2003的安装包非常人性化 2.指定一个安装位置 图1-2 选择好安装位置 3.启动虚拟机打开安装向导 图1-3 打开VMware17安装向导 图1-4 给虚拟光驱插入光盘镜像 图1-5 输入SN并…

使用 ASP.NET Core 8.0 创建最小 API

构建最小 API,以创建具有最小依赖项的 HTTP API。 它们非常适合需要在 ASP.NET Core 中仅包括最少文件、功能和依赖项的微服务和应用。 本教程介绍使用 ASP.NET Core 生成最小 API 的基础知识。 在 ASP.NET Core 中创建 API 的另一种方法是使用控制器。 有关在最小 …

数据结构 单调栈

应用情景 求当前元素 前面/后面,第一个比它 小/大 的元素的 值/下标/下标距离 优点 剔除重复寻路操作,将暴力 O(n^2) 优化到 O(n) 性质 从栈底开始,元素 单调递增/单调递减 单调性视具体情景而定 (找较大值还是较小值、找的方向) 思路…