python數據科學-數據預處理

2021-03-02 俊紅的數據分析之路

數據預處理是我們在做機器學習之前必經的一個過程,在機器學習中常見的數據預處理包括缺失值處理,縮放數據以及對數據進行標準化處理這三個過程。

01|缺失值處理:

缺失值處理是我們在做數據分析/機器學習過程中經常會遇到的問題,我們需要一種處理不完整數據的策略/方法。對缺失值處理有兩種方法,一種是直接對某一列中的缺失值進行處理,一種是根據類別標籤,分類別對缺失值進行處理。

我們先看如何在沒有類別標籤的情形下修補數據。比較簡單粗暴的方法就是直接忽略,也就是刪除缺失值,這種策略適用於數據集中缺失值佔比很小,去掉其以後對整體影響不大的情況。這裡需要注意的是刪除某一個缺失值時,需要把和該值一個維度/行的值也一起刪除,但是其他值可能對數據整體的影響比較大,所以用這種方法的時候要慎重

一種可以避免這種情況的方法就是給缺失值賦予一個值,這個值一般就是該缺失值所在列的均值、中位數之類的。我們這裡用sklearn庫中的preprocessing模塊中的Imputer()函數來處理缺失值。

#加載庫

from sklearn.datasets import load_iris

from sklearn.preprocessing import Imputer

import numpy as np

import numpy.ma as ma

#加載數據集

data=load_iris()

x=data["data"]

y=data["target"]

#將原始數據複製一份

x_t=x.copy()

#在第2行製造一些缺失值

x_t[2,:]=np.repeat(0,x.shape[1])

#創建Imputer對象,採用平均值策略

imputer=Imputer(missing_values=0,strategy="mean")#先聲明一個替換策略

x_imputed=imputer.fit_transform(x_t)#讓x_t利用該策略

print(x_t)

製造缺失值以後的數據填充缺失以後的數據

preprocessing.Imputer函數解釋:

sklearn.preprocessing.Imputer(missing_values=』NaN』, strategy=’mean』, axis=0, verbose=0, copy=True)

#missing_values為待替換的缺失值,可以為NaN,也可以為具體數值

#strategy為替換策略,有mean、medium、most_frequent分別表示均值、中位數、眾數三者來填充

#axis=0表示按列填充,1表示按行填充

#copy設置為False時表示不在原數據基礎上修改

關於Imputer的用法

缺失值處理對應於pandas庫中的方法為dropna()刪除缺失值;fillna()填充缺失值。

dropna()默認刪除任何含有缺失值的行;傳入參數「how=」all」」表示刪除全是缺失值的行;傳入參數「axis=1」可刪除含有缺失值的列。

fillna()一般情況下會給定一個常數,會把數據集中的所有缺失值替換成該常數,比如fillna(0);也可以實現對不同列中的缺失值進行不同的替換,比如df.fillna({1:0.5,3:1})表示將第一列(從0開始計數)中的缺失值替換成0.5,第三列中的缺失值替換成1;傳入參數「inplace=True」表示對源數據進行修改。這裡面填充的具體的常數值也可以直接換為中位數,平均數之類的,比如df.fillna(data.mean())就表示用平均值填充。

我們有的時候可能需要根據類別(比如我們要根據性別這個分類來分別給身高這個缺失值進行填充)分別進行缺失值的處理,這個時候需要先把不同類別的數據找出來,這裡用的是np.where()函數,該函數在前面有提到,用該函數找出不同類別以後,處理方法就和不分類別處理的方法一致,只不過是根據類別的不同,處理的次數不同。

02|縮放數據:

縮放數據集的目的是為了防止「大數吃小數」的現象發生,大數吃小數就類似於生活中同樣一個環境下聲音大的蓋過聲音小的,最後導致只能聽見聲音大的發聲,導致了最後的結果只考慮了聲音較大的那一部分,而忽略了聲音較小的那一部分,但實際中聲音小的也需要被聽到,為了防止這種聲音大的蓋過聲音小的現象的發聲,我們採取了一定的限制,就是把所有的聲音按照一定的規則限制在某一個區間內(在這個區間內,能夠保證不管聲音大小都會被聽到),你聲音再大也不能超過這個限制的最大值。我們把這個過程稱為數據的縮放(當然了,剛剛舉得那個例子是縮的方面)。

