Я выполняю задачу машинного обучения (прогнозирование стоимости). Пока я занимаюсь предварительной обработкой данных, это занимает очень много времени. У меня есть файл csv с примерно 640000 строк, и я пытаюсь вычесть даты последовательных строк и рассчитать продолжительность времени. Файл csv выглядит как прикрепленный. Например, с 17.08.2011 по 19.08.2011 требуется 2 дня, и я хотел бы записать 2 в столбец «продолжительность времени». Для этого я использовал функцию python datetime. И это стоит много времени.
data = pd.read_csv(f'{proj_dir}/raw data/measures.csv', encoding="cp1252")
file = data[['ID', 'date', 'value1', 'value2', 'duration']]
def time_subtraction(date, prev_date):
diff = datetime.strptime(date, '%Y-%m-%d') - datetime.strptime(prev_date, '%Y-%m-%d')
diff_days = diff.days
return diff_days
def calculate_time_duration(dataframe, set_0_indices):
for i in range(dataframe.shape[0]):
# For each patient, sets "Time Duration" at the first measurement to be 0
if i in set_time_0_indices.values:
dataframe.iloc[i, 4] = 0 # set time duration to 0 (beginning of this patient)
else: # time subtraction
dataframe.iloc[i, 4] = time_subtraction(date=dataframe.iloc[i, 1], prev_date=dataframe.iloc[i-1, 1])
return dataframe
# I am running on Google Colab. This line takes very long.
result = calculate_time_duration(dataframe = file, set_0_indices = set_time_0_indices)
Интересно, есть ли способы ускорить этот процесс. Помогает ли использование графического процессора? У меня есть доступ к удаленному графическому процессору, но я не знаю, помогает ли использование графического процессора при предварительной обработке данных. Кстати, при каком сценарии графические процессоры действительно могут ускорить работу? Заранее спасибо!
Относительно более быстрого обновления данных см. сообщение это. Что касается повышения скорости с помощью графического процессора: вы можете использовать графический процессор только в том случае, если есть оптимизированные операции, которые действительно могут выполняться на центральном процессоре. Предварительная обработка, как вы это делаете, обычно не входит в объем. Вы также должны учитывать, что вам нужно будет сначала передать данные на графический процессор, прежде чем что-либо вычислять, а затем передавать результаты обратно. В вашем случае это заняло бы гораздо больше времени, чем фактическое ускорение, тем более что ваша операция с данными довольно проста. Я уверен, что использование правильного синтаксиса pandas приведет к желаемому ускорению предварительной обработки.
Благодарю вас! Это действительно помогает. Замена dataframe.iloc на dataframe.at ускоряет весь процесс примерно в 10 раз!
Пожалуйста, добавьте полный код, как вы редактируете свою таблицу, а также как вы загружаете свои данные.