数据挖掘|数据集成|基于Python的数据集成关键问题处理

数据挖掘|数据集成|基于Python的数据集成关键问题处理

    • 1. 实体识别
    • 2. 数据冗余与相关性分析
    • 3. 去除重复记录
    • 4. 数据值冲突的检测与处理
    • 5. 基于Python的数据集成
      • 5.1 merge()方法
      • 5.2 Concat()方法

数据集成是把来自多个数据库或文件等不同数据源的数据整合成一致的数据存储。其中关键问题有:实体识别、数据冗余与相关性分析、记录重复、数据值冲突的检测与处理。

1. 实体识别

实体识别主要涉及同名异义、异名同义、单位统一以及ID-Mapping等方面。

2. 数据冗余与相关性分析

为了提高数据挖掘的精度和减少数据挖掘使用的时间,对多个数据源进行集成时,减少数据集中的冗余和不一致是十分必要的。
如果一个属性可以由另外一个或一组属性值推导出来,则这个属性可能是冗余的。
冗余是数据集成的一个重要问题,有些冗余可以通过相关性分析检测出来。
对于标称数据,两个属性A和B之间的相关关系可以通过 χ 2 \chi^2 χ2(卡方)检验发现,这里不做详细介绍。
对于数值数据,可以通过计算属性A和B的相关系数(又称 Pearson积矩系数)来分析其相关性。
用Python求相关系数的方法有三种:

  1. 用numpy模块中的corrcoef()函数计算相关系数矩阵。
  2. 用pandas模块中DataFrame对象自带相关性计算方法corr(),可以求出所有列之间的相关系数。
  3. 自己编写Python程序计算相关系数。

对于数值属性,可以使用协方差来评估一个属性值如何随另一个属性值变化。在概率论和统计学中,协方差(Covariance)是用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即为两个变量相同时的协方差。它们都是评估两个属性如何一起变化。
使用Python求协方差示例:

import numpy as np
from sklearn import datasets
iris = datasets.load_iris() #装载鸢尾花数据
A= iris.data[:,0]
B= iris.data[:,1]
result=np.cov(A,B)
print(result)
[[ 0.68569351 -0.042434  ][-0.042434    0.18997942]]

3. 去除重复记录

除了检查属性的冗余之外,还要检测重复的记录,所谓重复记录是指给定唯一的数据实体,存在两个或多个相同的记录。
Python的模块Numpy中unique()函数可以去除一维数组或者列表中的重复元素;对于多维数组,如果指定 axis=0 , 可以把冗余的行去掉,若指定 axis=1 ,可以把冗余的列去掉。
例:去掉多维数组的重复行。

import numpy as np
data=np.array([['S1','张三','女',21],['S4','李四','女',22],['S1','张三','女',21],['S5','王五','男',20]])
print("去除重复前:\n",data)
result=np.unique(data,axis=0)
print("去除重复后:\n",result)
去除重复前:[['S1' '张三' '女' '21']['S4' '李四' '女' '22']['S1' '张三' '女' '21']['S5' '王五' '男' '20']]
去除重复后:[['S1' '张三' '女' '21']['S4' '李四' '女' '22']['S5' '王五' '男' '20']]

4. 数据值冲突的检测与处理

数据集成还涉及数据值冲突的检测与处理,如:

  1. 对于现实世界的同一实体,来自不同的数据源的属性值可能不同。
  2. 相同属性的单位可能不同,如公斤和磅;学生成绩有百分制也有五级制等。
  3. 模式不同,如某大学的学生成绩数据库表中的每一行是成绩类型和相应的成绩,而另一所大学学生成绩数据库表中的每一行是基本课程成绩和平时成绩,还有大学的学生成绩数据库用两个表来存储学生的成绩,第一个表专门存储学生的基本课程成绩,第二个表专门存储学生的平时成绩。
    数据值冲突的处理方法是按照一定规则建立起底层关系数据库模式的语义模型,然后利用建立好的语义冲突本体来扩展关系数据库模式的语义,最后再给出基于本体和数据库语义模型解决冲突的具体方法。

5. 基于Python的数据集成

针对可能来自于不同的数据源,可以使用Python对数据子集进行集成处理。Pandas模块中的merge()、concat()方法可以完成数据的集成。

