У меня есть скрипт python 3.7 (spyder), который собирает данные из заданных файлов .xlsx и использует эти данные для создания функции позвоночника cubi c.
После этого шага скрипт просматривая все файлы в данном каталоге и производя некоторые вычисления / корректировки исходных файлов (используя функцию сплайна cubi c) и, наконец, сохраняет новые файлы как новые.
Я попытался экспортировать сценарий, чтобы его можно было запустить на другом компьютере (я использовал «Auto Py to Exe»), который, однако, прекрасно работал:
- .exe-файл очень большой (300 МБ +)
- Это супер супер медленно
Что я здесь не так делаю? Поскольку этот файл буквально состоит из нескольких строк кода, он не должен быть таким большим, плюс он действительно должен работать за 1-2 секунды.
Это импортированные модули:
import numpy as np
import pandas as pd
from scipy import interpolate
from scipy.interpolate import CubicSpline
import os
Вот полный код
import numpy as np
import pandas as pd
from scipy import interpolate
from scipy.interpolate import CubicSpline
import os
OESbaseline = pd.read_excel('OES_CubicSplineBaseline.xlsx')
x_baseline = OESbaseline['pre-CS']
y_baseline = OESbaseline['sample_known_ppm_with_flux']
cs = CubicSpline(x_baseline, y_baseline)
tck = interpolate.splrep(x_baseline, y_baseline)
def f(x_baseline):
return interpolate.splev(x_baseline, tck)
basepath = "some_path"
for filename in os.listdir(basepath):
file = os.path.join(basepath, filename)
if os.path.isfile(file):
OESrun = pd.read_csv(file, skiprows=2)
CorrectedData = f(OESrun['Concentration'])
CorrectedData[CorrectedData < 0] = 0
CorrectedDF = pd.DataFrame({'SampleID': OESrun['Label'],
'Recvd Wt. (kgs)': np.nan,
'AQR (ppm)': np.around(CorrectedData,3),
'Grav (ppm)': np.nan,
'FA Notes': np.nan,
'AQR (R1) (ppm)': np.nan,
'Grav (R1) (ppm)': np.nan,
'Assay Wt.(R1) (gr)': np.nan,
'AQR (R2) (ppm)': np.nan,
'Grav (R2) (ppm)': np.nan,
'Assay Wt.(R2) (gr)': np.nan,
'CN (ppm)': np.nan,
'CN R (ppm)': np.nan,
'': np.nan,
'Run Assay Wt.': OESrun['Weight'],
'Grav. (OPT)': np.nan,
# 'OES Conc. (ppm)': np.around(OESrun['Concentration'],3),
# 'CS Conc. (OPT)': np.around(CorrectedData*(1/34.285),4),
'Recvd Wt. (lbs)': np.nan})
# (OPTIONAL) remove the second (267) wavelength readings
# CorrectedDF_1wave = CorrectedDF.iloc[::2, :]
oldname = os.path.splitext(filename)[0]
oldext = os.path.splitext(filename)[1]
new_filename = str(oldname + '_corrected' + oldext)
# export to Excel
CorrectedDF.to_csv(os.path.join(basepath, new_filename))
# (OPTIONAL) export to CSV (1 wave only)
#CorrectedDF_1wave.to_csv(OESrun_filename+'_Corrected'+'.csv')