Python3智能數據分析,超實用的數據預處理方法你需要知道

2020-12-11 AI科技大本營

(▲由Python大本營付費下載自視覺中國)

作者 | 李明江/張良均/周東平/張尚佳來源 | 機械工業出版社《Python3智能數據分析快速入門》

機器學習對數據集有一定的要求,這就需要在訓練之前對數據進行處理,使之符合訓練要求。Pandas 提供了多種數據預處理的方法,包括缺失值處理、重複值處理、連續特徵離散化處理、啞變量處理等方法。

缺失值處理

數據中的某個或某些特徵的值是不完整的,這些值稱為缺失值。對缺失值處理前需先識別缺失值,Pandas 提供 isnull 方法,能夠識別出缺失值,返回 bool。isnull 方法結合其他操作,找出缺失值的數量及佔比,如代碼清單 7-31 所示。

識別缺失值後,需對缺失值進行處理,常見的處理方式分為 3 種:刪除法、替換法、插值法。

1.刪除法

刪除法是指將含有缺失值的特徵或者記錄刪除。刪除法分為刪除觀測記錄和刪除特徵兩種,觀測記錄指刪除行,特徵指刪除列,它屬於利用減少樣本量來換取信息完整度的一種方法,是一種最簡單的缺失值處理方法。Pandas 提供了簡便的刪除缺失值的方法dropna,通過參數控制,該方法既可以刪除觀測記錄,也可以刪除特徵,其基本語法格式

如下。

pandas.DataFrame.dropna(self, axis=0, how='any', thresh=None, subset=None, inplace=False)dropna 方法常用的參數及其說明如表 7-16 所示。

使用 dropna 方法刪除指定列的缺失值,設置參數為 subset,如代碼清單 7-33 所示。

2.替換法

替換法是指用一個特定的值替換缺失值。特徵可分為數值型和類別型,兩者出現缺失值時的處理方法是不同的。缺失值所在特徵為數值型時,通常用其均值、中位數和眾數等描述其集中趨勢的統計量來代替缺失值;缺失值所在特徵為類別型時,則選擇用眾數來替換缺失值。f illna 方法用於替換缺失值,其基本語法格式如下。

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None)fillna 方法常用的參數及其說明如表 7-17 所示。

使用 fillna 方法替換缺失值,如代碼清單 7-34 所示。

使用 f illna 方法替換缺失值,不指定替換值,設置參數為 method,如代碼清單 7-35 所示。

3.插值法

刪除法簡單易行,但是會引起數據結構變動,樣本減少;替換法使用難度較低,但是會影響數據的標準差,導致信息量變動。在面對數據缺失問題時,除了這兩種方法之外,還有一種常用的方法—插值法。

interpolate 方法用於對缺失值進行插值。針對 DataFrame 的 interpolate 方法,其基本語法格式如下。

DataFrame.interpolate(method='linear', axis=0, limit=None, inplace=False, limit_direction='forward', limit_area=None, downcast=None, **kwargs)interpolate 方法常用的參數及其說明如表 7-18 所示。

interpolate 方法提供了多種插值方法,常用插值方法及其說明如表 7-19 所示。

使用常用插值方法插值,如代碼清單 7-36 所示。

除了常用的插值方法,interpolate 還提供其他方法。至於使用何種插值方法,可根據實際情況靈活選擇。

重複數據處理

重複數據處理是機器學習經常面對的問題之一。對重複數據進行處理前,需要分析重複數據產生的原因以及去除這部分數據後可能造成的不良影響。

drop_duplicates 方法用於去除一個或多個特徵的重複記錄。針對 DataFrame 的 drop_duplicates 方法的基本語法格式如下。

DataFrame.drop_duplicates(self, subset=None, keep='first', inplace=False)drop_duplicates 方法常用的參數及其說明如表 7-20 所示。

使用 drop_duplicates 方法去除數據中的重複記錄,默認對所有特徵起作用,即只有所有特徵的重複記錄對應的索引(行)相同的情況下才會執行去除操作,如代碼清單 7-37所示。

連續特徵離散化處理

