【机器学习】数据清洗——基于Numpy库的方法删除重复点

在这里插入图片描述

🎈个人主页:豌豆射手^
🎉欢迎 👍点赞✍评论⭐收藏
🤗收录专栏:机器学习
🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步!

【机器学习】数据清洗——基于Numpy库的方法删除重复点

  • 一 numpy.unique函数介绍
    • 1.1 语法
    • 1.2 参数
    • 1.3 返回值
    • 1.4 示例
    • 1.5 注意事项
  • 二 基于行删除重复值
    • 2.1 导入 Numpy 库:
    • 2.2 创建包含重复行的数组:
    • 2.3 使用 numpy.unique() 函数删除重复行后的数组以及唯一行在原始数组中的索引。:
    • 2.4 对唯一值索引进行排序:
    • 2.5 根据排序后的索引获取唯一行:
    • 2.6 打印原始数组和删除重复行并保留顺序后的数组:
    • 2.7 全部代码:
  • 三 基于列删除重复值
    • 3.1 导入 NumPy 库:
    • 3.2 创建包含重复列的数组:
    • 3.3 使用 np.unique() 函数获取唯一列索引:
    • 3.4 对索引进行排序:
    • 3.5 对数组进行转置:
    • 3.6 选择唯一列:
    • 3.7 再次对数组进行转置:
    • 3.8 打印删除重复列并保留顺序后的数组:
    • 3.9 全部代码:
  • 四 基于全部点删除重复值
    • 4.1 导入 NumPy 库:
    • 4.2 创建一个 包含多个重复点的NumPy 数组
    • 4.3获取唯一值的索引:
    • 4.4 对索引进行排序:
    • 4.5 将数组展平:
    • 4.6 根据索引获取唯一值:
    • 4.7 打印删除所有重复值后的数组:
    • 4.8 全部代码:
  • 总结

在这里插入图片描述

引言:

在进行数据分析和机器学习任务时,经常会遇到数据中包含重复值的情况。处理这些重复值对于保证数据质量和模型性能至关重要。

本文将介绍如何利用 NumPy 库中的功能来删除重复点,包括基于行、列以及全部点的删除方法。

首先,我们将深入了解 NumPy 库中的 numpy.unique() 函数,该函数是处理数据中唯一值的利器,能够快速识别数组中的唯一值并返回相应的索引。

接下来,我们将分别介绍基于行、列和全部点的删除重复值的方法,并提供相应的代码示例和详细解释。

通过学习这些方法,您将能够灵活处理各种数据集中的重复值,为后续的数据分析和建模工作打下坚实的基础。

一 numpy.unique函数介绍

numpy.unique 函数用于在 NumPy 数组中查找唯一值,并返回唯一值数组。它有几个参数可以控制函数的行为,让我们来详细介绍一下这些参数以及 numpy.unique 的功能:

1.1 语法

numpy.unique(ar, return_index=False, 
return_inverse=False, return_counts=False, axis=None)

1.2 参数

ar:输入的数组,可以是任意维度的数组。

return_index:如果设置为True,则返回唯一值数组中的元素在原始数组中的索引,这样你可以通过这些索引获取原始数组中相应的元素。默认为 False。

return_inverse:如果设置为 True,则返回一个整数数组,该数组将原始数组中的每个元素替换为其在唯一值数组中的索引。通过使用此参数,您可以通过索引重构原始数组。默认为 False。

return_counts:如果设置为 True,则返回一个数组,其中包含唯一值数组中的每个元素在原始数组中出现的次数。默认为 False。

axis:指定在哪个轴上查找唯一值。默认为 None,表示将数组展平后查找唯一值。

1.3 返回值

unique_values:唯一值数组。

unique_indices:(可选)唯一值数组中的元素在原始数组中的索引。

unique_inverse:(可选)原始数组中的每个元素在唯一值数组中的索引,用于重构原始数组。

unique_counts:(可选)唯一值数组中的每个元素在原始数组中出现的次数。

1.4 示例

import numpy as np

# 创建一个包含重复元素的数组
data = np.array([1, 2, 3, 1, 2, 4, 5, 6, 3])

# 使用 unique 函数查找唯一值
unique_values = np.unique(data)

print("唯一值数组:", unique_values)

