數據挖掘:探索性數據分析(EDA)

數據挖掘:探索性數據分析(EDA)

在這裏插入圖片描述

一、什麼是探索性數據分析

EDA (Exploratory Data Analysis),即對數據進行探索性的分析。充分了解數據,爲之後的數據清洗和特徵工程等提供想法和結論。在探索分析時,也可進行數據清洗的工作,兩者是相輔相成的,沒有說必須按照順序去執行主要包括以下三個方面:分佈分析,統計量分析和相關分析。
分佈分析:定量定性分析。
統計量分析:集中,離散趨勢和分佈形狀。
相關分析:單個圖,圖矩陣,相關係數。

另外,在比賽中可能會遇到脫敏數據。不告知數據的特徵是什麼,比如。阿里天池的工業蒸汽的數據本文主要討論非脫敏數據,會在後續的文章對脫敏數據的一般處理方式進行說明。

  • 充分了解數據:
    1.瞭解數據的外部信息。即數據的現實意義。可通過比賽數據說明和上網百度、谷歌相關的業務數據知識得到。
    2.瞭解數據的內部信息。即數據的自身情況。可通過統計學的相關知識,如計算均值,標準差,峯度,偏度等。另外,也可以通過繪圖,來深入瞭解數據,爲創建有效特徵提供思路。

二、數據外部信息

這部分主要參考比賽數據業務知識自己對數據的理解
比如,有身高和體重的數據,那麼我們通過上網查找資料,得知將身體,體重帶入某一公式,可以得出當前人的健康水平。這樣我們就創建了一個更好的特徵。
再舉一個例子,電影評分的數據。通過上網查資料,或是平時對這方面數據的理解,可以得知IMDB的電影評分公式,將數據代入這個公式,可以創建一個不錯的特徵。
另外,也可以展開頭腦風暴,創建大量的特徵,有的沒有都有,然後,進行特徵選擇。有時會有意想不到的效果。(但你也不知道爲啥這個特徵會有幫助。。。T^T)

三、數據內部信息

這裏區分爲單特徵分析多特徵分析。利用的方法包括統計學相關知識和數據可視化。
對於文本、圖形、音頻等非結構數據會在後續的文章中進行說明。本文主要探索結構性數據(簡單理解就是全是數字的數據……)

讀取數據後,可用pandas裏的一些函數對數據有個大致的瞭解。常用的有如下幾個函數:

# df是導入的數據
df.describe() # 查看所有數據平均值,四分位數等信息
df.info() # 查看所有數據的數據類型和非空值個數。
df.shape # 查看數據行列數
df.isnull().sum() # 查看數據各個特徵爲空值的個數

pandas裏還有很多函數可用於數據的探索,具體可翻閱《利用Python進行數據分析》,這本書介紹的很詳細。

3.1 單特徵分析

數據按類型可分爲:數值數據(連續數據),分類數據和有序數據。
說明
數值數據:如年齡,工資等。
分類數據:如種族,性別等。
有序數據:如軍銜,教育程度等。

其中有序數據和分類數據歸結爲離散數據。時間序列數據比較特殊,會參插在下面的分析中。
另外,應最先對預測目標進行分析

3.1.1 連續數據分析

數據分析分爲兩個方面,一是統計彙總,二是可視化。離散也是這樣。

3.1.1.1 統計計算
  1. 在統計學中,想要描述一個數據,要從三個方面進行說明。
    1. 集中趨勢:均值,中位數,衆數。對於正太分佈的數據,均值的效果比較好,而對於有偏數據,因爲存在極值,所有會對均值產生影響,此時,用中位數去進行集中趨勢的描述。
    2. 離散程度:方差和標準差。這兩個用哪個都可,不過標準差是具有實際意義的。另外,還可以用極差,平均差,四分位差,離散係數(針對多組數據離散程度的對比)。
    3. 分佈形狀:偏度skew(),衡量數據偏斜情況。峯度kurt(),衡量數據分佈的平坦度。偏度與峯度詳細說明
  2. 檢驗數據正態性。一般可繪製P-P圖,Q-Q圖來進行判斷。或者通過計算偏度,峯度進行判斷,也有其他別的方法,但瞭解的較少。
  3. 數據轉化。這步一般在特徵工程中,這裏提一下,通過box-cox(原理同數據對指化)可以將非正態數據轉爲正態數據,會在特徵工程的篇幅中再進行詳細的描述。
  4. 遊程檢驗。非參數統計的一種方法,判斷數據是否是隨機出現的連續,離散都可以用
    通過describe(),可觀察數據的大致情況。
    P-P圖,Q-Q圖說明
    P-P圖,其原理在於如果數據正態,那麼數據的累積比例與正態分佈累積比例基本保持一致。分別計算出數據累積比例,和假定正態時的數據分佈累積比例;並且將實際數據累積比例作爲X軸,將對應正態分佈累積比例作爲Y軸,作散點圖。
    在這裏插入圖片描述
    Q-Q圖,其原理在於如果數據正態,那麼其假定的正態分位數會與實際數據基本一致。計算出假定正態時的數據分位數;並且將實際數據作爲X軸,將假定正態時的數據分位數作爲Y軸,作散點圖。
    在這裏插入圖片描述
    無論是P-P圖,或者Q-Q圖;如果說數據呈現出正態性,那麼散點圖看上去應該近似呈現爲一條對角直線,此時說明數據呈現出正態性。如果散點圖看上去明顯不是一條直線,那麼說明數據很可能不具有正態特質。兩者只是檢驗的方法不同
