脏数据

数据清洗

倖福魔咒の 提交于 2020-03-30 15:00:30
脏数据的特征 每个与数据打交道的人都应该听说过“脏数据”(dirty data)一词。脏数据会破坏数据集的完整性,它的某些特征是不完整,不准确,不一致,或者重复的。有必要指出的是,数据的清洗是必不可少的。从乱糟糟的数据无法生产出良好的结果。你可能已经听说过“垃圾进,垃圾出”(Garbage in, garbage out.)这句话了。 不完整 “不完整”是指,有些必要特征空缺。例如,假设你的任务是预测房价,而“房子的区域”对于良好的预测至关重要,但这个值却是缺失的。这样的话预测房价可能对你来说就有很大的挑战性了,并且你的模型也可能表现欠佳。 不一致 “不准确”和“不一致”就是指,技术上来说数值是正确的,但在具体语境下却是错误的。例如,当一名员工更改了自己的地址,并且未更新,又或者,某项数据有很多版本,但数据科学家拿到的是旧版。 重复 “重复”是一个常见的问题。这里作者分享了一个以前在电子商务公司工作时发生的事情。“按照计划,当访问者单击“收取收据”按钮时,网站会向服务器发送一个响应,这就使得我们能够计数已收取了收据的用户数量。该网站运行良好,直到一天某个变化发生了,但我对此一无所知。前端开发人员添加了另一个响应,在有人成功收取了收据时发送。理由是某些收据可能短缺,他们想记下单击了该按钮以及收取了收据的访问者。那时,两个响应会被发送到同一日志表。我看着我的报表工具

解决脏读等并发问题

无人久伴 提交于 2020-03-18 21:48:05
事务并发产生的问题: 脏读:一个事务读取到了另外一个事务没有提交的数据 事务1:更新一条数据 ------------->事务2:读取事务1更新的记录 事务1:调用commit进行提交 ***此时事务2读取到的数据是保存在数据库内存中的数据,称为脏读。 ***读到的数据为脏数据 详细解释: 脏读就是指:当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时, 另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个 事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。 不可重复读:在同一事务中,两次读取同一数据,得到内容不同 事务1:查询一条记录 -------------->事务2:更新事务1查询的记录 -------------->事务2:调用commit进行提交 事务1:再次查询上次的记录 ***此时事务1对同一数据查询了两次,可得到的内容不同,称为不可重复读 幻读:同一事务中,用同样的操作读取两次,得到的记录数不相同 事务1:查询表中所有记录 -------------->事务2:插入一条记录 -------------->事务2:调用commit进行提交 事务1:再次查询表中所有记录 ***此时事务1两次查询到的记录是不一样的,称为幻读 详细解释: 幻读是指当事务不是独立执行时发生的一种现象

机器学习之数据探索——数据质量分析

