旗下產(chǎn)業(yè): A產(chǎn)業(yè)/?A實(shí)習(xí)/?A計(jì)劃
全國(guó)統(tǒng)一咨詢熱線:010-5367 2995
首頁(yè) > 熱門文章 > 大數(shù)據(jù)分析 > 大數(shù)據(jù)分析機(jī)器學(xué)習(xí)的數(shù)據(jù)清理和準(zhǔn)備

大數(shù)據(jù)分析機(jī)器學(xué)習(xí)的數(shù)據(jù)清理和準(zhǔn)備

時(shí)間:2020-06-30來(lái)源:5wd995.cn點(diǎn)擊量:作者:Sissi
時(shí)間:2020-06-30點(diǎn)擊量:作者:Sissi


  數(shù)據(jù)清理和準(zhǔn)備是任何機(jī)器學(xué)習(xí)項(xiàng)目中至關(guān)重要的第一步。盡管我們經(jīng)常認(rèn)為數(shù)據(jù)科學(xué)家花費(fèi)大量時(shí)間來(lái)修改算法和機(jī)器學(xué)習(xí)模型,但現(xiàn)實(shí)情況是大多數(shù)數(shù)據(jù)科學(xué)家花費(fèi)大量時(shí)間來(lái)清理數(shù)據(jù)。
 

  在大數(shù)據(jù)分析機(jī)器學(xué)習(xí)的數(shù)據(jù)清理和準(zhǔn)備中,我們將逐步介紹使用Python進(jìn)行數(shù)據(jù)清理,檢查數(shù)據(jù)集,選擇特征列,以可視方式探索數(shù)據(jù)然后進(jìn)行編碼的過(guò)程機(jī)器學(xué)習(xí)的功能。
 

  要了解有關(guān)數(shù)據(jù)清理的更多信息,請(qǐng)查看我們的交互式數(shù)據(jù)清理課程之一:
 

  1、數(shù)據(jù)清理和分析課程(Python)

  2、高級(jí)數(shù)據(jù)清理課程(Python)

  3、數(shù)據(jù)清理(R)
 

  了解數(shù)據(jù)
 

  在我們開始為機(jī)器學(xué)習(xí)項(xiàng)目清理數(shù)據(jù)之前,至關(guān)重要的是要了解數(shù)據(jù)是什么,以及我們想要實(shí)現(xiàn)什么。沒(méi)有這種了解,我們就沒(méi)有依據(jù)來(lái)決定在清理和準(zhǔn)備數(shù)據(jù)時(shí)要確定哪些數(shù)據(jù)是相關(guān)的。
 

  我們將使用個(gè)人貸款的一些數(shù)據(jù),個(gè)人貸款是一個(gè)個(gè)人貸款市場(chǎng),它將正在尋求貸款的借款人與希望借錢并獲得回報(bào)的投資者進(jìn)行匹配。每個(gè)借款人都填寫一份全面的申請(qǐng)表,提供他們過(guò)去的財(cái)務(wù)記錄,貸款原因等。個(gè)人貸款使用過(guò)去的歷史數(shù)據(jù)(以及他們自己的數(shù)據(jù)科學(xué)過(guò)程!)來(lái)評(píng)估每個(gè)借款人的信用評(píng)分,并為借款人分配一個(gè)利率。

大數(shù)據(jù)分析
 

  批準(zhǔn)的貸款在個(gè)人貸款網(wǎng)站上列出,合格的投資者可以在其中瀏覽最近批準(zhǔn)的貸款,借款人的信用評(píng)分,貸款目的以及應(yīng)用程序中的其他信息。
 

  一旦投資者決定為貸款提供資金,借款人便每月向個(gè)人貸款償還款項(xiàng)。個(gè)人貸款將這些付款重新分配給投資者。這意味著投資者不必等到全額還清就可以開始看到回報(bào)。如果按時(shí)還清了貸款,則投資者將獲得與借款人除要求的金額外還需支付的利率相對(duì)應(yīng)的回報(bào)。
 

  但是,許多貸款沒(méi)有按時(shí)還清,有些借款人拖欠貸款。這就是我們?cè)谇謇韨€(gè)人貸款的一些數(shù)據(jù)進(jìn)行機(jī)器學(xué)習(xí)時(shí)將嘗試解決的問(wèn)題。讓我們想象一下,我們的任務(wù)是建立一個(gè)模型來(lái)預(yù)測(cè)借款人是否可能償還或拖欠其貸款。
 

  步驟1:檢查數(shù)據(jù)集
 

  個(gè)人貸款會(huì)在其網(wǎng)站上定期發(fā)布其所有已批準(zhǔn)和已拒絕貸款申請(qǐng)的數(shù)據(jù)。為了確保我們都使用相同的數(shù)據(jù)集,我們已經(jīng)在data.world上鏡像了將用于本教程的數(shù)據(jù)。
 

  在個(gè)人貸款類的網(wǎng)站上,您可以選擇不同的年份范圍來(lái)下載已批準(zhǔn)和已拒絕貸款的數(shù)據(jù)集(CSV格式)。您還將在個(gè)人貸款類頁(yè)面底部找到一個(gè)數(shù)據(jù)字典(XLS格式),其中包含有關(guān)不同列名的信息。該數(shù)據(jù)字典對(duì)于理解數(shù)據(jù)集中每一列表示什么很有用。數(shù)據(jù)字典包含兩頁(yè):
 

  1)LoanStats工作表:描述批準(zhǔn)的貸款數(shù)據(jù)集

  2)RejectStats工作表:描述拒絕的貸款數(shù)據(jù)集
 

  由于我們對(duì)批準(zhǔn)的貸款數(shù)據(jù)集感興趣,因此我們將使用LoanStats工作表。
 

  批準(zhǔn)的貸款數(shù)據(jù)集包含有關(guān)當(dāng)前貸款,已完成貸款和拖欠貸款的信息。在本教程中,我們將使用2007年至2011年的批準(zhǔn)貸款數(shù)據(jù),但是對(duì)于發(fā)布到個(gè)人貸款類網(wǎng)站上的任何數(shù)據(jù),都將需要類似的清理步驟。


  首先,讓我們導(dǎo)入一些我們將要使用的庫(kù),并設(shè)置一些參數(shù)以使輸出更易于閱讀。就本教程而言,我們將扎實(shí)地掌握使用Python處理數(shù)據(jù)的基礎(chǔ)知識(shí),包括使用pandas,numpy等,因此,如果您需要掌握其中的任何技能,則可能需要瀏覽我們的課程清單。

