機器學習 - 資料載入



假設您想啟動一個機器學習專案,那麼首先也是最重要的事情是什麼?對於任何機器學習專案,都需要載入資料。

在機器學習中,資料載入是指從外部來源匯入或讀取資料,並將其轉換為機器學習演算法可以使用的格式的過程。然後對資料進行預處理,以去除任何不一致之處、缺失值或異常值。資料預處理完成後,將其分成訓練集和測試集,然後用於模型訓練和評估。

資料可以來自各種來源,例如CSV檔案、資料庫、Web API、雲端儲存等。機器學習專案最常用的檔案格式是CSV(逗號分隔值)。

載入CSV資料時的注意事項

CSV是一種純文字格式,用於儲存表格資料,其中每一行代表一條記錄,每一列代表一個欄位或屬性。它被廣泛使用,因為它簡單、輕量級,並且可以很容易地被Python、R和Java等程式語言讀取和處理。

在Python中,我們可以透過不同的方式將CSV資料載入到機器學習專案中,但在載入CSV資料之前,我們必須注意一些事項。

在本章中,讓我們瞭解CSV檔案的主要組成部分,它們如何影響資料的載入和分析,以及在將CSV資料載入到機器學習專案中之前,我們應該注意的一些事項。

檔案頭

這是CSV檔案的首行,通常包含表中各列的名稱。將CSV資料載入到機器學習專案時,檔案頭(也稱為列標題或變數名)在資料分析和模型訓練中可以發揮重要作用。以下是一些關於檔案頭的注意事項:

  • 一致性 - 檔案頭在整個CSV檔案中應保持一致。這意味著每一行的列數及其名稱都應相同。不一致會導致解析和分析問題。

  • 有意義的名稱 - 列名應具有意義且描述性。這有助於理解資料並構建更準確的模型。避免使用“column1”、“column2”等通用名稱。

  • 大小寫敏感性 - 根據用於載入CSV檔案的工具或庫的不同,列名可能區分大小寫。務必確保檔案頭的字母大小寫與所用工具或庫的預期大小寫敏感性匹配。

  • 特殊字元 - 列名不應包含任何特殊字元,例如空格、逗號或引號。這些字元會導致解析和分析問題。應改用下劃線或駝峰式命名法來分隔單詞。

  • 缺失檔案頭 - 如果CSV檔案沒有檔案頭行,則必須手動指定列名或提供包含列名的單獨檔案或文件。

  • 編碼 - 檔案頭的編碼會影響載入CSV檔案時對它的解釋。務必確保檔案頭的編碼與用於讀取檔案的工具或庫相容。

註釋