ぐ巨炮叔叔 提交于 2020-03-06 22:01:49
数据探索是对样本数据进行解释性的分析工作,它是数据挖掘和机器学习较为前期的部分,更偏重于研究数据的本质、描述数据的形态特征并解释数据的相关性。 换句话说,透过数据探索,我们应该可以回答如下问题: 样本数据的分布怎样?有什么特点?数据之间有何种关系?数据是否满足建模要求? 问题驱动发展,对以上问题进行解答,涉及到数据探索的两个方面工作: 数据质量分析 数据特征分析 需要提及的是,数据探索与数据预处理紧密相连的,二者在数据挖掘的中没有绝对的先后次序。比如,在数据质量分析中,就牵涉到数据预处理中的数据清洗。 本文将主要介绍数据质量分析的相关工作。 数据质量分析 数据质量分析的主要任务是检查原始数据中是否存在脏数据,脏数据一般是指不符合要求,脏数据包括以下方面: 1 缺失值 2 异常值 3 不一致的值 4 重复数据以及含有特殊符号(如#、¥、*)的数据 对于第四种数据,理解起来比较简单,处理也很容易,因此主要针对前三种数据进行分析,至于处理手段,所用到的方法是数据预处理中的数据清洗内容。 1 缺失值 数据的缺失主要包括记录的缺失和记录中某个字段信息的缺失,两者都会造成分析结果的不准确。 (1)缺失值产生原因 1)有些信息暂时无法获取,或者获取代价太大。 2)有些信息被遗漏。可能是忘记填写或对数据理解错误等因素,也可能是由于数据采集设备的故障造成。 3)属性值不存在。在某些情况下

山东大学数据科学导论笔记

限于喜欢 提交于 2020-01-18 08:12:52
数据科学导论这门课,怎么说呢。老师也不知道教了什么,学生也不知道学了什么,莫名其妙考试也不知道靠什么。这里整理了一点笔记, 仅供考试前参考!! 。 ch1 引言 引言这一章,基本上不会出题,了解即可。 数据科学概念 :是对数据进行分析,抽取信息和知识的过程,提供指导和支持的基本原则和方法。它研究数据的各种类型、状态、属性及其变化规律,它研究各种方法,对数据进行分析,从而揭示自然界和人类行为等现象背后的规律。 数据科学的核心任务 ,是从数据中抽取有用的信息/知识 数据科学组成 :一组概念 Concept 、原则 Principles 、过程 processes 、技术 techniques /方法 methods 、以及工具 tools 。(简记cpptt) 数据科学的基本原则: 分析数据、获得知识,从而解决具体的业务问题,是数据科学的核心任务,这个任务可以划分为 understand data, collect data, integrate data, analyze data, visualize result, communicate result 等一系列的阶段 对数据分析的结果进行评估,需要结合所处的应用程序上下文环境进行仔细考察。 从大量的基础数据中,我们可能分析出变量之间的相关性 在一些属性上相似的实体,在其它属性上(可能是未知的一些属性)一般也是相似的。

【事务】脏读、不可重复读、幻读解释

一世执手 提交于 2020-01-01 04:18:26
幻读 幻读是指当事务不是独立执行时发生的一种现象。 事务A读取与搜索条件相匹配的若干行。事务B以插入或删除行等方式来修改事务A的结果集,然后再提交。 幻读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,比如这种修改涉及到表中的“全部数据行”。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入“一行新数据”。那么,以后就会发生操作第一个事务的用户发现表中还存在没有修改的数据行,就好象发生了幻觉一样.一般解决幻读的方法是增加范围锁RangeS,锁定检索范围为只读,这样就避免了幻读。 在数据库定义的四种隔离级别中 最高隔离级别SERIALIZABLE_READ可以保证不出现幻读的问题。 Repeatable Read (RR)    针对当前读,RR隔离级别保证对读取到的记录加锁 (记录锁),同时保证对读取的范围加锁,新的满足查询条件的记录不能够插入 (间隙锁),不存在幻读现象。 不可重复读 不可重复读,是指在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据。 这是由于查询时系统中其他事务修改的提交而引起的。比如事务T1读取某一数据,事务T2读取并修改了该数据,T1为了对读取值进行检验而再次读取该数据,便得到了不同的结果。 一种更易理解的说法是:在一个事务内,多次读同一个数据。在这个事务还没有结束时,另一个事务也访问该同一数据。那么

为什么每一个爬虫工程师都应该学习 Kafka

那年仲夏 提交于 2019-12-16 13:19:23
摄影:产品经理 与产品经理环游世界的瞬间 这篇文章不会涉及到Kafka 的具体操作,而是告诉你 Kafka 是什么,以及它能在爬虫开发中扮演什么重要角色。 一个简单的需求 假设我们需要写一个微博爬虫,老板给的需求如下: 开发爬虫对你来说非常简单,于是三下五除二你就把爬虫开发好了: 接下来开始做报警功能,逻辑也非常简单: 再来看看统计关键词的功能,这个功能背后有一个网页,会实时显示抓取数据量的变化情况,可以显示每分钟、每小时的某个关键词的抓取量。 这个功能对你来说也挺简单,于是你实现了如下逻辑: 最后一个需求,对微博数据进行情感分析。情感分析的模块由别的部门同事开发,你要做的就是每个小时拉取一批数据,发送到接口,获取返回,然后存入后端需要的数据库: 任务完成,于是你高兴地回家睡觉了。 困难接踵而至 爬虫变慢了 随着老板逐渐增加新的关键词,你发现每一次完整抓取的时间越来越长,一开始是2分钟抓取一轮,后来变成10分钟一轮,然后变成30分钟一轮,接下来变成1小时才能抓取一轮。随着延迟越来越高,你的报警越来越不准确,微博都发出来一小时了,你的报警还没有发出来,因为那一条微博还没有来得及入库。 你的爬虫技术非常好,能绕过所有反爬虫机制,你有无限个代理 IP,于是你轻轻松松就把爬虫提高到了每秒一百万并发。现在只需要1分钟你就能完成全部数据的抓取。这下没问题了吧。 可是报警还是没有发出来

缓存解决方案

Deadly 提交于 2019-12-09 16:46:25
1. 常见概念 在合理应用缓存前,需要了解缓存领域里相关的几个常用术语:  1)缓存命中:表示数据能够从缓存中获取,不需要回源;  2)Cache miss:表示没有命中缓存,如果缓存内存中还有内存空间的话,会将数据加入到缓存中;  3)存储成本:当没有命中缓存时,回源获取后会将数据放置到存储中,整个将数据放置到存储空间所需要的时间以及空间称之为存储成本;  4)缓存失效:当源数据发生变更后,意味着缓存中的数据失效;  5)缓存污染:将不经常访问的数据放置到缓存存储空间中,以至于高频访问的数据无法放置到缓存中;  6)替代策略:当数据放置到缓存空间时,由于空间不足时,就需要从缓存空间中去除已有的数据,选择去除哪些数据就是由替代策略决定的。常见的替代策略有如下这些: Least-Recently-Used(LRU) Least-Frequently-Used(LFU) SIZE First in First Out(FIFO)   由于存储空间有限,替代策略要解决的核心问题是尽量保留高频访问的缓存数据,降低缓存污染以提升缓存命中率和整体的缓存效率,难点在于,需要基于数据历史访问情况,以一种合适的对未来访问情况的预估才能找到更佳的策略。 2. 访问缓存场景 分析   使用缓存通常的操作是,请求先访问缓存数据,如果缓存中不存在的话,就会回源到数据库中然后将数据写入到缓存中

