数据准备基本流程 数据规范化的几种方法 利用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("----------")