5.1 merge()方法

merge()方法主要是基于两个DataFrame对象的共同列进行连接。
merge()函数常用形式为:
merge(left,right,how=’inner’,on=None,left_on=None,right_on= None, sort=True)
例:merge()函数数据集成示例。

import pandas as pd
S_info=pd.DataFrame({'学号':['S1','S2','S3','S4','S5'],'姓名':['许文','刘德','刘世','于金','周新']})
course=pd.DataFrame({'学号':['S1','S2','S1','S4','S1'],'课程':['C2','C1','C3','C2','C4']})
df=pd.merge(S_info,course)
print(df)
   学号  姓名  课程
0  S1  许文  C2
1  S1  许文  C3
2  S1  许文  C4
3  S2  刘德  C1
4  S4  于金  C2
#当遇到两个数据集的关键字不同时,可以分别指定联结关键字:
import pandas as pd
S_info=pd.DataFrame({'学号':['S1','S2','S3','S4','S5'],'姓名':['许文','刘德','刘世','于金','周新']})
course=pd.DataFrame({'编号':['S1','S2','S1','S4','S1'],'课程':['C2','C1','C3','C2','C4']})
df=pd.merge(S_info,course,left_on='学号',right_on='编号')
print("左、右数据子集关键字不同的merge()函数数据集成:\n",df)
左、右数据子集关键字不同的merge()函数数据集成:学号  姓名  编号  课程
0  S1  许文  S1  C2
1  S1  许文  S1  C3
2  S1  许文  S1  C4
3  S2  刘德  S2  C1
4  S4  于金  S4  C2
#当how=’outer’时,函数merge()的数据集成示例。
import pandas as pd
grade1=pd.DataFrame({'学号':['S1','S2','S3','S4','S5'],'姓名':['许文','刘德','刘世','于金','周新'],'高数':[67,92,67,58,78],'英语':[82,88,96,90,87]})
grade2=pd.DataFrame({'学号':['S1','S2','S4','S5','S6'],'数据库技术':[89,34,74,90,83]})
df=pd.merge(grade1,grade2,how='outer')
print(df)
   学号   姓名    高数    英语  数据库技术
0  S1   许文  67.0  82.0   89.0
1  S2   刘德  92.0  88.0   34.0
2  S3   刘世  67.0  96.0    NaN
3  S4   于金  58.0  90.0   74.0
4  S5   周新  78.0  87.0   90.0
5  S6  NaN   NaN   NaN   83.0
# merge()函数通过多个键的数据集成示例。
import pandas as pd
info_s=pd.DataFrame({'学号':['S1','S2','S3','S4','S5'],'姓名':['许文','刘德','刘世','于金','周新'],'性别':['女','男','男','女','女']})
course=pd.DataFrame({'学号':['S1','S2','S1','S3','S5','S2', 'S1'],'姓名':['许文','刘德','许文','刘世','周新','刘德','许文'],'课程':['C1','C1','C3','C2','C2','C3','C4'], '成绩':[78,82,67,92,89,77,68]})
df=pd.merge(info_s,course,on=['学号','姓名'])
print(df)
   学号  姓名 性别  课程  成绩
0  S1  许文  女  C1  78
1  S1  许文  女  C3  67
2  S1  许文  女  C4  68
3  S2  刘德  男  C1  82
4  S2  刘德  男  C3  77
5  S3  刘世  男  C2  92
6  S5  周新  女  C2  89

5.2 Concat()方法

Concat()方法是对Series对象或DataFrame对象的数据集进行连接,可以指定按某个轴进行(行或列)连接,也可以指定连接方式:outer和inner。与SQL不同的是concat()不会去重,要达到去重的效果可以使用drop_duplicates()方法。常用形式为:
concat(objs,axis=0,join=’outer’)

    参数说明:(1) objs:Series对象、DataFrame对象或list对象。(2) axis:需要连接的轴,axis=0是行连接,axis=1是列连接。(3) join:连接的方式,inner或outer。 