# 返回每个唯一值在原始数组中的索引
unique_indices = np.unique(data, return_index=True)[1]
print("唯一值在原始数组中的索引:", unique_indices)

# 返回原始数组中的每个元素在唯一值数组中的索引
unique_inverse = np.unique(data, return_inverse=True)[1]
print("原始数组中的每个元素在唯一值数组中的索引:", unique_inverse)

# 返回唯一值数组中的每个元素在原始数组中出现的次数
unique_counts = np.unique(data, return_counts=True)[1]
print("唯一值在原始数组中出现的次数:", unique_counts)

代码分析:

这段代码使用NumPy库对一个包含重复元素的数组进行处理。

首先,通过np.unique(data)获取数组中的唯一值,即去除重复值后的数组,并将结果存储在unique_values变量中。

然后,通过np.unique(data,return_index=True)[1]获取每个唯一值在原始数组中的索引,即每个唯一值在原始数组中第一次出现的位置,将结果存储在unique_indices变量中。

接着,通过np.unique(data, return_inverse=True)[1]获取原始数组中的每个元素在唯一值数组中的索引,即原始数组中的每个元素在唯一值数组中的位置,将结果存储在unique_inverse变量中。

最后,通过np.unique(data, return_counts=True)[1]获取唯一值数组中的每个元素在原始数组中出现的次数,将结果存储在unique_counts变量中。

打印这些变量可以提供关于数组中唯一值、其在原始数组中的索引、原始数组元素在唯一值数组中的索引以及唯一值在原始数组中出现次数的信息。

1.5 注意事项

如果需要删除数组中的重复值并保留其顺序,可以使用 return_index=True 和 return_inverse=True,然后根据返回的索引重构数组。

numpy.unique 函数默认会对输入数组进行排序,因此返回的唯一值数组也是排序好的。如果不想排序,可以在调用函数时指定 sort=False 参数。

二 基于行删除重复值

2.1 导入 Numpy 库:

import numpy as np

这行代码导入了 Numpy 库,使我们可以使用其中的函数和数据结构。

2.2 创建包含重复行的数组:

data = np.array([[7, 9, 8],
                 [1, 3, 2],
                 [1, 3, 2],
                 [5, 6, 4]])

这段代码创建了一个多维 Numpy 数组 data,其中包含了一些重复的行。

2.3 使用 numpy.unique() 函数删除重复行后的数组以及唯一行在原始数组中的索引。:

data_row, indices = np.unique(data, axis=0, return_index=True)

在这行代码中,numpy.unique() 函数被调用。

axis=0 参数表示按行进行唯一性检查。

return_index=True 参数使函数返回唯一值的索引。

data_row 变量接收包含唯一行的数组,而 indices 变量接收了这些唯一行在原始数组中的索引。

2.4 对唯一值索引进行排序:

indices = np.sort(indices)

这行代码对唯一行的索引数组 indices 进行排序,为什么要进行排序呢?让我们先看看直接获取的删除重复行的数组。

print(data_row)

输出如下:

[[1 3 2]
 [5 6 4]
 [7 9 8]]

从输出结果中我们可以看到,虽然重复的行被删除了,但是数组原来的顺序被打乱了,变成了从小到大排序的顺序。

那么如何解决这个问题呢?我们先来看看 indices 变量,即唯一行在原始数组中的索引。

print(indices)

输出结果:

[1 3 0]

从输出结果中,我们可以看到,为[1 3 0],并不是唯一值在原来的数组中对应的索引值,这是因为索引值的排序是按照data_row数组中唯一值的索引值排序的,所以我们只需要将索引从小到大重新排序,然后利用获取的索引重构数组即可。

也可以这么理解,保留顺序后的数组应该是这样的:

 [[1 3 2]
 [5 6 4]
 [7 9 8]]

这个数组中唯一行在原始数组的索引是从小到大排序的,所以想要获取保留顺序的删除重复值的数组,我们需要对唯一值索引进行从小到大的排序,然后再重构。

2.5 根据排序后的索引获取唯一行:

unique_data = data[indices]

这行代码使用排序后的索引数组 indices 来获取删除了重复行的新数组 unique_data。

2.6 打印原始数组和删除重复行并保留顺序后的数组:

print("原数组:", data)
print("删除重复行后的数组:\n", unique_data)

这两行代码打印了原始数组 data 和删除了重复行并保留顺序后的数组 unique_data。