大數(shù)據(jù)分析
 

  將數(shù)據(jù)加載到熊貓
 

  我們已經(jīng)下載了數(shù)據(jù)集并命名為lending_club_loans.csv,但是現(xiàn)在我們需要將其加載到pandas DataFrame中以進(jìn)行探索。加載完畢后,我們將需要執(zhí)行一些基本的清理任務(wù)來(lái)刪除一些不需要的信息,這些信息會(huì)使我們的數(shù)據(jù)處理速度變慢。
 

  具體來(lái)說(shuō),我們將要:
 

  1)刪除第一行:它包含多余的文本,而不是列標(biāo)題。此文本可防止熊貓庫(kù)正確解析數(shù)據(jù)集。

  2)刪除“ desc”列:其中包含我們不需要的長(zhǎng)文字說(shuō)明。

  3)刪除“ URL”列:它包含指向個(gè)人貸款上每個(gè)鏈接的鏈接,只能使用投資者帳戶進(jìn)行訪問(wèn)。

  4)刪除所有缺失值超過(guò)50%的列:這將使我們能夠更快地工作(并且我們的數(shù)據(jù)集足夠大,如果沒(méi)有它們,它將仍然有意義。
 

  我們還將命名過(guò)濾后的數(shù)據(jù)集loans_2007,并在本節(jié)末尾將其保存為loans_2007.csv與原始數(shù)據(jù)分開的名稱。這是一種很好的做法,可以確保我們擁有原始數(shù)據(jù),以防萬(wàn)一需要返回并檢索要?jiǎng)h除的所有內(nèi)容。
 

  現(xiàn)在,讓我們繼續(xù)執(zhí)行以下步驟:

大數(shù)據(jù)分析
 

  讓我們使用pandas head()方法顯示loan_2007 DataFrame的前三行,以確保我們能夠正確加載數(shù)據(jù)集:

大數(shù)據(jù)分析
大數(shù)據(jù)分析
 

  讓我們還使用pandas .shape屬性來(lái)查看我們現(xiàn)階段要處理的樣本和功能的數(shù)量:

大數(shù)據(jù)分析
 

  步驟2:縮小色譜柱進(jìn)行清潔
 

  現(xiàn)在我們已經(jīng)建立了數(shù)據(jù),我們應(yīng)該花一些時(shí)間來(lái)探索它,并理解每一列代表什么功能。這很重要,因?yàn)閷?duì)功能的了解不足可能會(huì)導(dǎo)致我們?cè)跀?shù)據(jù)分析和建模過(guò)程中出錯(cuò)。
 

  我們將使用個(gè)人貸款類提供的數(shù)據(jù)字典來(lái)幫助我們熟悉列以及每個(gè)列在數(shù)據(jù)集中的表示。為了簡(jiǎn)化該過(guò)程,我們將創(chuàng)建一個(gè)DataFrame來(lái)包含列的名稱,數(shù)據(jù)類型,第一行的值以及數(shù)據(jù)字典中的描述。為了簡(jiǎn)化操作,我們已經(jīng)將數(shù)據(jù)字典從Excel格式預(yù)先轉(zhuǎn)換為CSV。
 

  讓我們加載該字典并看看。

