python.txt 파일 읽 기 및 데이터 처리 방법 요약
최근 Python 을 이용 하여 txt 파일 을 읽 을 때 작은 문제 가 발생 했 습 니 다.np.narray()형식의 배열 을 계산 할 때 다음 과 같은 오류 가 발생 했 습 니 다.
TypeError: ufunc 'subtract' did not contain a loop with signature matching types dtype('<U3') dtype('<U3') dtype('<U3')
파 이 썬 초보 자로 서 이 문 제 를 만난 후 많은 시간 을 들 여 인터넷 에서 많은 신 들 이 쓴 예 를 찾 아 마침내 해결 했다.총 결 은 다음 과 같다.
(1)이 문제 가 발생 한 이 유 는 두 배열 간 의 차 이 를 계산 하 는 것 이 목적 이지 만 배열 의 요 소 는 데이터 형식(float 또는 int 등)이 아니 라 str 형식 이기 때문이다.
(2)해결 방법:빈 배열 에 데 이 터 를 추가 하 는 과정 에서 모든 데 이 터 를 float 형 으로 강제 전환 합 니 다.
예 를 들 어"character.append(dataSet[i][:-1])"를"character.append([float(tk)for tk in dataSet[i][:-1]]]"로 변경 합 니 다.
현재 Python 을 이용 하여 txt 파일 을 읽 는 과정 은 다음 과 같 습 니 다.
python 버 전 은 python 3.6 입 니 다.
(1)함수 정의,Function.py 파일 에 저장:
from numpy import *
import random
# , list
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: #
trainingData.append(lineData) #
else:
testData.append(lineData) #
return trainingData,testData
# list , , , 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)두 배열 간 의 감법 을 실현 하여 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(' , :')
print(np.tile(testCharacter[0],(len(trainingCharacter),1)))
print(' :')
print(trainingCharacter)
print(' :')
print(diff1)
(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.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.감정 식별 과 같은 텍스트 파일 처리텍스트 의 감정 분 류 를 할 때 영화 평론 데이터 세트 사이트 에서 데이터 세트 를 다운로드 한 결과 데이터 에 필요 하지 않 은 기호 가 많이 존재 한 다 는 것 을 발견 했다.캡 처 부분 에 남 은 문 자 를 포함 하 는 데 이 터 는 다음 과 같 습 니 다.
데이터 세트 를 다운로드 한 후,모든 txt 파일 은 두 개의 폴 더 에 저 장 됩 니 다:"neg"(부정적인 댓 글 포함)과"pos"(긍정 적 인 댓 글 포함).
둘 의 저장 디 렉 터 리 는 다음 과 같 습 니 다."F:\SelfLearning\\기계 학습\\python\Bayes\\reviewpolarity\txt_sentoken”。뒤에 파일 경 로 를 사용 해 야 합 니 다.이 경 로 는 저장 디 렉 터 리 에 따라 수정 할 수 있 습 니 다.
주로 관련 된 python 작업 은 불필요 한 문자 삭제,폴 더 의 다 중 파일 작업 입 니 다.
2.1 불필요 한 문자 삭제
우선,우 리 는 불필요 한 기 호 를 삭제 하고 깨끗 한 데 이 터 를 얻어 야 한다.
자 료 를 찾 아 보면 텍스트 데이터 에 필요 하지 않 은 기 호 를 삭제 하 는 것 을 알 수 있 습 니 다.re.sub(chara,new Chara,data)함 수 를 통 해 이 루어 질 수 있 습 니 다.그 중에서 chara 는 삭제 해 야 할 문자 이 고 new Chara 는 문 자 를 삭제 한 후에 해당 하 는 위치 에 있 는 교체 문자 이 며 data 는 조작 해 야 할 데이터 입 니 다.예 를 들 어 아래 코드 는 lines 에 포 함 된 앞 에 있 는 문 자 를 삭제 하고 공백 으로 대체 하 는 것 을 말 합 니 다.
lineString = re.sub("[
\.\!\/_\-$%^*(+\"\')]+|[+―()?【】“”!:,;.?、~@#¥%…&*()0123456789]+", " ", lines)
2.2 python 의 다 중 파일 작업다음 프로그램 에서 pathDirPos 는 모든 긍정 적 인 댓 글 의 txt 파일 이 있 는 디 렉 터 리 를 말 합 니 다.여기 서'F:\Self'를 말 합 니 다.Learning\\기계 학습\\python\Bayes\\reviewpolarity\txt_sentoken\pos”。child 는 모든 txt 파일 의 전체 이름 을 가 져 옵 니 다.
for allDir in pathDirPos:
child = os.path.join('%s' % allDir)
2.3 영화 평론 데이터 세트 예비 처리다음은 영화 평론 데이터 세트 에 대한 예비 처리 프로그램(python 3.6)을 드 립 니 다.
''' , , list '''
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("[
\.\!\/_\-$%^*(+\"\')]+|[+―()?【】“”!:,;.?、~@#¥%…&*()0123456789]+", " ", lines)
line = lineString.split(' ') # ( )
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("[
\.\!\/_\-$%^*(+\"\')]+|[+―()?【】“”!:,;.?、~@#¥%…&*()0123456789]+", " ", lines)
line = lineString.split(' ') # ( )
for strc in line:
if strc != "" and len(strc) > 1: # , 1
lineDataNeg.append(strc)
negAllData.append(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):
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
이상 의 python.txt 파일 읽 기 및 데이터 처리 방법 에 대한 정 리 는 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 가 되 고 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.