上面那個在生活中的例子,而在機器學習的學習過程中,也會有很多特徵之間出現上面大數吃小數的問題,所以我們在進行學習之前,需要先對數據進行預處理以後再進行學習。

#加載庫

import numpy as np

#生成待縮放的隨機數

np.random.seed(10)

x=[np.random.randint(10,25)*1.0 for i in range(10)]

#定義縮放函數

def min_max(x):

   return([round((xx-min(x))/(1.0*(max(x)-min(x))),2) for xx in x])

#對給定的數據進行縮放

print(x)

print(min_max(x))

np.random.seed()#用於指定隨機數生成時所用算法開始的整數值。

np.random.randint(low,high=None,size=None)#生成在半開半閉區間[low,high)上離散均勻分布的整數值,若high=None,則取值區間變為[0,low)。

round(x,a)#用來返回浮點數的四捨五入值,x表示待處理的值,a表示保留的位數。

np.round()實例

把數據縮放到(0,1)範圍內除了上面提到的自定義一個函數以外,還可以通過preprocessing.MinMaxScaler()進行實現。

關於preprocessing.MinMaxScaler的一些注意事項,該函數對象需要是多維數組&float類型數,要不然會報錯,雖然也能出來結果。

關於數據縮放:


通常情況下是把數據縮放到[0,1]區間內,公式是(x-min(x)/(max(x)-min(x)),我們上面用到的就是這種方式,當然了也可以將值縮放到任意區間內[nr_min,nr_max],公式是(x-min(x))/(max(x)-min(x))*(nr_max-nr_min)+nr_min

03|標準化數據:

所謂的標準化就是將給定向量轉換成平均值為0,標準差為1的形式。公式如下:X=x-mean(value)/std(x)

#加載庫

import numpy as np

from sklearn.preprocessing import scale

#生成隨機數

np.random.seed(10)

x=[np.random.randint(10,25)*1.0 for i in range(10)]

#數據標準化

x_centered=scale(x,with_mean=True,with_std=False)

x_standard=scale(x,with_mean=True,with_std=True)

print("x:{}".format(x))

print("x_centered:{}".format(x_centered))

print("x_standard:{}".format(x_standard))

輸出結果如下:

x:[19.0, 23.0, 14.0, 10.0, 11.0, 21.0, 22.0, 19.0, 23.0, 10.0]

x_centered:[ 1.8  5.8 -3.2 -7.2 -6.2  3.8  4.8  1.8  5.8 -7.2]

x_standard:[ 0.35059022  1.12967961 -0.62327151 -1.4023609  -1.20758855  0.74013492

 0.93490726  0.35059022  1.12967961 -1.4023609 ]

關於preprocessing.scale函數解釋:

sklearn.preprocessing.scale(X, axis=0, with_mean=True,with_std=True,copy=True)

#參數解釋:

#X:數組或者矩陣

#axis:int類型,初始值為0,axis用來計算均值 means 和標準方差 standard deviations. 如果是0,則單獨的標準化每個特徵(列),如果是1,則標準化每個觀測樣本(行)。

#with_mean: boolean類型,默認為True,表示將數據均值規範到0

#with_std: boolean類型,默認為True,表示將數據方差規範到1

縮放和標準化分別是歸一化的兩種不同方式。關於歸一化具體在機器學習中的應用,我們在之後再說。

相關焦點

  • Python數據預處理
    ,首先需要進行初步的數據探索性分析,對數據探索性分析之後要先進行一系列的數據預處理步驟。因為拿到的原始數據存在不完整、不一致、有異常的數據,而這些「錯誤」數據會嚴重影響到數據挖掘建模的執行效率甚至導致挖掘結果出現偏差,因此首先要數據清洗。數據清洗完成之後接著進行或者同時進行數據集成、轉換、歸一化等一系列處理,該過程就是數據預處理。一方面是提高數據的質量,另一方面可以讓數據更好的適應特定的挖掘模型,在實際工作中該部分的內容可能會佔整個工作的70%甚至更多。
  • python數據分析專題 (7):python數據分析模塊
    也就是這些python的擴展包讓python可以做數據分析,主要包括numpy,scipy,pandas,matplotlib,scikit-learn等等諸多強大的模塊,在結合上ipython交互工具 ,以及python強大的爬蟲數據獲取能力,字符串處理能力,讓python成為完整的數據分析工具。
  • 利用 Scikit Learn的Python數據預處理實戰指南
    本文主要關注在Python中進行數據預處理的技術。學習算法的出眾表現與特定的數據類型有密切關係。而對於沒有經過縮放或非標準化的特徵,學習算法則會給出魯莽的預測。像XGBoost這樣的算法明確要求虛擬編碼數據,而決策樹算法在有些情況下好像完全不關心這些!簡而言之,預處理是指在你將數據「餵給」算法之前進行的一系列轉換操作。在Python中,scikit-learn庫在sklearn.preprocessing下有預裝的功能。
  • 入門 | 三行Python代碼,讓數據預處理速度提高2到6倍
    本文可以教你僅使用 3 行代碼,大大加快數據預處理的速度。Python 是機器學習領域內的首選程式語言,它易於使用,也有很多出色的庫來幫助你更快處理數據。但當我們面臨大量數據時,一些問題就會顯現……目前,大數據(Big Data)這個術語通常用於表示包含數十萬數據點的數據集。在這樣的尺度上,工作進程中加入任何額外的計算都需要時刻注意保持效率。
  • 數據預處理之「數據清理」
    鑑於高質量數據可生成更好的模型和預測,數據預處理的重要性與日俱增,並且已經成為數據科學、機器學習、AI 管道中的基本步驟。在本文中,我們將探討數據處理需求,並討論用於完成此流程中每個步驟的不同方法。在數據收集過程中,存在三個影響數據質量的主要因素:準確率:與期望值之間存在偏差的錯誤值。
  • Python數據分析之scikit-learn與數據預處理​
    當然,數據預處理絕對也是耗時最長的一個過程,這一過程不僅要求洞悉整個數據集結構分布,還要探查每一個特徵屬性細節情況,並作出應對處理,使數據以最適合的狀態傳輸給模型。針對預處理操作,sklearn中提供了許多模塊工具,靈活使用工具可以讓數據預處理輕鬆很多。本文簡要介紹數據預處理中的一些主要方法,並結合sklearn中提供的模塊進行實踐。
  • 機器學習模型必不可少的5種數據預處理技術
    如果您曾經參與過數據科學項目,那麼您可能會意識到數據挖掘的第一步和主要步驟是數據預處理。在現實生活問題中,我們得到的原始數據往往非常混亂,機器學習模型無法識別模式並從中提取信息。1.處理null值:null值是數據中任何行或列中缺失的值。
  • 數據科學探索(python 與 R 的比較)
    這一期主要應用python和R 這2種工具對某真實信貸數據進行分析,通過數據的讀取、清洗、探索、模型構建等,比較2種方法在機器學習數據科學上的實現
  • Python數據科學實踐 | 初步搭建數據科學工作環境
    ⽆⼈否認,在⽇新⽉異的現代社會,「⼤數據」時代已經悄然降臨。由於其在多個⾏業和學科領域中的⾼度滲透,並且在不同專業領域的數據研究中表現出⾼度融合的趨勢,⼤數據已經成為包含計算機科學和統計學在內的多個學科領域的新研究⽅向。同時,由於在⼤數據⽅⾯的研究尚且存在諸多誤區,⼈們迫切地需要對「⼤數據」時代的新現象、 理論、⽅法、技術、⼯具和實踐進⾏系統的研究。因⽽,「數據科學」應運⽽⽣。
  • Python數據科學實踐 | 資料庫1
    大家好,基於Python的數據科學實踐課程又到來了,大家盡情學習吧。本期內容主要由智億同學與政委聯合推出。資料庫永遠是數據管理上最值得使用的工具。而把所收集的大量數據放入資料庫之後再處理是數據科學實踐項目中必不可少的一步。
  • 為什麼我們需要數據預處理?
    作者 | 邱雅婷責編| 郭芮數據挖掘的核心是什麼?這個的答案是算法應該沒什麼疑問。那數據挖掘的基石又是什麼呢?那就是今天我們要來說的數據預處理。什麼是數據預處理?數據科學家們一直想為數據預處理賦予一個定義。其實簡單地說,數據預處理就是一種數據挖掘技術,本質就是為了將原始數據轉換為可以理解的格式或者符合我們挖掘的格式。
  • 手把手 | 數據科學速成課:給Python新手的實操指南
    數據科學團隊在持續穩定的發展壯大,這也意味著經常會有新的數據科學家和實習生加入團隊。只有對那些較寬鬆的統計模型我們有時會將Python和R結合使用,其中Python執行大量的數據處理工作和R進行統計建模。我的理念是通過實踐來學習,因此為了幫助新數據科學家使用Python進行數據科學研究,我們創建了Python數據科學(速成)課(Python Data Science (Crash) Course)。
  • 數據科學中的Python與R
    對於這種現象,很多人可能和我們一樣,都對數據科學心存懷疑,到底什麼是數據科學?它是一門新生事物,還是新瓶子裡裝了統計學的舊酒?5)數據挖掘與分析    這類行業主要領域為統計學、計算機科學、人工智慧、可視化、信息經濟學、網絡科學、哲學社會科學、決策科學等,主要工作為對大數據進行價值挖掘,包括對數據統計結果的甄別與分析,對數據分析結果的評估與展示,對用戶數據需求的判斷與反饋。6)數據科學    數據科學是不同團隊之間的協作行為,是數學+計算機科學+領域知識的人才協作。
  • 小白數據分析——Python職位數據分析全鏈路
    會包含一些數據挖掘算法,但我希望這篇文章面向的是算法小白,裡面不會涉及算法原理,會用,能解決業務問題即可。3.0 文本預處理文本預處理的目的跟上篇介紹的數據清洗一樣,都是為了將數據處理成我們需要的,這一步主要包含分詞、去除停用詞兩步。
  • python數據科學-單變量數據分析
    我們把在正式開始機器學習之前對數據的了解過程成為探索性分析 , 簡稱 EDA。02|單變量數據分析:單邊量數據是指數據集中只有一個變量 ,也可以是多列中的某一列(可以理解成是某一個指標)。比如一個班的體測成績表是一個數據集(包含身高、體重、1000 米用時之類的各種指標),那麼該數據集裡面的某一個指標就可以看作是一個單變量數據。
  • AI和數據科學大熱的年代,是時候學習一門程式語言了!
    Exploratory data analysis, visualization and Pre-processing 探索數據分析, 視覺化以及數據預處理 Build Linear Regression to and Evaluation 評估並建立回歸模型 Detect Heteroscedasticity 檢測異方差 Model optimization
  • 用Python構建數據科學Web應用程式
    在本文中,我將向你展示如何使用streamlit python庫快速構建一個簡單的數據驅動web應用程式,只需幾行代碼。作為一名數據科學家或機器學習工程師,能夠部署我們的數據科學項目是很重要的。傳統的使用Django或Flask這樣的框架來部署機器學習模型可能是一項艱巨和/或耗時的任務。
  • 大數據時代,如何培養數據分析思維?|建模|excel|數據分析|python|...
    大數據時代來臨,「數據」熱度飆升,衍生出的行業也受到追捧。據悉,中國大數據行業人才需求2020年將達210萬,未來5年需求量在2000萬人左右。可見,國內數據分析崗錢途與前景並存,想入門該朝陽產業,需要先明白數據分析究竟是什麼?
  • Python數學建模技巧之pandas數據處理
    它集數值計算和科學可視化於一身,同時simulink這個殺手鐧。只可惜它是商業軟體。在開源層面,GNU計劃的Octave一直在做與MATLAB的語法兼容。倘若要尋找一個在建模競賽中能夠像MATLAB那樣很方便求解各類的建模算法的程式語言,Python無疑是不二之選。Python眾多的第三方庫提供了這種可能。
  • 使用Visual Studio 和 python 設置自己的數據科學工作區
    雷鋒網 AI 開發者按,新手在剛剛開始數據科學的學習時會遇到很多問題,而往往最簡單的問題也最容易犯錯。其中,管理 python 環境可能是一件讓人頭疼的事情。,搭建一個好的工作空間將讓你避免很多不必要的麻煩。