元数据
- 概念:描述数据的数据称为元数据,例如:数据库的数据字典表,table表、索引表、锁表等
- 应用
- 问题定位:一个任务出现了异常,可以从元数据平台分析出问题发生的源头节点,而不是说一层层的向上层追溯而产生的时间成本;
- 问题分析:任务的影响面积,一个任务出现了异常,有哪些依赖任务是有问题的,恢复该项任务的同时需要将依赖该任务的其他子任务全部恢复才能保证数据的准确性
- 服务质量监控:例如数据库可以根据锁以及事务等等元数据分析优化sql提供任务执行效率。在发现死锁或者超时sql时及时进行中断,保证服务的质量可靠性
源数据
- 概念:顾名思义,就是指得各种源头的数据,例如:excel、平面文件、数据库日志等等
数据仓库
- 概念:(Data
Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策(Decision Making Support)。通常BI(business intelligent)商务智能也即是指得OLAP系统,底层的数据支撑主要有数据仓库提供。业界较为知名的开源项目国产的麒麟,已贡献给apachehttps://github.com/apache/kylin - OLTP:on-line transaction processing,联机事务处理。面向事务
- OLAP:on-line analytical processing,联机分析处理。面向分析
为什么有数据仓库?
- 如果我想要分析订单中心最近一年各个部分的订单量以及盈利的排名怎么办?直接查询业务库?业务库查询宕机咋整?查询期间订单下不进来死锁了咋整(即使主从读写分离也会造成数据同步的延迟增高)?如果5年的呢?
- 如果我想要分析骑手中心(与订单中心不同服务器不同数据库)最近一年每个骑手的月均单量与收入怎么办?
- 如果我想要分析全国各个分公司的男女职工的分布,但是发现每个分公司的业务系统的男女标识不同怎么办?例如:上海使用F|M,北京使用0|1,广东使用f|m,杭州使用男|女,等等类似问题
- 如果我发现实际的公司订单量与库里面不同怎么办?例如:测试单子,测试数据,甚至是系统故障产生的脏数据。如果排除这些数据?
数仓的作用
问题出现后就要有对应的解决方案,数仓便是这些问题催生的产物
- 数据隔离。数据每天会在前一天业务数据稳定后进行抽取,抽至数仓,有数仓提供历史数据的分析与统计,对业务数据不会造成任何影响
- 数据标准化。业务库数据的种种同义词、近义词都会在进入数据仓库时进行一步步统一规范化
- 数据清洗。业务的脏数据会被过滤掉,保留正确的业务数据供后面分析使用
数仓的实现
数仓的建模
-
常见的数仓建模分为两类:星型模型、雪花模型。最为常用的为雪花模型
-
星型模型:允许冗余数据的存在。常见类型为大宽表,像百度地图的一个核心度量表有超过两千多个字段属性。便于分析的上钻下钻操作,上钻就是聚合,下钻就是更细维度的统计数据
-
雪花模型:严格的按照三范式进行建模。不存在冗余数据,数据事务成本低,性能更高。但模型复杂
ETL
- extract:抽取,数据抽取;一般会有一个stage层,基本保留7天的业务库的数据,与业务的模型结构完全一致,stage层是业务与数仓的交界
- translate:清洗转换,数据清洗;一般会有一个ods(Operate Data Store)层,保留所有历史数据,轻度聚合,按照主题划分业务,数据标准化,脏数据过滤。ods层之后会有一个数据集市层,叫法较多例如:mdm,app前缀等。数据高度聚合,用户运营业务数据分析,针对某项业务进行数据统计指标计算。
- load:加载,数据加载;即数据加载至仓库
数据加载策略
- 快照表:日快照、月快照。按照每日、每月进行一次数据抽取加载。
- 拉链表:部分拉链、全表拉链。数据每次变化立即产生一条新得记录,每条记录均由有效期即:开始时间、结束时间。能够详细的反应某些状态的历史变化。且数据量比快照表更小。
数据分析及数据挖掘
- 如果没有数仓,数据分析的难度是可想而知的,数据分散在各种数据库各种数据源。并且存在脏数据,同义词等问题,会为分析带来很多的麻烦
- 数仓的主题划分,按照不同主题对各个业务进行分析统计。根据分析指标对公司的业务扩展及运营进行决策
- 最为广泛的例子是:根据统计分析发现男人再去商店买尿不湿的时候通常会喜欢买一些啤酒。如果不能同时满足这两个需求,那么他可能会选择其他商店。而且把这两个产品摆放在一起会节约购物时间提升购物体验。
无监督学习
K-均值
算法:k-均值。用于划分的k-均值算法,其中每个簇的中心都用簇中所有对象的均值来表示。
输入:
- k:簇的数目;
- D:包含n个对象的数据集
输出:k个簇的集合
方法:
- 从D中任意选择k个对象作为初始簇中心;
- repeat
- 根据簇中对象的均值,将每个对象分配到最相似的簇;
- 更新簇均值,即重新计算每个簇中对象的均值;
- until不再发生变化。
监督学习
贝叶斯定理
贝叶斯分类算法基于贝叶斯定理。一种称为朴素贝叶斯分类法的简单贝叶斯分类法可以与决策树和经过挑选的神经网络分类器相媲美。
贝叶斯定理:
P(H|X)是后验概率,在条件X下,H的后验概率。例如:假设数据元组是界限于分别由属性age和income描述的顾客,而X是一位35岁的顾客,其收入为4万美元。H是一种假设,如顾客将购买计算机。则P(H|X)反映当我们知道顾客的年龄与收入时,顾客X将购买计算机的概率。
P(H)是先验概率,H的先验概率。对于我们的例子,它是任意给定顾客将购买计算机的概率,而不管他们的年历、收入或者任何其他信息。
P(X|H)是条件H下,X的后验概率。也就是说,它是已知顾客X将购买计算机,该顾客是35岁并且收入为4万美元的概率。
P(X)是X的先验概率。它是顾客集合中年龄为35岁并且收入为4万美元的概率。
贝叶斯定理提供了一种由P(X)、P(H)和P(X|H)计算后验概率P(H|X)的方法
朴素贝叶斯
RID | age | income | student | credit_rating | Class:buys_computer |
---|---|---|---|---|---|
1 | youth | high | no | fair | no |
2 | youth | high | no | excellent | no |
3 | middle | high | no | fair | yes |
4 | senior | medium | no | fair | yes |
5 | senior | low | yes | fair | yes |
6 | senior | low | yes | excellent | no |
7 | middle | low | yes | excellent | yes |
8 | youth | medium | no | fair | no |
9 | youth | low | yes | fair | yes |
10 | senior | medium | yes | fair | yes |
11 | youth | medium | yes | excellent | yes |
12 | middle | medium | no | excellent | yes |
13 | middle | high | yes | fair | yes |
14 | senior | medium | no | excellent | no |
上表为训练数据。
朴素贝叶斯分类法工作过程
-
每行数据是一个n维属性的向量X={x1,x2,…,xn}
-
分类属性:buys_computer,假设有m个分类为C={c1,c2,…,cm}。当前案例分类只有两种,yes|no。分类法预测一个新的X值属于具有最高后验概率的类。也就是说X属于类Ci,当且仅当:P(Ci|X) > P(Cj|X),其中1≤j≤m,j≠i。预测分类就是求P(Ci|X)的最大值。根据贝叶斯定理:
-
由于P(X)对所有类是常数,所以只需要P(X|Ci)P(Ci)最大即可。如果类的先验概率P(Ci)未知,则通常假定这些类是等概率的,即P(C1)=P(C2)=…=P(Ci)
-
给定具有许多属性的数据集,计算P(X|Ci)的开销可能非常大。为了降低计算开销,可以做类条件独立的朴素假定。因此:P(X|Ci)=P(x1|Ci)P(x2|Ci)…P(Xn|Ci)。对于每个属性,考察该属性是分类的还是连续值的。
-
如果是Ak是分类属性,则P(xk|Ci)是训练集合D中属性Ak的值为xk的Ci类的元素数除以D中Ci类的元组数|Ci,d|。
-
如果Ak是连续值属性,通常假定连续值属性服从均值为μ、标准差σ的高斯分布
。因此P(xk|Ci))] = g(xk,μci,σci)
使用朴素贝叶斯分类预测类标号
分类:C1对应buys_computer=yes,C2对应buys_computer=no。希望分类数据X=(age=youth,income=medium,student=yes,credit_rating=fair)。
- P(Ci)每个类的先验概率:
P(buys_computer=yes)=9/14=0.643
P(buys_computer=no)=5/14=0.357
- P(X|Ci),i=1,2,计算每个属性对Ci的后验概率
P(age=youth|buys_computer=yes) = 2/9 = 0.222
P(age=youth|buys_computer=no) = 3/5 = 0.600
P(income=medium|buys_computer=yes) = 4/9 = 0.444
P(income=medium|buys_computer=no) = 2/5 = 0.400
P(student=yes|buys_computer=yes) = 6/9 = 0.667
P(student=yes|buys_computer=no) = 1/5 = 0.200
P(credit_rating=fair|buys_computer=yes) = 6/9 = 0.667
P(credit_rating=fair|buys_computer=no) = 2/5 = 0.400
P(X|buys_computer=yes) = P(age=youth|buys_computer=yes)*P(income=medium|buys_computer=yes)*P(student=yes|buys_computer=yes)*P(credit_rating=fair|buys_computer=yes) = 0.044
P(X|buys_computer=no) = 0.019
则P(X|Ci)P(Ci)
P(X|buys_computer=yes)*P(buys_computer=yes)=0.028
P(X|buys_computer=no)*P(buys_computer=no)=0.007
- 因此对于数据X,朴素贝叶斯预测其分类为buys_computer=yes。