這些是可選的行,以指定的字元(例如“#”或“//”)開頭,大多數讀取CSV檔案的程式都會忽略這些行。它們可用於提供有關檔案資料的附加資訊或上下文。

CSV檔案中的註釋通常不用於表示機器學習專案中將使用的檔案資料。但是,如果CSV檔案中存在註釋,則必須考慮它們如何影響資料的載入和分析。以下是一些注意事項:

  • 註釋標記 - 在CSV檔案中,可以使用特定標記(例如“#”或“//”)來指示註釋。必須知道使用了什麼標記,以便載入過程能夠正確忽略註釋。

  • 位置 - 註釋應放在與實際資料分開的行中。如果註釋與實際資料位於同一行,則可能會導致解析和分析問題。

  • 一致性 - 如果在CSV檔案中使用註釋,則必須確保在整個檔案中始終如一地使用註釋標記。不一致會導致解析和分析問題。

  • 處理註釋 - 根據用於載入CSV檔案的工具或庫的不同,註釋可能會預設被忽略,或者可能需要設定特定引數。必須瞭解所用工具或庫如何處理註釋。

  • 對分析的影響 - 如果註釋包含有關資料的重要資訊,則可能需要將它們與資料本身分開處理。這可能會增加載入和分析過程的複雜性。

分隔符

這是用於分隔每一行中欄位的字元。雖然名稱暗示使用逗號作為分隔符,但根據檔案,也可以使用製表符、分號或豎線等其他字元。

CSV檔案中使用的分隔符會顯著影響機器學習模型的準確性和效能,因此在將資料載入到機器學習專案中時,必須考慮以下事項:

  • 分隔符的選擇 - CSV檔案中使用的分隔符應根據所使用的資料仔細選擇。例如,如果資料在值中包含逗號(例如“New York, NY”),則使用逗號作為分隔符可能會導致問題。

    在這種情況下,製表符或分號等其他分隔符可能更合適。

  • 一致性 - CSV檔案中使用的分隔符應在整個檔案中保持一致。混合使用不同的分隔符或不一致地使用空格會導致錯誤,並使準確解析資料變得困難。

  • 編碼 − 分隔符還會受到 CSV 檔案編碼的影響。例如,如果 CSV 檔案使用非 ASCII 分隔符並以 UTF-8 編碼,則某些機器學習庫或工具可能無法正確讀取它。務必確保編碼和分隔符與所使用的機器學習工具相容。

  • 其他考慮因素 − 在某些情況下,可能需要根據所使用的機器學習工具自定義分隔符。例如,某些庫可能需要特定分隔符,或者可能不支援某些分隔符。務必檢查所用機器學習工具的文件,並根據需要自定義分隔符。

引號

這些是可選字元,可用於括起包含分隔符字元或換行符的欄位。例如,如果某個欄位包含逗號,則將其用引號括起來可確保將逗號視為欄位的一部分,而不是分隔符。將 CSV 資料載入到 ML 專案中時,需要考慮以下幾個關於引號用法的因素:

  • 引號字元 − CSV 檔案中使用的引號字元應在整個檔案中保持一致。最常用的引號字元是雙引號 ("),但有些檔案可能使用單引號或其他字元。務必確保使用的引號字元與用於讀取 CSV 檔案的工具或庫一致。

  • 帶引號的值 − 在某些情況下,CSV 檔案中的值可能用引號括起來,以將其與其他值區分開來。例如,如果某個欄位包含逗號,則可能將其用引號括起來,以防止將其解釋為新欄位。將資料載入到 ML 專案中時,務必確保正確處理帶引號的值。

  • 轉義引號 − 如果某個欄位包含用於括起值的引號字元,則必須對其進行轉義。這通常透過重複引號字元來完成。例如,如果引號字元是雙引號 ("),並且某個欄位包含值 "John "the Hammer" Smith",則應將其用引號括起來,並將內部引號轉義,如下所示:"John ""the Hammer"" Smith"。

  • 引號的使用 − CSV 檔案中引號的使用可能因用於生成檔案的工具或庫而異。某些工具可能會在每個欄位周圍使用引號,而其他工具可能僅在包含特殊字元的欄位周圍使用引號。務必確保引號的使用與用於讀取檔案的工具或庫一致。

  • 編碼 − 引號的使用也可能受到 CSV 檔案編碼的影響。如果檔案以非標準方式編碼,則在將資料載入到 ML 專案中時可能會導致問題。務必確保 CSV 檔案的編碼與用於讀取檔案的工具或庫相容。

載入 CSV 資料檔案的各種方法

在使用 ML 專案時,最關鍵的任務是將資料正確載入到其中。如前所述,ML 專案最常用的資料格式是 CSV,它具有各種形式,解析難度也各不相同。

在本節中,我們將討論在 Python 中將 CSV 資料檔案載入到機器學習專案中的一些常用方法:

使用 CSV 模組

這是 Python 中的一個內建模組,它提供讀取和寫入 CSV 檔案的功能。您可以使用它將 CSV 檔案讀取到列表或字典物件中。以下是 Python 中的實現示例:

import csv
with open('mydata.csv', 'r') as file:
   reader = csv.reader(file)
   for row in reader:
      print(row)

此程式碼讀取名為 mydata.csv 的 CSV 檔案,並列印檔案中的每一行。

使用 Pandas 庫

這是 Python 中一個流行的資料操作庫,它提供了一個 read_csv() 函式,用於將 CSV 檔案讀取到 pandas DataFrame 物件中。這是一種非常方便的載入資料和執行各種資料操作任務的方法。以下是 Python 中的實現示例:

import pandas as pd

data = pd.read_csv('mydata.csv')

此程式碼讀取名為 mydata.csv 的 CSV 檔案,並將其載入到名為 data 的 pandas DataFrame 物件中。

使用 Numpy 庫

這是 Python 中的一個數值計算庫,它提供了一個 genfromtxt() 函式,用於將 CSV 檔案載入到 numpy 陣列中。以下是 Python 中的實現示例:

import numpy as np

data = np.genfromtxt('mydata.csv', delimiter=',')

此程式碼讀取名為 mydata.csv 的 CSV 檔案,並將其載入到名為“data”的 numpy 陣列中。

使用 Scipy 庫

這是 Python 中的一個科學計算庫,它提供了一個 loadtxt() 函式,用於將文字檔案(包括 CSV 檔案)載入到 numpy 陣列中。以下是 Python 中的實現示例:

import numpy as np

from scipy import loadtxt
data = loadtxt('mydata.csv', delimiter=',')

此程式碼讀取名為 mydata.csv 的 CSV 檔案,並將其載入到名為“data”的 numpy 陣列中。

使用 Sklearn 庫

這是 Python 中一個流行的機器學習庫,它提供了一個 load_iris() 函式,用於載入 iris 資料集,這是一個常用的分類任務資料集。以下是 Python 中的實現示例:

from sklearn.datasets import load_iris

data = load_iris().data

此程式碼載入包含在 sklearn 庫中的 iris 資料集,並將其載入到名為 data 的 numpy 陣列中。

廣告