数据准备基本流程 数据规范化的几种方法 利用SciKit库进行数据变换

数据准备基本流程 数据规范化的几种方法 利用SciKit库进行数据变换

?

数据准备流程

数据清洗

数据集成

  • 是什么?就是将多个数据源合并存放在一个数据仓库中

  • 数据集成的两种架构

    ETL(Extract、Transform、Load)即,(抽取、转换(合并表)、加载)

    • 常见ETL工具(开源):kettle、DataX、sqoop

    ELT

    • 与主流的ETL的区别是:在抽取后首先将结果写入目的地,然后通过数据库的聚合分析能力或外部计算框架来完成转换(如spark)

数据变换

? 通过以下方法针对算法对数据进行变换

  • 数据平滑---去除数据中的噪声,将连续数据离散化。
    • 分箱
    • 聚类
    • 回归
  • 数据聚集---对数据进行汇总
    • SQL(Max(),Sum())
  • 数据概化---用更高的概念替代更低的概念,减少数据复杂度
    • 比如上海、杭州、深圳、北京可以概化为中国
  • 数据规范化---使属性数据按比例缩放,将数值射到一个新的特定区域
    • 最小-最大规范化
    • Z-score规范化
    • 按小数定标规范化
  • 属性构造---构造出新的属性并添加到属性集中
    • simple,根据业务需要构造出需要使用的属性

数据可视化

  • BI(商业智能分析)
    • Tableau、PowerBI、FineBI
  • 可视化大屏
    • DataV、FineReport
  • 前端可视化组件
  • Python库 Matplotlib、Seaborn等

?

数据规范化的几种方法

Min-max规范化

  • 将原始数据变换到[0,1]的空间中
  • new = (x - min) / (max - min)

Z-Sorce规范化

  • 将含义不同的数据使用兴相同的标准来衡量

  • new = (x - mean )/ std

  • 上述是Z-Score的线性计算公式,用它将考试成绩变为正态分布的前提是,考试成绩本身就是成正泰分布的。

  • 如果考试成绩本身世偏太分布,就要使用非线性公式:

    # 先计算“百分等级”
    百分等级(年级)=100-(100x 年级名次 -50)/ 有效参加考试人数。
    这里百分等级是每个学生在该批学生中的相对位置
    
    # 再按照百分等级数去“标准正太分布表”中查询得出Z-Score值,这样的Z分值便是标准的正态分布,能够将偏态转换为标准正态

小数定标规范化

  • 某列属性整体左右移动若干位小数点

?

Python SciKit-learn

from sklearn import preprocessing
import numpy as np

# 数据初始化,每行代表一个样本,每列代表一个特征值...就是说按列进行?
data = np.array([[0., -3., 1.], [3., 1., 2.], [0., 1., -1.]])
# 进行min-max规范化
min_max_scaler = preprocessing.MinMaxScaler()
minmax_data = min_max_scaler.fit_transform(data)
print(minmax_data)
print("----------")

# 线性Z分
scaled_data = preprocessing.scale(data)
print(scaled_data)
print("----------")

# 小数定标
j = np.ceil(np.log10(np.max(abs(data))))
pointscaled_data = data/(10**j)
print(pointscaled_data)
# j解读为:对所有数取绝对值,然后对每一列取最大的(会有3个),然后计算他们对以十为底的对数值(这里一般都在[0,1]之内),然后向上取整
# **的意思是乘方
print("----------")

?

相关推荐