某些算法,如 ID3 決策樹算法和 Apriori 算法等,要求數據是離散的,此時就需要將連續型特徵(數值型)轉換成離散型特徵(類別型),即連續特徵離散化。連續特徵離散化是在數據的取值範圍內設定若干個離散的劃分點,將取值範圍劃分為一些離散化的區間,最後用不同的符號或整數值代表落在每個子區間中的數據值。因此離散化涉及兩個子任務,即確定分類數以及如何將連續型數據映射到這些類別型數據上。其原理如圖 7-2 所示。

常用的離散化方法有 3 種:等寬法、等頻法和通過聚類分析離散化(一維)。通過聚類分析離散化(一維)涉及聚類算法,此處暫不介紹。

1.等寬法

等寬法指將數據的值域分成具有相同寬度的區間,與製作頻率分布表類似。cut 函數用於實現等寬法,其基礎語法格式如下。

pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)cut 函數常用的參數及其說明如表 7-21 所示。

表 7-21 cut 函數常用的參數及其說明

使用等寬法離散化的缺陷從代碼清單 7-39 中可以很明顯地看出:等寬法離散化對數據分布具有較高要求,若數據分布不均勻,那麼各個類的數目也會變得非常不均勻,有些區間包含許多數據,而另外一些區間的數據則極少。這會嚴重損壞所建立的模型。

2.等頻法

等頻法在等寬法的基礎上實現,將切分區間指定為被切分數據的分位數,這樣能保證切分區間的數據大體相等。結合函數對數據應用等頻法,如代碼清單 7-40 所示。

相較於等寬法,等頻法避免了數據分布不均勻的問題,但同時也可能將數值非常接近的兩個值分到不同的區間以滿足每個區間中固定的數據個數。

啞變量處理

啞變量又稱虛擬變量,通常取 0 或 1。機器學習中有相當一部分的算法模型都要求輸入的特徵為數值型,但實際數據中特徵的類型不一定只有數值型,還會存在相當一部分的類別型,這部分的特徵需要經過啞變量處理才可以放入模型之中。啞變量處理的原理如圖 7-3 所示。

get_dummies 函數用於啞變量處理,其基本語法格式如下。

pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False)使用 get_dummies 函數對類別型特徵進行啞變量處理,如代碼清單 7-41 所示。

代碼清單 7-41 啞變量處理

從代碼清單 7-41 的結果中可以發現,對於一個類別型特徵,若其取值有 m 個,則經過啞變量處理後就變成了 m 個二元特徵,並且這些特徵互斥,每次只有一個激活,這使得數據變得稀疏。

綜上所述,對類別型特徵進行啞變量處理主要解決了部分算法模型無法處理類別型數據的問題,這在一定程度上起到了擴充特徵的作用。由於數據變成了稀疏矩陣的形式,因此也加快了算法模型的運算速度。

小結

本章延續第 6 章,是 Pandas 的進階篇。主要介紹了如下內容:

1)常見數據源類型如 CSV、Excel、資料庫、剪切板、pickle 的讀取和寫入操作。

2)統計分析、分組運算、透視表和交叉表這 3 種針對數據的操作方法。

3)缺失值處理、重複值處理、連續特徵離散化處理、啞變量處理等常見數據處理方法。

課後習題

1.選擇題

(1)下列關於資料庫數據讀寫,下列說法正確的有 。

A. read_sql_table 可以使用 sql 語句讀寫資料庫數據

B. Pandas 除了 read_sql 沒有其他資料庫讀寫函數了

C. 使用 read_sql 函數讀取資料庫數據不需要使用資料庫連接

D. read_sql 既可以使用 sql 語句讀取資料庫數據,也可以直接讀取資料庫表

(2)【多選】關於 Pandas 數據讀寫,下列說法正確的有 。

A. read_excel 能夠讀取 xls 後綴的文件

B. read_sql 能夠讀取資料庫的數據

C. to_csv 方法能夠將 DataFrame 寫入 CSV

D. to_sql 方法能夠將 DataFrame 寫入資料庫

(3)對數值型數據應用 describe 方法返回的特徵不包括 。

A. 中位數 B. 標準差 C. 數目 D. 方差

(4)關於移動窗口 rolling 方法,下列說法正確的是 。

A. 接收 offset 時,對應的索引需為時間類型

B. 接收 int 時,空值不會保留

C. 接收 offset 時,空值不會保留

D. 返回 Rolling 對象

(5)關於 agg 方法,下列說法錯誤的是 。

A. 返回標量值和數組 B. 可接收 NumPy 函數

C. 可對分組的不同列指定作用的函數 D. 可同時接收多個函數

