diff --git a/UI/main.py b/UI/main.py index 5e0e855df125f060799760ed99e7f121491c4fd8..0583a6ed204633d56a341d95cf29241921282adb 100644 --- a/UI/main.py +++ b/UI/main.py @@ -1240,6 +1240,67 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow): self.freeze = False print('complete') + df = self.transects_df.loc[:, ['tr_q_total', 'meas_label_user', 'start_time', 'end_time']] + df['mid_time'] = (df['start_time'] + df['end_time']) / 2 + df['mid_time'] = df['mid_time'] - np.nanmin(df['mid_time']) + df['meas_label_user'] = pd.to_numeric(df['meas_label_user']) + mean_q = np.nanmean(df['tr_q_total']) + df['delta_q'] = mean_q - df['tr_q_total'] + from sklearn import linear_model + x = df[['meas_label_user', 'mid_time']] + y = df['delta_q'] + regr = linear_model.LinearRegression() + regr.fit(x, y) + print('Intercept: \n', regr.intercept_) + print('Coefficients: \n', regr.coef_) + + import statsmodels.api as sm + x = sm.add_constant(x) # adding a constant + model = sm.OLS(y, x).fit() + predictions = model.predict(x) + print_model = model.summary() + print(print_model) + + import matplotlib.pyplot as plt + from sklearn import linear_model + from mpl_toolkits.mplot3d import Axes3D + X = df[['meas_label_user', 'mid_time']].values.reshape(-1, 2) + Y = df['delta_q'] + x = X[:, 0] + y = X[:, 1] + z = Y + x_pred = np.linspace(min(x), max(x), 30) # range of porosity values + y_pred = np.linspace(min(y), max(y), 30) # range of brittleness values + xx_pred, yy_pred = np.meshgrid(x_pred, y_pred) + model_viz = np.array([xx_pred.flatten(), yy_pred.flatten()]).T + ols = linear_model.LinearRegression() + model = ols.fit(X, Y) + predicted = model.predict(model_viz) + r2 = model.score(X, Y) + + plt.style.use('default') + fig = plt.figure(figsize=(12, 4)) + ax1 = fig.add_subplot(131, projection='3d') + ax2 = fig.add_subplot(132, projection='3d') + ax3 = fig.add_subplot(133, projection='3d') + axes = [ax1, ax2, ax3] + for ax in axes: + ax.plot(x, y, z, color='k', zorder=15, linestyle='none', marker='o', alpha=0.1) + ax.scatter(xx_pred.flatten(), yy_pred.flatten(), predicted, facecolor=(0, 0, 0, 0), s=20, + edgecolor='#70b3f0') + ax.set_xlabel('Distance (m)', fontsize=12) + ax.set_ylabel('Time (s)', fontsize=12) + ax.set_zlabel('Delta Q (m3/s)', fontsize=12) + ax.locator_params(nbins=4, axis='x') + ax.locator_params(nbins=5, axis='x') + ax1.view_init(elev=28, azim=120) + ax2.view_init(elev=4, azim=114) + ax3.view_init(elev=60, azim=165) + fig.suptitle('$R^2 = %.2f$' % r2, fontsize=20) + fig.tight_layout() + fig.savefig(r"D:\0_INRAE\regression.png", dpi=300, bbox_inches='tight') + + def load_tables(self): """ Draw tables. """