通过这些步骤,代码成功删除了数组中的重复行,并输出了删除重复行后的数组。

输出结果:

原数组: [[7 9 8]
 [1 3 2]
 [1 3 2]
 [5 6 4]]
删除重复行后的数组:
 [[1 3 2]
 [5 6 4]
 [7 9 8]]

2.7 全部代码:

import numpy as np


data = np.array([[7, 9, 8],
                [1, 3, 2],
                 [1, 3, 2],
                 [5, 6, 4]])


data_row,indices = np.unique(data, axis=0, return_index=True)



indices = np.sort(indices)

unique_data = data[indices]
print("原数组:",data)
print("删除重复行后的数组:\n", unique_data)

三 基于列删除重复值

要基于列删除数组中的重复值,可以利用 numpy.unique() 函数,并指定 axis=1 参数。以下是使用 numpy.unique() 函数基于列删除重复值的详细步骤:

3.1 导入 NumPy 库:

import numpy as np

这行代码导入了 NumPy 库并使用别名 np。

3.2 创建包含重复列的数组:

data = np.array([[7, 1, 1, 5],
                 [9, 3, 3, 6],
                 [8, 2, 2, 4]])

创建一个包含3行4列数据的 NumPy 重复列数组 data,第二列和第三列是重复的。

3.3 使用 np.unique() 函数获取唯一列索引:

indices = np.unique(data, axis=1, return_index=True)[1]

使用 np.unique() 函数查找每行中的唯一元素,axis=1 表示按列查找,return_index=True表示返回唯一值在原数组中的第一次出现的索引。indices 变量中。

3.4 对索引进行排序:

indices = np.sort(indices)

使用 NumPy 的 np.sort() 函数对索引数组进行排序,排序的原因在上面解释了,在这里就不解释了。

3.5 对数组进行转置:

data = data.T

对原始数组进行转置,将行变为列,列变为行。

这里为什么要进行转置呢?

为了方便后面的data[indices]语句可以依靠列索引进行重构数组,如果不转置,这条语句会默认将indices作为行索引重构数组,从而发生错乱。

3.6 选择唯一列:

unique_data = data[indices]

使用排序后的索引从转置后的数组中选择唯一的列。

3.7 再次对数组进行转置:

unique_data = unique_data.T

将选择的唯一列再次进行转置,使其恢复为原始的行列布局。

3.8 打印删除重复列并保留顺序后的数组:

print("删除重复列并保留顺序后的数组:\n", unique_data)

打印删除重复列并保留顺序后的数组 unique_data。

输出结果如下:

删除重复列并保留顺序后的数组:
 [[7 1 5]
 [9 3 6]
 [8 2 4]]

从结果中,我们可以看到,重复列被删除了,并且其他列之间保留了原来的排序关系。

3.9 全部代码:

import numpy as np



data = np.array([[7, 1, 1,5],
                [9, 3, 3,6],
                 [8, 2, 2,4],
                ])
data_row,indices = np.unique(data, axis=1, return_index=True)


indices = np.sort(indices)

data = data.T

unique_data = data[indices]
unique_data = unique_data.T
print("删除重复列并保留顺序后的数组:\n", unique_data)

四 基于全部点删除重复值

4.1 导入 NumPy 库:

import numpy as np

这行代码导入了 NumPy 库并使用别名 np。

4.2 创建一个 包含多个重复点的NumPy 数组

data = np.array([[8, 2, 9], [6, 7, 3], [1, 3, 4], [1, 5, 2]])

创建了一个包含4行3列数据的 NumPy 数组 data,这个数组具有多个重复点

4.3获取唯一值的索引:

indices = np.unique(data, return_index=True)[1]

使用 np.unique() 函数找到数组中的唯一值,并返回其在原数组中第一次出现的索引。return_index=True 表示返回索引。

4.4 对索引进行排序:

indices = np.sort(indices)

使用 NumPy 的 np.sort() 函数对索引数组进行排序。

4.5 将数组展平:

data = np.ravel(data)

使用 np.ravel() 函数将原始数组 data 展平为一维数组,因为indices中的索引是针对与一维数组的。

4.6 根据索引获取唯一值:

unique_data = data[indices]

使用排序后的索引从展平后的数组中选择唯一值。

4.7 打印删除所有重复值后的数组:

print("删除所有重复值后的数组:\n", unique_data)

打印删除所有重复值后的数组 unique_data。

输出结果如下:

删除所有重复值后的数组:
 [8 2 9 6 7 3 1 4 5]

从结果中,我们可以看到,所有重复值都被删除了,并且,新的数组保留了原来的顺序。

4.8 全部代码:

import numpy as np

data = np.array([ [8, 2, 9], [6, 7, 3], [1, 3, 4],[1, 5, 2] ])

indices = np.unique(data,  return_index=True)[1]

indices = np.sort(indices)

data = np.ravel(data)

unique_data = data[indices]


print("删除所有重复值后的数组:\n",unique_data)

总结

数据清洗是数据处理过程中不可或缺的一环,而删除重复点则是其中的一个重要步骤。

本文通过介绍基于 NumPy 库的方法,向读者展示了如何高效地删除数据中的重复值,并保留重复值在原始数据中的顺序。

首先,我们学习了 numpy.unique() 函数的用法,了解了其语法、参数、返回值以及注意事项,为后续的操作打下基础。

接着,我们分别介绍了基于行、列和全部点的删除重复值的方法,通过代码示例演示了每种方法的实现步骤,并给出了详细的解释和说明。

通过本文的学习,读者将掌握利用 NumPy
库进行数据清洗的关键技能,能够在实际工作中灵活应用这些方法,提高数据处理的效率和准确性,为后续的数据分析和建模工作奠定坚实的基础。

这篇文章到这里就结束了

谢谢大家的阅读!

如果觉得这篇博客对你有用的话,别忘记三连哦。

我是豌豆射手^,让我们我们下次再见

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python开发户型图编辑器-2D/3D户型图展示

在现代家居设计中,户型图是不可或缺的工具,它为设计师和业主提供了一个直观的展示和规划空间的方式。然而,传统的户型图编辑软件往往复杂难用,限制了设计师的创作灵感。我们为您带来了一款全新的Python开发的户型图编辑器&#xf…

Node.js+vue+mysql高校人事管理系统7sgv0

进修培训系统用例描述 学校为更好的发展师资队伍,结合各二级学院的具体需求制定了一系列的访学进修计划。根据教育事业的发展需求,在校内选拔出各学科、专业的优秀教师代表,到国内外高校研究院所进修访学进修。教师代表首先需要根据人事部发布…

Leetcode日记 290. 单词规律 给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配

Leetcode日记 290. 单词规律 给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配 解题思路制作不易,感谢三连,谢谢啦 给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。…

微服务篇之注册中心

一、eureka 1.eureka的作用 2.eureka工作流程 1. 服务提供者和服务消费者向注册中心注册服务信息,然后注册中心记录了对应的服务器地址。 2. 服务消费者从注册中心拉取服务提供者的信息。 3. 通过负载均衡找到对应的服务提供者地址。 4. 服务消费者远程调用对应的服…

团簇束流沉积技术:氢气传感器守护安全与环境的利器

在当今日益增长的能源需求背景下,氢气作为一种清洁、高效的能源载体,正逐渐受到广泛关注。然而,氢气的易燃易爆特性也带来了不小的安全隐患。因此,精确、快速地监测氢气泄漏成为了确保生产安全和环境监测的重中之重。基于团簇束流…

如何用GPT进行论文写作?

一:AI领域最新技术 1.OpenAI新模型-GPT-5 2.谷歌新模型-Gemini Ultra 3.Meta新模型-LLama3 4.科大讯飞-星火认知 5.百度-文心一言 6.MoonshotAI-Kimi 7.智谱AI-GLM-4 二:GPT最新技术 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#x…

GoLand 2023:为Go开发者打造的智能IDE mac/win激活版

JetBrains GoLand 2023是一款专为Go语言开发者打造的集成开发环境(IDE),它提供了强大的代码编辑、调试、测试和重构功能,帮助开发者更高效地开发Go应用程序。 GoLand 2023 软件获取 JetBrains GoLand 2023继承了JetBrains在开发工具领域的丰富经验&…

阿里云轻量应用服务器怎么样?有哪些好处?

阿里云轻量应用服务器有哪些优势?轻量服务器具有价格优惠、使用门槛低快速上手、灵活变配、可视化运维等优势,阿里云百科aliyunbaike.com整理轻量应用服务器详细优势: 1、价格优惠 阿里云轻量应用服务器性价比高,价格优惠&#x…

