日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据科学学习之探索性数据分析(EDA)

發(fā)布時間:2024/3/12 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据科学学习之探索性数据分析(EDA) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

本文為筆者學習圖靈系列程序設計叢書的《面向數據科學家的使用統(tǒng)計學》的一些感悟和總結,本文撰寫主要參考了該書目,希望本文對接觸,學習和研究數據科學的各位能有所幫助。
首先,第一篇介紹探索性數據分析(EDA)的相關內容。

目錄

    • 前言
    • 1.什么是結構化數據
    • 2.矩形數據
    • 3.位置估計
    • 4.變異性估計
    • 5.探索數據分布
      • 5.1 百分位數和箱形圖
      • 5.2 頻數表和直方圖
      • 5.3 密度估計
    • 6.探索分類數據
      • 6.1 眾數和期望值
      • 6.2 條形圖和餅圖
    • 7.相關性
      • 7.1 相關系數
      • 7.2 相關矩陣
      • 7.3 散點圖
    • 8.探索多個變量
      • 8.1 雙變量分析的可視化
        • 8.1.1 六邊形圖、等勢線和熱力圖
        • 8.1.2 箱形圖和小提琴圖
      • 8.2 多個變量的可視化
    • 后記

1.什么是結構化數據

在現代,尤其是這個大數據時代,我們獲取數據的途徑非常豐富,各種儀器(例如各種傳感器)的測量值、事件、文本、圖像和視頻等都屬于可獲取的數據來源,整個物聯網無時無刻不在涌出大量的信息流。如何將這些大量的原始數據轉化為可操作的信息,這才是當今數據科學所面對的主要挑戰(zhàn)。首先,就需要將非結構化的原始數據結構化,或是處于研究目的采集有效數據集。

結構化數據有兩種基本類型:數值型數據(numeric data)和分類數據(categorical data)。其中,數值型數據還分為連續(xù)型和離散型兩種形式,連續(xù)型數據又稱區(qū)間數據和浮點型數據,即表示該數據可在一個區(qū)間內取任何值;離散型數據通常只能取整數,例如計數,所以一般又稱計數型數據。分類數據因子數據)只能從特定集合中取值,這些值表示這種數據一系列可能的分類,例如:計算機編程語言主要包括匯編語言、機器語言以及高級語言三種(類別);中國的直轄市有北京市,上海市,天津市和重慶市。二元數據是一種特殊的分類數據,數據值只能從兩個之中取其一(例如0或1,True或False),也就是一般所稱的布爾型數據和邏輯性數據。有序數據有序因子數據)是具有明確排序的分類數據,例如數值排序(1,2,3,4或5)。

注:連續(xù)型數據和離散型數據的區(qū)別:1.離散型變量是通過計數方式取得的,即是對所要統(tǒng)計的對象進行計數,增長量非固定的;連續(xù)型變量不是單獨的整十整百的數字,其包含若干位小數且取值密集,增長量可以劃分為固定的單位。2.域不同。離散型變量:離散型變量的域(即對象的集合)是離散的;連續(xù)型變量的域(即對象的集合)是連續(xù)的。3.分組方式不同。離散型變量:如果變量值的變動幅度小,就可以一個變量值對應一組,稱單項式分組。如果變量值的變動幅度很大,變量值的個數很多,則把整個變量值依次劃分為幾個區(qū)間,各個變量值則按其大小確定所歸并的區(qū)間,區(qū)間的距離稱為組距,這樣的分組稱為組距式分組,在組距式分組中,相鄰組既可以有確定的上下限,也可將相鄰組的組限重疊。連續(xù)型變量:連續(xù)型變量由于不能一一列舉其變量值,只能采用組距式的分組方式,且相鄰的組限必須重疊。

  • 我們?yōu)槭裁匆P心數據類型的分類呢?
    首先,數據類型對于確定可視化類型、數據分析或統(tǒng)計模型是非常重要的。再者,更為重要的是,變量的數據類型決定了軟件處理變量計算的方法。
  • 因子數據或說有序因子數據也只是一組文本值或數值,那么為什么我們也需要在數據分析種明確提出它們的概念呢?
    相比于文本表示,將數據顯示地標識為因子數據具有如下優(yōu)點:
    1.如果我們明確輸入的是分類數據,那么軟件就可以據此確定統(tǒng)計過程的工作方式,例如圖表生成或模型擬合。
    2.可以優(yōu)化存儲或索引。
    3.限定了給定分類變量在軟件中的可能取值,例如枚舉類型。