大數(shù)據(jù)分析
 

  現(xiàn)在已經(jīng)加載了數(shù)據(jù)字典,讓我們loans_2007將data_dictionaryDataFrame 的第一行連接起來(lái),為我們提供帶以下幾列的預(yù)覽DataFrame:
 

  1)name—包含的列名loans_2007。

  2)dtypes—包含loans_2007列的數(shù)據(jù)類型。

  3)first value—包含loans_2007第一行的值。

  4)description—解釋其中的每一列所loans_2007代表的含義。

大數(shù)據(jù)分析
 

  當(dāng)我們打印loans_2007較早的形狀時(shí),我們注意到它有56列,因此我們知道此預(yù)覽DataFrame有56行(其中一個(gè)解釋loans_2007)。
 

  嘗試一次瀏覽預(yù)覽的所有行可能很麻煩,因此,我們將其分為三個(gè)部分,每次查看較小的功能選擇。當(dāng)我們探索功能以更好地理解它們的每一個(gè)時(shí),我們將要注意任何專欄文章:
 

  泄漏未來(lái)的信息(在貸款已經(jīng)被資助之后),
 

  a、不會(huì)影響借款人的還款能力(例如個(gè)人貸款隨機(jī)生成的ID值),

  b、格式不佳,

  c、需要更多數(shù)據(jù)或大量預(yù)處理才能變成有用的功能,或者

  d、包含冗余信息。
 

  這些都是我們要小心的事情,因?yàn)閺拈L(zhǎng)遠(yuǎn)來(lái)看,不正確地處理它們會(huì)損害我們的分析。
 

  我們需要特別注意數(shù)據(jù)泄漏,這可能會(huì)導(dǎo)致模型過(guò)擬合。這是因?yàn)樵撃P瓦€將從我們使用時(shí)將無(wú)法使用的功能中進(jìn)行學(xué)習(xí),從而對(duì)未來(lái)的貸款進(jìn)行預(yù)測(cè)。我們需要確保我們的模型僅使用貸款申請(qǐng)時(shí)的數(shù)據(jù)進(jìn)行訓(xùn)練。
 

  第一組列
 

  讓我們顯示的前19行preview并進(jìn)行分析:

大數(shù)據(jù)分析
 

  在分析了列并考慮了我們要構(gòu)建的模型之后,我們可以得出結(jié)論,可以刪除以下功能:
 

  1)id —由個(gè)人貸款類隨機(jī)生成的字段,僅供唯一標(biāo)識(shí)。

  2)member_id —也是個(gè)人貸款類隨機(jī)生成的字段,僅供識(shí)別。

  3)funded_amnt —泄露未來(lái)的信息(在貸款已開始提供資金之后)。

  4)funded_amnt_inv -還會(huì)泄漏未來(lái)的數(shù)據(jù)。

  5)sub_grade-包含該grade列中已經(jīng)存在的冗余信息(更多信息在下面)。

  6)int_rate-也包含在此grade列中。

  7)emp_title -需要其他數(shù)據(jù)和大量處理才能變得有用

  8)issued_d -泄漏未來(lái)的數(shù)據(jù)。
 

  注意:個(gè)人貸款使用借款人的等級(jí)和還款期限(30個(gè)月或幾個(gè)月)來(lái)分配利率(您可以閱讀有關(guān)“ 利率和費(fèi)用”的更多信息)。這會(huì)導(dǎo)致給定等級(jí)內(nèi)利率的變化。
 

  對(duì)于我們的模型可能有用的是集中于借款人的集群而不是個(gè)人。而且,這正是分級(jí)的作用-它根據(jù)借款人的信用評(píng)分和其他行為對(duì)借款人進(jìn)行細(xì)分,這就是為什么我們將保留該grade列并降低利息int_rate和的原因sub_grade。在移到下一組列之前,讓我們從DataFrame中刪除這些列。

大數(shù)據(jù)分析
 

  現(xiàn)在,我們準(zhǔn)備繼續(xù)進(jìn)行下一組列(功能)。
 

  第二組列
 

  讓我們繼續(xù)進(jìn)行下19列:

大數(shù)據(jù)分析
 

  在該組中,注意fico_range_low和fico_range_high列。雖然兩者都在上表中,但在查看最后一組列后,我們將進(jìn)一步討論它們。另請(qǐng)注意,如果您使用的是較新的個(gè)人貸款類數(shù)據(jù),則該數(shù)據(jù)可能不包括FICO得分的數(shù)據(jù)。
 

  現(xiàn)在,回顧第二組列,我們可以通過(guò)刪除以下列來(lái)進(jìn)一步完善數(shù)據(jù)集:
 

  1)zip_code –對(duì)于addr_state列,大多數(shù)情況下是多余的,因?yàn)?位郵政編碼中的前3位僅可見(jiàn)。

  2)out_prncp –泄漏未來(lái)的數(shù)據(jù)。

  3)out_prncp_inv –還會(huì)泄漏未來(lái)的數(shù)據(jù)。

  4)total_pymnt –還會(huì)泄漏未來(lái)的數(shù)據(jù)。

  5)total_pymnt_inv –還會(huì)泄漏未來(lái)的數(shù)據(jù)。
 

  讓我們繼續(xù),從DataFrame中刪除以下5列:

大數(shù)據(jù)分析
 

  第三組列
 

  讓我們分析最后一組功能:

大數(shù)據(jù)分析
 

  在這最后一組列中,我們需要?jiǎng)h除以下所有列,所有這些將來(lái)都會(huì)泄漏數(shù)據(jù):
 

  1)total_rec_prncp

  2)total_rec_int

  3)total_rec_late_fee

  4)recoveries

  5)collection_recovery_fee

  6)last_pymnt_d

  7)last_pymnt_amnt
 

  讓我們刪除最后一組列:

大數(shù)據(jù)分析
 

  大!現(xiàn)在,我們有了一個(gè)數(shù)據(jù)集,它將對(duì)構(gòu)建我們的模型更加有用,因?yàn)樗槐乩速M(fèi)時(shí)間處理無(wú)關(guān)的數(shù)據(jù),也不會(huì)通過(guò)分析來(lái)自未來(lái)的信息來(lái)“欺騙”貸款的結(jié)果。
 

  調(diào)查FICO分?jǐn)?shù)列
 

  這是值得花一些時(shí)間來(lái)討論fico_range_low,fico_range_high,last_fico_range_low,和last_fico_range_high列。
 

  FICO分?jǐn)?shù)是信用分?jǐn)?shù):銀行和信用卡使用的數(shù)字代表一個(gè)人的信用度。盡管在美國(guó)使用的信用評(píng)分類型有幾種,但FICO評(píng)分是最著名和使用最廣泛的。
 

  當(dāng)借款人申請(qǐng)貸款,借貸俱樂(lè)部得到借款人的信用分?jǐn)?shù)從FICO -他們是考慮到借款人得分范圍的下限和上限屬,它們存儲(chǔ)這些值fico_range_low,fico_range_high。之后,對(duì)借方分?jǐn)?shù)的任何更新都記錄為last_fico_range_low和last_fico_range_high。
 

  任何數(shù)據(jù)科學(xué)項(xiàng)目的關(guān)鍵部分是盡一切可能理解數(shù)據(jù)。在研究此特定數(shù)據(jù)集時(shí),我發(fā)現(xiàn)了由斯坦福大學(xué)的一群學(xué)生于2014年發(fā)起的項(xiàng)目。在該項(xiàng)目的報(bào)告中,該小組將last_fico_range滯納金和回收金中的當(dāng)前信用評(píng)分()列為他們錯(cuò)誤地添加到功能中的字段,但指出后來(lái)他們從這些列中了解了所有將來(lái)泄漏的信息。
 

  但是,按照該小組的項(xiàng)目,斯坦福大學(xué)的另一個(gè)小組研究了相同的個(gè)人貸款數(shù)據(jù)集。他們last_fico_range_low在建模中使用了FICO分?jǐn)?shù)列,僅將其刪除。第二組報(bào)告被描述last_fico_range_high為預(yù)測(cè)準(zhǔn)確結(jié)果的更重要特征之一。
 

  有了這些信息,我們必須回答的問(wèn)題是:FICO信用評(píng)分會(huì)泄露未來(lái)的信息嗎?回憶一下,當(dāng)我們使用模型進(jìn)行預(yù)測(cè)時(shí),如果其中包含的數(shù)據(jù)不可用,則認(rèn)為該列泄漏了信息-在這種情況下,當(dāng)我們?cè)谖磥?lái)的貸款申請(qǐng)中使用我們的模型來(lái)預(yù)測(cè)借款人是否違約時(shí)。
 

  這篇博客文章深入研究了個(gè)人貸款類貸款的FICO分?jǐn)?shù),并指出,盡管查看FICO分?jǐn)?shù)的趨勢(shì)可以很好地預(yù)測(cè)貸款是否會(huì)違約,但在貸款獲得貸款后,個(gè)人貸款類會(huì)繼續(xù)更新FICO分?jǐn)?shù)。換句話說(shuō),雖然我們可以使用初始FICO分?jǐn)?shù)(fico_range_low和fico_range_high)(那些可以作為借款人的應(yīng)用程序的一部分提供),但我們不能使用last_fico_range_low和last_fico_range_high,因?yàn)閭€(gè)人貸款類可能會(huì)在借款人申請(qǐng)后更新這些分?jǐn)?shù)。
 

  讓我們看一下我們可以使用的兩列中的值:

大數(shù)據(jù)分析
 

  讓我們擺脫缺失的值,然后繪制直方圖以查看兩列的范圍:

大數(shù)據(jù)分析
 

  現(xiàn)在,讓我們繼續(xù)前進(jìn),創(chuàng)造了平均的列fico_range_low和fico_range_high列,并將它命名fico_average。請(qǐng)注意,這不是每個(gè)借款人的平均FICO得分,而是我們知道借款人所處的最高和最低范圍的平均值。

大數(shù)據(jù)分析
 

  讓我們檢查一下我們剛剛做了什么。

大數(shù)據(jù)分析
 

  好!我們得到了均值計(jì)算,一切都正確?,F(xiàn)在,我們可以繼續(xù)下降fico_range_low,fico_range_high,last_fico_range_low,和last_fico_range_high列。

大數(shù)據(jù)分析
 

  注意,只要熟悉數(shù)據(jù)集中的列,我們就可以將列數(shù)從56減少到33,而不會(huì)丟失任何對(duì)我們的模型有意義的數(shù)據(jù)。我們還通過(guò)丟棄會(huì)泄漏將來(lái)信息的數(shù)據(jù)來(lái)避免問(wèn)題,而這會(huì)弄亂我們模型的結(jié)果。這就是為什么數(shù)據(jù)清理如此重要的原因!
 

  確定目標(biāo)列
 

  現(xiàn)在,我們將確定適當(dāng)?shù)牧幸杂米鹘5哪繕?biāo)列。
 

  我們的主要目標(biāo)是預(yù)測(cè)誰(shuí)將還清貸款,誰(shuí)將違約,我們需要找到一欄反映此情況。我們從預(yù)覽DataFrame中的列描述中學(xué)到了內(nèi)容,這loan_status是主數(shù)據(jù)集中描述貸款狀態(tài)的唯一字段,因此讓我們將此列用作目標(biāo)列。

大數(shù)據(jù)分析
 

  當(dāng)前,此列包含需要轉(zhuǎn)換為數(shù)值才能用于訓(xùn)練模型的文本值。讓我們探索此列中的不同值,并提出轉(zhuǎn)換它們的策略。我們將使用DataFrame方法value_counts()返回該loan_status列中唯一值的頻率。

大數(shù)據(jù)分析
 

  貸款狀態(tài)有九種可能的值!讓我們了解這些獨(dú)特的值,以確定最能描述貸款最終結(jié)果的值,以及我們將要處理的分類問(wèn)題。
 

  我們可以在個(gè)人貸款類網(wǎng)站以及Lend Academy和Orchard論壇上閱讀有關(guān)大多數(shù)不同貸款狀態(tài)的信息。
 

  下面,我們將這些數(shù)據(jù)匯總到下表中,以便我們可以看到唯一值,它們?cè)跀?shù)據(jù)集中的出現(xiàn)頻率,并更清楚地了解每種含義:

大數(shù)據(jù)分析

大數(shù)據(jù)分析
 

  請(qǐng)記住,我們的目標(biāo)是建立一個(gè)機(jī)器學(xué)習(xí)模型,該模型可以從過(guò)去的貸款中學(xué)習(xí),從而試圖預(yù)測(cè)哪些貸款將得到還清,而哪些則不會(huì)。在上表中,僅“已付清”和“已清還”值描述了貸款的最終結(jié)果。其他值描述的是仍在進(jìn)行中的貸款,即使有些貸款延遲付款,我們也無(wú)法將其歸類為“沖銷”。
 

  同樣,雖然“默認(rèn)”狀態(tài)類似于“已注銷”狀態(tài),但在個(gè)人貸款類的眼中,已注銷的貸款基本上沒(méi)有償還的機(jī)會(huì),而“違約”貸款的機(jī)會(huì)很小。因此,當(dāng)我們只能使用樣品loan_status列'Fully Paid'或'Charged Off'。
 

  我們對(duì)指示貸款正在進(jìn)行或正在進(jìn)行的任何狀態(tài)都不感興趣,因?yàn)轭A(yù)測(cè)正在發(fā)生的事情不會(huì)告訴我們?nèi)魏问虑椤?br />  

  我們對(duì)能夠預(yù)測(cè)將屬于哪筆'Fully Paid'或'Charged Off'一筆貸款感興趣,因此我們可以將問(wèn)題視為二進(jìn)制分類。讓我們刪除不包含'Fully Paid'或'Charged Off'作為貸款狀態(tài)的所有貸款,然后將'Fully Paid'值轉(zhuǎn)換1為正案例的'Charged Off'值并將值轉(zhuǎn)換0為負(fù)案例的值。
 

  這意味著在我們擁有的約42,000行中,我們將刪除3,000多行。
 

  轉(zhuǎn)換列中所有值的方法很少,我們將使用DataFrame方法replace()。

大數(shù)據(jù)分析
 

  可視化目標(biāo)列結(jié)果

大數(shù)據(jù)分析
大數(shù)據(jù)分析
 

  這些圖表明,我們的數(shù)據(jù)集中有大量借款人還清了貸款,其中85.62%的借款人還清了借入的金額,而不幸的是有14.38%的違約。我們更感興趣的是識(shí)別這些“違約者”,因?yàn)槌鲇谖覀兡P偷哪康?,我們?cè)噲D找到一種最大化投資回報(bào)的方法。
 

  不向這些違約者提供貸款將有助于增加我們的回報(bào),因此我們將繼續(xù)著眼于清理數(shù)據(jù),以期建立一個(gè)模型來(lái)識(shí)別應(yīng)用程序中可能的違約者。
 

  僅刪除一個(gè)值的列
 

  為了結(jié)束本節(jié),讓我們查找僅包含一個(gè)唯一值的所有列并將其刪除。這些列不會(huì)對(duì)模型有用,因?yàn)樗鼈儾粫?huì)向每個(gè)貸款申請(qǐng)?zhí)砑尤魏涡畔?。此外,刪除這些列將減少我們?cè)谙乱浑A段需要進(jìn)一步探討的列數(shù)。
 

  pandas Series方法nunique()返回唯一值的數(shù)量,不包括任何空值。我們可以在整個(gè)數(shù)據(jù)集上應(yīng)用此方法,只需一個(gè)簡(jiǎn)單的步驟即可刪除這些列。

大數(shù)據(jù)分析
 

  同樣,可能有一些列具有多個(gè)唯一值,但其中一個(gè)值在數(shù)據(jù)集中的頻率很小。讓我們查找并刪除任何唯一值少于四次的列:

大數(shù)據(jù)分析
 

  付款計(jì)劃列(pymnt_plan)具有兩個(gè)唯一值'y'和'n','y'僅出現(xiàn)一次。讓我們刪除此列:

大數(shù)據(jù)分析
 

  最后,讓我們使用熊貓將我們剛清洗的DataFrame保存為CSV文件:

大數(shù)據(jù)分析
 

  現(xiàn)在,我們有了更好的數(shù)據(jù)集。但是我們還沒(méi)有完成數(shù)據(jù)清理工作,所以讓我們繼續(xù)吧!
 

  步驟3:為機(jī)器學(xué)習(xí)準(zhǔn)備功能
 

  在本節(jié)中,我們將準(zhǔn)備filtered_loans_2007.csv用于機(jī)器學(xué)習(xí)的數(shù)據(jù)。我們將專注于處理缺失值,將分類列轉(zhuǎn)換為數(shù)字列并刪除任何其他無(wú)關(guān)的列。
 

  在將數(shù)據(jù)輸入機(jī)器學(xué)習(xí)算法之前,我們需要處理缺失值和分類特征,因?yàn)榇蠖鄶?shù)機(jī)器學(xué)習(xí)模型所基于的數(shù)學(xué)假定數(shù)據(jù)是數(shù)值的并且不包含缺失值。為了加強(qiáng)此要求,如果在使用線性回歸和邏輯回歸等模型時(shí)嘗試使用包含缺失值或非數(shù)字值的數(shù)據(jù)訓(xùn)練模型,則scikit-learn將返回錯(cuò)誤。
 

  以下是我們?cè)诖穗A段將要做的事情的概述:
 

  a、處理缺失值

  b、調(diào)查分類列
 

    1)將分類列轉(zhuǎn)換為數(shù)值特征
 

      i)將序數(shù)值映射為整數(shù)

      ii)將標(biāo)稱值編碼為虛擬變量
 

  不過(guò)首先,讓我們從上一節(jié)的最終輸出中加載數(shù)據(jù):

大數(shù)據(jù)分析
大數(shù)據(jù)分析

  處理缺失值
 

  讓我們計(jì)算缺失值的數(shù)量并確定如何處理它們。我們可以像這樣在整個(gè)DataFrame中返回缺失值的數(shù)量:
 

  a)首先,使用Pandas DataFrame方法isnull()返回包含布爾值的DataFrame:

  1)True 如果原始值為null

  2)False 如果原始值不為null

  b)然后,使用Pandas DataFrame方法sum()計(jì)算每列中空值的數(shù)量。

大數(shù)據(jù)分析
 

  請(qǐng)注意,盡管大多數(shù)列都有0個(gè)缺失值,title有9個(gè)缺失值,revol_util有48個(gè),并pub_rec_bankruptcies包含675行有缺失值。
 

  讓我們完全刪除列中該列中超過(guò)1%(392)的行包含空值的列。此外,我們將刪除其余包含空值的行。這意味著我們將丟失一些數(shù)據(jù),但作為回報(bào),保留一些額外的功能以用于預(yù)測(cè)(因?yàn)槲覀儾槐貏h除那些列)。
 

  我們將保留title和revol_util列,只是刪除包含缺失值的行,但pub_rec_bankruptcies由于該行中有1%以上的行具有缺失值,因此將其完全刪除。
 

  具體來(lái)說(shuō),這是我們要做的事情:
 

  a)使用滴法去除pub_rec_bankruptcies從列filtered_loans。

  b)使用dropna方法,從刪除所有行filtered_loans包含任何遺漏值。
 

  這就是代碼中的樣子。

大數(shù)據(jù)分析
 

  請(qǐng)注意,有多種方法可以處理缺失值,這是用于機(jī)器學(xué)習(xí)的數(shù)據(jù)清理中最重要的步驟之一。我們針對(duì)Python的數(shù)據(jù)清理高級(jí)課程對(duì)清理數(shù)據(jù)時(shí)遺漏的值進(jìn)行了更深入的探討,這將是深入學(xué)習(xí)該主題的重要資源。
 

  不過(guò),出于此處的目的,我們已經(jīng)完成了這一步,因此讓我們繼續(xù)使用分類列。
 

  調(diào)查分類列
 

  我們的目標(biāo)是最終獲得一個(gè)可供機(jī)器學(xué)習(xí)使用的數(shù)據(jù)集,這意味著它不包含任何缺失值,并且列中的所有值均為數(shù)字(浮點(diǎn)或整型數(shù)據(jù)類型)。
 

  我們已經(jīng)處理了缺少的值,所以現(xiàn)在讓我們找出對(duì)象數(shù)據(jù)類型的列數(shù),并弄清楚如何使這些值成為數(shù)字。

大數(shù)據(jù)分析
 

  我們有11個(gè)對(duì)象列,其中包含需要轉(zhuǎn)換為數(shù)字特征的文本。讓我們使用DataFrame方法select_dtype只選擇對(duì)象列,然后顯示一個(gè)示例行,以更好地了解每一列中的值如何格式化。

大數(shù)據(jù)分析
 

  請(qǐng)注意,該revol_util列包含數(shù)值,但被格式化為對(duì)象。我們從preview前面的DataFrame 列描述中學(xué)到的revol_util是“循環(huán)使用率或借款人相對(duì)于所有可用信貸所使用的信貸量”(在此處了解更多)。我們需要將其格式化revol_util為數(shù)字值。這是我們可以做的:
 

  a、使用str.rstrip()字符串方法去除右尾的百分號(hào)(%)。

  b、在產(chǎn)生的Series對(duì)象上,使用astype()方法轉(zhuǎn)換為type float。

  c、將新的系列浮點(diǎn)值重新分配給中的revol_util列filtered_loans。

大數(shù)據(jù)分析
 

  繼續(xù),這些列似乎代表分類值:
 

  1)home_ownership —房屋所有權(quán)狀態(tài),根據(jù)數(shù)據(jù)字典,只能是4個(gè)分類值中的1個(gè)。

  2)verification_status —表示收入是否已由個(gè)人貸款類驗(yàn)證。

  3)emp_length -借款人在申請(qǐng)時(shí)受雇的年限。

  4)term -貸款的還款次數(shù),為36或60。

  5)addr_state -借款人的居住地。

  6)grade — LC根據(jù)信用評(píng)分分配貸款等級(jí)。

  7)purpose —借款人為貸款請(qǐng)求提供的類別。

  8)title -借款人提供了借款名稱。
 

  可以肯定的是,讓我們通過(guò)檢查每個(gè)值中的唯一值來(lái)進(jìn)行確認(rèn)。
 

  此外,基于第一行的對(duì)值purpose和title,看來(lái)這兩列反映了同樣的信息。我們將分別探索其唯一值計(jì)數(shù),以確認(rèn)是否為真。

大數(shù)據(jù)分析
大數(shù)據(jù)分析
大數(shù)據(jù)分析
大數(shù)據(jù)分析
 

  最后,請(qǐng)注意第一行的值earliest_cr_line和last_credit_pull_d列的值都包含日期值,這些日期值需要大量的功能設(shè)計(jì),以使其可能有用:
 

  1)earliest_cr_line —借款人最早報(bào)告的信貸額度開放的月份。

  2)last_credit_pull_d —最近一個(gè)月個(gè)人貸款類提取了此筆貸款的信貸。
 

  對(duì)于某些分析,進(jìn)行此功能工程可能是值得的,但是出于本教程的目的,我們將僅從DataFrame中刪除這些日期列。
 

  首先,讓我們探索看起來(lái)好像包含分類值的六列的唯一值計(jì)數(shù):
 

  這些列大多數(shù)包含離散的分類值,我們可以將其編碼為虛擬變量并保留。addr_state但是,該列包含太多唯一值,因此最好刪除它。
 

  接下來(lái),讓我們看看purpose和title列的唯一值計(jì)數(shù),以了解我們要保留哪些列。

大數(shù)據(jù)分析
大數(shù)據(jù)分析
 

  似乎purpose和title列確實(shí)包含重疊的信息,但是該purpose列包含的離散值較少并且更整潔,因此我們將其保留并丟棄title。
 

  讓我們刪除到目前為止我們決定不保留的列:

大數(shù)據(jù)分析
 

  將分類列轉(zhuǎn)換為數(shù)值特征
 

  首先,讓我們了解數(shù)據(jù)集中的兩種分類特征,以及如何將它們轉(zhuǎn)換為數(shù)字特征:
 

  有序值:這些分類值是自然順序的。我們可以按升序或降序?qū)λ鼈冞M(jìn)行排序或排序。例如,我們較早地了解到個(gè)人貸款類將貸款申請(qǐng)人的等級(jí)從A 分級(jí)為G,并為每個(gè)申請(qǐng)人分配相應(yīng)的利率-A等級(jí)風(fēng)險(xiǎn)最低,B等級(jí)風(fēng)險(xiǎn)高于A,依此類推:
 

  A
 

  標(biāo)稱值:這些是常規(guī)分類值。您不能訂購(gòu)標(biāo)稱值。例如,雖然我們可以emp_length根據(jù)在勞動(dòng)力中花費(fèi)的年限在“就業(yè)時(shí)長(zhǎng)”列()中訂購(gòu)貸款申請(qǐng)人:
 

  1年<2年<3年…
 

  我們無(wú)法通過(guò)專欄來(lái)做到這一點(diǎn)purpose。說(shuō):
 

  汽車<婚禮<教育<移動(dòng)<房子
 

  這些是我們現(xiàn)在在數(shù)據(jù)集中具有的列:
 

  序數(shù)值
 

  1)grade

  2)emp_length
 

  標(biāo)稱值 _home_ownership
 

  1)verification_status

  2)purpose

  3)term
 

  有兩種不同的方法來(lái)處理這兩種類型。為了序值映射到整數(shù),我們可以使用數(shù)據(jù)框大熊貓方法replace()來(lái)映射兩者grade并emp_length以適當(dāng)?shù)臄?shù)值:

大數(shù)據(jù)分析
 

  完善!讓我們繼續(xù)看名義值。將名義特征轉(zhuǎn)換為數(shù)字特征需要將其編碼為偽變量。該過(guò)程將是:
 

  1)使用pandas的get_dummies()方法返回一個(gè)新的DataFrame,其中包含每個(gè)虛擬變量的新列。

  2)使用該concat()方法將這些虛擬列添加回原始DataFrame。

  3)使用drop方法完全刪除原始列。
 

  讓我們繼續(xù)對(duì)數(shù)據(jù)集中的標(biāo)稱列進(jìn)行編碼:

大數(shù)據(jù)分析
大數(shù)據(jù)分析
大數(shù)據(jù)分析
 

  總結(jié)一下,讓我們檢查一下本節(jié)的最終輸出,以確保所有要素的長(zhǎng)度相同,不包含空值且為數(shù)字。我們將使用pandas的info方法來(lái)檢查filtered_loansDataFrame:

大數(shù)據(jù)分析

 

  一切看起來(lái)都不錯(cuò)!恭喜,我們剛剛清理了大數(shù)據(jù)集進(jìn)行機(jī)器學(xué)習(xí),并在此過(guò)程中為我們的庫(kù)添加了一些有價(jià)值的數(shù)據(jù)清理技能。
 

  但是,我們?nèi)匀恍枰瓿梢豁?xiàng)重要的最終任務(wù)!
 

  保存為CSV
 

  最好將工作流的每個(gè)部分或階段的最終輸出存儲(chǔ)在單獨(dú)的csv文件中。這種做法的好處之一是,它可以幫助我們更改數(shù)據(jù)處理流程,而不必重新計(jì)算所有內(nèi)容。
 

  和以前一樣,我們可以使用方便的pandas to_csv()函數(shù)將DataFrame存儲(chǔ)為CSV 。
 

大數(shù)據(jù)分析

  下一步
 

  在本文中,我們介紹了處理大型數(shù)據(jù)集,清理數(shù)據(jù)并為機(jī)器學(xué)習(xí)項(xiàng)目準(zhǔn)備數(shù)據(jù)所需的基本步驟。但是,還有很多東西要學(xué)習(xí),您可以從這里選擇許多不同的方向。
 

  如果您對(duì)數(shù)據(jù)清理技能感到滿意,并且想更多地使用該數(shù)據(jù)集,請(qǐng)查看我們的交互式機(jī)器學(xué)習(xí)演練課程,該課程涵蓋了使用個(gè)人貸款數(shù)據(jù)的后續(xù)步驟。
 

  如果您想繼續(xù)研究數(shù)據(jù)清理技能,請(qǐng)查看我們的一個(gè)(或多個(gè))交互式數(shù)據(jù)清理課程,以更深入地研究這項(xiàng)關(guān)鍵的數(shù)據(jù)科學(xué)技能:
 

  1)數(shù)據(jù)清理和分析課程(Python)

  2)高級(jí)數(shù)據(jù)清理課程(Python)

  3)數(shù)據(jù)清理(R)

 

預(yù)約申請(qǐng)免費(fèi)試聽課

填寫下面表單即可預(yù)約申請(qǐng)免費(fèi)試聽!怕錢不夠?可先就業(yè)掙錢后再付學(xué)費(fèi)! 怕學(xué)不會(huì)?助教全程陪讀,隨時(shí)解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可推薦就業(yè)!

?2007-2021/北京漫動(dòng)者教育科技有限公司版權(quán)所有
備案號(hào):京ICP備12034770號(hào)

?2007-2022/ 5wd995.cn 北京漫動(dòng)者數(shù)字科技有限公司 備案號(hào): 京ICP備12034770號(hào) 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc

京公網(wǎng)安備 11010802035704號(hào)

網(wǎng)站地圖