04 动力云客之登录后获取用户信息+JWT存进Redis+

1. 登录后获取用户信息 非常好实现. 只要新建一个controller, 并调用SS提供的Authentication对象即可 package com.sunsplanter.controller;RestController public class UserController {GetMapping(value "api/login/info")public R loginInfo(Authentication a…

阿里云幻兽帕鲁服务器,游戏服务端版本升级怎么操作?

用阿里云一键部署的幻兽帕鲁服务器,想要更新游戏服务端版本,现在非常简单。之前还需要通过输入一行命令来更新,而现在可以直接通过面板上的选型来操作。 打开阿里云的计算巢,找到你的这台服务实例,点击进入&#xff0…

YOLO-World:实时开放词汇目标检测

paper:https://arxiv.org/pdf/2401.17270.pdf Github:GitHub - AILab-CVC/YOLO-World: Real-Time Open-Vocabulary Object Detection online demo:https://huggingface.co/spaces/stevengrove/YOLO-World 目录 0. 摘要 1. 引言 2. 相关工…

新书速览|Django+Vue系统架构设计与实现

一线资深架构师 凝聚近十年大型系统开发经验与心得 倾力打造 从程序员进阶为架构师必读 本书特色: 以Django 4和Vue.js 3为主要框架,阐述其在大型网站系统开发中的技术要点。 详细介绍大型网站前后端架构设计与实现技术,包括高并发、分布…

Java集合框架-1

目录 List集合 常见方法 迭代器(Iterator) List集合特有方法 List 的特点 创建 List 遍历List Java集合框架是Java编程语言提供的各种数据结构和算法的实现。它提供了不同类型的集合类,如列表(List)、集(Set)、映射(Map)等&#xff0c…

使用 Next.js 构建简单后端接口及数据库数据请求

前言 本文主要为大家介绍,如何使用 Next 框架实现一个简单的后端接口,并且从数据库中请求数据返回给前端。 实现 创建api/getData文件夹 项目创建完成后在 app 文件下新建api文件夹,在 api 文件夹下新建 getData 文件夹,在 ge…

工业信息安全的神秘武器——德迅卫士(主机安全)

前言: 服务器作为承载公司业务及内部运转的底层平台,其稳定、安全地运行是公司的正常发展的前提保障。由于主机上运行着各种各样的业务,会存在着各类漏洞及安全问题。攻击者以此为目标,通过对服务器的攻击来获利,给公司…

wpf grid 列之间存在间隙

上图为grid的两列布局&#xff0c;中间的白线实际为两列的间隙&#xff0c;BorderThickness"0" 并不能消除 解决方法&#xff1a; <Grid RenderOptions.EdgeMode"Aliased"> # 在grid上添加属性

基于微信小程序的比赛赛程管理系统设计与实现

在全面健身的倡导下通过各级赛事的举办完成体育人才的选拔&#xff0c;当由于缺乏信息化的管理手段而只能通过人工完成比赛报名、赛程制定及成绩记录等流程的管理&#xff0c;因此常常因意外而导致比赛赛程管理不善、成绩不理想等问题出现。为了帮助比赛组织者优化赛程管理流程…

有趣的 Streamlit

先看一则新闻&#xff1a;「Snowflake」以8亿美元收购「Streamlit」&#xff0c;以帮助客户构建基于数据的应用程序 Streamlit 是什么&#xff1f;去年过年前好好研究学习了一番&#xff0c;的确是个很有意思的面向数据开发者的工具&#xff0c;让不懂前端&#xff0c;只懂一点…

雷池社区版WAF:开源护网,共筑网络安全长城

雷池社区版WAF&#xff08;Web Application Firewall&#xff09;是一款开源的网络应用防火墙&#xff0c;旨在为网站和网络应用提供安全防护&#xff0c;以抵御各种网络攻击&#xff0c;如SQL注入、跨站脚本攻击&#xff08;XSS&#xff09;、文件包含、以及其他常见的安全威胁…

攻防世界-web-Training-WWW-Robots

题目信息 In this little training challenge, you are going to learn about the Robots_exclusion_standard. The robots.txt file is used by web crawlers to check if they are allowed to crawl and index your website or only parts of it. Sometimes these files rev…