数据仓库
- 目录:
- 数据仓库相关知识点笔记
-
- [4.2 数据仓库建模:数据立方体与 OLAP](#4.2 数据仓库建模:数据立方体与 OLAP)
-
- [4.2.1 数据立方体:一种多维数据模型](#4.2.1 数据立方体:一种多维数据模型)
- [4.2.2 星形、雪花形和事实星座:多维数据模型的模式](#4.2.2 星形、雪花形和事实星座:多维数据模型的模式)
- [4.2.3 维:概念分层的作用](#4.2.3 维:概念分层的作用)
- [4.2.4 度量的分类和计算](#4.2.4 度量的分类和计算)
- [4.2.5 典型的 OLAP 操作](#4.2.5 典型的 OLAP 操作)
- [4.2.6 查询多维数据库的星网查询模型](#4.2.6 查询多维数据库的星网查询模型)
- [4.3 数据仓库的设计与使用](#4.3 数据仓库的设计与使用)
-
- [4.3.1 数据仓库的设计的商务分析框架](#4.3.1 数据仓库的设计的商务分析框架)
- [4.3.2 数据仓库的设计过程](#4.3.2 数据仓库的设计过程)
- [4.3.3 数据仓库用于信息处理](#4.3.3 数据仓库用于信息处理)
- [4.3.4 从联机分析处理到多维数据挖掘](#4.3.4 从联机分析处理到多维数据挖掘)
- [4.4 数据仓库的实现](#4.4 数据仓库的实现)
-
- [4.4.1 数据立方体的有效计算:概述](#4.4.1 数据立方体的有效计算:概述)
- [4.4.2 索引 OLAP 数据:位图索引和连接索引](#4.4.2 索引 OLAP 数据:位图索引和连接索引)
- 星形模型
- [4.4.3 OLAP 查询的有效处理](#4.4.3 OLAP 查询的有效处理)
- [4.4.4 OLAP 服务器结构:ROLAP、MOLAP、HOLAP 的比较](#4.4.4 OLAP 服务器结构:ROLAP、MOLAP、HOLAP 的比较)
- [1. Python 模拟数据立方体的 OLAP 操作(以 Pandas 库为例)](#1. Python 模拟数据立方体的 OLAP 操作(以 Pandas 库为例))
- [4.5 数据泛化:面向属性的归纳](#4.5 数据泛化:面向属性的归纳)
-
- [4.5.1 数据概括的面向属性的归纳](#4.5.1 数据概括的面向属性的归纳)
- [4.5.2 面向属性归纳的有效实现](#4.5.2 面向属性归纳的有效实现)
- [2. 使用 Python 进行面向属性的归纳示例](#2. 使用 Python 进行面向属性的归纳示例)
- [4.5.3 比较的面向属性归纳](#4.5.3 比较的面向属性归纳)
- [3. SQL 示例(以 MySQL 为例)模拟 ROLAP 操作](#3. SQL 示例(以 MySQL 为例)模拟 ROLAP 操作)
目录:
数据仓库相关知识点笔记

4.2 数据仓库建模:数据立方体与 OLAP
4.2.1 数据立方体:一种多维数据模型
数据立方体是多维数据模型的一种表现形式,用于组织和存储数据,以支持高效的数据分析和 OLAP 操作。它将数据按照多个维度进行划分,每个维度代表数据的一个特征或属性,不同维度的组合形成了数据的不同视角。
4.2.2 星形、雪花形和事实星座:多维数据模型的模式
- 星形模型:由一个事实表和多个维度表组成。事实表存储业务过程的度量值,维度表围绕事实表,包含描述性信息,结构简单,查询效率高。
- 雪花模型 :是星型模型的扩展,维度表进一步规范化,减少数据冗余,但会增加查询时的关联操作。
- 事实星座:多个事实表共享维度表,适用于复杂的业务场景,可处理多个不同业务过程的数据。
4.2.3 维:概念分层的作用
维是数据立方体的一个重要组成部分,用于描述数据的某个方面。概念分层在维中起着组织和抽象数据的作用,它将数据从低层次的具体概念逐步抽象到高层次的概括概念,例如时间维可以从日 - 月 - 季度 - 年进行分层,方便进行不同层次的数据分析。
4.2.4 度量的分类和计算
度量是事实表中的数值型数据,用于表示业务过程的量化指标。度量可分为可加性度量(如销售额,可在所有维度上进行汇总)、半可加性度量(如账户余额,不能在时间维度上随意汇总)和不可加性度量(如比率,不能直接汇总)。计算方式包括求和、计数、平均值、最大值、最小值等。
4.2.5 典型的 OLAP 操作
- 切片 :
在某一维上选定一个特定的值,从数据立方体中选取一个二维子集。
- 切块:在多个维上选定若干个值,从数据立方体中选取一个子立方体。
- 下钻 :
从较高层次的概念深入到较低层次的概念进行数据分析
。 - 上卷:从较低层次的概念汇总到较高层次的概念进行数据分析。
- 旋转 :改变数据立方体的视角,重新排列维的位置。
4.2.6 查询多维数据库的星网查询模型
星网查询模型是用于查询多维数据库的一种模型,它通过建立星型结构和网络结构的结合,优化查询路径,提高查询效率,以满足复杂的多维查询需求。
4.3 数据仓库的设计与使用
4.3.1 数据仓库的设计的商务分析框架
从商务角度出发,构建数据仓库设计的框架,包括确定业务目标、分析业务流程、识别关键数据需求等,确保数据仓库能够支持企业的商务决策和分析需求。
4.3.2 数据仓库的设计过程
包括需求分析、概念设计、逻辑设计和物理设计等阶段。需求分析收集业务用户的需求;概念设计确定数据仓库的主题域、维度和度量;逻辑设计将概念模型转换为具体的数据库模式;物理设计考虑数据的存储结构、索引策略等,以提高数据访问性能。
4.3.3 数据仓库用于信息处理
数据仓库为企业提供了统一的、集成的数据源,用于支持各种信息处理活动,如报表生成、数据分析、数据挖掘等,帮助企业发现潜在的商业机会、优化业务流程和进行决策支持。
4.3.4 从联机分析处理到多维数据挖掘
OLAP 提供了多角度分析数据的功能,而多维数据挖掘则在此基础上进一步深入,通过应用数据挖掘算法从多维数据中发现隐藏的模式、趋势和关联规则等知识,为企业提供更深入的洞察
。
4.4 数据仓库的实现
4.4.1 数据立方体的有效计算:概述
介绍如何高效地计算数据立方体,以减少存储和计算资源的消耗。包括一些优化算法和技术,如预计算、增量计算等,以提高数据立方体的生成和更新效率。
4.4.2 索引 OLAP 数据:位图索引和连接索引
- 位图索引:一种高效的索引结构,通过使用位向量来表示数据的存在与否,适用于数据仓库中大量的低基数列,可加速查询操作。
- 连接索引:用于加速表之间的连接操作,通过预先计算和存储连接结果,减少查询时的连接计算量。
星形模型
由一个事实表和多个维度表组成。事实表包含业务的度量值(如销售额、销售量)和外键,这些外键关联到各个维度表。维度表包含描述性信息,如产品名称、地区名称、时间信息等。
优点是结构简单,查询效率高,易于理解和实现。
缺点是可能存在数据冗余
。
4.4.3 OLAP 查询的有效处理
研究如何优化 OLAP 查询的执行过程,包括查询优化算法、查询重写技术等,以提高查询响应速度,满足用户对实时数据分析的需求。
4.4.4 OLAP 服务器结构:ROLAP、MOLAP、HOLAP 的比较
-
ROLAP(关系型 OLAP):数据存储在关系型数据库中,通过 SQL 查询进行数据分析,灵活性高,但查询性能可能受限于数据库的性能。
-
MOLAP(多维 OLAP) :
数据以多维数组的形式存储在专有的多维数据库中,查询性能高,但数据存储成本较高,灵活性相对较差
。 -
HOLAP(混合型 OLAP) :结合了 ROLAP 和 MOLAP 的优点,部分数据以多维数组形式存储,部分数据存储在关系型数据库中,在性能和灵活性之间取得平衡。
1. Python 模拟数据立方体的 OLAP 操作(以 Pandas 库为例)
python
import pandas as pd
# 模拟一个销售数据集
data = {
'Product': ['A', 'A', 'B', 'B'],
'Region': ['North', 'South', 'North', 'South'],
'Year': [2020, 2020, 2020, 2020],
'Sales': [100, 200, 150, 250]
}
df = pd.DataFrame(data)
# 切片操作:选择 Region 为 North 的数据
slice_data = df[df['Region'] == 'North']
print("切片操作结果:")
print(slice_data)
# 切块操作:选择 Region 为 North 且 Product 为 A 的数据
dice_data = df[(df['Region'] == 'North') & (df['Product'] == 'A')]
print("\n切块操作结果:")
print(dice_data)
# 上卷操作:按 Year 进行汇总
rollup_data = df.groupby('Year')['Sales'].sum().reset_index()
print("\n上卷操作结果:")
print(rollup_data)
# 下钻操作:假设我们原本按 Year 汇总,现在按 Year 和 Product 汇总
drilldown_data = df.groupby(['Year', 'Product'])['Sales'].sum().reset_index()
print("\n下钻操作结果:")
print(drilldown_data)
4.5 数据泛化:面向属性的归纳
4.5.1 数据概括的面向属性的归纳
通过对数据的属性进行概括和抽象,将低层次的数据转换为高层次的概念,减少数据量的同时保留数据的主要特征和模式,用于数据分析和知识发现。
4.5.2 面向属性归纳的有效实现
介绍实现面向属性归纳的有效算法和技术,包括数据预处理、属性选择、概念分层等步骤的优化,以提高归纳的效率和准确性。
2. 使用 Python 进行面向属性的归纳示例
python
import pandas as pd
# 模拟一个学生成绩数据集
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [18, 19, 20, 21],
'Grade': ['A', 'B', 'C', 'B']
}
df = pd.DataFrame(data)
# 对 Age 属性进行概念分层,这里简单分为 'Young' 和 'Old'
def age_stratification(age):
if age < 20:
return 'Young'
else:
return 'Old'
df['Age_Group'] = df['Age'].apply(age_stratification)
# 对数据进行归纳,统计每个 Age_Group 的人数和不同 Grade 的分布
grouped = df.groupby(['Age_Group', 'Grade']).agg({'Name': 'count'}).reset_index()
grouped.rename(columns={'Name': 'Count'}, inplace=True)
print("面向属性归纳结果:")
print(grouped)

4.5.3 比较的面向属性归纳
对不同的面向属性归纳方法进行比较,分析它们的优缺点和适用场景,帮助选择最合适的归纳方法。
3. SQL 示例(以 MySQL 为例)模拟 ROLAP 操作
sql
-- 创建一个简单的销售事实表
CREATE TABLE sales_fact (
product_id INT,
region_id INT,
year INT,
sales_amount DECIMAL(10, 2),
PRIMARY KEY (product_id, region_id, year)
);
-- 插入示例数据
INSERT INTO sales_fact (product_id, region_id, year, sales_amount)
VALUES (1, 1, 2020, 100),
(1, 2, 2020, 200),
(2, 1, 2020, 150),
(2, 2, 2020, 250);
-- 创建产品维度表
CREATE TABLE product_dim (
product_id INT PRIMARY KEY,
product_name VARCHAR(50)
);
INSERT INTO product_dim (product_id, product_name)
VALUES (1, 'Product A'),
(2, 'Product B');
-- 创建地区维度表
CREATE TABLE region_dim (
region_id INT PRIMARY KEY,
region_name VARCHAR(50)
);
INSERT INTO region_dim (region_id, region_name)
VALUES (1, 'North'),
(2, 'South');
-- 执行一个简单的 ROLAP 查询,计算每个地区的总销售额
SELECT r.region_name, SUM(s.sales_amount) AS total_sales
FROM sales_fact s
JOIN region_dim r ON s.region_id = r.region_id
GROUP BY r.region_name;