csvからnpzに変換するプログラムを作成したのですが,エラーが旨くいきませんでした.
どなたか,ご教示の程,よろしくお願い致します. 変換したいname.csvからname.npzです.xは[1,64],yは[1,6]配列になっています.
yは1~5のラベルになっており,npz変換時に[0,1,0,0,0,0]のようなラベルの数が最大値のインデックスになるようなone-hot表現にしたいです.
csvは
x y
[1,2,,,,,,,,64] [0]
:
[1,2,,,,,,,,64] [6]のような型です. これをnpzでは[1×64]の配列はそのままxとし,yは1から6までの数をone-hot表現に変換したいです.
作成したコード
import numpy as np import sys import argparse class csv2npz: def __init__(self): """ constructor """ pass def execute(self,inputcsvfileName,outputnpzfileName): """ Main Logic """ ## CSVファイルを開く ## fop = open(inputcsvfileName,"r") _ = fop.readline() ## 先頭ヘッダー行は捨てる ## 初期化 ## x = [] y = [] y_tmp = [] ## CSVを1行ずつ読み込んで分割+数値変換 ## ## (メモリ領域節約のため、1行ずつメモリに読み込みを行う) ## while True: line = fop.readline() if line: line = line.rstrip() a,e = line.split(",") x.append(np.array([int(i) for i in a.split(";") if self.is_num(i)])) y_tmp.append(int(e)) else: break ## 数値をone-hot vector形式に変換 ## targetFilter = list(set(y_tmp)) y = [np.eye(len(targetFilter)).astype("int64")[targetFilter.index(i)] for i in y_tmp] ## np.array形式に変換 ## x = np.asarray(x,dtype=np.int) y = np.asarray(y,dtype=np.int) ## 保存 ## np.savez(outputnpzfileName,x=x,y=y) def is_num(self,s): """ Check Number """ return s.replace(',', '').replace('.', '').replace('-', '').isnumeric() parser = argparse.ArgumentParser(description=""" It is an application that convert csv files to npz files. (example)$ python csv2npz.py ./input.csv ./output.npz""") parser.add_argument( 'input_csvfile_path', action='store', nargs=None, const=None, default=None, type=str, choices=None, help='Target File Path.', metavar=None) parser.add_argument( "output_file_name", action='store', nargs=None, const=None, default=None, type=str, choices=None, help='OutPut File Name.', metavar=None) args = parser.parse_args() ## Pick Up File Name ## inputFileName = args.input_csvfile_path outputFileName = args.output_file_name print(inputFileName) print(outputFileName) ## Logic Execute ## exe = csv2npz() exe.execute(inputFileName,outputFileName)
実行したい時は以下のように書きました.
import numpy as np import sys import argparse class csv2npz: def __init__(self): """ constructor """ pass def execute(self,inputcsvfileName,outputnpzfileName): """ Main Logic """ ## CSVファイルを開く ## fop = open(inputcsvfileName,"r") _ = fop.readline() ## 先頭ヘッダー行は捨てる ## 初期化 ## x = [] y = [] y_tmp = [] ## CSVを1行ずつ読み込んで分割+数値変換 ## ## (メモリ領域節約のため、1行ずつメモリに読み込みを行う) ## while True: line = fop.readline() if line: line = line.rstrip() a,e = line.split(",") x.append(np.array([int(i) for i in a.split(";") if self.is_num(i)])) y_tmp.append(int(e)) else: break ## 数値をone-hot vector形式に変換 ## targetFilter = list(set(y_tmp)) y = [np.eye(len(targetFilter)).astype("int64")[targetFilter.index(i)] for i in y_tmp] ## np.array形式に変換 ## x = np.asarray(x,dtype=np.int) y = np.asarray(y,dtype=np.int) ## 保存 ## np.savez(outputnpzfileName,x=x,y=y) def is_num(self,s): """ Check Number """ return s.replace(',', '').replace('.', '').replace('-', '').isnumeric() parser = argparse.ArgumentParser(description=""" It is an application that convert csv files to npz files. (example)$ python csv2npz.py ./input.csv ./output.npz""") parser.add_argument( 'C:/Users/name/Desktop/myo-python-1.0.4/myo-armband-nn-master/name', action='store', nargs=None, const=None, default=None, type=str, choices=None, help='C:/Users/name/Desktop/myo-python-1.0.4/myo-armband-nn-master.', metavar=None) parser.add_argument( "name.npz", action='store', nargs=None, const=None, default=None, type=str, choices=None, help='name.npz.', metavar=None) args = parser.parse_args() ## Pick Up File Name ## inputFileName = args.input_csvfile_path outputFileName = args.output_file_name print(inputFileName) print(outputFileName) ## Logic Execute ## exe = csv2npz() exe.execute(inputFileName,outputFileName) コード
あなたの回答
tips
プレビュー