Я довольно новичок в python, но все глубже и глубже погружаюсь в аналитику данных и приложения ML, и пишу различные сценарии для обработки данных и составления прогнозов.
В этом конкретном случае у меня есть код, который реплицирует прошлые данные в будущее, прежде чем обрабатывается дальше для разработки прогноза. Особенно меня интересует производительность python / pandas на Win 10 против Ma c.
Обрабатываемые данные довольно велики (примерно 15-20 миллионов записей x ~ 15 столбцов), поэтому производительность имеет значение. У меня есть машина Ma c с 6-ядерным процессором i5 с процессором 3,0 ГГц и оперативной памятью 32 ГБ, а также другая машина Win 10 с 4-ядерным (8 потоков) процессором с тактовой частотой 1,6 ГГц и оперативной памятью 16 ГБ. Во всех тестах ma c должен работать лучше, и во многих приложениях.
Скрипт состоит из двух частей: части генерации данных и части обработки. Используя этот сценарий, Win 10 работает намного лучше в части генерирования данных за 40 минут против 85 минут на Ma c, в то время как во второй части (обработка) производительность обращена, где Win 10 занимает 110 минут против, только 77 минут в ма c. То же самое происходит и в другом сценарии с довольно похожим приложением, где Win 10 кажется лучше при репликации / копировании данных, в то время как Ma c быстрее обрабатывает их.
Я провел много исследований, и мое понимание что Ma c должен работать лучше в большинстве приложений, но не в этом. У кого-нибудь есть идеи почему? Есть ли какая-либо конфигурация на Ma c, которую необходимо выполнить?
Следует отметить, что Windows использует только физическую память и время ожидания истекает, если ему не хватает памяти, а ma c использует комбинацию обоих и редко исчерпывает память, так как использует локальный кеш, если нужно.
Несколько предыдущих строк удалены, поскольку они не нужны
enter code here
*##data generator
starttime=datetime.datetime.now()
datestamp=datetime.datetime.now().date()
datestamp=str(datestamp)
#generate data for the period
DATE_RANGE=list()
Current_Date=NF_Startingdate
while Current_Date<=NF_Endingdate:
DATE_RANGE.append((Current_Date,Current_Date.strftime(format='%A').upper()))
Current_Date+=datetime.timedelta(days=1)
else: 'error'
Forecast=pd.DataFrame(columns= ['JRNY_DATE','OD_PAIR','CARD_TYPE','DAY_OF_WEEK','JRNY_START_15MIN_BAND','ORIGIN_LINE','ORIGIN_STATION','INTCHG1_STATION','INTCHG1_15MIN_BAND','INTCHG1_LINE','INTCHG2_STATION','INTCHG2_15MIN_BAND','DEST_STATION','DEST_LINE','JRNY_END_15MIN_BAND','PASSENGER_TRIPS','BASE_DATE'])
for d in DATE_RANGE:
if (d[0]-DATE_RANGE[0][0])<datetime.timedelta(364):
Forecast_d=df[(df['JRNY_DATE']==d[0]+datetime.timedelta(days=-364))]
Forecast_d['BASE_DATE']=df[(df['JRNY_DATE']==d[0]+datetime.timedelta(days=-364))]['JRNY_DATE']
Forecast_d['JRNY_DATE']=d[0]
Forecast=pd.DataFrame.append(Forecast,Forecast_d,ignore_index=True,sort=False)
else:
Forecast_d=Forecast[(Forecast['JRNY_DATE']==d[0]+datetime.timedelta(days=-364))]
Forecast_d['BASE_DATE']=Forecast[(Forecast['JRNY_DATE']==d[0]+datetime.timedelta(days=-364))]['JRNY_DATE']
Forecast_d['JRNY_DATE']=d[0]
Forecast=pd.DataFrame.append(Forecast,Forecast_d,ignore_index=True,sort=False)
#processing time
endtime=datetime.datetime.now()
processingtime=(endtime-starttime)/60
print('\n','generating data time ',processingtime,'\n')
starttime=datetime.datetime.now()
#create additional columns to be used for growth and seasonality look up
Forecast['O_LINE_GROUP']=Forecast['ORIGIN_LINE'].apply(line_group)
Forecast['D_LINE_GROUP']=Forecast['DEST_LINE'].apply(line_group)
Forecast['TIME_PERIOD']=Forecast['JRNY_START_15MIN_BAND'].apply(time_period)
Forecast['WEEKDAY_WEEKEND']=Forecast['DAY_OF_WEEK'].apply(weekday_weekend)
Forecast['MONTH']=Forecast['JRNY_DATE'].apply(return_month)
Forecast['YEAR']=Forecast['JRNY_DATE'].apply(return_year)
Forecast['COMP_KEY']=Forecast.apply(lambda x: lookup_key(x['TIME_PERIOD'],x['WEEKDAY_WEEKEND'],x['O_LINE_GROUP'],x['D_LINE_GROUP']), axis=1)
Forecast['G_FACTOR']=Forecast.apply(lambda x: growth_factor_long(x['COMP_KEY'],x['MONTH'],x['YEAR']),axis=1)
Forecast['F_TRIPS']=Forecast['PASSENGER_TRIPS']*Forecast['G_FACTOR']
#export data
Forecast.to_csv(datestamp+'_Forecast_Output.csv', index = None, header=True)
#processing time
endtime=datetime.datetime.now()
processingtime=(endtime-starttime)/60
print('\n','Forecasting time ',processingtime,'\n')*