1. 程式人生 > 實用技巧 >資料準備基本流程 資料規範化的幾種方法 利用SciKit庫進行資料變換

資料準備基本流程 資料規範化的幾種方法 利用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("----------")