(6)【多選】下列關於 groupby 方法說法正確的是 。

A. groupby 能夠實現分組聚合

B. groupby 方法返回的結果能夠直接查看

C. groupby 是 Pandas 提供的一個用來分組的方法

D. groupby 方法是 Pandas 提供的一個用來聚合的方法

(7)使用 pivot_table 函數製作透視表用下列那個參數設置行分組鍵 。

A. data B. values C. columns D. index

(8)【多選】以下關於缺失值的說法中,正確的是 。

A. isnull 方法可用於計算缺失值數量

B. dropna 方法既可以刪除觀測記錄,也可以刪除特徵

C. f illna 方法可用來切換缺失值

D. Pandas 庫中的 interpolate 模塊包含了多種插值方法

(9)以下關於 drop_duplicates 函數的有關說法中,錯誤的是 。

A. 對 DataFrame 和 Series 類型的數據有效

B. 僅支持單一特徵的數據去重

C. 數據有重複時默認保留第一個數據

D. 該函數不會改變原始數據排列

(10)連續數據離散化的處理方法不包括 。

A. 等寬法 B. 等頻法 C. 使用聚類算法 D. 使用 Apriori 算法

2.填空題

(1)read_csv 函數用於設置分隔符的參數是 。

(2)使用 方法能夠一次性得出 DataFrame 所有數值型特徵的非空值數目、均值、四分位數、標準差。

(3)pivot_table 函數默認的聚合函數是 。

(4)創建交叉表的函數是 。

(5)常用的啞變量處理的函數是 。

3.操作題

(1)一組數據:5,10,11,13,15,35,50,55,72,92,204,215。使用等寬法對其進

行離散化處理。

(2)對表 7-23 中的筆記本電腦數據按 CPU 進行分組,並求出每組最大主頻、最小核心數

目、最低的價格,並顯示在一個 DataFrame 中。

關於作者

李明江:資深大數據專家,貴州省計算機學會常務理事,黔南州大數據專家委員會委員,黔南州計算機學會會長,黔南州教育信息化建設專家庫專家,黔南民族師範學院計算機與信息學院院長,全國高校大數據教育聯盟理事。主持過多項省廳級科研項目,並在《計算機應用研究》《科技通報》上發表過多篇大數據分析與數據挖掘相關技術的研究論文,著有《數據挖掘的應用與實踐:案例與探析》《計算機網絡技術與應用》等。

張良均:資深大數據挖掘與分析專家、模式識別專家、AI技術專家。有10餘年大數據挖掘與分析經驗,擅長Python、R、Hadoop、Matlab等技術實現的數據挖掘與分析,對機器學習等AI技術驅動的數據分析也有深入研究。為電信、電力、政府、網際網路、生產製造、零售、銀行、生物、化工、醫藥等多個行業上百家大型企業提供過數據挖掘應用與諮詢服務,實踐經驗非常豐富。華南師範大學、中南財經政法大學、廣東工業大學、西安理工大學、廣西科技大學、重慶交通大學、桂林電子科技大學等校外碩導。撰寫了《Python數據分析與挖掘實戰》《R語言數據分析與挖掘實戰》《數據挖掘:實用案例分析》《Hadoop大數據分析與挖掘實戰》等多部暢銷書,累計銷量近20萬冊。

本文摘自機械工業出版社《Python3智能數據分析快速入門》,經出版社授權發布。

