python數據分析與挖掘

有了樣本數據,該如何展開數據分析工作呢?首先,就是觀察,先看懂數據,這在後續工作中起到事半功倍的作用。要考慮的問題比如:樣本數據集的數量和質量是否滿足模型構建的要求?是否有明顯的規律和趨勢?各元素之間是否有關聯性?以上都是在這個階段要考慮的問題。數據探索就是通過檢驗數據集的數據質量、繪製圖表、計算特徵量等方法,對樣本數據集的結構和規律進行分析。它可以幫助選擇合適的數據預處理和建模方法,解決問題。

數據質量分析

數據質量分析時數據挖掘過程中數據準備過程的重要一環,是數據預處理的前提,也是數據挖掘分析結論有效性和準確性的基礎。

數據質量分析主要是檢查原始數據中是否存在髒數據,即不符合要求,以及不能直接進行相應分析的數據。常見的髒數據包括:

  • 缺失值
  • 異常值
  • 不一致的值
  • 重複數據及含特殊字符的數據

缺失值分析

  • 原因
  • 信息無法獲取,或者代價較大
  • 因人為或者設備情況被遺漏
  • 屬性不存在,例如未婚著的配偶
  • 影響
  • 缺少了很多有用信息,建模時的不確定性更加明顯,輸出不可靠
  • 分析
  • 使用簡單的統計分析,可以得到含有缺失值的屬性個數,以及每個屬性的未缺失數、缺失數與缺失率等。解決辦法主要有三個方向:刪除存在缺失值的記錄、對可能值進行插補以及不處理。

異常值分析

異常值分析是檢驗數據是否有錄入錯誤或者是否含不合理數據。將含有異常值的數據進行分析,會對結果產生不良影響。異常值是指樣本中的個別值,其數值明顯偏離其餘的觀測值,也稱為“離群點”,異常值分析也稱為離群點分析。

  1. 簡單統計量分析在所有的異常值分析之前,可以先進行各描述性分析,也就是憑藉我們自己的思維,做一個基本的分析,查看有沒有不合理的數據,通常可以從最大最小值來看,是否超出合理範圍。
  2. 3σ原則在我們生活中,其實大部分數據都是服從正態分佈的,在這種情況下,利用3σ原則,異常值被定義為一組測定值中與平均值的偏差超過3倍標準差的值。距離平均值3σ之外的值出現的概率為 P( |x-μ|>3σ ) ≤0.003 ,事件發生的概率極低。
  3. 箱形圖分析箱形圖提供了識別異常值的一個標準:異常值通常被定義為小於 Q(L)-1.5IQR 或大於 Q(U)+1.5IQR 的值。其中,Q(L)稱為下分位數,表示全部觀察值中有四分之一的數據比它小,同理,Q(U)為上四分位數,IQR稱為四分位間距,是上四分位數Q(U)與下四分位數Q(L)之差,中間包含了全部觀察值的一半。
python數據分析與挖掘 | 數據探索

箱形圖依據實際數據繪製,沒有對數據做任何限制性要求,僅僅是真實直觀的表現數據分佈的本來面貌。除此之外,箱形圖判斷異常值的標準是以四分位數和四分位間距為基礎,具有一定的魯棒性,因為有多達25%的數據可以變得任意遠而不會明顯的影響四分位數,所以異常值對這個標準的影響很小。箱形圖分析在異常值處理時更加客觀。

舉個栗子

演示一下上述數據質量分析如何操作,數據均為引用。此程序使用的事一個兩列的數據,分別為日期和銷量。

<code>import pandas as pd

catering_sale = '../data/catering_sale.xls' 
data = pd.read_excel(catering_sale, index_col = u'日期') #讀取數據,指定“日期”列為索引列
print(data.describe())
print('counts=' + str(len(data)))/<code>
python數據分析與挖掘 | 數據探索

由於我電腦編碼的問題,漢字顯示為亂碼,不影響展示,可以看到 pandas 庫的 describe 方法可以很方便的查看數據的基本情況,包括平均值、標準差、最小值、還有分位數等。其中的 count 方法是指統計當中的非空值數量(200),後面又利用 len 方法得到所有數據的數量(201),發現並沒有對上,因此,可以判斷出,數據中有一個缺失值。

下面看一下異常值該如何檢測。

<code>import pandas as pd

catering_sale = '../data/catering_sale.xls' 
data = pd.read_excel(catering_sale, index_col = u'日期') #讀取數據,指定“日期”列為索引列

import matplotlib.pyplot as plt #導入圖像庫
plt.rcParams['font.sans-serif'] = ['SimHei'] #用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負號

