python.txt 파일 읽 기 및 데이터 처리 방법 요약

1.데이터 가 포 함 된 파일 처리
최근 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 파일 읽 기 및 데이터 처리 방법 에 대한 정 리 는 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 가 되 고 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기