Python加載文件內(nèi)容的兩種實現(xiàn)方式
說到機(jī)器學(xué)習(xí),大家首先想到的可能就是Python和算法了,其實光有Python和算法是不夠的,數(shù)據(jù)才是進(jìn)行機(jī)器學(xué)習(xí)的前提。
大多數(shù)的數(shù)據(jù)都會存儲在文件中,要想通過Python調(diào)用算法對數(shù)據(jù)進(jìn)行相關(guān)學(xué)習(xí),首先就要將數(shù)據(jù)讀入程序中,本文介紹兩種加載數(shù)據(jù)的方式,在之后的算法介紹中,將頻繁使用這兩種方式將數(shù)據(jù)加載到程序。
下面我們將以Logistic Regression模型加載數(shù)據(jù)為例,分別對兩種不同的加載數(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) # 打開訓(xùn)練數(shù)據(jù)集所在的文檔
feature = [] # 存放特征的列表
label = [] #存放標(biāo)簽的列表
for row in f.readlines():
f_tmp = [] # 存放特征的中間列表
l_tmp = [] # 存放標(biāo)簽的中間列表
number = row.strip().split("\t") # 按照\t分割每行的元素,得到每行特征和標(biāo)簽
f_tmp.append(1) # 設(shè)置偏置項
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庫中的read_csv()方法進(jìn)行加載
def load_file_pd(path, file_name):
'''
利用pandas庫加載文件
: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)行測試,數(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) # 打開訓(xùn)練數(shù)據(jù)集所在的文檔
feature = [] # 存放特征的列表
label = [] #存放標(biāo)簽的列表
for row in f.readlines():
f_tmp = [] # 存放特征的中間列表
l_tmp = [] # 存放標(biāo)簽的中間列表
number = row.strip().split("\t") # 按照\t分割每行的元素,得到每行特征和標(biāo)簽
f_tmp.append(1) # 設(shè)置偏置項
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庫加載文件
: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)測試結(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]]
從測試結(jié)果來看可知兩種加載數(shù)據(jù)的方法得到的數(shù)據(jù)結(jié)果是一樣的,故兩種方法均適用于加載數(shù)據(jù)。
注意:
此處是以Logistic Regression模型加載數(shù)據(jù)為例,數(shù)據(jù)與數(shù)據(jù)本身或許會有差異,但加載數(shù)據(jù)的方式都是大同小異的,要靈活變通。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于python的list相關(guān)知識(推薦)
下面小編就為大家?guī)硪黄P(guān)于python的list相關(guān)知識(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08
Pycharm配置Anaconda環(huán)境的詳細(xì)圖文教程
PyCharm是一款很好用很流行的python編輯器,Anaconda通過管理工具包、開發(fā)環(huán)境、Python版本,大大簡化了你的工作流程,下面這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)下Pycharm配置Anaconda環(huán)境的相關(guān)資料,需要的朋友可以參考下2023-02-02
Python內(nèi)存泄漏和內(nèi)存溢出的解決方案
這篇文章主要介紹了Python內(nèi)存泄漏和內(nèi)存溢出的解決方案,幫助大家維護(hù)后臺進(jìn)程,感興趣的朋友可以了解下2020-09-09