plt.figure() #建立圖像
p = data.boxplot(return_type='dict') #畫箱線圖,直接使用DataFrame的方法

plt.show() #展示箱線圖/<code>
python數據分析與挖掘 | 數據探索

可以很清晰的看到上下邊界點外有幾個異常值,最下方還有個顏色較深,可能是有重疊部分,具體觀察的話,可以利用 Matplotlib 中的顯示註釋的方式(ax.annotate)把每個點的座標顯示出來。

一致性分析

數據不一致性是指數據的矛盾性、不相容性,直接對不一致的數據進行挖掘,可能會產生與實際相違背的挖掘結果。這樣的結果可能是由於來源不同的數據組合到一起,會出現不一致的情況。

數據特徵分析

分佈分析

分佈分析能揭示數據的分佈特徵和分佈類型。對於定量數據,想要了解其分佈形式是對稱的還是非對稱的,發現某些特大或特小的可以值,可以通過繪製頻率分佈直方圖、莖葉圖進行直觀分析;對於定性分類數據,可用餅圖和條形圖直觀的顯示分佈情況。

  • 定量數據的分佈分析

對於定量變量而言,選擇“組數”和“組寬”是做頻率分佈分析時最主要的問題。

  1. 求極差:最大值 - 最小值
  2. 決定組距與組數:選取適當的組寬,計算分組
  3. 決定分點:選擇合適的分點,左右開閉情況
  4. 列出頻率分佈表
  5. 繪製頻率分佈直方圖

注:各組之間相互排斥,將所有數據包含在內,組寬儘量相等。

  • 定性數據的分佈分析

對於定性變量,常常根據變量的分類類型來分組,可以採用餅圖和條形圖來描述定性變量的分佈。在定性變量分析中,條形圖的寬度沒有意義,餅圖和條形圖都是為了區分百分比或頻數。

對比分析

對比分析是指把兩個相互聯繫的指標進行比較,從數量上展示和說明研究對象規模的大小,水平的高低,速度的快慢,以及各種關係是否協調。適用於指標間的橫縱向比較,時間序列的比較分析。選擇合適的對比標準,能做出客觀的評價。對比分析還分為絕對數比較和相對數比較,具體問題具體分析。

統計量分析

用統計指標對定量數據進行統計描述,常從集中趨勢和離中趨勢兩個方面進行分析。平均水平的指標是對個體集中趨勢的度量,使用最廣泛的事均值和中位數;反映變異程度的指標則是對個體離開平均水平的度量,廣泛使用的事標準差、方差、四分位間距。

  • 集中趨勢度量:均值、中位數、眾數
  • 離中趨勢度量:極差、標準差、變異係數、四分位數間距

其中,變異係數是度量標準差相對於均值的離中趨勢(標準差/均值)。四分位數間距可以利用 pandas 中的 describe 結果稍加運算得到。

週期性分析

週期性分析是探索某個變量是否隨著時間變化而呈現出某種變化趨勢。時間尺度相對較長的週期性趨勢有年度週期性趨勢、季節性週期趨勢,相對較短的週期有周度週期性趨勢,甚至更短。可以通過時序折線圖來觀察趨勢。

貢獻度分析

貢獻度分析又稱帕累託分析,它的原理是帕累託原理,又稱20/80定律,想必你在很多地方都會聽到過。同樣的投入放在不同的地方會產生不同的效益。例如,一個公司80%的利潤往往來自於20%的產品,而其他的80%產品僅僅產生了20%的利潤。

相關性分析

相關分析時指分析連續變量之間線性相關程度的強弱,並利用適當的統計指標表示出來。具體方法有以下幾種:

  1. 直接繪製散點圖:直觀展示
  2. 繪製散點圖矩陣:同時考察多個變量之間關係
  3. 計算相關係數
python數據分析與挖掘 | 數據探索

主要數據探索函數

pandas基本統計特徵函數

python數據分析與挖掘 | 數據探索

pandas拓展統計特徵函數

上述是pandas的一些基本統計特徵的函數,還有一些較為實用的方法,比如累積計算(cum),滾動計算(pd.rolling)。

python數據分析與挖掘 | 數據探索

python數據分析與挖掘 | 數據探索

統計作圖函數

python數據分析與挖掘 | 數據探索

在數據可視化中,pandas 是主要的數據探索和分析的工具,因此,作圖要 matplotlib 和 pandas 結合使用,matplotlib 是最主要的繪圖工具,同時,pandas 作圖簡單直接,兩者結合使用效率更高,具體使用可以查看 matplotlib 工具篇。


分享到:


相關文章: