Как экспортировать всю информацию из массива 3d numpy в файл csv

#machine-learning #deep-learning #conv-neural-network #weka

Вопрос:

Набор данных Kaggle и ссылка на код

Я пытаюсь решить вышеуказанную проблему с Kaggle и хочу экспортировать предварительно обработанный csv, чтобы построить модель на weka, но когда я пытаюсь сохранить ее в csv, я теряю измерение, я хочу сохранить всю информацию в этом csv.

пожалуйста, помогите мне с соответствующим кодом или любым ресурсом.

Спасибо

 print (scaled_x)

    |x           |y          |z          |label
    |1.485231    |-0.661030  |-1.194153  |0
    |0.888257    |-1.370361  |-0.829636  |0
    |0.691523    |-0.594794  |-0.936247  |0
 
 Fs=20
frame_size = Fs*4 #80
hop_size = Fs*2 #40
    
def get_frames(df, frame_size, hop_size):
    N_FEATURES = 3
    frames = []
    labels = []
    for i in range(0,len(df )- frame_size, hop_size):
        x = df['x'].values[i: i frame_size]
        y = df['y'].values[i: i frame_size]
        z = df['z'].values[i: i frame_size]
        
        label = stats.mode(df['label'][i: i frame_size])[0][0]
        frames.append([x,y,z])
        labels.append(label)
        
    frames = np.asarray(frames).reshape(-1, frame_size, N_FEATURES)
    labels = np.asarray(labels)
    
    return frames, labels
 
 x,y = get_frames(scaled_x, frame_size, hop_size)
    x.shape, y.shape

((78728, 80, 3), (78728,))
 

Ответ №1:

Согласно размещенной вами ссылке, данные представляют собой данные акселерометра/гироскопа серии times, отобранные с частотой 20 Гц, с меткой для каждого образца. Они хотят объединить временные ряды в кадры (при этом соответствующая метка является наиболее распространенной меткой в течение данного кадра).

Так frame_size же как и количество выборок в кадре, и hop_size это количество перемещений скользящего окна вперед на каждой итерации. Другими словами, с тех пор кадры перекрываются на 50% hop_size = frame_size / 2 .

Таким образом, в конце вы получаете 3D-массив из 78728 кадров длиной 80, с 3 значениями ( x , y , z ) каждое.

ПРАВКА: Чтобы ответить на ваш новый вопрос о том, как экспортировать в формате CSV, вам нужно «выровнять» массив 3D-кадров в 2D-массив, поскольку именно это представляет CSV. Существует несколько различных способов сделать это, но я думаю, что проще всего объединить последние два измерения, чтобы каждая строка представляла собой кадр, состоящий из 240 значений (80 выборок по 3 координаты в каждой). Затем объедините метки в качестве последнего столбца.

 x_2d = np.reshape(x, (x.shape[0], -1))
full = np.concatenate([x, y], axis=1)

import pandas as pd
df = pd.DataFrame(full)
df.to_csv("frames.csv")
 

Если вам также нужны правильные имена столбцов:

 columns = []
for i in range(1, x.shape[1]   1):
    columns.extend([f"{i}_X", f"{i}_Y", f"{i}_Z"])
columns.append("label")
df = pd.DataFrame(full, columns=columns)
 

Комментарии:

1. спасибо за объяснение. просто хотел знать, почему мы получаем разные формы данных в переменных x и y? в чем разница между этими 2 переменными?

2. x-это фактические данные кадра, а y-массив меток, поэтому y-это только 1D.

3. Кроме того, вы отредактировали вопрос так, что теперь это другой вопрос. Вместо этого вы должны добавить информацию в нижнюю часть вопроса, чтобы люди не путались.

4. да @Аарон, поскольку вы предоставили решение, я могу продолжить, но потом застрял, на самом деле, мне просто нужен один файл данных в формате csv, а не два файла данных, т. е. x и y, есть ли способ экспортировать всю информацию в один файл csv?