Python加載文件內(nèi)容的兩種實(shí)現(xiàn)方式
說(shuō)到機(jī)器學(xué)習(xí),大家首先想到的可能就是Python和算法了,其實(shí)光有Python和算法是不夠的,數(shù)據(jù)才是進(jìn)行機(jī)器學(xué)習(xí)的前提。
大多數(shù)的數(shù)據(jù)都會(huì)存儲(chǔ)在文件中,要想通過(guò)Python調(diào)用算法對(duì)數(shù)據(jù)進(jìn)行相關(guān)學(xué)習(xí),首先就要將數(shù)據(jù)讀入程序中,本文介紹兩種加載數(shù)據(jù)的方式,在之后的算法介紹中,將頻繁使用這兩種方式將數(shù)據(jù)加載到程序。
下面我們將以Logistic Regression模型加載數(shù)據(jù)為例,分別對(duì)兩種不同的加載數(shù)據(jù)的方式進(jìn)行介紹。
一、利用open()函數(shù)進(jìn)行加載
def load_file(file_name): ''' 利用open()函數(shù)加載文件 :param file_name: 文件名 :return: 特征矩陣、標(biāo)簽矩陣 ''' f = open(file_name) # 打開(kāi)訓(xùn)練數(shù)據(jù)集所在的文檔 feature = [] # 存放特征的列表 label = [] #存放標(biāo)簽的列表 for row in f.readlines(): f_tmp = [] # 存放特征的中間列表 l_tmp = [] # 存放標(biāo)簽的中間列表 number = row.strip().split("\t") # 按照\(chéng)t分割每行的元素,得到每行特征和標(biāo)簽 f_tmp.append(1) # 設(shè)置偏置項(xiàng) for i in range(len(number) - 1): f_tmp.append(float(number[i])) l_tmp.append(float(number[-1])) feature.append(f_tmp) label.append(l_tmp) f.close() # 關(guān)閉文件,很重要的操作 return np.mat(feature), np.mat(label)
二、利用Pandas庫(kù)中的read_csv()方法進(jìn)行加載
def load_file_pd(path, file_name): ''' 利用pandas庫(kù)加載文件 :param path: 文件路徑 :param file_name: 文件名稱 :return: 特征矩陣、標(biāo)簽矩陣 ''' feature = pd.read_csv(path + file_name, delimiter="\t", header=None, usecols=[0, 1]) feature.columns = ["a", "b"] feature = feature.reindex(columns=list('cab'), fill_value=1) label = pd.read_csv(path + file_name, delimiter="\t", header=None, usecols=[2]) return feature.values, label.values
三、示例
我們可以使用上述的兩種方法加載部分?jǐn)?shù)據(jù)進(jìn)行測(cè)試,數(shù)據(jù)內(nèi)容如下:
數(shù)據(jù)分為三列,前兩列是特征,最后一列是標(biāo)簽。
加載數(shù)據(jù)代碼如下:
''' 兩種方式加載文件 ''' import pandas as pd import numpy as np def load_file(file_name): ''' 利用open()函數(shù)加載文件 :param file_name: 文件名 :return: 特征矩陣、標(biāo)簽矩陣 ''' f = open(file_name) # 打開(kāi)訓(xùn)練數(shù)據(jù)集所在的文檔 feature = [] # 存放特征的列表 label = [] #存放標(biāo)簽的列表 for row in f.readlines(): f_tmp = [] # 存放特征的中間列表 l_tmp = [] # 存放標(biāo)簽的中間列表 number = row.strip().split("\t") # 按照\(chéng)t分割每行的元素,得到每行特征和標(biāo)簽 f_tmp.append(1) # 設(shè)置偏置項(xiàng) for i in range(len(number) - 1): f_tmp.append(float(number[i])) l_tmp.append(float(number[-1])) feature.append(f_tmp) label.append(l_tmp) f.close() # 關(guān)閉文件,很重要的操作 return np.mat(feature), np.mat(label) def load_file_pd(path, file_name): ''' 利用pandas庫(kù)加載文件 :param path: 文件路徑 :param file_name: 文件名稱 :return: 特征矩陣、標(biāo)簽矩陣 ''' feature = pd.read_csv(path + file_name, delimiter="\t", header=None, usecols=[0, 1]) feature.columns = ["a", "b"] feature = feature.reindex(columns=list('cab'), fill_value=1) label = pd.read_csv(path + file_name, delimiter="\t", header=None, usecols=[2]) return feature.values, label.values if __name__ == "__main__": path = "C://Users//Machenike//Desktop//xzw//" feature, label = load_file(path + "test.txt") feature_pd, label_pd = load_file_pd(path, "test.txt") print(feature) print(feature_pd) print(label) print(label_pd)
測(cè)試結(jié)果:
[[ 1. 1.43481273 4.54377111]
[ 1. 5.80444603 7.72222239]
[ 1. 2.89737803 4.84582798]
[ 1. 3.48896827 9.42538199]
[ 1. 7.98990181 9.38748992]
[ 1. 6.07911968 7.81580716]
[ 1. 8.54988938 9.83106546]
[ 1. 1.86253147 3.64519173]
[ 1. 5.09264649 7.16456405]
[ 1. 0.64048734 2.96504627]
[ 1. 0.44568267 7.27017831]]
[[ 1. 1.43481273 4.54377111]
[ 1. 5.80444603 7.72222239]
[ 1. 2.89737803 4.84582798]
[ 1. 3.48896827 9.42538199]
[ 1. 7.98990181 9.38748992]
[ 1. 6.07911968 7.81580716]
[ 1. 8.54988938 9.83106546]
[ 1. 1.86253147 3.64519173]
[ 1. 5.09264649 7.16456405]
[ 1. 0.64048734 2.96504627]
[ 1. 0.44568267 7.27017831]]
[[ 0.]
[ 0.]
[ 0.]
[ 0.]
[ 0.]
[ 0.]
[ 0.]
[ 0.]
[ 0.]
[ 0.]
[ 0.]]
[[0]
[0]
[0]
[0]
[0]
[0]
[0]
[0]
[0]
[0]
[0]]
從測(cè)試結(jié)果來(lái)看可知兩種加載數(shù)據(jù)的方法得到的數(shù)據(jù)結(jié)果是一樣的,故兩種方法均適用于加載數(shù)據(jù)。
注意:
此處是以Logistic Regression模型加載數(shù)據(jù)為例,數(shù)據(jù)與數(shù)據(jù)本身或許會(huì)有差異,但加載數(shù)據(jù)的方式都是大同小異的,要靈活變通。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
django 簡(jiǎn)單實(shí)現(xiàn)登錄驗(yàn)證給你
這篇文章主要介紹了django 簡(jiǎn)單實(shí)現(xiàn)登錄驗(yàn)證給你,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Python的Scrapy框架中的CrawlSpider介紹和使用
這篇文章主要介紹了Python的Scrapy框架中的CrawlSpider介紹和使用,CrawlSpider其實(shí)是Spider的一個(gè)子類,除了繼承到Spider的特性和功能外,還派生除了其自己獨(dú)有的更加強(qiáng)大的特性和功能,其中最顯著的功能就是"LinkExtractors鏈接提取器",需要的朋友可以參考下2023-12-12python?import模塊時(shí)有錯(cuò)誤紅線的原因
這篇文章主要介紹了python?import模塊時(shí)有錯(cuò)誤紅線的原因及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02用python的requests第三方模塊抓取王者榮耀所有英雄的皮膚實(shí)例
下面小編就為大家分享一篇用python的requests第三方模塊抓取王者榮耀所有英雄的皮膚實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨想過(guò)來(lái)看看吧2017-12-12新建文件時(shí)Pycharm中自動(dòng)設(shè)置頭部模板信息的方法
這篇文章主要介紹了新建文件時(shí)Pycharm中自動(dòng)設(shè)置頭部模板信息的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04