在Python中加載機器學(xué)習數(shù)據(jù)教程
剛開始進行數(shù)據(jù)加載學(xué)習時,最好使用標準文件格式(如逗號分隔值 (.csv)),最好堅持使用小型內(nèi)存數(shù)據(jù)集。
本教程主要介紹的內(nèi)容是如何從頭開始在Python中加載數(shù)據(jù),具體內(nèi)容有以下3方面:
如何加載 CSV 文件。
如何將字符串從文件轉(zhuǎn)換為浮點數(shù)。
如何將類值從文件轉(zhuǎn)換為整數(shù)。
基礎(chǔ)準備
小型數(shù)據(jù)集的標準文件格式是逗號分隔值或CSV。
在最簡單的形式中,CSV 文件由數(shù)據(jù)行組成。每行使用逗號 (“,”) 分為列。
您可以在RFC 4180:逗號分隔值 (CSV)文件的通用格式和MIME類型中了解有關(guān)CSV文件格式的更多信息。
傳送門:https://datatracker.ietf.org/doc/html/rfc4180
在本教程中,我們要練習CSV格式加載兩個不同的標準機器學(xué)習數(shù)據(jù)集。
數(shù)據(jù)集準備
皮馬印第安人糖尿病數(shù)據(jù)集
第一個是皮馬印第安人糖尿病數(shù)據(jù)集,該數(shù)據(jù)集有9 列768行。
文件中的所有值都是數(shù)字,特別是浮點值。我們需要首先學(xué)習如何加載文件,然后學(xué)習如何將加載的字符串轉(zhuǎn)換為數(shù)值。
數(shù)據(jù)集文件:
https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.csv
數(shù)據(jù)集詳細信息:
https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.names
鳶尾花物種數(shù)據(jù)集
我們使用的第二個數(shù)據(jù)集是鳶尾花數(shù)據(jù)集。
它包含150行和4列。前3列是數(shù)字。不同之處在于類值(最后一列)是一個字符串,表示花的種類。我們將學(xué)習如何將數(shù)字列從字符串轉(zhuǎn)換為數(shù)字,以及如何將花種字符串轉(zhuǎn)換為我們可以一致使用的整數(shù)。
數(shù)據(jù)集文件:
https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv
數(shù)據(jù)集詳細信息:
https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.names
代碼步驟
準備好數(shù)據(jù)集之后,教程正式開始。加載自己的數(shù)據(jù)所需的基礎(chǔ)步驟:
加載文件。
加載文件并將字符串轉(zhuǎn)換為浮點數(shù)。
加載文件并將字符串轉(zhuǎn)換為整數(shù)。
1.加載CSV文件
第一步是加載 CSV 文件。
我們將使用作為標準庫一部分的csv模塊。
csv模塊中的reader()函數(shù)將文件作為參數(shù)。
我們將創(chuàng)建一個名為load_csv()的函數(shù)來包裝此行為,該行為將采用文件名并返回我們的數(shù)據(jù)集。我們將加載的數(shù)據(jù)集表示為列表列表。第一個列表是觀察值或行的列表,第二個列表是給定行的列值列表。
以下是加載CSV文件的完整功能的代碼:
我們可以通過加載Pima Indians數(shù)據(jù)集來測試這個功能。下載數(shù)據(jù)集并將其放置在名為pima-indians-diabetes.csv的當前工作目錄中。打開文件并刪除底部的所有空行。
查看原始數(shù)據(jù)文件的前5行,我們可以看到以下內(nèi)容:
數(shù)據(jù)是數(shù)字并用逗號分隔,我們可以期望整個文件滿足這個期望。
讓我們使用新函數(shù)并加載數(shù)據(jù)集。加載后,我們可以報告一些簡單的詳細信息,例如加載的行數(shù)和列數(shù)。
將所有這些放在一起,我們得到以下內(nèi)容:
運行這個例子我們看到:
這個函數(shù)的一個限制是它會從數(shù)據(jù)文件中加載空行并將它們添加到我們的行列表中。我們可以通過一次向我們的數(shù)據(jù)集添加一行數(shù)據(jù)并跳過空行來克服這個問題。
下面是使用這個新改進版本的load_csv()函數(shù)的更新示例。
運行這個例子我們看到:
2. 將字符串轉(zhuǎn)換為浮點數(shù)
機器學(xué)習算法數(shù)據(jù)中首選浮點數(shù)。
我們加載CSV文件的代碼將數(shù)據(jù)集作為列表列表返回,但每個值都是一個字符串。如果我們從數(shù)據(jù)集中打印出一條記錄,我們可以看到這一點:
這會產(chǎn)生如下輸出:
我們可以編寫一個小函數(shù)來將加載的數(shù)據(jù)集的特定列轉(zhuǎn)換為浮點值。
下面是這個名為str_column_to_float() 的函數(shù)。它將數(shù)據(jù)集中的給定列轉(zhuǎn)換為浮點值,在進行轉(zhuǎn)換之前小心地從值中去除任何空格。
我們可以通過結(jié)合上面的加載 CSV 函數(shù)來測試這個函數(shù),并將 Pima Indians 數(shù)據(jù)集中的所有數(shù)字數(shù)據(jù)轉(zhuǎn)換為浮點值。
完整示例如下。
運行這個例子,我們看到數(shù)據(jù)集的第一行在轉(zhuǎn)換之前和之后都打印出來。我們可以看到每列中的值都已從字符串轉(zhuǎn)換為數(shù)字。
3. 將字符串轉(zhuǎn)換為整數(shù)
鳶尾花數(shù)據(jù)集類似于 Pima Indians 數(shù)據(jù)集,其中列包含數(shù)字數(shù)據(jù)。
區(qū)別在于最后一列,傳統(tǒng)上用于保存給定行要預(yù)測的結(jié)果或值。鳶尾花數(shù)據(jù)中的最后一列是作為字符串的鳶尾花種類。
下載數(shù)據(jù)集并將其放置在當前工作目錄中,文件名為iris.csv。打開文件并刪除底部的所有空行。
例如,下面是原始數(shù)據(jù)集的前 5 行。
一些機器學(xué)習算法更喜歡所有值都是數(shù)字,包括結(jié)果或預(yù)測值。
我們可以通過創(chuàng)建地圖將鳶尾花數(shù)據(jù)集中的類值轉(zhuǎn)換為整數(shù)。
首先,我們找到所有唯一的類值,它們恰好是:Iris-setosa、Iris-versicolor 和 Iris-virginica。
接下來,我們?yōu)槊總€分配一個整數(shù)值,例如:0、1 和 2。
最后,我們用相應(yīng)的整數(shù)值替換所有出現(xiàn)的類字符串值。
下面是一個名為str_column_to_int()的函數(shù)。與之前介紹的str_column_to_float() 一樣,它對數(shù)據(jù)集中的單個列進行操作。
除了前兩個用于加載CSV文件和將列轉(zhuǎn)換為浮點值的函數(shù)之外,我們還可以測試這個新函數(shù)。它還返回類值到整數(shù)值的字典映射,以防下游用戶想要再次將預(yù)測轉(zhuǎn)換回字符串值。
下面的示例加載 iris 數(shù)據(jù)集,然后將前3列轉(zhuǎn)換為浮點數(shù),將最后一列轉(zhuǎn)換為整數(shù)值。
運行這個例子會產(chǎn)生下面的輸出。
我們可以看到數(shù)據(jù)類型轉(zhuǎn)換前后數(shù)據(jù)集的第一行。我們還可以看到類值到整數(shù)的字典映射。
考慮到每個問題可能需要進行各種數(shù)據(jù)清理和轉(zhuǎn)換,數(shù)據(jù)加載就是一項艱巨的任務(wù)。
總結(jié)
我們可以進行許多擴展,以使這些示例對新的和不同的數(shù)據(jù)文件更加好用??梢钥紤]自己研究和實施一下下面的想法:
檢測并刪除文件頂部或底部的空行。
檢測和處理列中的缺失值。
檢測和處理與文件其余部分的預(yù)期不匹配的行。
支持其他分隔符,例如“|”(pipe)或空白。
支持更高效的數(shù)據(jù)結(jié)構(gòu),如數(shù)組。

在Python中加載機器學(xué)習數(shù)據(jù)教程的評論 (共 條)
