簡介
數據的篩選在數學建模中占有很重要的地位。它是數學建模的第一步,我們只有得到好的數據才能保證得出的結果的真實性與準確性。而在實際的問題中我們遇到的數據量往往是巨大的。為了保證我們所用的方法能夠在原始數據的支持下得以實現,我們必須要對數據進行篩選,使得解決方法簡單化。同時,我們又要保證篩選出來的數據具有代表性,使得到的結果更加準確與真實。套用到計算機行業數據篩選的最終目的就是為數據挖掘做準備。數據篩選包括數據抽取、數據清理、數據載入三個部分。
背景
大數據環境下數據量快速的積累,要想分析出海量數據所蘊含的價值,篩選出有價值的數據十分重要。而數據篩選在整個數據處理流程中處於至關重要的地位。數據量的增加及結構的複雜化,這使得面向大數據的數據篩選必然會耗費較多資源,因此要想快速準確篩選出有價值的數據選擇合適的算法十分必要。而每個算法都有著自己使用所需要的環境,大數據環境下數據複雜度的增加提升了選擇合適算法的困難;其次大數據的巨大數據量也使得通過單一算法分析出有價值的數據越來越困難。
目的
數據篩選的目的是為了提高之前收集存儲的相關數據的可用性,更利於後期數據分析。數據的價值在於其所能夠反映的信息。然而在收集數據的時候,並沒有能夠完全考慮到未來的用途,在收集時只是儘可能的收集數據。其次就是為了更深層次的獲得數據所包含的信息,可能需要將不同的數據源匯總在一起,從中提取所需要的數據,然而這就需要解決可能出現的不同數據源中數據結構相異、相同數據不同名稱或者不同表示等問題。可以說數據篩選的最終目的就是為數據挖掘做準備。數據篩選包括數據抽取、數據清理、數據載入三個部分 。
流程
數據抽取
數據在抽取後最終是要放入數據倉庫中,因此數據抽取的主要任務就是要把不同數據源中的數據按照數據倉庫中的數據格式轉入到數據倉庫中,其主要任務就是統一數據格式。不同數據源使用的資料庫類型會不同,所以數據抽取大致可以分為兩種情況。
較為簡單的情況是數據源與數據倉庫使用相同的資料庫,此時可以使用關係型資料庫自帶的資料庫連線功能,這樣就可將數據倉庫伺服器與原系統連線起來,直接進行SQL查詢。另一種情況是當數據源於數據倉庫使用不同關係型資料庫時,就需要先將資料庫中的數據檔案導出成為指定格式的文本檔案或者其他格式的檔案類型,再將得到的資料庫檔案導入到指定的資料庫,最後便於分析時候統一抽取需要的數據。
數據清理
數據清洗包含缺失數據處理、重複數據處理、異常數據處理及不一致數據整理四部分。這部分是直接處理數據的第一步,直接影響後續處理的結果,因此十分重要。數據缺失是資料庫中常有的情況,但是為了得到完備的信息表用於數據挖掘,就必須解決數據缺失的情況,因此處理數據缺失通常利用以下三種方法。
第一種是刪除有缺失信息的記錄。當記錄中主要信息缺失,尤其是丟失較多關鍵信息的時候,數據已經不能夠反應其所能夠代表的信息,這時就可以將記錄某條記錄刪除。但這種情況僅適用於數據量較大的情況,也就是說刪除並不影響所有信息的完整性。顯然當數據量較少、或缺少數據的記錄較多時,完全通過刪除整條記錄的方法並不可行,這可能會對數據質量造成重大影響,刪除記錄的方法有一定適用範圍。
第二種方法是對信息進行人工補全,同樣這種方法也有著自己的局限性,當數據量較大時,尤其在海量數據情況下,此種方法會耗費較大人力且效率極低。還可以利用默認值來代替缺失的信息,將缺失屬性值的屬性視為特殊的屬性,為缺失的信息值設定特殊的屬性值,從而得到完備的信息。
第三種方法是利用數學公式將數據對已有信息的值進行統計分析,利用統計的值進行補全。可以使用平均值填補空缺值,或者使用同類型樣本預測值進行補全空缺值,還可以使用貝葉斯公式和判定樹這樣的基於推斷的方法進行填充,這樣不會影響信息的質量。顯然如果採用的公式不合適,會對下一步信息分析造成不利影響。
重複數據除了包括真正意義上的重複數據還包括屬性冗餘與屬性數據的冗餘兩部分的數據。對於真正數值或屬性值重複的數據處理起來也較為簡單,可以直接刪除。但屬性冗餘與屬性數據的冗餘需要經過分析再將其刪除。如在數據倉庫中,會利用不同資料庫收集數據,因此會出現多個屬性名稱表示同一屬性的情況;還有就是對於有些數據可以從別的屬性中得到,年齡可以從生日中得到,可以將重複部分的數據直接刪除。屬性數據的冗餘是指某些屬性的值已經包含某些屬性中的值,如在處理國內用戶地址時會有國家省份等詳細地址,其實這些信息中國家這部分屬於重複數據,將國家剔除並不會影響對數據的分析。這種重複屬性的剔除不僅可以精簡資料庫中的相關記錄,降低存儲空間的占用,也利於數據分析效率的提升。
異常數據也是較為常見的情況,其是指在數據集中出現部分數據和其他數據有很大區別或者不一致的情況。有區別並不代表數據就一定為異常,這些特殊的數據也可能反應出實際中的情況。這時判斷數據是否是異常數據就十分必要,如果數據位異常則需要將數據剔除,避免影響數據分析的準確性。但是對於某些不一致的數據並不一定就是異常數據,對於這種數據要注意其背後隱藏的信息,找出造成不一致數據的原因。
數據載入
在數據載入到資料庫的過程中,分為全量載入和增量載入兩種方式。全量載入是指全表刪除後再進行數據載入的方式;增量載入是指目標表僅更新源表變化的數據。
全量載入從技術角度上說,比增量載入要簡單很多。一般只要在數據載入之前,清空目標表,再全量導入源表數據即可。但是由於數據量,系統資源和數據的實時性的要求,很多情況下我們都需要使用增量載入機制。
增量載入難度在於必須設計正確有效的方法從數據源中抽取變化的數據以及雖然沒有變化,但受到變化數據影響的源數據,同時將這些變化的和未變化但受影響的數據在完成相應的邏輯轉換後更新到數據倉庫中。優秀的增量抽取機制不但要求 ETL 能夠將業務系統中的變化數據按一定的頻率準確地捕獲到,同時不能對業務系統造成太大的壓力,影響現有業務,而且要滿足數據轉換過程中的邏輯要求和載入後目標表的數據正確性,同時數據載入的性能和作業失敗後的可恢復重啟的易維護性也是非常重要的考量方面。
算法
數據篩選中數據挖掘的算法分析主要有以下幾種。
分類算法分析
分類數據挖掘是通過找出共同事物的相同屬性及不同事物間的差異。利用找出的相同點或者不同點將事物分類。決策樹的優點在於,其描述簡單,當數據量較大時仍能夠快速的將數據進行分類。分類算法通常是基於決策樹來實現,設定的分類種類都用葉子節點表示,而中間的節點用來表示事物的屬性。在構造決策樹時候,決策樹並不是完全不變的,而是在不斷變化的、完善的。通常會對建立的決策樹進行實驗,如果決策樹對所有給定對象分類結果達不到預期要求,就要通過增加些特殊的例子對其進行完善,這一過程會在後續實驗中不斷進行,直到決策樹能夠將給定事物進行準確分類,形成較為完善的決策樹。
分類算法在構建模型中使用廣泛,常用於信用、客戶類別分析模型中。在郵件行銷中可以使用此分類算法依據已有客戶以往的消費信息進行分析,得出購買力較高的客戶特徵列表,從而對此類客戶進行精準行銷以獲得更多客戶。在構建模型時,使用決策樹的方法對於以往信息進行分類,得到以前進行消費客戶的共同點,收集其共同特徵,得出消費用戶的主要特性。最後得出一個可以對客戶進行判別的決策樹,這樣就可以對其餘客戶進行判定,得到較有價值的潛在客戶列表。這種基於對已有信息進行分析、判斷分類的方法,將已有信息分為不同類別,使得企業更有針對性的為不同類群提供針對性的服務,從而提高企業的決策效率和準確度。
聚類算法分析
聚類算法的作用是將具有相同特徵的事物進行分組,又稱為群分析。聚類算法可以用來大致判斷將對象分為多少組,並提供每組數據的特徵值。在聚類分析中可以將給定實例分成不同類別,相同類別中的實例是相關的,但是不向類別之間是不相關的。聚類算法中的重要之處就是分類步驟,在將給定實例分類時,需要先任選一個樣本,作為樣本中心,然後選定中心距,將小於中心距的實例歸入一個集合,將剩下的距中心樣本距離大於中心距的歸入另一個集合。再在剩餘樣本中選出新的中心,重複上面步驟,不斷形成新的類別,直至將所有樣本都歸入集合。
從上面步驟可以看出,聚類算法在歸類時速度的快慢,受給定中心距的影響。如果給定中心距較小,類別就會相對增多,降低歸類速度。同樣在聚類算法中,確定將實例分成的類別數也是十分重要的,如果類別較多不但在分類時會耗費太多時間,也會失去分類的意義。但是具體應該分出多少類,並沒有一個最優的方法來判定,只能通過估算來計算。通過聚類算法處理過後的數據,同一類中的數據都非常接近,不同類就有種很大差異性。在聚類算法中判斷數據間間隔通常利用距離表示,也就是說可以利用函式將數據間任意距離轉換成一個實數,通常實數越大表示間距越遠。
關聯算法分析
關聯算法用於表示兩事物間關係或依賴。事物問關聯通常分為兩種,一種是稱為相關性,另一種稱為關聯性。兩者都用來表示事物間的關聯性,但是前者通常用來表示網際網路內容及文檔上的關聯性,後者通常用於表示電子商務間各網站商品間的關係,但兩者並無本質區別。關聯算法既然是用來表示兩事物問關係或依賴度,那么就需要用定量會來衡量相關度,這一概念被稱為支持度,即當某個商品出現時另一商品伴隨出現的機率。
關聯算法的數據挖掘通常分為兩步,第一步就是在集合中尋找出現頻率較高的項目組,這些項目組相當於整體記錄而言必須達到一定水平。通常會認為設定要分析實體間支持度,如果兩實體問支持度大於設定值,則稱二者為高頻項目組。第二步是利用第一步找出的高頻項目組確定二者間關係,這種關係通常由二者間機率表示。即計算A事件出現時B事件出現的機率,公式為(A與B同時出現的機率)/(A出現的機率),當比值滿足既定機率時候,才能說明兩事件相關聯。關聯分析能夠從資料庫中找出已有數據間的隱含關係,從而利用數據獲得潛在價值。
大數據下的問題
流程問題
大數據環境下的數據篩選與傳統數據篩選最大區別在於巨大的數據量及複雜的數據結構。在傳統數據篩選流程中,由於面向有限的數據量,通常採用性能較高的計算機或者簡單在線上分析就可以按照需求進行數據處理。但是在大數據環境下面向海量數據,傳統在線上分析遇到一系列問題。
首先在線上分析的計算能力跟不上大數據的增長速度。大數據的海量數據是不斷積累起來的,與此同時數據增長的速率越來越快,而在線上分析的並行處理能力滿足不了用戶快速得到數據處理結果的需求,這就需要良好的系統來協調計算機工作,提升綜合運算能力。其次與巨大數據量同樣難以處理的是複雜的數據結構,這些半結構化及非結構化的數據單個檔案的大小遠遠大於結構化數據的大小,這種大檔案的處理必然需要依據多台計算機共同處理,這就需要依據每台計算機的計算能力動態對數據進行分片,並將計算的結果進行統一。最後雖然依據多台計算機協同處理海量數據雖然可以快速提升運算效率,但是這就需要提升大數據環境下資料庫的讀寫能力,以匹配迅速提升的運算力。因此針對大數據的存儲與數據篩選是密不可分的,只有同時提升二者的能力,才能解決大數據環境下數據篩選與數據存儲的問題。
算法問題
大數據中的海量數據潛藏著巨大的數據價值,但是大數據中數據可用效率並不高,這就增加算法選取的困難。由於數據量的巨大,每次針對大數據的篩選都會耗費巨大的資源。尤為重要的是在處理大數據的某些場景中數據需要實時分析,這就意味著僅存儲數據分析的結果,僅能對數據進行一次分析,使得大數據中數據分析對算法選取有著更高的要求。
首先大數據環境下增加了算法訓練的難度,在針對數據篩選中目標算法並不是一蹴而就的。算法需要適應當前數據環境,大數據環境下雖然有著充足的數據源但是算法訓練時只能使用針對部分數據,如果出現數據分布不均勻的情況自然會影響分析結果的準確性。其次大數據帶來的海量數據問題同樣增加驗證分析結果準確性的難度,傳統數據篩選由於數據量的有限性,通常會通過多次驗證分析算法的準確性。但是大數據環境每次篩選的難度增加,限制了多次篩選驗證結果的準確。最後數據量的增加無論採用何種算法都難以得到一個準確的結果,由於數據源的多樣性,多種角度分析可能會得到完全不同的結果。因此大數據環境下通常只能通過數據分析實例的趨勢而不是得到準確的定量分析結果。