mybatis一级缓存与二级缓存

亡梦爱人 提交于 2019-12-07 23:20:31
一级缓存 :默认开启 MyBatis一级缓存的生命周期和SqlSession一致。 MyBatis一级缓存内部设计简单,只是一个没有容量限定的HashMap,在缓存的功能性上有所欠缺。 MyBatis的一级缓存最大范围是SqlSession内部,有多个SqlSession或者分布式的环境下,数据库写操作会引起脏数据, 脏数据原因:在一个sqlSession中执行几个查询操作,但在这些查询操作中间另一个sqlSession去更新了数据库,而这次的更新第一个sqlSession是无感知的,此时它再去查询依然是在缓存中查询 使用mybatis-spring时一级缓存失效(原因没弄懂) 二级缓存: 默认关闭       生命周期为namespace   开启二级缓存的步骤:一开启全局缓存(setting中 默认开启)             二在对应的mapper.xml中开启   当sqlSession没有关闭时或者提交时,这次查询的数据不会缓存到二级缓存 MyBatis的二级缓存相对于一级缓存来说,实现了 SqlSession 之间缓存数据的共享,同时粒度更加的细,能够到 namespace 级别,通过Cache接口实现类不同的组合,对Cache的可控性也更强。 MyBatis在多表查询时,极大可能会出现脏数据(一个namespace中的缓存变化对另一个namespace是无感知的)

缓存 和 数据库 数据一致性

做~自己de王妃 提交于 2019-12-05 14:49:51
不管是先写MySQL数据库,再删除Redis缓存;还是先删除缓存,再写库,都有可能出现数据不一致的情况。举一个例子: 1.如果删除了缓存Redis,还没有来得及写库MySQL,另一个线程就来读取,发现缓存为空,则去数据库中读取数据写入缓存,此时缓存中为脏数据。 2.如果先写了库,在删除缓存前,写库的线程宕机了,没有删除掉缓存,则也会出现数据不一致情况。 因为写和读是并发的,没法保证顺序,就会出现缓存和数据库的数据不一致的问题。 延时双删+过期时间 在进行写库操作的前后都进行删缓存的操作 1)先删除缓存:为了其他线程读取数据读不到,去数据库取 2)再写数据库 3)休眠n毫秒:为了防止该线程第二次删除后,而其他线程是在该线程写数据之前读取的数据库内容,导致缓存中的数据是从其他线程写进来的,这样就一直是脏数据了。 4)再次删除缓存 如何确定休眠的毫秒数 需要评估自己的项目的读数据业务逻辑的耗时。这么做的目的,就是确保读请求结束,写请求可以删除读请求造成的缓存脏数据。 当然这种策略还要考虑redis和数据库主从同步的耗时。最后的的写数据的休眠时间:则在读数据业务逻辑的耗时基础上,加几百ms即可。比如:休眠1秒。 弊端 这样最差的情况就是在超时时间内数据存在不一致(无法避免),而且又增加了写请求的耗时(延时导致的)。 异步更新缓存 1.技术整体思路: MySQL binlog增量订阅消费

学习笔记:oracle学习一:oracle11g体系结构之服务器结构、数据字典

北慕城南 提交于 2019-12-04 09:48:03
目录 1、服务器架构 1.1 系统全局区SGA 1.1.1 高速数据缓冲区(database buffer cache) 1.1.2 重做日志缓冲区(redo log buffer cache) 1.1.3 共享池(shared pool) 1.1.4 大型池(large pool) 1.1.5 Java池 1.1.6 流池 1.2 程序全局区(PGA) 1.3 前台进程 1.3.1 用户进程 1.4 后台进程 1.4.1 数据写入进程(DBWR) 1.4.2 检查点进程(CKPT) 1.4.3 日志写入进程(LGWR) 1.4.4 归档进程(ARCH) 1.4.5 系统监控进程(SMON) 1.4.6 进程监控进程(PMON) 1.4.7 锁进程(LCKN) 1.4.8 恢复进程(RECO) 1.4.9 调度进程(DNNN) 1.4.10 快照进程(SNPN) 2、数据字典 2.1 Oracle数据字典简介 2.2 Oracle常用数据字典 2.2.1 基本数据字典 2.2 常用动态性能视图 本系列是作为学习笔记,用于记录学习过程,加深学习印象,以及自己重新回顾学习内容只用,参考书籍为《oracle 11g从入门到精通(第二版)》,如果需要深入学习,请购买原书籍,谢谢! 1、服务器架构 Oracle服务器主要由实例、数据库、程序全局区和前台进程组成,如下图所示 实例:即例程