Matplotlib实战_HM数据可视化

news2024/10/5 16:21:12

文章目录

  • 一、先前准备
    • 1.导入必备工具包
    • 2.读取数据
  • 二、Articles数据
    • 1.打印查看前5行数据
    • 2.查看部分字段频次统计
    • 3.制作云图
  • 三、Customers数据
    • 1.打印前5行数据
    • 2.查看客户年龄分布图
    • 3.去重查看会员俱乐部状态
    • 4.打印查看该列数据
    • 5.查看会员俱乐部状态数量,绘制条形图
    • 6.查看H&M 可以向客户发送新闻的频率,绘制条形图
  • 四、Transactions 数据
    • 1.打印查看前5行数据
    • 2.查看销售渠道1、销售渠道2、销售全渠道数据
    • 3.articles 数据与 transactions 数据做拼接,其一字段做时间类型转化
    • 4.部分字段按月求价格均值走势
  • 五、Images 数据
    • 查看特定图片


H&M数据集介绍
1.数据集描述

对于这个挑战,你将获得顾客在一段时间内的购买历史记录,以及相关的元数据。你的任务是预测在训练数据结束后的7天内,每个顾客将购买哪些商品。在这段时间内没有进行任何购买的顾客将被排除在评分之外。

2.文件

  1. images/:包含与每个商品ID对应的图片的文件夹;图片被放置在以商品ID的前三位数字命名的子文件夹中;请注意,并非所有的商品ID值都有对应的图片。

  2. articles.csv:每个可购买商品ID的详细元数据。

  3. customers.csv:数据集中每个顾客ID的元数据。

  4. transactions_train.csv:训练数据,包括每个日期每个顾客的购买记录,以及额外的信息。重复的行表示同一商品的多次购买。你的任务是预测在训练数据期间结束后的7天内,每个顾客将购买哪些商品。

一、先前准备

1.导入必备工具包

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import matplotlib.image as mpimg
from wordcloud import WordCloud, STOPWORDS

# 设置要显示的行数和列数
pd.set_option('display.max_rows', 100)
pd.set_option('display.max_columns', 50)

plt.rcParams['font.sans-serif'] = ['SimHei']   #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False   #用来正常显示负号

2.读取数据

articles = pd.read_csv("articles.csv")
customers = pd.read_csv("customers.csv")
transactions = pd.read_csv("transactions_train.csv")

二、Articles数据

这个表格包含了所有H&M的商品,包括产品类型、颜色、产品组和其他特征的详细信息。

商品数据描述:

article_id:每个商品的唯一标识符。
product_code、prod_name:每个产品及其名称的唯一标识符(不同)。
product_type、product_type_name:product_code及其名称的产品组。
graphical_appearance_no、graphical_appearance_name:图形及其名称的组别。
colour_group_code、colour_group_name:颜色及其名称的组别。
perceived_colour_value_id、perceived_colour_value_name、perceived_colour_master_id、perceived_colour_master_name:附加的颜色信息。
department_no、department_name:每个部门及其名称的唯一标识符。
index_code、index_name:每个指标及其名称的唯一标识符。
index_group_no、index_group_name:一组指标及其名称。
section_no、section_name:每个部分及其名称的唯一标识符。
garment_group_no、garment_group_name:每个服装及其名称的唯一标识符。
detail_desc:详细描述。描述是关于H&M商品的数据集。

1.打印查看前5行数据

articles.head()

在这里插入图片描述

2.查看部分字段频次统计

cols = ['index_name','index_group_name']
fig, axs = plt.subplots(1, len(cols), figsize=(10, 4), sharex=True, sharey=True)
fig.suptitle('Articles 部分字段频次统计', size=20)
for idx,col in enumerate(cols):
    axs[idx].hist(articles[col],orientation="horizontal",color='orange')
    axs[idx].set_xlabel(f'Count by {col}')
    axs[idx].set_ylabel(col)
# 调整布局以防止重叠
fig.tight_layout(rect=[0, 0.03, 1, 0.95])

在这里插入图片描述

3.制作云图

stopwords = set(STOPWORDS)

