spyder-ide / spyder

Official repository for Spyder - The Scientific Python Development Environment
https://www.spyder-ide.org
MIT License
8.18k stars 1.58k forks source link

Spyder Internal Problem: Error Encountered During Spectroscopic Data Analysis #22000

Closed Sadiamitu closed 4 months ago

Sadiamitu commented 4 months ago

Description

What steps will reproduce the problem?

"Spyder has encountered an internal problem!" this dialouge box appears whenever i try to run the following code. I have tried it in another computer as well but it also shows the same dialogue box. The code is running but the figures are not generating in the side window. I am not sure which is ccausing the problem.

import pandas as pd import numpy as np from scipy.signal import savgol_filter from sklearn.cross_decomposition import PLSRegression from sklearn.metrics import mean_squared_error, r2_score import matplotlib.pyplot as plt

Load the data

train_df = pd.read_csv('MIR_train.csv') test_df = pd.read_csv('MIR_test.csv') full_df = pd.concat([train_df, test_df])

Specify the properties and those to log-transform

prop = ['eoc_tot_c', 'n_tot_ncs', 'ph_h2o', 'clay_tot_psa', 'silt_tot_psa', 'sand_tot_psa', 'caco3', 'cecd_nh4', 'ca_nh4d', 'mg_nh4d', 'k_nh4d', 'p_mehlich3'] prop_to_log_transform = ['eoc_tot_c', 'n_tot_ncs', 'p_mehlich3', 'cecd_nh4', 'caco3', 'ca_nh4d', 'mg_nh4d', 'k_nh4d']

Initial log transformation

for property in prop_to_log_transform: train_df[property] = np.log1p(train_df[property]) test_df[property] = np.log1p(test_df[property])

Apply Savitzky-Golay filter to the spectra data

spectra_columns = train_df.columns[55:] # Adjust the index appropriately X_train_filtered = savgol_filter(train_df[spectra_columns], window_length=11, polyorder=2, axis=0) X_test_filtered = savgol_filter(test_df[spectra_columns], window_length=11, polyorder=2, axis=0)

X_train_filtered = pd.DataFrame(X_train_filtered, columns=spectra_columns) X_test_filtered = pd.DataFrame(X_test_filtered, columns=spectra_columns)

Define the evaluation function

def perform_plsr_and_evaluate(X_train, y_train, X_test, y_test, property_name, log_transformed=False): pls = PLSRegression(n_components=10) pls.fit(X_train, y_train) y_pred = pls.predict(X_test).flatten()

if log_transformed:
    y_pred = np.expm1(y_pred)
    y_test = np.expm1(y_test)

r2 = r2_score(y_test, y_pred)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
bias = np.mean(y_pred - y_test)
rpd = np.std(y_test) / rmse

plt.figure(figsize=(8, 6))
plt.scatter(y_test, y_pred, edgecolors=(0, 0, 0))
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'k--', lw=4)
plt.xlabel('Measured')
plt.ylabel('Predicted')
plt.title(f'{property_name} (R^2={r2:.2f}, RMSE={rmse:.2f}, Bias={bias:.2f}, RPD={rpd:.2f})')
plt.show()

return r2, rmse, bias, rpd

from sklearn.model_selection import cross_val_predict def pls(X_train, Y_train, X_test, n_components=50): rmse_scores = [] for n_comp in range(1, n_components + 1): my_plsr = PLSRegression(n_components=n_comp, scale=True) y_pred = cross_val_predict(my_plsr, X_train, Y_train, cv=10) rmse = np.sqrt(mean_squared_error(Y_train, y_pred)) rmse_scores.append(rmse) best_ncomp = rmse_scores.index(min(rmse_scores)) + 1

best_model = PLSRegression(n_components=best_ncomp, scale=True)
best_model.fit(X_train, Y_train)
test_preds = best_model.predict(X_test)
return test_preds

Process each property individually, ensuring data cleaning is specific to each property

Process each property individually, ensuring data cleaning is specific to each property

results = {} stats = {} for property in prop: print(f"Processing: {property}") current_train_df = train_df.dropna(subset=[property, spectra_columns]) current_test_df = test_df.dropna(subset=[property, spectra_columns]) full_current_df = full_df.dropna(subset=[property, *spectra_columns])

y_train = current_train_df[property]
y_test = current_test_df[property]
y_full = full_current_df[property]
X_train_current = current_train_df[spectra_columns]
X_test_current = current_test_df[spectra_columns]

log_transformed = property in prop_to_log_transform
results[property] = perform_plsr_and_evaluate(X_train_current, y_train, X_test_current, y_test, property, log_transformed)

