数据分层

1.数据计算层

01.数据计算层-主要考虑方面
	计算平台:离线数据计算 实时数据计算
	管理:元数据模型整合和应用、
		数据表的规范命名
		存储元数据:
		运行数据:

2.计算的数据分层:数据加工链路

	01.ODS--数据计算层,这一层作为原始数据层
		目前命名 qmc_da   qmc-dc qmc_dd
		以后的命名方式
	02.CDM层--
		DWD层-公共明细层
		DWS层- 公共汇总层
	03.ADS层
		应用层-- MySQL以及HBase
   说明:
	操作数据层--也就是我们放在Hive中的源表
	公共维度模型层:
		这层的话,我们是没有计算的
		这层的话,会把一些维度--采用维度退化的方式吧数据放到		明细事实表中,减少计算的关联
		  主要是复用关联,减少数据的扫描
	应用数据层: 这层是根据ODS直接计算得出的,以后可以根据ODS层以及CDM层计算出来

2.需要考虑的问题

01.ODS层
	Hive目前采用的是内部表,存在误删除的潜在风险,容易造成数据丢失。可以加强的手段是权限控制。
	目前考虑是否改成外部表,
		如果有操作失误,比如删表之类的操作,外部表只删除元数据,不涉及处理后的源数据
02.CDM层的相关内容
   CDM层这层目前没有,是把应用层往下移,还是怎么处理?
   目前分层的情况,是否需要考虑之前的数据的迁移改变,还是说老表老办法,新表新办法,
   CDM层的考虑的问题
   01.数据是否分库以及如何分库
   02.维度表的处理-
       提取公共维度表
       维度表中--把用户的原始数据推断出的新维度计算出来
       缓慢变化维的处理方式:同一ID对应的维度值变化,是采用哪些方式处理
        新增字段的处理
   03.对流量表中常见的业务的处理
   	明细是否要将一些维度加在内?
   	明细的结构--如何抽象出
	明细的计算:如何确保本层数据计算执行的稳定性以及故障发现和恢复
   04.CDM确定的原则和方法
    原则:
    	高内聚和低耦合
    	核心数据和扩展数据--数据分安全和价值等级
    	命名规范-易于开发和使用
    方法:维度建模
    步骤
    	需求调研--
    	           一是和业务人员沟通,
    				二是对目前报表以及数据营销平台的报表进行分析
    			确定根据什么汇总,以及汇总哪些数据-明细和汇总数据如何设计
    	模型设计:
    		……
    		推断信息加入到原始流量表中--例如用户的年龄
    		事实表--维度退化
    关于维度表
    	方式一:
    	   如两三个表都有产品名这个维度,提出来。维度key,和对应的维度值
    	    相应的字段- 表,维度和维度对应的key值
    		例如:
    			 表	维度key	维度Value
    		    act	productName  ltcp
    			act	productName  yccp
    			act	platform			iOS
    			….
    	方式二:
    		维度类型
    			维度类型	维度子ID 维度父ID
    			1	ltcp3     lt
    			1	ltcp5     lt
    			1	yccp      yc		    	

3.使用的方式:

数据调用服务--优先使用CDM数据,当这层没有的时候,评估是否需要创建,如果不需要,再使用ODS层

4.附录:

01.名词术语解释:
  ODS <Operational Data Store> 操作数据层
  CDM<Common Dimension Model > 公共维度模型层
	DWD<Data Warehouse Detail>明细数据层
	DWS<Data WareHouse Summary> 汇总数据层
  ADS<Application Data Store> 应用数据层
02.维度建模

03.规范定义
	表命名规范

特殊情况的考虑

缓慢变化维(Slowly Changing Dimensions)

指的是:维度表里面的数据并非是始终不变的,总会随着时间发生变化。
缓慢渐变类型一 (Type 1 SCD):

在数据仓库中,我们可以保持业务数据和数据仓库中的数据始终处于一致。可以在 Customer 维度中使用来自业务数据库中的 Business Key - CustomerID 来追踪业务数据的变化,一旦发生变化那么就将旧	的业务数据覆盖重写。

缓慢渐变类型二 (Type 2 SCD):

当然在数据仓库中更多是对相对静态的历史数据进行数据的汇总和分析,因此会尽可能的维护来自业务系统中的历史数据,能够真正捕获到这种历史数据的变化。比如用户手机号,而应该新增加一条数据来说明现在 手机号, 同时保留以前的手机号。

缓慢渐变类型三 (Type 3 SCD):

实际上 Type 1 and 2 可以满足大多数需求了,但是仍然有其它的解决方案,比如说 Type 3 SCD。 Type 3 SCD 希望只维护更少的历史记录,比如说把要维护的历史字段新增一列,然后每次只更新 Current Column 和 Previous Column。这样,只保存了最近两次的历史记录。但是如果要维护的字段比较多,就比较麻烦,因为要更多的 Current 和 Previous 字段。所以 Type 3 SCD 用的还是没有 Type 1 和 Type 2 那么普遍。  

转载于:https://my.oschina.net/sunmin/blog/3035519

<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、付费专栏及课程。

余额充值