#Concat()方法连接示例
import pandas as pd
data1=[['S1','许文','女'],['S2','刘德','男'],['S3','刘世','男'],['S4','于金','女'],['S5','周新','女']]
df1=pd.DataFrame(data1,columns=['学号','姓名','性别'])
data2=[[78,89,80,61],[77,83,78,66],[90,54,68,78],[76,66,80,82]]
df2=pd.DataFrame(data2,columns=['高数','英语','数据库技术','数据挖掘'])
df=pd.concat([df1,df2],axis=1,join='outer')
print(df)
   学号  姓名 性别    高数    英语  数据库技术  数据挖掘
0  S1  许文  女  78.0  89.0   80.0  61.0
1  S2  刘德  男  77.0  83.0   78.0  66.0
2  S3  刘世  男  90.0  54.0   68.0  78.0
3  S4  于金  女  76.0  66.0   80.0  82.0
4  S5  周新  女   NaN   NaN    NaN   NaN

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

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

相关文章

基于docker创建深度学习开发环境

基于docker创建深度学习开发环境 记录几个链接 第一步:配置docker环境,此处大把教程,不再赘述第二步:拉取nvidia做好的cuda和cudnn镜像: docker pull nvcr.io/nvidia/cuda:12.2.0-devel-ubuntu20.04如果有其他需求&a…

vue3+threejs新手从零开发卡牌游戏(二):初始化场景

在删掉初始化中一些没用的代码后,在views目录下新建game文件夹,在里面新建一个index.vue,这里就当成游戏的主入口。 目录结构如下: 下面开始尝试创建场景: 一、添加一个div作为threejs的画布对象,之后整个…

ubuntu - 编译 linphone-sdk

业务需求需要定制sdk,首先声明我们需要的是在Android4.4上跑的sdk,因此本次编译的sdk最低支持为19(不同版本需要的环境不一致),编译过程较容易,难点在于环境配置 环境准备 Ubuntu 18.04.6 android-sdk_r24.…

mysql分页查询多用GitCode平台

目录 一、在GitCode平台AI搜索结果(这个更优) 二、在百度搜索输入“mysql Java分页查询”的输出结果: 三、推荐的文章 四、GitCode的使用 1)如搜索jdk11可以直接下载jdk11的包 2)搜索开源项目 3)如搜…

3.21 ARM day5

串口控制LED灯亮灭 main.c #include "uart4.h"int main() {//串口初始化uart4_init();//led初始化led_init();char i;int count 0;int count2 0;int count3 0;while (1){i getchar();putchar(i);//键盘输入a,串口工具显示aif (i 1){count;if (coun…

步进电机驱动器的接线与使用(接线详细)

今天小编就来继续学习与使用步行电机的学习,如果位置对你有帮助,评论收藏,点赞一下 步进电机驱动器 步进电机驱动器是一种专用于控制步进电机的电子设备,用于控制步进电机的转动和位置。步进电机是一种将电信号转换为机械运动的电…

Compose UI 之 Segmented buttons 分段按钮

Segmented buttons SegmentedButton 是一种分段式按钮组件,它允许用户在一组相关的选项中选择一个或几个。 上图中:① 单选的分段式按钮。② 多选的分段式按钮。 分段式按钮的几个特点: 分段式按钮是带有状态的按钮,又有单选和多选之分。 从设计上将,不论是单选或是多选…

第二十九章 配置 Web Gateway 的默认参数 - 与 IRIS 的连接(二)

文章目录 第二十九章 配置 Web Gateway 的默认参数 - 与IRIS 的连接(二)Event Log Rotation SizeMaximum Logged Request SizeSSL/TLS Library PathPreserve Mode Exclude File Types 第二十九章 配置 Web Gateway 的默认参数 - 与IRIS 的连接(二) Event Log Rotation Size 这…

fastjson2 反序列化包含多层泛型结构的实体类

前言 由于使用到httpUtill来调用接口 工具类的返回是字符串 其中接口的实现返回值是个多层泛型结构的实体类 例如Result<Page<UserDto>> 当使用 JSON.parseObject("res",new TypeReference<Result<Page<UserDto>>>{})发现在page中存在…

【GPT概念-03】:人工智能中的注意力机制