def show_wordcloud(data, title = None):
    wordcloud = WordCloud(
        background_color='white',
        stopwords=stopwords,
        max_words=200,
        max_font_size=40, 
        scale=5,
        random_state=1
    ).generate(str(data))

    fig = plt.figure(1, figsize=(10,10))
    plt.axis('off')
    if title: 
        fig.suptitle(title, fontsize=14)
        fig.subplots_adjust(top=2.3)

    plt.imshow(wordcloud)
    plt.show()

show_wordcloud(articles["detail_desc"], "Wordcloud from detailed description of articles")

在这里插入图片描述

三、Customers数据

customer_id:每位客户的唯一标识符
FN:1 或 缺失
Active:1 或 缺失
club_member_status:会员俱乐部状态
fashion_news_frequency:H&M 可以向客户发送新闻的频率
age:当前年龄
postal_code:客户的邮政编码

1.打印前5行数据

customers.head()

在这里插入图片描述

2.查看客户年龄分布图

fig, ax = plt.subplots(figsize=(10,5))
ax.hist(customers['age'],color='orange',bins=70)
ax.set_xlabel('Distribution of the customers age')
plt.show()

在这里插入图片描述

3.去重查看会员俱乐部状态

customers['club_member_status'].unique()

在这里插入图片描述

4.打印查看该列数据

customers['club_member_status']

在这里插入图片描述

5.查看会员俱乐部状态数量,绘制条形图

fig, ax = plt.subplots(figsize=(10,5))
ax.hist(customers['club_member_status'].dropna(),color='orange')
ax.set_xlabel('Distribution of club member status')
plt.show()

在这里插入图片描述

6.查看H&M 可以向客户发送新闻的频率,绘制条形图

fig, ax = plt.subplots(figsize=(10,5))
ax.hist(customers['fashion_news_frequency'].dropna(),color='orange')
ax.set_xlabel('Distribution of fashion_news_frequency')
plt.show()

在这里插入图片描述

四、Transactions 数据

t_dat:日期
customer_id:每位客户的唯一标识符(在客户表中)
article_id:每个商品的唯一标识符(在商品表中)
price:购买价格
sales_channel_id:销售渠道的标识符(1 或 2)

1.打印查看前5行数据

transactions.head()

在这里插入图片描述

2.查看销售渠道1、销售渠道2、销售全渠道数据

# 数据准备
data1 = np.log(transactions.loc[transactions["sales_channel_id"] == 1].price.value_counts())
data2 = np.log(transactions.loc[transactions["sales_channel_id"] == 2].price.value_counts())
data3 = np.log(transactions.price.value_counts())

# 创建分面图
fig, axs = plt.subplots(3, 1, figsize=(14, 14))  # 3个子图

# 子图1:销售渠道1
axs[0].hist(data1, bins=30, alpha=0.5,color='blue')
axs[0].set_title('Sales channel 1')

# 子图2:销售渠道2
axs[1].hist(data2, bins=30, alpha=0.5,color='green')
axs[1].set_title('Sales channel 2')

# 子图3:所有销售渠道
axs[2].hist(data3, bins=30, alpha=0.5,color='red')
axs[2].set_title('All Sales channels')

# 调整子图布局
plt.tight_layout()
plt.show()

在这里插入图片描述

3.articles 数据与 transactions 数据做拼接,其一字段做时间类型转化

articles_for_merge = articles[['article_id', 'prod_name', 'product_type_name', 'product_group_name', 'index_name']]

articles_for_merge = transactions[['customer_id', 'article_id', 'price', 't_dat']].merge(articles_for_merge, on='article_id', how='left')

articles_for_merge['t_dat'] = pd.to_datetime(articles_for_merge['t_dat'])

4.部分字段按月求价格均值走势