總結:

  • 在軟件中,數據通常按類型分類。
  • 數據類型包括連續(xù)型數據、離散型數據、分類數據和有序數據。
  • 數據分類為軟件指明了數據的處理方式。

2.矩形數據

矩形數據對象是數據科學分析中的典型引用結構,矩形數據對象包括電子表格、數據庫表等。
矩形數據本質上是一個二維矩陣,通常稱數據表中的一行為一條記錄(事例、樣本),一列為一個特征(屬性、變量)。數據并非一開始就是矩陣形式的,非結構化數據必須先經過處理和操作才能表示為矩陣數據形式。
除了矩形數據之外,還有一些其它類型的數據:例如:時序數據,空間數據和圖形(或網絡)數據。(此處的空間和圖形同矩形一樣,均指一種數據結構。)

3.位置估計

面對大量數據的記錄和特征,對它們有一個大致的了解,即總結數據特征的特性是很有必要的。其中,探索數據的一個基本步驟就是獲取每個特征的“典型值”,典型值是指對數據最常出現位置的估計,即數據的集中趨勢。

平均值(mean),是最基本的位置估計量,它等于所有值的和除以值的個數,給出計算公式:
xˉ=Σi=1nxin\bar x=\frac{\Sigma_{i=1}^n x_i} n xˉ=nΣi=1n?xi??
對于某些數據集,我們需要對值賦予權重,進行位置估計時便需取加權均值(weighted mean),它等于加權值的總和除以權重的總和,給出計算公式:
xˉw=Σi=1nwixiΣi=1nwi\bar x_w=\frac{\Sigma_{i=1}^n w_ix_i}{\Sigma_{i=1}^n w_i} xˉw?=Σi=1n?wi?Σi=1n?wi?xi??
均值雖然易于計算且方便使用,但在數據集中有離群值(極值)影響時便無法較為準確地進行位置估計,此時,中位數(median)是更好的選擇。中位數是位于有序數據集中間位置的數值,是對位置更為穩(wěn)健的估計量,但不同于使用所有觀測值計算得到的均值,中位數僅取決于有序數據集中間位置處的值。與加權均值相似,加權中位數(weighted median)也有廣泛的應用,它使得排序數據集中分別有一半的權重之和位于該值之上或之下。

若想盡可能使用所有觀測值對位置有一個較為穩(wěn)健的估計,我們可以使用切尾均值(trimmed mean)。它是指在數據集剔除一定數量的極值后再求均值,這樣就能消除極值對均值的影響,例如在國際體育賽事中,通常會去掉一個最高分和一個最低分,就是使用了切尾均值。給出計算公式:
xˉ=Σi=p+1n?pxin?2p\bar x=\frac{\Sigma_{i=p+1}^{n-p} x_i}{n-2p} xˉ=n?2pΣi=p+1n?p?xi??
對于小規(guī)模的數據集,還有很多其他更為穩(wěn)健和高效的位置估計量,在此不做介紹。

4.變異性估計

位置只是總結特性的一個維度,另一個維度是變異性(variability),也稱離差dispersion),它是數據集關于某個中心值偏離或散布的離散程度的一種標志,測量了數據值是緊密聚集的還是發(fā)散的。使用最廣泛的變異性估計量是基于位置估計值和觀測數據值之間的偏差(deviation)或者說殘差(residual),在這里,給出多種計算偏差的方式。