说明 注意力机制生成分数&#xff08;通常使用输入函数&#xff09;&#xff0c;确定对每个数据部分的关注程度。这些分数用于创建输入的加权总和&#xff0c;该总和馈送到下一个网络层。这允许模型捕获数据中的上下文和关系&#xff0c;而传统的固定序列处理方法可能会遗漏这…

QT(19)-QNetworkRequest

attribute(QNetworkRequest::Attribute code, const QVariant &defaultValue QVariant()) const 获取指定的请求属性。如果该属性未设置&#xff0c;则返回默认值。 hasRawHeader(const QByteArray &headerName) const 检查是否存在指定名称的原始请求头。 header(Q…

虚拟机扩展:虚拟机快照

虚拟机快照 在学习阶段我们无法避免的可能损坏Linux操作系统。如果损坏的话&#xff0c;重新安装一个Linux操作系统就会十分麻烦。 那我们就可以通过快照将当前虚拟机的状态保存下来&#xff0c;在以后系统损坏时通过快照恢复虚拟机到保存的状态。 制作并还原快照 在VMware …

静态方法 static foo()

静态方法&#xff08;Static Method&#xff09;是编程语言中的一种特殊方法&#xff0c;其特点是不依赖于类的实例即可被调用。在C和许多其他面向对象的编程语言中&#xff0c;静态方法通过类名来直接调用&#xff0c;而无需创建类的实例。这些方法属于类本身&#xff0c;而不…

数据结构(二)队列和栈

Java提供了java.util.Stack类来表示栈数据结构。Stack类是Vector类的子类&#xff0c;它实现了一个标准的后进先出&#xff08;LIFO&#xff09;栈。同样也提供了Queue接口&#xff0c;表示一系列按照特定顺序排列的元素&#xff0c;其中最早添加的元素将最先被移除&#xff08…

SAP HCM 0008信息类型间接评估与直接评估

如果在间接评估模块输入就是间接评估&#xff08;tarif是读取下图中的数据 a代表不需要输入工资项&#xff0c;b表示需要找工资相&#xff09; 不输入就是直接评估需要客户自己输入数字 第2个情况 summe求和 &#xff08;比如在0008中输入9000与9001 那么自动求出9002工资项数…

C# WPF编程-布局

C# WPF编程-布局 布局WPF布局原则布局过程布局容器布局属性Border控件StackPanel布局WrapPanel布局DockPanel布局Grid布局UniformGrid布局Canvas布局 布局 WPF布局原则 WPF窗口只能包含单个元素。为在WPF窗口中放置多个元素并创建更贴近实用的用户界面&#xff0c;需要在窗口…

uniapp 之 一些常用方法的封装(页面跳转,页面传参等)

util.js 提示&#xff1a;permission.js是uniapp插件市场由官方DCloud_heavensoft提供的App权限判断和提示插件。 import permision from "/js_sdk/wa-permission/permission.js"/*** uni.toast 封装* param {String} msg toast 提示内容* param {Number} duration …

SpringBoot项目如何打包成war包,并部署在tomcat上运行

项目场景&#xff1a; 正常情况下&#xff0c;我们开发 SpringBoot 项目&#xff0c;由于内置了Tomcat&#xff0c;所以项目可以直接启动&#xff0c;部署到服务器的时候&#xff0c;直接打成 jar 包&#xff0c;就可以运行了。 有时我们会需要打包成 war 包&#xff0c;放入外…

Redis进阶(持久化、复制、集群、多线程、缓存)

Redis进阶 1.Redis持久化1.1 什么是Redis持久化&#xff1f;为什么需要持久化&#xff1f;1.2 Redis持久化方式——RDB(Redis DataBase)1.2.1 什么是RDB&#xff1f;1.2.2 备份文件位置1.2.3 触发RDB的方式1.2.3.1 自动触发1.2.3.2 手动触发1.2.3.3 其他触发方式 1.2.4 RDB优缺…

【GPT概念04】仅解码器(only decode)模型的解码策略

一、说明 在我之前的博客中&#xff0c;我们研究了关于生成式预训练转换器的整个概述&#xff0c;以及一篇关于生成式预训练转换器&#xff08;GPT&#xff09;的博客——预训练、微调和不同的用例应用。现在让我们看看所有仅解码器模型的解码策略是什么。 二、解码策略 在之前…