1、处理包含数据的文件。
最近使用python读取txt文件时,在计算两种np.narray()类型的数组时出现了以下错误的小问题:
typeerror : u func ' subtract ' did not contain a loop with signature matching types dtype(' u3 ')dtype(' u3 ')
1作为python新手,遇到这个问题后花了很多时间在网上找了很多大神写的例子,终于解决了。
摘要如下:
(1)这个问题是为了计算两个数组之间的差异,但数组中的元素不是数据类型(float、int等),而是str类型。
(2)解决方法:在向空数组添加数据的同时,强制将每个数据转换为float类型。
如果将C(dataSet[i][:-1])更改为c([float(tk)for tk in dataSet[I][:-),则
现在,使用python读取txt文件的过程总结如下:
python版本如下
(1)存储在Func文件中的函数定义:
From numpy import *
Import随机
#读取数据函数并返回列表类型培训和测试数据集
Def load data(文件名):
TrainingData=[]
TestData=[]
with open(filename)as txt data :
Lines=()
For line in lines:
Linedata=line.strip()。删除split(',')#空格和逗号','
Ifrandom.random () 0.73360 #数据集拆分比
(lineData) #培训数据集
Else:
(lineData) #测试数据集
Return trainingData、testData、测试数据
#输入数据分为列表类型、数据集分区、功能和标签两部分,返回数据为np.narray类型
Def splitData(dataSet):
Character=[]
标签=[]
For I in range(len(dataSet)):
c([float(tk)for tk in dataset[I][:-1])
Label.append(dataSet[i][-1])
Return array (character)、array (label)
1234567891011213141516171819202232425(2)实现两个数组之间的减法,并将其存储在main.py文件中。
# _ _ author _ _==' qustl _ 000 '
#-*-代码: utf-8-*-
Import numpy as NP
Import Function
FileName='1.txt '
Training data,testdata=func(文件名)
Trainingcharacter,training label=func(training data)
Test character、testlabel=func(测试数据)
Diff1=np.tile (testcharacter [0],(len (trainingcharacter),1)-trainingcharacter
Print('测试数据集的数据,扩展到与培训数据集相同的维:')
Prin (testcharacter [0],(len (trainingcharacter),1))
Print(“培训数据集:”)
打印(training character)
Print('时差后的结果:')
打印(diff1)
123456
>7(3)运行结果:
测试数据集的一条数据,扩充到与训练数据集同维:
[[ 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. ]]
训练数据集:
[[ 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. ]]
作差后的结果:
[[ 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. ]]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
数据集如下:
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
2、处理文本文件,如情感识别类的文件
在进行文本的情感分类时,从电影评论数据集网站上下载数据集后,发现数据集中存在许多不需要的符号。截取部分包含多余字符的数据如下:
下载数据集后,所有txt文件存放在两个文件夹:“neg”(包含消极评论)和“pos”(包含积极地评论)中。
两者的存放目录如下:“F:\Self_Learning\机器学习\python\Bayes\review_polarity\txt_sentoken”。后面需要用到文件路径,此路径可根据自己存放目录修改。
主要涉及到的python操作有:多余字符的删除、文件夹中多文件的操作。
2.1 多余字符的删除
首先,我们要删除多余的符号,获得干净的数据。
经过查找资料,知道删除一条文本数据中不需要的符号,可以通过re.sub(chara,newChara,data)函数实现,其中chara是需要删除的字符,newChara是删除字符后相应位置的替换字符,data是需要操作的数据。比如下面的代码,指的是删除lines中包含的前面列出的字符,并用空白替换:
lineString = re.sub("[\n\.\!\/_\-$%^*(+\"\')]+|[+—()?【】“”!:,;.?、~@#¥%…&*()0123456789]+", " ", lines)
- 1
2.2 python对多文件的操作
下面的程序中,pathDirPos指的是所有积极评论的txt文件所在的目录,在此指的是“F:\Self_Learning\机器学习\python\Bayes\review_polarity\txt_sentoken\pos”。child就是获得的每个txt文件全名。
for allDir in pathDirPos:
child = os.('%s' % allDir)
- 1
- 2
2.3 电影评论数据集预处理
下面给出对于电影评论数据集的预处理程序().
'''获取数据,并去除数据中的多余符号,返回list类型的数据集'''
def loadData(pathDirPos,pathDirNeg):
posAllData = [] # 积极评论
negAllData = [] # 消极评论
# 积极评论
for allDir in pathDirPos:
lineDataPos = []
child = os.('%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 = lineS(' ') #用空白分割每个文件中的数据集(此时还包含许多空白字符)
for strc in line:
if strc != "" and len(strc) > 1: #删除空白字符,并筛选出长度大于1的单词
lineDa(strc)
(lineDataPos)
# 消极评论
for allDir in pathDirNeg:
lineDataNeg = []
child = os.('%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 = lineS(' ') #用空白分割每个文件中的数据集(此时还包含许多空白字符)
for strc in line:
if strc != "" and len(strc) > 1: #删除空白字符,并筛选出长度大于1的单词
lineDa(strc)
negAllDa(lineDataNeg)
return posAllData,negAllData
'''划分数据集,将数据集划分为训练数据和测试数据,参数splitPara为分割比例'''
def splitDataSet(pathDirPos,pathDirNeg,splitPara):
trainingData=[]
testData=[]
traingLabel=[]
testLabel=[]
posData,negData=loadData(pathDirPos,pathDirNeg)
pos_len=len(posData)
neg_len=len(negData)
#操作积极评论数据
for i in range(pos_len):
i()<splitPara):
(posData[i])
(1)
else:
(posData[i])
(1)
for j in range(neg_len):
i()<splitPara):
(negData[j])
(0)
else:
(negData[j])
(0)
return trainingData,traingLabel,testData,testLabel