首先是平均絕對偏差(mean absolute deviation),即對數據值和均值之間的偏差的絕對值計算均值。給出公式:
平均絕對偏差=Σi=1n∣xi?xˉ∣n?2p平均絕對偏差=\frac{\Sigma_{i=1}^n \lvert x_i-\bar x \rvert}{n-2p} =n?2pΣi=1n?xi??xˉ?
更廣為人知的變異性估計量是方差(variance)和標準偏差(standard deviation),它們基于偏差的平方。方差是偏差平方值的均值,而標準偏差是方差的平方根。給出公式:
方差=s2=Σ(x?xˉ)2n?1方差=s^2=\frac{\Sigma (x-\bar x)^2}{n-1} =s2=n?1Σ(x?xˉ)2?
標準偏差=s=Σ(x?xˉ)2n?1標準偏差=s=\sqrt\frac{\Sigma (x-\bar x)^2}{n-1} =s=n?1Σ(x?xˉ)2??

注:在統(tǒng)計模型中,使用平方值比使用平均值更為方便,所以標準偏差比平均絕對偏差使用更為廣泛,而式中使用除數n-1是因為我們使用自由度進行無偏估計。

無論是方差,標準偏差還是絕對平均偏差對離群值都是不穩(wěn)建的,尤其是方差和標準偏差對極值更為敏感,為此,我們提出更為穩(wěn)健的變異性估計量,中位數絕對偏差(median absolute deviation),通常簡寫為MAD。給出計算公式:
MAD=中位數(∣x1?m∣,∣x2?m∣,…,∣xn?m∣)MAD=中位數(\lvert x_1-m \rvert,\lvert x_2-m \rvert,…,\lvert x_n-m \rvert) MAD=(x1??m,x2??m,,xn??m)
我們還可以參考切尾均值計算切尾標準偏差。

注:即使數據符合正態(tài)分布,方差、標準偏差、平均絕對偏差以及中位數絕對偏差也并非是等價的估計量。事實上,標準偏差總是大于平均絕對偏差,而平均絕對偏差總是大于中位數絕對偏差。有時,中位數絕對偏差會乘上一個常數比例因子(通常是1.4826),使得在正態(tài)分布下,中位數絕對偏差與標準偏差具有相同的尺度。

另一種估計離差的方法基于對有序數據分布情況的查看。其中最基本的是測量極差(range),或稱為全距,但極差對離群值非常敏感,為避免這種情況,我們可以刪除有序數據兩端的值,然后再查看數據的極差,即估計百分位數(percentiles)之間的差異。其中常用的測量方法是估計第25分位數和第75分位數之間的差值,稱為四分位距(interquartile range, IQR),在此不做過多介紹。

5.探索數據分布

5.1 百分位數和箱形圖

百分位數對于總結數據的整體分布十分有用,四分位數和十分位數有著廣泛的應用,尤其是在總結數據尾部情況(外延范圍)時,百分位數十分有用。

箱形圖(boxplot)是一種快速可視化繪圖,它基于百分位數來可視化數據的分布,能顯示出一組數據的最大值、最小值、中位數、及上下四分位數。

import numpy as np import pandas as pd data=pd.Series(np.arange(0,16)).append(pd.Series(25)) data.plot(kind='box')


使用python繪出一個簡單的箱形圖,其中,箱子的頂部和底部分別是第75百分位數和第25百分位數。箱內的水平線表示的是中位數。從箱頂或箱底延伸的線段稱為(whisker),須從最大值一直延伸到最小值,顯示了數據的極差,而箱外的圈(或說點)表示的則是離群值。

5.2 頻數表和直方圖

變量(特征)的頻數表可以將該變量的極差均勻地分割為多個等距分段,并給出落在每個分段中地數值個數。

import numpy as np import pandas as pd data=pd.Series(np.random.rand(10)) data.plot(kind='hist')


