2017-07-10 29 views
0

ChevalierのLSTM Human Activity Recognitionアルゴリズムを複製しようとしましたが、自分のデータをCSV形式で実装しようとしたときに問題が発生しました。 gitで使用される形式はtxtでした。私のCSVデータは、次のフォーマットは次のとおりです。LSTMプロジェクトがCSV形式と互換性がありません

0.000995,8 
0.020801,8 
0.040977,8 
0.060786,8 
0.080970,8 
...   ... 

元のファイルがhereを見つけることができます。 x値(時間)は列0(-80.060003など)にあり、y値(値)は列1(8,8など)にあります。私はパンダ

pandas.read_csv(DATASET_PATH + TRAIN + "data_train.csv", skiprows=1, header=None, sep=',', usecols=[0, 1]) 

を使用しようとしましたが、「データセットを準備する」セクション(そしておそらく他の人にも)内のデータのフォーマットと互換性があるように思えません:

TRAIN = "train/" 
TEST = "test/" 

# Load "X" (the neural network's training and testing inputs) 

def load_X(X_signals_paths): 
    X_signals = [] 

    for signal_type_path in X_signals_paths: 
     file = open(signal_type_path, 'r') 
     # Read dataset from disk, dealing with text files' syntax 
     X_signals.append(
      [np.array(serie, dtype=np.float32) for serie in [ 
       row.replace(' ', ' ').strip().split(' ') for row in file 
      ]] 
     ) 
     file.close() 

    return np.transpose(np.array(X_signals), (1, 2, 0)) 

X_train_signals_paths = [ 
    DATASET_PATH + TRAIN + "Inertial Signals/" + signal + "train.txt" for signal in INPUT_SIGNAL_TYPES 
] 
X_test_signals_paths = [ 
    DATASET_PATH + TEST + "Inertial Signals/" + signal + "test.txt" for signal in INPUT_SIGNAL_TYPES 
] 

X_train = load_X(X_train_signals_paths) 
X_test = load_X(X_test_signals_paths) 


# Load "y" (the neural network's training and testing outputs) 

def load_y(y_path): 
    file = open(y_path, 'r') 
    # Read dataset from disk, dealing with text file's syntax 
    y_ = np.array(
     [elem for elem in [ 
      row.replace(' ', ' ').strip().split(' ') for row in file 
     ]], 
     dtype=np.int32 
    ) 
    file.close() 

    # Substract 1 to each output class for friendly 0-based indexing 
    return y_ - 1 

y_train_path = DATASET_PATH + TRAIN + "y_train.txt" 
y_test_path = DATASET_PATH + TEST + "y_test.txt" 

y_train = load_y(y_train_path) 
y_test = load_y(y_test_path) 

これでした何がiPython3経由で私の実装で起こっている:

で[0]:

TRAIN = "train/" 
TEST = "test/" 

def load_X(X_signals_paths): 
    X_signals = [] 
    for signal_type_path in X_signals_paths: 
     file = pandas.read_csv(DATASET_PATH + TRAIN + "data_train.csv", skiprows=1, header=None, sep=',', usecols=[0]) 
     X_signals.append(
      [np.array(serie, dtype=np.float32) for serie in [ 
       str(row).replace(' ', ' ').strip().split(' ') for row in file 
      ]] 
     ) 

    return np.transpose(np.array(X_signals), (1, 2, 0)) 

_train_signals_paths = [ 
    DATASET_PATH + TRAIN + signal + "train.csv" for signal in INPUT_SIGNAL_TYPES 
] 
X_test_signals_paths = [ 
    DATASET_PATH + TEST + signal + "test.csv" for signal in INPUT_SIGNAL_TYPES 
] 

X_train = load_X(X_train_signals_paths) 
X_test = load_X(X_test_signals_paths) 
print(X_train, X_test) 

アウト[0]:

[[[ 0.]]] [[[ 0.]]] 

私はきちんとこのアルゴリズムとシームレスに動作するように私のデータをフォーマットするといくつかの助けを受けることができることを願っています。ご不明な点がございましたら、お知らせください。

+0

エラーメッセージ – Paddy

+0

@Paddy私の質問に何かを追加して助けてください –

+0

あなたの提供するデータで 'pandas_read()'が動作します: '[892 rows x 2 columns]' – tripleee

答えて

0

トレースのコードは、実際に質問に投稿したコードと異なります。作業コードはPandasデータフレームではなく、裸のファイルハンドルで動作しています。参考のため

は、ここで再度参照しているプロジェクトからのコードは次のとおりです。

def load_X(X_signals_paths): 
    X_signals = [] 

    for signal_type_path in X_signals_paths: 
     file = open(signal_type_path, 'r') 
     #^the error comes where you have file = pandas.read_csv(...) 

     # Read dataset from disk, dealing with text files' syntax 
     X_signals.append(
      [np.array(serie, dtype=np.float32) for serie in [ 
       row.replace(' ', ' ').strip().split(' ') for row in file 
      ]] 
     ) 
     file.close() 

fileは改行で終わる生の行(一連の文字)を返すだけのイテレータです。この入力では、改行と空白を取り除くことが理にかなっています。しかし、あなたのコードはすでにファイルの内容を開き、解析し、改行や空白を持たないPandasデータフレームに再フォーマットします。数字はすでに解析済みです。上流のコードに戻ってしまうかもしれません。またはそこに変更したいことがある場合は、その変更について質問する方法を見つけてください。 CSVには何も問題はありません。

Pythonにはかなり可能なcsv moduleがあります。そのため、CSVから個々のフィールドを手動で解析する代わりに、単純にそのコードを使用してください。

for signal_type_path in X_signals_paths: 
     with open(signal_type_path, 'r') as csvfile: 
      reader = csv.reader(csvfile) 
      X_signals.append([np.array(row[0:2], dtype=np.float32) for row in reader]) 

またはカンマの代わりにスペースに分かれ、最小限の変更、など。

また、接頭辞は、読み込んだファイルをハードコードしています(実際にはスペースを削除する必要はありません)。 DATASET_PATHTRAINのパラメータを完全に呼び出しコードに保ち、load_Xに完全なファイルパスのリストを受け入れるだけの方がいいでしょう。

+0

「上流のコード」とはどういう意味ですか? –

+0

Githubプロジェクトはあなたがリンクしており、あなたが適応しようとしているようです。 – tripleee

+0

私の質問をもう一度再フォーマットすると言っていますか?私はすでにサンプルコードとデータ書式を調べてみました –

関連する問題