# Collecting stats
stats[property] = {
    'Total Count': y_full.count(),
    'Total Min': y_full.min(),
    'Total Max': y_full.max(),
    'Train Count': y_train.count(),
    'Train Min': y_train.min(),
    'Train Max': y_train.max(),
    'Test Count': y_test.count(),
    'Test Min': y_test.min(),
    'Test Max': y_test.max()
}

Summary tables

results_df = pd.DataFrame(results).T stats_df = pd.DataFrame(stats).T

print("Performance Metrics:") print(results_df) print("\nData Stats:") print(stats_df)

Creating a DataFrame to summarize the results

summary_table = pd.DataFrame(results).T # Transpose to have properties as rows summary_table.index.name = 'Property' summary_table.columns = ['R²', 'RMSE', 'Bias', 'RPD']

print(summary_table)

Traceback

Traceback (most recent call last):
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 633, in eventFilter
    self._update_thumbnail_size()
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 738, in _update_thumbnail_size
    self._setup_thumbnail_size(thumbnail)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 722, in _setup_thumbnail_size
    thumbnail.scale_canvas_size(max_canvas_size)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 996, in scale_canvas_size
    if fwidth / fheight > 1:
ZeroDivisionError: division by zero
Traceback (most recent call last):
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 633, in eventFilter
    self._update_thumbnail_size()
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 738, in _update_thumbnail_size
    self._setup_thumbnail_size(thumbnail)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 722, in _setup_thumbnail_size
    thumbnail.scale_canvas_size(max_canvas_size)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 996, in scale_canvas_size
    if fwidth / fheight > 1:
ZeroDivisionError: division by zero
Traceback (most recent call last):
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 633, in eventFilter
    self._update_thumbnail_size()
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 738, in _update_thumbnail_size
    self._setup_thumbnail_size(thumbnail)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 722, in _setup_thumbnail_size
    thumbnail.scale_canvas_size(max_canvas_size)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 996, in scale_canvas_size
    if fwidth / fheight > 1:
ZeroDivisionError: division by zero
Traceback (most recent call last):
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 633, in eventFilter
    self._update_thumbnail_size()
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 738, in _update_thumbnail_size
    self._setup_thumbnail_size(thumbnail)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 722, in _setup_thumbnail_size
    thumbnail.scale_canvas_size(max_canvas_size)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 996, in scale_canvas_size
    if fwidth / fheight > 1:
ZeroDivisionError: division by zero
Traceback (most recent call last):
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 633, in eventFilter
    self._update_thumbnail_size()
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 738, in _update_thumbnail_size
    self._setup_thumbnail_size(thumbnail)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 722, in _setup_thumbnail_size
    thumbnail.scale_canvas_size(max_canvas_size)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 996, in scale_canvas_size
    if fwidth / fheight > 1:
ZeroDivisionError: division by zero
Traceback (most recent call last):
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 633, in eventFilter
    self._update_thumbnail_size()
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 738, in _update_thumbnail_size
    self._setup_thumbnail_size(thumbnail)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 722, in _setup_thumbnail_size
    thumbnail.scale_canvas_size(max_canvas_size)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 996, in scale_canvas_size
    if fwidth / fheight > 1:
ZeroDivisionError: division by zero
Traceback (most recent call last):
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 633, in eventFilter
    self._update_thumbnail_size()
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 738, in _update_thumbnail_size
    self._setup_thumbnail_size(thumbnail)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 722, in _setup_thumbnail_size
    thumbnail.scale_canvas_size(max_canvas_size)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 996, in scale_canvas_size
    if fwidth / fheight > 1:
ZeroDivisionError: division by zero
Traceback (most recent call last):
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 633, in eventFilter
    self._update_thumbnail_size()
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 738, in _update_thumbnail_size
    self._setup_thumbnail_size(thumbnail)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 722, in _setup_thumbnail_size
    thumbnail.scale_canvas_size(max_canvas_size)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 996, in scale_canvas_size
    if fwidth / fheight > 1:
ZeroDivisionError: division by zero
Traceback (most recent call last):
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 633, in eventFilter
    self._update_thumbnail_size()
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 738, in _update_thumbnail_size
    self._setup_thumbnail_size(thumbnail)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 722, in _setup_thumbnail_size
    thumbnail.scale_canvas_size(max_canvas_size)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 996, in scale_canvas_size
    if fwidth / fheight > 1:
ZeroDivisionError: division by zero
Traceback (most recent call last):
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 633, in eventFilter
    self._update_thumbnail_size()
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 738, in _update_thumbnail_size
    self._setup_thumbnail_size(thumbnail)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 722, in _setup_thumbnail_size
    thumbnail.scale_canvas_size(max_canvas_size)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 996, in scale_canvas_size
    if fwidth / fheight > 1:
ZeroDivisionError: division by zero
Traceback (most recent call last):
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 633, in eventFilter
    self._update_thumbnail_size()
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 738, in _update_thumbnail_size
    self._setup_thumbnail_size(thumbnail)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 722, in _setup_thumbnail_size
    thumbnail.scale_canvas_size(max_canvas_size)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 996, in scale_canvas_size
    if fwidth / fheight > 1:
ZeroDivisionError: division by zero
Traceback (most recent call last):
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 633, in eventFilter
    self._update_thumbnail_size()
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 738, in _update_thumbnail_size
    self._setup_thumbnail_size(thumbnail)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 722, in _setup_thumbnail_size
    thumbnail.scale_canvas_size(max_canvas_size)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 996, in scale_canvas_size
    if fwidth / fheight > 1:
ZeroDivisionError: division by zero
Traceback (most recent call last):
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 633, in eventFilter
    self._update_thumbnail_size()
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 738, in _update_thumbnail_size
    self._setup_thumbnail_size(thumbnail)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 722, in _setup_thumbnail_size
    thumbnail.scale_canvas_size(max_canvas_size)
  File "C:\Users\smitu2\Anaconda3\lib\site-packages\spyder\plugins\plots\widgets\figurebrowser.py", line 996, in scale_canvas_size
    if fwidth / fheight > 1:
ZeroDivisionError: division by zero

Versions

Dependencies


# Mandatory:
atomicwrites >=1.2.0          :  1.4.0 (OK)
chardet >=2.0.0               :  4.0.0 (OK)
cloudpickle >=0.5.0           :  2.0.0 (OK)
cookiecutter >=1.6.0          :  1.7.3 (OK)
diff_match_patch >=20181111   :  20200713 (OK)
intervaltree >=3.0.2          :  3.1.0 (OK)
IPython >=7.6.0               :  8.7.0 (OK)
jedi >=0.17.2;<0.19.0         :  0.18.1 (OK)
jsonschema >=3.2.0            :  4.16.0 (OK)
keyring >=17.0.0              :  23.4.0 (OK)
nbconvert >=4.0               :  6.4.4 (OK)
numpydoc >=0.6.0              :  1.5.0 (OK)
paramiko >=2.4.0              :  2.8.1 (OK)
parso >=0.7.0;<0.9.0          :  0.8.3 (OK)
pexpect >=4.4.0               :  4.8.0 (OK)
pickleshare >=0.4             :  0.7.5 (OK)
psutil >=5.3                  :  5.9.0 (OK)
pygments >=2.0                :  2.17.2 (OK)
pylint >=2.5.0;<2.10.0        :  2.9.6 (OK)
pyls_spyder >=0.4.0           :  0.4.0 (OK)
pylsp >=1.2.2;<1.3.0          :  1.2.4 (OK)
pylsp_black >=1.0.0           :  None (OK)
qdarkstyle =3.0.2             :  3.0.2 (OK)
qstylizer >=0.1.10            :  0.1.10 (OK)
qtawesome >=1.0.2             :  1.0.3 (OK)
qtconsole >=5.1.0             :  5.3.2 (OK)
qtpy >=1.5.0                  :  2.2.0 (OK)
rtree >=0.9.7                 :  0.9.7 (OK)
setuptools >=49.6.0           :  65.6.3 (OK)
sphinx >=0.6.6                :  5.0.2 (OK)
spyder_kernels >=2.1.1;<2.2.0 :  2.1.3 (OK)
textdistance >=4.2.0          :  4.2.1 (OK)
three_merge >=0.1.1           :  0.1.1 (OK)
watchdog >=0.10.3             :  2.1.6 (OK)
zmq >=17                      :  23.2.0 (OK)

# Optional:
cython >=0.21                 :  0.29.32 (OK)
matplotlib >=2.0.0            :  3.6.2 (OK)
numpy >=1.7                   :  1.25.2 (OK)
pandas >=1.1.1                :  1.4.2 (OK)
scipy >=0.17.0                :  1.10.1 (OK)
sympy >=0.7.3                 :  1.11.1 (OK)
ccordoba12 commented 4 months ago

Hey @Sadiamitu, thanks for reporting. This problem is fixed in our latest version available in Anaconda (5.5.1). Please update by closing Spyder, opening the Anaconda Prompt and running there the commands mentioned in our documentation.