product_list = ['Shoes', 'Garment Full body', 'Bags', 'Garment Lower body', 'Underwear/nightwear']
colors = ['cadetblue', 'orange', 'mediumspringgreen', 'tomato', 'lightseagreen']
k = 0
f, ax = plt.subplots(3, 2, figsize=(20, 15))
for i in range(3):
    for j in range(2):
        try:
            product = product_list[k]
            articles_for_merge_product = articles_for_merge[articles_for_merge.product_group_name == product_list[k]]
            series_mean = articles_for_merge_product[['t_dat', 'price']].groupby(pd.Grouper(key="t_dat", freq='M')).mean().fillna(0)
            series_std = articles_for_merge_product[['t_dat', 'price']].groupby(pd.Grouper(key="t_dat", freq='M')).std().fillna(0)
            ax[i, j].plot(series_mean, linewidth=4, color=colors[k])
            ax[i, j].fill_between(series_mean.index, (series_mean.values-2*series_std.values).ravel(), 
                             (series_mean.values+2*series_std.values).ravel(), color=colors[k], alpha=.1)
            ax[i, j].set_title(f'Mean {product_list[k]} price in time')
            ax[i, j].set_xlabel('month')
            ax[i, j].set_xlabel(f'{product_list[k]}')
            k += 1
        except IndexError:
            ax[i, j].set_visible(False)
plt.show()

在这里插入图片描述

五、Images 数据

查看特定图片

article_list = ['0200761022','0200182001','0204892029','0203595048','0203027047']
fig, ax = plt.subplots(1, len(article_list), figsize=(20,10))

for i, article_id in enumerate(article_list):
    img = mpimg.imread(f'images/020/{article_id}.jpg')
    ax[i].imshow(img)
    ax[i].set_xlabel(f"{article_id}.jpg")
    ax[i].set_xticks([], [])
    ax[i].set_yticks([], [])
    ax[i].grid(False)
plt.show()

在这里插入图片描述


代码参考:深度之眼
数据来源于Kaggle比赛:H&M Personalized Fashion Recommendations

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

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

相关文章

华为三层交换机通 过VLANIF虚拟接口实现跨VLAN通信

S1配置 vlan batch 2 to 3interface Vlanif2ip address 192.168.2.254 255.255.255.0interface Vlanif3ip address 192.168.3.254 255.255.255.0interface GigabitEthernet0/0/2port link-type accessport default vlan 2interface GigabitEthernet0/0/3port link-type access…

听GPT 讲Rust源代码--compiler(31)

File: rust/compiler/rustc_ast_passes/src/node_count.rs 在Rust源代码的rust/compiler/rustc_ast_passes/src/node_count.rs文件中,它定义了Rust编译器中的AST节点计数器。该文件的作用是统计不同类型的AST节点在程序中的数量,以便在优化和调试过程中能…

第二十七周:文献阅读笔记

第二十七周:文献阅读笔记 摘要AbstractDenseNet 网络1. 文献摘要2. 引言3. ResNets4. Dense Block5. Pooling layers6. Implementation Details7. Experiments8. Feature Reuse9. 代码实现 总结 摘要 DenseNet(密集连接网络)是一种深度学习神…

Vue3.x+Echarts (可视化界面)

Vue3.0Echarts (可视化界面) 1. 简介1.1 技术选型1.2 ECharts支持的数据格式1.3 ECharts使用步骤 2. ECharts图形2.1 通用配置2.2 柱状图2.3 折线图2.4 散点图2.5 直角坐标系常用配置2.6 饼图2.7 地图2.8 雷达图2.9 仪表盘2.10 小结 3. Vue3.2ECharts5数…

利用Python实现每日新闻早报推送

本文将介绍如何使用Python编写简单的逻辑,通过调用API接口实现每日新闻推送功能。 步骤: 导入所需的库: 在代码的开头,我们需要导入所需的库。通常,我们会使用requests库来发送HTTP请求,以获取新闻数据。 …

2023三星齐发,博客之星、华为OD、Java学习星球

大家好,我是哪吒。 一、回顾2023 2023年,华为OD成了我的主旋律,一共发布了561篇文章,其中包含 368篇华为OD机试的文章;100篇Java基础的文章40多篇MongoDB、Redis的文章;30多篇数据库的文章;2…

Android Canvas图层saveLayer剪切clipPath原图addCircle绘制对应圆形区域,Kotlin(2)

Android Canvas图层saveLayer剪切clipPath原图addCircle绘制对应圆形区域,Kotlin(2) 在 Android Canvas图层saveLayer剪切clipRect原图对应Rect区域,Kotlin(1)-CSDN博客 的基础上,把矩形切图&a…