相關焦點

  • 為什麼我們需要數據預處理?
    數據預處理就是解決上面所提到的數據問題的可靠方法。那它是怎麼做到的呢?就像大廚準備處理魚的刀具一樣,數據預處理也是如此。它準備原始數據以便進一步處理。應用是時候採取一些簡單的實際應用來了解數據預處理是如何完成的。下面的例子我們用 Python 來處理,還需要用到兩個庫,分別是 Numpy、Pandas。
  • Python數據預處理
    ,首先需要進行初步的數據探索性分析,對數據探索性分析之後要先進行一系列的數據預處理步驟。異常值分析方法3σ原則 (數據分布為正態分布)箱型圖分析(內限or外限)。常用數據標準化方法:歸一化的目的:使得預處理的數據被限定在一定的範圍消除奇異樣本數據導致的不良影響在大佬Ng的視頻課中聽過一句話,歸一化會加快梯度下降的求解速度。
  • 一份SPSS回歸分析與數據預處理的心得體會
    一定要對數據做缺失值處理、異常值處理。在數據預處理的基礎上再進一步建模,否則可能得到錯誤的結果。心得1:數據預處理怎麼做。一是 缺失值的處理。判定異常值的方法我個人認為常用的有兩點:1是描述性統計分析,看均值、標準差和最大最小值。一般情況下,若標準差遠遠大於均值,可粗略判定數據存在異常值。2是通過做指標的箱圖判定,箱圖上加「*」的個案即為異常個案。發現了異常值,接下來說怎麼處理的問題。大概有三種方法:1是正偏態分布數據取對數處理。
  • Python數據分析之scikit-learn與數據預處理​
    當然,數據預處理絕對也是耗時最長的一個過程,這一過程不僅要求洞悉整個數據集結構分布,還要探查每一個特徵屬性細節情況,並作出應對處理,使數據以最適合的狀態傳輸給模型。針對預處理操作,sklearn中提供了許多模塊工具,靈活使用工具可以讓數據預處理輕鬆很多。本文簡要介紹數據預處理中的一些主要方法,並結合sklearn中提供的模塊進行實踐。
  • python數據科學-數據預處理
    數據預處理是我們在做機器學習之前必經的一個過程,在機器學習中常見的數據預處理包括缺失值處理,縮放數據以及對數據進行標準化處理這三個過程
  • 數據分析學習:入數據科學大坑,我需要什麼樣的數學水平?
    所以,本文作者闡釋了數據科學和機器學習為何離不開數學,並提供了統計學與概率論、多變量微積分、線性代數以及優化方法四個數學分支中需要熟悉的一些數學概念。本文的作者是物理學家、數據科學教育者和作家 Benjamin Obi Tayo 博士,他的研究興趣在於數據科學、機器學習、AI、Python 和 R 語言、預測分析、材料科學和生物物理學。
  • 大數據的預處理、離散化要點羅列
    大數據預處理技術1.目前存在四種主流的數據預處理技術:數據清理、數據集成、數據規約和數據變換。2.數據處理的主要任務(1)數據處理的主要步驟:數據清理、數據集成、數據規約和數據變換。(5)數據變換使用規範化、數據離散化和概念分層等方法使得數據的挖掘可以在多個抽象層上進行。數據變換操作是引導數據挖掘過程成功的附加預處理過程。3.數據清理(1)缺失值對於缺失值的處理一般是想法設法把它補上,或者乾脆棄之不用。
  • 使用scikit-learn進行數據預處理
    1.基本用例:訓練和測試分類器練習2.更高級的用例:在訓練和測試分類器之前預處理數據2.1 標準化您的數據2.2 錯誤的預處理模式2.3 保持簡單,愚蠢:使用scikit-learn的管道連接器練習3.當更多優於更少時:交叉驗證而不是單獨拆分練習4.超參數優化:微調管道內部練習5.總結:我的scikit-learn管道只有不到10行代碼(跳過import語句)6.異構數據:當您使用數字以外的數據時練習
  • 數據預處理之「數據清理」
    鑑於高質量數據可生成更好的模型和預測,數據預處理的重要性與日俱增,並且已經成為數據科學、機器學習、AI 管道中的基本步驟。在本文中,我們將探討數據處理需求,並討論用於完成此流程中每個步驟的不同方法。在數據收集過程中,存在三個影響數據質量的主要因素:準確率:與期望值之間存在偏差的錯誤值。
  • 6種數據分析實用方法,終於有人講明白了
    導讀:在《終於有人把AI、BI、大數據、數據科學講明白了》中,我們討論了分析以及相關的一些概念,如大數據和數據科學。現在我們將注意力轉向分析中使用的實用方法,包括各種分析工具。很多時候,預測被描述為通過歷史數據對趨勢進行判斷,並通過可視化手段進行直觀展現的方法,有些還提供了關於未來的預測。而時間序列分析不同於預測,雖然你需要時間序列數據來進行預測,但並非所有的時間序列分析都是用來進行預測的。例如,時間序列分析可用於在多個時間序列中發現模式或相似的特徵,或執行統計過程控制。類似地,季節性的分析也可以用來識別模式。
  • python3處理JSON數據
    前言使用python做開發,經常會遇到json數據解析問題,本文,我將帶領大家學習使用python3處理json數據,並將字典反轉義為json數據。一、基礎知識1.什麼是JSONJSON是一種輕量級的數據交換格式,便於任何機器理解,採用完全獨立於程式語言的文本格式來存儲和表示數據。
  • 學習Python數據分析,需要幾個階段?
    Python這種特性稱為「偽代碼」,它可以使你只關心完成什麼樣的工作任務,而不是糾結於Python的語法。 編程基礎 要學習如何用Python進行數據分析, 筆者建議第一步是要了解一些Python的編程基礎,知道Python的數據結構,什麼是向量、列表、數組、字典等等;了解Python的各種函數及模塊。下圖整理了這一階段要掌握的知識點:
  • 使用scikit-learn對數據進行預處理
    數據的質量決定了模型的上限,在真實的數據分析中,輸入的數據會存在缺失值,不同特徵的取值範圍差異過大等問題,所以首先需要對數據進行預處理。
  • 6種數據分析實用方法,終於有人講明白了
    在討論支持分析的方法時,預測和時間序列往往被一起提及,並不是因為它們是同一種方法,而是因為它們都針對同一類問題,即基於歷史信息對時間序列數據進行特徵提煉和預測。預測和時間序列分析是指對時間序列數據進行分析、從數據中提煉有意義特徵的方法。很多時候,預測被描述為通過歷史數據對趨勢進行判斷,並通過可視化手段進行直觀展現的方法,有些還提供了關於未來的預測。
  • 題庫 | 神經網絡數據預處理方法有哪些?
    正確的初始化方法應該避免指數級地減小或放大輸入值的大小,防止梯度 「飽和」。Glorot 提出兩個準則:各個層激活值的方差保持不變(正向傳播)各個層的梯度值的方差保持不變(反向傳播)這這些條件的基礎上,Glorot 使用 (tanh) 作為激活函數,並假設輸入值的均值為 0,提出了 Xavier 初始化的方法。
  • 程式設計師的基本功:為什麼非要用 Python 做數據分析?Excel 不好嗎?
    就是數據分析帶起來的!課程從實際業務出發,基於Python3落地工作中經常碰到的分析與挖掘方法,教你通過數據分析,找到問題,形成方案,採取行動,反饋評估,形成一個閉環,讓你的數據充分發揮業務價值!業內超實用的數據課 《零基礎搞定Python數據分析與挖掘》原價199元,限時立減!
  • 大數據分析處理方法有哪些
    具體的大數據處理方法確實有很多,根據長時間的實踐,總結了一個普遍適用的大數據處理流程,並且這個流程應該能夠對大家理順大數據的處理有所幫助。整個處理流程可以概括為四步,分別是採集、導入和預處理、統計和分析,最後是數據挖掘。
  • 學習數據分析,這些超好用的數據分析工具你必須知道!
    目前市場上有數千種工具能夠幫你節約時間和成本,帶你從全新的角度洞察你所在的行業。 以下介紹幾款超好用的數據分析工具,幫助你在數據分析的學習以及工作中能夠脫穎而出。
  • 教你使用caret包(一)--數據預處理
    首先來看看caret是如何實現數據的預處理,關於這部分,主我將從如下主要的6個方面介紹:一、創建啞變量如果你有一個因子型變量需要進行啞變量處理,你會怎麼辦?也許你會根據該變量的m個水平數構建m-1個啞變量,不錯,這樣的思路是沒有問題的。但如果發現該變量確實很重要,而且水平數目非常多,那你一定會抓狂!
  • Nature Methods:fMRIPrep: 一個穩定的fMRI數據預處理工具
    fMRIPrep能夠自動地而不需要人工幹預地將最佳處理流程適應到任何特定數據集,同時保證預處理的高質量。總之,fMRIPrep提供了易操作且透明的預處理流程,有助於確保推論的有效性及結果的可解釋性。影像數據的預處理應該有效識別幹擾源以減少其對數據的影響,並且能夠對信號進行解剖定位。在神經影像領域,許多工具可以完成大部分的預處理步驟(如表1所示)。這些工具主要被包含在AFNI、ANTs、FreeSurfer、FSL和SPM等分析軟體中。儘管擁有豐富的可利用的軟體以及預處理最佳操作的多次研究,但是,大量不同的數據採集協議導致了幾乎每一項研究都要定製預處理流程。