使用python繪出一個簡單的直方圖,可以觀察到其中有兩個組距是空的,添加空組距也是有必要的,空組距中沒有值通常是很有價值的信息。嘗試不同大小的組距也是非常有用的,如果組距過大,可能就會隱藏掉分布的一些重要特性;如果組距過小,那么結果就會過于顆粒化,失去查看整體圖的能力。

繪制直方圖需注意:1.空組距也應在直方圖中。2.各組距是相等的。3.組距的數量(或組距的大小)是自定的。4.各條塊相互緊鄰,條塊間沒有任何空隙,除非存在空組距。

注:頻數表和百分位數都是通過創(chuàng)建組距總結數據。一般情況下,四分位數和十分位數在每個組距中具有相同的計數,但每個組距的大小不同,將其稱之為等計數組距,相反地,頻數表中每個組距的大小相同,但其中的計數可以不同,將其稱之為等規(guī)模組距。
統(tǒng)計學中的矩(moment):在統(tǒng)計學理論中,位置和變異性分別稱為分布的一階矩和二階矩,而分布的三階矩和四階矩分別被稱為偏度(skewness)和峰度(kurtosis)。偏度顯示了數據是偏向較小的值還是較大的值;峰度則顯示了數據中具有極值的傾向性。通常情況下,我們不使用度量去測定偏度和峰度,而是通過可視化方法來發(fā)現他們。

5.3 密度估計

密度圖用一條連續(xù)的線顯示數據值的分布情況。可以將密度圖看作由直方圖平滑得到的,盡管它通常是使用一種核密度估計量從數據中直接計算得到的。

import numpy as np import pandas as pd import matplotlib.pyplot as plt data=pd.Series(np.random.normal(0, 1, 1000)) plt.figure() plt.subplots_adjust(wspace=0.2) plt.subplot(1,2,1) data.plot(kind='hist',bins=14,density=True) data.plot(kind='kde') plt.xlim(-4,4) plt.subplot(1,2,2) data.plot(kind='kde') plt.xlim(-4,4) plt.rcParams['figure.figsize']=(12.0,4.0)


使用python繪出一個正態(tài)分布數值集的密度圖和直方圖的情況,可清晰的看出核密度圖與直方圖之間的關系,而當數據量越大時,核密度圖和直方圖平滑得到的曲線越相似。

data=pd.Series(np.random.normal(0, 1, 100)) #右圖為data=pd.Series(np.random.normal(0, 1, 10000)) y=data.plot(kind='hist',density=True,alpha=0.3,label='hist') data.plot(kind='kde',label='kde') plt.plot(np.arange(-3.6,4,0.4)-0.2,label='hist_line') plt.xlim(-4,4) plt.legend() plt.show()


如圖,分別為選取100個數據和10000個數據核密度圖與取直方圖組距中點的值得到的平滑曲線擬合的情況。

6.探索分類數據

6.1 眾數和期望值

眾數是數據集中出現次數最多的類別或值,是分類數據的一個基本匯總統(tǒng)計量,通常不用于數值型數據。

有些數據類別可以表示成或映射到同一尺度的離散值,也就是可以與一系列的數值相關聯,那么就可以根據類別出現的概率計算出一個平均值,稱之為期望值,它是一種加權均值,權重使用的是類別出現的概率。

6.2 條形圖和餅圖

條形圖餅圖是常用來可視化分類數據的方法,條形圖以條形表示每個類別出現的頻數或占比情況,餅圖是條形圖的一種替代形式,以圓餅中的一個扇形部分表示每個類別出現的頻數或占比情況。

要特別注意的是,雖然條形圖與直方圖非常相似,但二者之間仍存在著一些差異。在條形圖中,x軸表示因子變量的不同類別,而在直方圖中,x軸以數值度量的形式表示某個變量的值。另外,在直方圖中,通常各個條形是相互緊鄰的,條形間的間隔表示空組距(即數據中未出現的值),而在條形圖中,各個條形的顯示是相互獨立的。

data=pd.Series(np.random.randint(1,11,20)) data.plot(kind='bar') data.plot(kind='pie')


使用python繪出一些離散變量的條形圖和餅圖。