【Project】TPC-Online Module (manuscript_2024-01-07)

PRD正文 一、概述 本模块实现隧道点云数据的线上汇总和可视化。用户可以通过注册和登录功能进行身份验证,然后上传原始隧道点云数据和经过处理的数据到后台服务器。该模块提供数据查询、筛选和可视化等操作,同时支持对指定里程的分段显示和点云颜色更改…

并发(13)

目录 91.BlockQueue实现例子? 92.什么是BlockingDequeue?适合用在什么样的场景? 93.BlockingDeque与BlockingQueue有何关系,请对比下他们的方法? 94.BlockingDeque大家族有哪些? 96.FutureTask用来解决什么问题的…

JNPF低代码体验情况

目录 可视化拖拽搭建 平台功能特征 01、高性能、高拓展 02、满足通用场景 03、私有化部署 04、多种数据库 05、项目部署简单 06、平台全源码合作 最后 分享下引迈信息的 JNPF 吧,面向研发人员开发使用、100%源码、前后端分离的低代码: JNPF主打…

2024最新外贸建站:ChemiCloud主机购买使用及自建外贸独立站教程

随着电商平台竞争的加剧,许多外贸从业者意识到减少对平台依赖的重要性,并选择搭建自己的外贸独立站来获得更多的控制权和灵活性。即使是没有建站基础的新手,也可以通过学习建站来实现这一目标。下面是一个适用于新手的外贸建站教程&#xff0…

MYSQL篇--索引高频面试题

mysql索引 1什么是索引? 索引说白了就是一种数据结构,可以协助快速查询数据,以及更新数据库表中的数据,更通俗的来说索引其实就是目录,通过对数据建立索引形成目录,便于去查询数据,而mysql索引…

创建第一个SpringMVC项目,入手必看!

文章目录 创建第一个SpringMVC项目,入手必看!1、新建一个maven空项目,在pom.xml中设置打包为war之前,右击项目添加web框架2、如果点击右键没有添加框架或者右击进去后没有web框架,点击左上角file然后进入项目结构在模块…

【数据结构】栈的基本知识详解

栈的基本概念与基本操作 导言一、栈的基本概念1.1 栈的定义1.2 栈的重要术语1.3 栈的数学性质 二、栈的基本操作结语 导言 大家好,很高兴又和大家见面了!!! 今天开始,咱们将正式进入【数据结构】第三章的内容介绍。在…

STM32MP157D-DK1 STM32CubeID使用与M核开发

STM32MP157具有A7内核核M4内核,前面介绍的一些文章,都是在A7内核上进行的,本篇来介绍M4内核的开发,以及开发时要用到的STM32 CubeIDE软件的使用。 1 STM32 CubeIDE创建LED工程 STM32CubeIDE是一体式多操作系统开发工具&#xff…

Hyperledger Fabric Java App Demo

编写一个应用程序来连接到 fabrc 网络中,通过调用智能合约来访问账本. fabric gateway fabric gateway 有两个项目,一个是 fabric-gateway-java , 一个是 fabric-gateway。 fabric-gateway-java 是比较早的项目,使用起来较为麻烦需要提供一…

数据结构—排序—选择排序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、选择排序 1、基本思想 2、直接选择排序 3、选择排序的代码实现 二、堆排序 2.1算法讲解 2.2堆排序的代码实现 总结 前言 世上有两种耀眼的光芒&#xff0…

Spring AOP概念

什么是 AOP ? AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP 是 OOP 的延续,是软件开发中的一个热点,也是 Spring …

thinkphp学习02-目录结构、控制器、路由、配置文件

目录结构 www WEB部署目录(或者子目录) ├─app 应用目录 │ ├─controller 控制器目录 │ ├─model 模型目录 │ ├─ ... 更多类库目录 │ │ │ ├─common.php 公共函数文件 │ └─event.ph…

批量生成datax同步JSON(postgresql到doris)

1.问题描述 使用datax同步psql数据到doris,表的数量过多,写datax的配置文件很麻烦。鉴于此,编写了一个datax的配置文件生成脚本,可以灵活的实现一键生成配置文件,提高生产效率。 废话不多说,脚本如下 2.问…