import numpy as np
import pandas as pd
from PyQt5 import QtWidgets
from gui.ui.Standardize import Ui_Form
from gui.util.Modules import Modules
from libpyhat.spectral_data import SpectralData
[docs]
class Standardize(Ui_Form, Modules):
[docs]
def setupUi(self, Form):
super().setupUi(Form)
Modules.setupUi(self, Form)
[docs]
def run(self):
if 'Standardization Vectors' in self.datakeys:
pass
else:
Modules.data_count += 1
self.list_amend(
self.datakeys, Modules.data_count,
'Standardization Vectors'
)
datakey_to_scale = self.chooseDataComboBox.currentText()
datakey_to_fit = self.comboBox.currentText()
try:
self.data[datakey_to_scale].scale(
df_to_fit=self.data[datakey_to_fit].df
)
print(
datakey_to_scale + " standardized using spectral channel "
"mean and standard deviations from " +
datakey_to_fit
)
try:
scaler = self.data[datakey_to_scale].scaler
scaler_out = pd.DataFrame(
np.vstack((scaler.var_, scaler.mean_)).T,
columns=['variance', 'mean']
)
spect_label = self.data[datakey_to_fit].spect_label
scaler_out.index = [(spect_label, x) for x in
self.data[datakey_to_fit].df[
spect_label].columns.values]
scaler_out = scaler_out.T
scaler_out.reset_index(
names=[('meta', 'vector')],
inplace=True
)
scaler_out[('meta', 'Dataset')] = datakey_to_fit
scaler_out.columns = pd.MultiIndex.from_tuples(
scaler_out.columns
)
try:
self.data['Standardization Vectors'] = SpectralData(
pd.concat(
[self.data['Standardization Vectors'].df,
scaler_out]
),
name='Standardization Vectors'
)
except:
self.data['Standardization Vectors'] = SpectralData(
scaler_out, name='Standardization Vectors',
meta_label='meta', spect_label=spect_label
)
except:
pass
except:
pass
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Standardize()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())