3.1.1.2 可視化

對連續數據可視化主要有以下幾個圖形:

  1. 直方圖。可以大致看出數據的分佈情況,但會受限於bins的取值並且圖形不光滑。可在直方圖上再畫出核密度圖(KDE),進行更詳細的查看。
    核密度估計
    核密度圖
  2. 箱線圖。反映原始數據的分佈特徵,還能進行多組數據的比較。可看出數據的離羣點。
  3. 散點圖。利用索引和連續數據作散點圖,直觀看數據是否隨機。

3.1.1.3 類型轉換

連續型數據轉爲離散型數據。比如,年齡,可以將其分組爲少年,青年,壯年,老年等。這種處理方式的關鍵是如何分組,在數據噪聲處理中有過描述,介紹了人爲區分,等深等寬分組,無監督算法分組,聚類等方法。
關於爲什麼要把連續型數據轉爲離散型數據,數據轉換的好處,這篇文章中有很好的說明。去噪聲,易理解,算法需要。

3.1.2 離散數據分析

3.1.2.1 統計計算

主要查看數據的結構。用衆數看哪類數據出現的最多。利用value_counts()函數,查看各個類別出現的次數。

3.1.2.2 可視化
  1. 餅圖。對於查看數據結構比較直觀,所佔百分比。
  2. 柱形圖。對各類別出現次數進行可視化。可排序,這樣觀察數據更直觀。
3.1.3 小結

通過對數據簡單的分析,可以在原有業務知識的基礎上,更加了解目前處理的數據是什麼樣的。進而高效地進行數據清洗,特徵創建等工作。

3.2 兩特徵分析

當對單個數據分析完後,還要看各個數據與目標特徵的關係,和除目標特徵外,其他數據間的關係。接下來對各個數據間的分析進行說明。

3.2.1 連續 vs. 連續

  1. 統計計算

    1. 協方差,可以得到兩個變量間的相關性。但協方差越大,並不表明越相關。因爲協方差的定義中沒有考慮屬性值本身大小的影響。
    2. 相關係數考慮了屬性值本身大小的影響,因此是一個更合適的統計量。取值在[-1,1]上,-1表示負相關,即變換相反,1表示正相關,0則表示不相關。相關係數是序數型的,只能比較相關程度大小(絕對值比較),並不能做四則運算。
      而相關係數一般常用的有三種:
      1. Pearson相關係數:這個比較常用,主要用於正態的連續型數據間的比較。但在使用時,限制的條件比較多,對於偏態數據,效果不是很好。
      2. Spearman相關係數:相比於Pearson,這個的限制條件比較少,不受異常值影響。可以應用在多種場合。但若對正太正態數據使用,則效果一般。
      3. Kendall相關係數:限制條件同Spearman。一般用在分類數據的相關性上。
        :Pearson和協方差,主要看數據間的關係是不是線性的,如不是線性,但有其他聯繫,這兩個係數是判斷不出來的。比如指數函數這種。而Spearman和Kendall則可以進行一定的判斷,主要是單調增函數
        統計學三大相關係數
        三種相關係數的區別和聯繫
  2. 可視化

    1. 散點圖。可看出兩個特徵間的關係大致是什麼樣的。如果要具體探究數據間的關係,需要進行一定的計算。
    2. 線圖。如上面所說,如果是一個數據與另一個時間序列進行搭配,則這個圖可以很好地看出變化趨勢。