7.相關性

相關性,是指兩個變量的關聯程度。無論是在數據科學還是研究中,很多建模項目的探索性數據分析都要檢查預測因子之間的相關性,以及預測因子和目標變量之間的相關性。

如果一個變量的高值隨另一個變量的高值的變化而變化,并且它的低值隨另一個變量的低值的變化而變化,那么稱這兩個變量正相關。如果一個變量的高值隨另一個變量的低值的變化而變化,且反之亦然,那么稱這兩個變量負相關。如果一個變量的變化對另一變量沒有明顯影響,那么稱這兩個變量不相關。

首先介紹三個重要概念:

  • 相關系數(Correlation coefficient):一種標準化的度量,用于測量數值變量之間的相關程度,取值范圍在-1(完全負相關)和+1(完全正相關)之間。若其值為0,則表示兩個變量之間沒有相關性,需注意,數據的隨機排列將會隨機生成正的或負的相關系數。
  • 相關矩陣(Correlation Matrix):將變量在一個表格中按行和列顯示,表格中每個單元格的值是對應變量之間的相關性。
  • 散點圖(scatter-plot):在繪圖中,x軸表示一個變量(特征)的值,y軸表示另一個變量的值,可以反映出y隨x的變化而變化的大致趨勢。
  • 7.1 相關系數

    皮爾遜相關系數公式:
    r=Σi=1N(xi?xˉ)(yi?yˉ)(n?1)sxsyr=\frac{\Sigma_{i=1}^ N{(x_i-\bar x)(y_i-\bar y)}}{(n-1)s_xs_y} r=(n?1)sx?sy?Σi=1N?(xi??xˉ)(yi??yˉ?)?
    當變量的相關性是非線性的時候,相關系數就不再是一種有用的度量,此時需計算非線性相關系數來對變量的相關性來做出判斷。而反映一個因變量與一組自變量(兩個或兩個以上)之間相關程度的指標稱為復相關系數,在此不做過多介紹。

    7.2 相關矩陣

    在可視化方法上,我們可以使用熱力圖(見8.1.1)來可視化相關矩陣。

    import seaborn as sns import warnings warnings.filterwarnings("ignore") from pyforest import * wine=pd.read_csv('wine.csv') corr = wine.corr() #相關矩陣計算方法 fig, ax = plt.subplots(figsize=(16, 12)) ax = sns.heatmap(corr,square=True,ax=ax,annot=True) ax.set_title('Correlation coefficient')


    以sklearn庫中的wine數據集(筆者使用時已將數據集導入到了csv文件中)為例,計算該數據集各變量(特征)之間的相關系數。

    7.3 散點圖

    散點圖是一種可視化兩個測量數據變量間關系的標準方法。在散點圖中,x軸表示一個變量,y軸表示另一個變量,圖中的每個點對應于一條記錄。

    plt.scatter(wine.Alcohol,wine.Proline)


    再以wine數據集中Alcohol與Proline兩列為例繪出散點圖。

    8.探索多個變量

    對一個變量進行分析稱為單變量分析;對兩個變量及其關系進行分析稱為雙變量分析,例如(線性)相關性分析;而對兩個以上的變量進行分析稱為多變量分析。與單變量分析一樣,雙變量分析不僅計算匯總統(tǒng)計量,而且生成可視化的展示。雙變量或多變量分析的適用類型取決于數據本身,即數據是數值型數據還是分類數據。

    8.1 雙變量分析的可視化

    多個變量的分析與可視化完全可以由雙變量分析加上條件(conditioning)這個概念擴展得到,所以首先介紹幾種關于兩種變量的可視化方法,它們有六邊形圖、等勢線、熱力圖、箱形圖、小提琴圖等。事實上,這些可視化方法本質上對應的都是直方圖和密度圖。

    8.1.1 六邊形圖、等勢線和熱力圖

    六邊形圖、等勢線和熱力圖均適用于兩個數值型變量,它們所給出的都是二維密度的可視化表示。現再以wine數據集為例使用python實現可視化,簡單地展示三種圖像。

    plt.hexbin(wine.Alcohol,wine.Proline,gridsize=30,cmap='Blues') plt.colorbar()


    六邊形圖繪制的并非數據點,而是將記錄(樣本)分組為六邊形的組距,并用不同的顏色繪制各個六邊形,以顯示每組中的記錄數。

    wine_AP=wine.loc[:,['Alcohol','Proline']] sns.kdeplot(wine_AP) plt.scatter(wine['Alcohol'],wine['Proline'])


    上圖在散點圖上繪制了一個等勢線圖(二維密度圖),可視化了兩個數值型變量之間的關系,等勢線在本質上就是兩個變量的地形圖,每條等勢線表示特定的密度值,并隨著接近“頂峰”而增大。

    wine_AP.set_index('Alcohol',inplace=True) wine_AP_part=wine_AP.iloc[0:10] sns.heatmap(wine_AP_part)


    當然,一種可視化方法可以有多種用途,例如熱力圖還可以展現兩個離散變量之間的組合關系或進行分類變量中數值型數據的相關性分析等。

    8.1.2 箱形圖和小提琴圖

    一些數值型數據是根據分類變量進行分組的,或者要同時比較多個變量的分布,可視化這類數據通常使用箱形圖或小提琴圖。

    wine_BV=wine.loc[:,['Malic acid','Total phenols','Flavanoids','Proanthocyanins','Hue']] sns.boxplot(data=wine_BV)


    箱形圖可以很直觀的比較不同類別的(或不同特征的)數據分布。

    sns.violinplot(data=wine_BV)


    小提琴圖是箱形圖的一種增強表示,它以y軸為密度來繪制密度估計量的情況。繪圖中對密度做鏡像并反轉(即核密度函數),并填充所生成的形狀,由此生成了一個類似小提琴的圖形。

    sns.violinplot(data=wine_box,inner='quartile')


    如果規(guī)定inner=‘quartile’,那么繪出的小提琴圖相當圖結合了箱形圖,在某些情況下會有更好的效果。

    8.2 多個變量的可視化

    例如可視化上述數據集wine_AP(取特征Alcohol,Proline)時加入條件分別可視化不同等級(wine中的特征class,class=1,2,3)的數據,這就變成了一個多變量分析的可視化問題,我們通過建立多個子圖來對比它們。例如:

    wine_class1=wine.loc[wine['class']==1] wine_class2=wine.loc[wine['class']==2] wine_class3=wine.loc[wine['class']==3] plt.figure() plt.subplots_adjust(wspace=0.3) plt.subplot(1,3,1) plt.hexbin(wine_class1.Alcohol,wine_class1.Proline,gridsize=30,cmap='Blues') plt.colorbar() plt.subplot(1,3,2) plt.hexbin(wine_class2.Alcohol,wine_class2.Proline,gridsize=30,cmap='Blues') plt.colorbar() plt.subplot(1,3,3) plt.hexbin(wine_class3.Alcohol,wine_class3.Proline,gridsize=30,cmap='Blues') plt.colorbar() plt.rcParams['figure.figsize']=(13,3)

    后記

    到這里,對于探索性數據分析的簡要介紹就結束了。對于任意基于數據的項目,最重要的第一步都是查看數據,這正是探索性數據分析的關鍵理念所在。通過總結并可視化數據,我們可以對項目獲得有價值的洞悉和理解。從位置估計和變異性估計等簡單度量,到探索多個變量之間的關系,我們可以借助各種技術和工具并結合python這樣的語言強大的表達能力來建立豐富多樣的數據探索和分析方式。

    在最后,希望本文能夠幫助到閱讀的各位,也請大家多多關注,筆者會在后續(xù)介紹更多有關數據科學的內容以及使用python等語言進行數據分析的方法。

    總結

    以上是生活随笔為你收集整理的数据科学学习之探索性数据分析(EDA)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。