数据分层

本文介绍流式数据模型的五层结构。ODS层是原始数据,保证实时和离线数据源头统一;DWD层是实时事实明细层,确保两层数据一致;DWS层计算通用维度汇总指标;ADS层处理个性化维度数据;DIM层数据从离线维表层导出供实时应用。还举例说明了各层存储的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在流式数据模型中,数据模型整体上分为五层。

 

1. ODS

 跟离线系统的定义一样, ODS 层属于操作数据层,是直接从业务系统采集过来的最原始数据,包含了所有业务的变更过程,数据粒度也是最细的。在这一层,实时和离线在源头上是统一的, 这样的好处是用同一份数据加工出来的指标,口径基本是统一的,可以更方便进行实时和离线间数据比对。例如:原始的订单变更记录数据、服务器引擎的访问日志。

 

 

2 . DWD
DWD 层是在ODS层基础上,根据业务过程建模出来的实时事实明细层,对于访问日志这种数据(没有上下文关系,并且不需要等待过程的记录),会回流到离线系统供下游使用,最大程度地保证实时和离线数据在ODS层和 DWD 层是一致的。例如:订单的支付明细表、退款明细表、用户的访问日志明细表。

 

3. DWS
订阅明细层的数据后,会在实时任务中计算各个维度的汇总指标。如果维度是各个垂直业务线通用的,则会放在实时通用汇总层,作为通用的数据模型使用。比如电商网站的卖家粒度,只要涉及交易过程,就跟这个维度相关,所以卖家维度是各个垂直业务的通用维度,其中的汇总指标也是各个业务线共用的。例如:电商数据的几大维度的汇总表(卖家、商品、买家)。

 

4. ADS
个性化维度汇总层,对于不是特别通用的统计维度数据会放在这一层中,这里计算只有自身业务才会关注的维度和指标,跟其他业务线一般没有交集,常用于一些垂直创新业务中。例如:手机淘宝下面的某个爱逛街、微淘等垂直业务。

 

5. DIM
实时维表层的数据基本上都是从离线维表层导出来的,抽取到在线系统中供实时应用调用。这一层对实时应用来说是静态的,所有的 ETL处理工作会在离线系统中完成。维表在实时应用的使用中跟离线稍有区别,后面章节中会详细说明。例如:商品维表、卖家维表、买家维表、类目维表。

 

下面通过简单的例子来说明每一层存储的数据。

ODS层:订单粒度的变更过程, 一笔订单有多条记录。
DWD层:订单粒度的支付记录,一笔订单只有一条记录。
DWS层: 卖家的实时成交金额,一个卖家只有一条记录,并且指标在实时刷新。
ADS层:外卖地区的实时成交金额,只有外卖业务使用。
DIM 层:订单商品类目和行业的对应关系维表。

<think>好的,我需要回答用户关于数据分层中的STD的问题。首先,用户提到的是数据分层中的STD,这里的STD可能指的是“标准差”(Standard Deviation),但需要结合数据分层的上下文来理解。 根据用户提供的引用[^1],其中提到了Python Pandas的Series.std()函数用于计算标准差,并且处理了缺失值。这可能与数据分层中的标准差应用有关。数据分层通常指在划分数据集(如训练集和测试集)时保持各类别或特征的分布一致,而标准差可能用来衡量数据的离散程度,帮助确保分层后各子集的分布与原数据集相似。 接下来,引用[^2]讨论了数据集划分的方法,包括交叉验证,其中可能涉及分层抽样。STD在分层中的使用方法可能包括计算特征或标签的标准差,以评估分层的均匀性,或者在分层抽样过程中保持不同子集的标准差相近,确保数据分布的一致性。 需要确认STD在数据分层中的具体应用场景。例如,在分层抽样时,可能根据某个特征的标准差进行分层,使得各层内的数据波动较小,层间差异较大。或者使用标准差作为评估分层效果的指标,确保各子集的标准差与原数据集接近,避免偏差。 此外,示例代码中的Series.std()函数可以用于计算特征的标准差,辅助分层过程。例如,在机器学习中,处理分类问题时,使用分层抽样保持类别比例,此时可能结合特征的标准差来进一步优化分层,确保特征分布的一致性。 最后,需要整理这些信息,明确STD在数据分层中的含义、使用方法,并给出示例,如使用Pandas计算标准差来指导分层,或如何在交叉验证中应用标准差进行数据划分。</think>### 数据分层中的STD含义及使用方法 #### 1. STD的具体含义 在数据分层(Stratified Sampling)中,**STD**通常指**标准差(Standard Deviation)**,用于衡量数据的离散程度。其数学定义为: $$ \sigma = \sqrt{\frac{1}{N}\sum_{i=1}^N (x_i - \mu)^2} $$ 其中$\mu$为均值,$N$为样本数量。 在数据分层场景中,STD的作用包括: - **评估分布一致性**:确保分层后子集(如训练集/测试集)的特征或标签分布与原数据集接近。 - **指导分层策略**:对高方差特征进行特殊处理(如分组细化),减少模型训练偏差。 --- #### 2. 使用方法 ##### (1) 基于标签的标准差分层 适用于分类任务,保持类别比例。例如: ```python from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, test_size=0.2) ``` 此时系统自动计算标签分布的标准差,确保子集分布与原数据一致[^2]。 ##### (2) 基于特征的标准差优化分层 若某特征方差过大(STD高),可先分组再分层: ```python import pandas as pd # 计算特征标准差 feat_std = df['feature'].std() # 按标准差范围分组 bins = [0, feat_std, 2*feat_std, df['feature'].max()] df['group'] = pd.cut(df['feature'], bins) # 按组分层抽样 train, test = train_test_split(df, stratify=df['group']) ``` ##### (3) 评估分层效果 通过比较子集与全量数据的标准差: ```python def evaluate_stratification(full_data, subset): full_std = full_data.std() subset_std = subset.std() print(f"原始数据标准差: {full_std:.2f}, 子集标准差: {subset_std:.2f}") ``` --- #### 3. 示例 **场景**:医疗数据集中年龄分布跨度大(18-90岁),需分层抽样保证训练/测试集年龄分布一致。 **步骤**: 1. 计算年龄标准差: ```python age_std = df['age'].std() # 假设得到15.2 ``` 2. 按标准差分组: ```python bins = [18, 18+age_std, 18+2*age_std, 90] labels = ['18-33', '34-48', '49+'] df['age_group'] = pd.cut(df['age'], bins=bins, labels=labels) ``` 3. 分层划分: ```python train, test = train_test_split(df, test_size=0.3, stratify=df['age_group']) ``` 4. 验证效果: ```python print("全量数据年龄标准差:", df['age'].std()) # 15.2 print("训练集年龄标准差:", train['age'].std()) # 15.1 print("测试集年龄标准差:", test['age'].std()) # 15.3 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值