數據集成:這些大號一共20億粉絲?

數據集成和數據變換

數據集成就是將多個數據源合併存放在一個數據存儲中

數據集成的兩種架構:ELT & ETL

ETL就是Extract 、Transform 、Load的縮寫,包括數據抽取、轉換、加載三個過程,是進行數據挖掘工作之前的準備過程

Extract 數據抽取是將數據從已有的數據源中提取出來

Transform轉換是對原始數據進行處理,例如將表1和表2進行鏈接形成一張新表,如果是三張錶鏈接的話,先將表1和表2進行鏈接形成表1-2,將表1-2和表3進行鏈接形成新的表,再形成新的表

根據轉換髮生的順序和位置,數據集成可以分爲ETL & ELT兩種架構

ETL的過程爲提取–轉換–加載,在數據源抽取後首先進行轉換,再將轉換的結果寫入目的地

ELT的過程爲提取–加載–轉換,在抽取後將結果先寫入目的地,然後利用數據庫的聚合分析能力或外部計算框架,如Spark來完成轉換步驟

未來使用ELT會越來越多,因爲:

  • ELT和ETL相比,最大的區別是重抽取和加載,輕轉換,可以用更加輕量的方案搭建一個數據集成平臺,使用ELT方法,在提取完成之後,數據加載會立即開始,還可以使BI分析人員可無限制訪問整個原始數據
  • 在ELT架構中,數據變換這個過程根據後續使用的情況,需要在SQL中進行,你可以從數據源中提取數據,經過少量預處理後進行加載,架構更簡單

使用Kettle工具來做數據集成

ETL工具,目標是將各種數據放到一個壺裏,以一種指定的格式流出

下載地址:< https://community.hitachivantara.com/docs/DOC-1009855 >,但是使用工具之前需要安裝數據庫軟件和Java運行環境JRE

Kettle採用可視化方式進行操作,對數據庫間的數據進行遷移,包括兩種腳本:Transformation轉換和job作業

  • Transformation轉換:相當於一個容器,對數據操作進行了定義,數據操作就是數據從輸入到輸出的一個過程,在通常的工作中,把任務分解成不同的作業再把作業分解成多個轉換
  • Job(作業):比轉換是更大的容器,負責將轉換組織起來完成某項作業

數據變換

正態分佈也叫作常態分佈,就是正常狀態下呈現的分佈情況

數據變換在數據分析中的角色

如何讓不同渠道的數據統一到一個目標數據庫中呢?就用到了數據變換

在數據變換之前,需要先對字段進行篩選,然後對數據進行探索和相關性分析,然後選擇算法模型,針對算法模型對數據的需求進行數據變化,完成準備工作

數據變換通過數據平滑、數據聚集、數據概化和規範化等方式將數據轉換適用於數據挖掘的形式

  • 數據平滑:去除數據中噪聲,將連續數據離散化,採用分箱、聚類和迴歸的方式進行數據平滑
  • 數據聚集:對數據進行彙總,在SQL中有一些聚集函數,比如max()反饋某個字段的數值最大值,sum()返回某個字段你的數值總和
  • 數據概化:將數據由較低的概念抽象成爲較高的概念,減少數據複雜度。比如用上海、杭州、深圳、北京概化爲中國
  • 數據規範化:使屬性數據按比例縮放,將原來的數值映射到一個新的特定區域中,常用的是最小-最大規範化、Z-score規範化、按小數定標規範化等
  • 屬性構造:構造出新的屬性並添加到屬性集中,通過屬性與屬性的連接構造新的屬性就是特徵工程,比如數據表中統計每個人的英語、語文和數學成績,構造一個總和這個屬性來作爲新屬性

數據規範化的幾種方法

1 Min-max規範化

是將原始數據變換到[0,1]空間中,公式就是

新數值 = (原數值 - 極小值)/ (極大值 - 極小值)

2 Z-Score規範化

考的都是一樣的分數,但是滿分不是一樣的,如何用相同的標準來比較A與B的成績呢?

新數值 = (原數值 - 均值)/ 標準差

算法簡單,不受數據量級影響,易於比較,但是需要數據整體的平均值和方差,而且結果沒有實際意義,只用於比較

3 小數定標規範化

通過移動小數點的位置來進行規範化,小數點移動多少位取決於屬性A的取值中的最大絕對值

比如屬性A的取值範圍是-999到88,那麼最大絕對值是999,小數點移動3位,即新數值= 原數值/1000

Python的SciKit-Learn庫使用

機器學習庫,封裝了比如分類、聚類、迴歸、降維等,還有數據變換模塊

1 Min-max規範化

將原始數據投射到指定的空間[min,max]中,使用SciKit-Learn庫中的MinMaxScaler,給定一個最大值與最小值,將原始數據投射到指定空間中,默認爲[min, max] 是[0,1],即將原始數據投射到[0,1]範圍內

#例子,將數據縮放到[0,1]中,訓練過程:fit_transform()
from sklearn import preprocessing
import numpy as np
# 初始化數據,每一行表示一個樣本,每一列表示一個特徵
x = np.array([[ 0., -3.,  1.],
              [ 3.,  1.,  2.],
              [ 0.,  1., -1.]])
# 將數據進行[0,1]規範化
min_max_scaler = preprocessing.MinMaxScaler()
minmax_x = min_max_scaler.fit_transform(x)    //
print minmax_x

[[0. 0. 0.66666667]
[1. 1. 1. ]
[0. 1. 0. ]]

最小值最大值標準化

2 Z-Score規範化

preprocessing.scale()函數,直接將給定數據進行規範化

from sklearn import preprocessing
import numpy as np
# 初始化數據
x = np.array([[ 0., -3.,  1.],
              [ 3.,  1.,  2.],
              [ 0.,  1., -1.]])
# 將數據進行Z-Score規範化
scaled_x = preprocessing.scale(x)
print scaled_x

將每行每列的值減去了平均值,再除以方差的結果,數值都符合均值爲0,方差爲1的正態分佈

3 小數定標規範化

numpy庫來計算小數點的位數

from sklearn import preprocessing
import numpy as np
# 初始化數據
x = np.array([[ 0., -3.,  1.],
              [ 3.,  1.,  2.],
              [ 0.,  1., -1.]])
# 小數定標規範化
j = np.ceil(np.log10(np.max(abs(x))))   //np.abs(x)計算數組各元素的絕對值,np.max(a)求序列的最值,最少接受一個參數,np.log10求數組各元素的以10爲底的對數,np.ceil(x)計算數組各元素的ceiling值,計算大於等於改值的最小整數,ceiling向上取整,floor向下取整
scaled_x = x/(10**j)
print scaled_x

a = np.array([-1,7,-1.5,-0.2 ,0.2 ,1.5 ,1.7,2.0])

np.ceil(a) -> array([-1,-1,-0,1 ,2,2,2])

數據挖掘中數據變換比算法選擇更重要

考試成績中,我們需要讓數據滿足一定的規律來達到規範性的要求,便於挖掘,這是數據變換的作用

數據變換中重點是如何將數值進行規範化,有三種規範方法:Min-Max規範化、Z-Score規範化、小數定標規範化

屬性income的最小值和最大值分別是5000元和58000元,利用Min-Max規範化映射到[0,1]中,那麼屬性income的16000將被轉化爲多少?

from sklearn import preprocessing
import numpy as np
x = np.array([[5000.],[16000.],[58000.]])
# 將數據進行[0,1]規範化
min_max_scaler = preprocessing.MinMaxScaler()
minmax_x = min_max_scaler.fit_transform(x)    //
print minmax_x
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章