這篇文章給大家分享的是有關(guān)對python .txt文件讀取及數(shù)據(jù)處理方法有哪些的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計制作、成都網(wǎng)站建設(shè)與策劃設(shè)計,細河網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:細河等地區(qū)。細河做網(wǎng)站價格咨詢:189820811081、處理包含數(shù)據(jù)的文件
最近利用Python讀取txt文件時遇到了一個小問題,就是在計算兩個np.narray()類型的數(shù)組時,出現(xiàn)了以下錯誤:
TypeError: ufunc 'subtract' did not contain a loop with signature matching types dtype('<U3') dtype('<U3') dtype('<U3')
作為一個Python新手,遇到這個問題后花費了挺多時間,在網(wǎng)上找了許多大神們寫的例子,最后終于解決了。
總結(jié)如下:
(1)出現(xiàn)此問題的原因是:目的是想計算兩個數(shù)組間的差值,但數(shù)組中的元素不是數(shù)據(jù)類型(float或int等),而是str類型的。
(2)解決方法:在為空數(shù)組添加數(shù)據(jù)過程中,將每個數(shù)據(jù)強制轉(zhuǎn)化為float型。
如將“character.append(dataSet[i][:-1])”修改為“ character.append([float(tk) for tk in dataSet[i][:-1]])”
現(xiàn)將利用Python讀取txt文件的過程總結(jié)如下:
python版本為python3.6
(1)函數(shù)定義,存放于Function.py文件中:
from numpy import * import random #讀取數(shù)據(jù)函數(shù),返回list類型的訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集 def loadData(fileName): trainingData=[] testData=[] with open(fileName) as txtData: lines=txtData.readlines() for line in lines: lineData=line.strip().split(',') #去除空白和逗號“,” if random.random()<0.7: #數(shù)據(jù)集分割比例 trainingData.append(lineData) #訓(xùn)練數(shù)據(jù)集 else: testData.append(lineData) #測試數(shù)據(jù)集 return trainingData,testData #輸入數(shù)據(jù)為list類型,分割數(shù)據(jù)集,分割為特征和標(biāo)簽兩部分,返回數(shù)據(jù)為np.narray類型 def splitData(dataSet): character=[] label=[] for i in range(len(dataSet)): character.append([float(tk) for tk in dataSet[i][:-1]]) label.append(dataSet[i][-1]) return array(character),array(label)
(2)實現(xiàn)兩個數(shù)組間的減法,存放于main.py文件中:
#__author__=='qustl_000' #-*- coding: utf-8 -*- import numpy as np import Function fileName="1.txt" trainingData,testData=Function.loadData(fileName) trainingCharacter,trainingLabel=Function.splitData(trainingData) testCharacter,testLabel=Function.splitData(testData) diff1=np.tile(testCharacter[0],(len(trainingCharacter),1))-trainingCharacter print('測試數(shù)據(jù)集的一條數(shù)據(jù),擴充到與訓(xùn)練數(shù)據(jù)集同維:') print(np.tile(testCharacter[0],(len(trainingCharacter),1))) print('訓(xùn)練數(shù)據(jù)集:') print(trainingCharacter) print('作差后的結(jié)果:') print(diff1)
(3)運行結(jié)果:
測試數(shù)據(jù)集的一條數(shù)據(jù),擴充到與訓(xùn)練數(shù)據(jù)集同維: [[ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ]] 訓(xùn)練數(shù)據(jù)集: [[ 1.5 40. ] [ 1.5 50. ] [ 1.6 40. ] [ 1.6 50. ] [ 1.6 60. ] [ 1.6 70. ] [ 1.7 60. ] [ 1.7 70. ] [ 1.7 80. ] [ 1.8 60. ] [ 1.8 80. ] [ 1.8 90. ] [ 1.9 90. ]] 作差后的結(jié)果: [[ 0. 20. ] [ 0. 10. ] [ -0.1 20. ] [ -0.1 10. ] [ -0.1 0. ] [ -0.1 -10. ] [ -0.2 0. ] [ -0.2 -10. ] [ -0.2 -20. ] [ -0.3 0. ] [ -0.3 -20. ] [ -0.3 -30. ] [ -0.4 -30. ]]
數(shù)據(jù)集如下:
1.5,40,thin 1.5,50,fat 1.5,60,fat 1.6,40,thin 1.6,50,thin 1.6,60,fat 1.6,70,fat 1.7,50,thin 1.7,60,thin 1.7,70,fat 1.7,80,fat 1.8,60,thin 1.8,70,thin 1.8,80,fat 1.8,90,fat 1.9,80,thin 1.9,90,fat
2、處理文本文件,如情感識別類的文件
在進行文本的情感分類時,從電影評論數(shù)據(jù)集網(wǎng)站上下載數(shù)據(jù)集后,發(fā)現(xiàn)數(shù)據(jù)集中存在許多不需要的符號。截取部分包含多余字符的數(shù)據(jù)如下:
下載數(shù)據(jù)集后,所有txt文件存放在兩個文件夾:“neg”(包含消極評論)和“pos”(包含積極地評論)中。
兩者的存放目錄如下:“F:\Self_Learning\機器學(xué)習(xí)\python\Bayes\review_polarity\txt_sentoken”。后面需要用到文件路徑,此路徑可根據(jù)自己存放目錄修改。
主要涉及到的python操作有:多余字符的刪除、文件夾中多文件的操作。
2.1 多余字符的刪除
首先,我們要刪除多余的符號,獲得干凈的數(shù)據(jù)。
經(jīng)過查找資料,知道刪除一條文本數(shù)據(jù)中不需要的符號,可以通過re.sub(chara,newChara,data)函數(shù)實現(xiàn),其中chara是需要刪除的字符,newChara是刪除字符后相應(yīng)位置的替換字符,data是需要操作的數(shù)據(jù)。比如下面的代碼,指的是刪除lines中包含的前面列出的字符,并用空白替換:
lineString = re.sub("[\n\.\!\/_\-$%^*(+\"\')]+|[+—()?【】“”!:,;.?、~@#¥%…&*()0123456789]+", " ", lines)
2.2 python對多文件的操作
下面的程序中,pathDirPos指的是所有積極評論的txt文件所在的目錄,在此指的是“F:\Self_Learning\機器學(xué)習(xí)\python\Bayes\review_polarity\txt_sentoken\pos”。child就是獲得的每個txt文件全名。
for allDir in pathDirPos: child = os.path.join('%s' % allDir)
2.3 電影評論數(shù)據(jù)集預(yù)處理
下面給出對于電影評論數(shù)據(jù)集的預(yù)處理程序(python3.6).
'''獲取數(shù)據(jù),并去除數(shù)據(jù)中的多余符號,返回list類型的數(shù)據(jù)集''' def loadData(pathDirPos,pathDirNeg): posAllData = [] # 積極評論 negAllData = [] # 消極評論 # 積極評論 for allDir in pathDirPos: lineDataPos = [] child = os.path.join('%s' % allDir) filename = r"review_polarity/txt_sentoken/pos/" + child with open(filename) as childFile: for lines in childFile: lineString = re.sub("[\n\.\!\/_\-$%^*(+\"\')]+|[+—()?【】“”!:,;.?、~@#¥%…&*()0123456789]+", " ", lines) line = lineString.split(' ') #用空白分割每個文件中的數(shù)據(jù)集(此時還包含許多空白字符) for strc in line: if strc != "" and len(strc) > 1: #刪除空白字符,并篩選出長度大于1的單詞 lineDataPos.append(strc) posAllData.append(lineDataPos) # 消極評論 for allDir in pathDirNeg: lineDataNeg = [] child = os.path.join('%s' % allDir) filename = r"review_polarity/txt_sentoken/neg/" + child with open(filename) as childFile: for lines in childFile: lineString = re.sub("[\n\.\!\/_\-$%^*(+\"\')]+|[+—()?【】“”!:,;.?、~@#¥%…&*()0123456789]+", " ", lines) line = lineString.split(' ') #用空白分割每個文件中的數(shù)據(jù)集(此時還包含許多空白字符) for strc in line: if strc != "" and len(strc) > 1: #刪除空白字符,并篩選出長度大于1的單詞 lineDataNeg.append(strc) negAllData.append(lineDataNeg) return posAllData,negAllData '''劃分數(shù)據(jù)集,將數(shù)據(jù)集劃分為訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù),參數(shù)splitPara為分割比例''' def splitDataSet(pathDirPos,pathDirNeg,splitPara): trainingData=[] testData=[] traingLabel=[] testLabel=[] posData,negData=loadData(pathDirPos,pathDirNeg) pos_len=len(posData) neg_len=len(negData) #操作積極評論數(shù)據(jù) for i in range(pos_len): if(random.random()<splitPara): trainingData.append(posData[i]) traingLabel.append(1) else: testData.append(posData[i]) testLabel.append(1) for j in range(neg_len): if(random.random()<splitPara): trainingData.append(negData[j]) traingLabel.append(0) else: testData.append(negData[j]) testLabel.append(0) return trainingData,traingLabel,testData,testLabel
感謝各位的閱讀!關(guān)于“對python .txt文件讀取及數(shù)據(jù)處理方法有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
分享題目:對python.txt文件讀取及數(shù)據(jù)處理方法有哪些-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://chinadenli.net/article20/dhpcco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、品牌網(wǎng)站制作、電子商務(wù)、品牌網(wǎng)站建設(shè)、企業(yè)建站、網(wǎng)站維護
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容