3.2.2 連續 vs. 離散

  1. 統計計算

    1. groupby和map,apply,applymap函數的使用,可對數據進行分組比較,比如均值,中位數等,也可自己繪製函數。
    2. 假設檢驗。通過圖形判斷出不同類別的連續值有很大差異,但若想通過計算說明。可應用統計學中的假設檢驗,只是限制條件較多,比如,數據需要滿足正態分佈,數據間獨立等情況。
    • 常用的參數檢驗有z檢驗,t檢驗(小樣本),若類別多於兩個,則用方差分析。不過,這些統計方法由於數據條件的限制,只能做爲一個參考。
    • 對於分佈未知的,應用非參數檢驗的方法。秩和檢驗,Kendall協和係數檢驗等。
      參數檢驗與非參數檢驗
  2. 可視化

    1. 繪製多個箱線圖,即可以看數據本身,也可以跟其他類別的數據進行對比。跟箱線圖類似的還有小提琴圖。
    2. 繪製多個直方圖,查看不同類別下數據的分佈情況。這裏就可以應用之前連續數據的一些處理方法,不做過多的描述。
    3. 點圖。能看出不同類別的數據分佈情況,比箱線圖更加清晰。

3.2.3 離散 vs. 離散

可以固定某一類別,對其中另一類別做頻數和頻率分析,進而轉成了離散和連續

  1. 統計計算
    1. Kendall相關係數計算相關性。通常需要求相關性係數的都是有序分類變量
    2. 卡方檢驗。測定兩個分類變量的相關程度,也可以用φ,c,v係數。但有限制的條件,對樣本數有要求,列聯表中的頻數值一般要大於5.
  2. 可視化
    1. 點線圖。可以更好的描述變化差異。利用頻數和頻率。也可用連續 vs.離散 的方法。

3.3 多特徵分析

這裏只舉一些例子,其實跟上面的差不多。着重說下熱力圖。

3.3.1 多連續特徵分析

繪製多個散點圖進行分析。特徵過多時,繪製散點矩陣。方差分析。

3.3.2 多連續離散特徵分析

多個連續,多個離散時,可繪製氣泡圖,類別判斷通過改變氣泡的顏色。

3.3.3 多離散特徵分析

細分各個離散的頻數,頻率,再繪圖。

3.3.4 熱力圖

熱力圖看數據表裏多個特徵兩兩的相似度。特徵的度量可從三個相關係數中選擇。熱力圖繪製

  1. 通過繪製熱力圖,可以對數據間的關係有更深入的瞭解。
  2. 進行特徵的篩選時會用到,如果兩個特徵相似度很高,那麼可以剔除其中一個特徵,減少特徵的數量。

總結

EDA是對數據加深瞭解的一種思維方法,對數據清洗和特徵工程都有極大的影響。
在探索性數據分析時,可以把數據分爲連續和離散,但都不是絕對的。連續可以轉爲離散,而離散通過頻數等也可以做相應的處理。其實連續離散之間沒有太多的隔閡,處理問題時需要靈活看待
統計計算可視化是探索性數據分析強有力的工具,一方面可以支撐你的想法,另一方面也會帶來靈感。

  1. 統計計算:可通過學習統計學相關知識進行補充,代碼實現可參考《利用pandas進行數據分析》,也可上網查閱資料進行查找。
  2. 可視化:利用python中的matplotlib和seaborn可進行繪圖。可直接去這兩個的官網上進行學習。seaborn是封裝好的繪圖包,繪圖優美,可滿足大量的需求,缺點是不靈活,無法自定義。所以還是需要matplotlib。另外,編程繪圖是一層一層覆蓋的,跟手繪不一樣,這個思想要注意

這裏放一些可供參考學習的博客。
matplotlib
matplotlib功能與使用方法大全
繪圖總結(Matplotlib篇)
seaborn
單變量分析繪圖及迴歸分析繪圖
多變量分析繪圖及分類屬性繪圖

關於EDA的文章網上參考的較少,大多數都是出自本人對探索性數據分析(EDA)的理解,所以感覺全面性會差一些,以後會做相應的補充。
如果這篇文章對您有幫助,還希望您能幫忙點贊關注下,也是我更新文章的動力之一,萬分感謝!
如果文章中有錯誤的或者可補充的地方,還請您私信或直接評論,我這邊會進行改正說明,萬分感謝!

writings = input('點評:')
if writings == 'OK':
	print('點贊+關注')
else:
	print('私信+評論')
print('Thank you very much!')

:關於時間序列數據的處理,由於本人學的不是很好,所以先不做過多說明,後續學了再補上……不過在後續特徵工程中,會說到時間特徵的一般處理方法。

參考文獻

https://blog.csdn.net/huguozhiengr/article/details/85321521
https://blog.csdn.net/Leo00000001/article/details/70255071
https://zhidao.baidu.com/question/182879807.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章