From 5c72bc22b42fbdfa5494ea53cdfd017c292d3cb0 Mon Sep 17 00:00:00 2001 From: Ceres Date: Sun, 15 Feb 2026 13:29:47 +0000 Subject: [PATCH] More Ex 3 --- Exercise 3/exercise3.py | 65 ++++++++++++++++++++++++++++++++--------- 1 file changed, 51 insertions(+), 14 deletions(-) diff --git a/Exercise 3/exercise3.py b/Exercise 3/exercise3.py index 117054c..9da9f66 100644 --- a/Exercise 3/exercise3.py +++ b/Exercise 3/exercise3.py @@ -2,6 +2,7 @@ import matplotlib.pyplot as plt import numpy as np from scipy import integrate import pandas as pd +from sklearn.linear_model import LinearRegression # from tqdm import tqdm #Import all needed modules columns = ["Material", "Density", "Radius", "Mass", "Temperature", "Pressure", "Height", "Time"] @@ -46,6 +47,8 @@ def columnStats(column, units): df = getData('exercise3data.csv') +####Part 1 + # for i in range(len(columns)): # if columns[i] == "Material": # continue @@ -65,21 +68,55 @@ df = getData('exercise3data.csv') # plt.legend() # plt.show() -dfNoMaterial = df.drop("Material", axis=1) -corrMatrix = dfNoMaterial.corr(method='pearson') -print(corrMatrix) +####Part 2 -fig, ax = plt.subplots() -im = ax.imshow(corrMatrix, cmap="gnuplot", vmin=-1, vmax=1) +# dfNoMaterial = df.drop("Material", axis=1) +# corrMatrix = dfNoMaterial.corr(method='pearson') +# print(corrMatrix) -ax.set_xticks(range(len(columnsNoMaterial)), labels=columnsNoMaterial) -ax.set_yticks(range(len(columnsNoMaterial)), labels=columnsNoMaterial) +# fig, ax = plt.subplots() +# im = ax.imshow(corrMatrix, cmap="gnuplot", vmin=-1, vmax=1) -for i in range(len(columnsNoMaterial)): - for j in range(len(columnsNoMaterial)): - text = ax.text(j, i, round(corrMatrix[columnsNoMaterial[i]][columnsNoMaterial[j]], 2), - ha="center", va="center", color="w") +# ax.set_xticks(range(len(columnsNoMaterial)), labels=columnsNoMaterial) +# ax.set_yticks(range(len(columnsNoMaterial)), labels=columnsNoMaterial) -fig.colorbar(im) -fig.tight_layout() -plt.show() +# for i in range(len(columnsNoMaterial)): +# for j in range(len(columnsNoMaterial)): +# text = ax.text(j, i, round(corrMatrix[columnsNoMaterial[i]][columnsNoMaterial[j]], 2), +# ha="center", va="center", color="w") + +# fig.colorbar(im) +# fig.tight_layout() +# plt.show() + +####Part 3 + +features = df[["Density", "Radius", "Mass", "Temperature", "Pressure", "Height"]] +targets = df["Time"] + +linearReg = LinearRegression() +linearFit = linearReg.fit(features, targets) + +for i in range(len(linearFit.feature_names_in_)): + print(f'The coefficient of {linearFit.feature_names_in_[i]} is {linearFit.coef_[i]} {units[i+1]}') + +ironDf = df[df["Material"] == "iron"] + +def fitByMeans(density, radius, mass, temp, pressure, height): + coefs = linearFit.coef_ + time = linearFit.intercept_+(density*coefs[0])+(radius*coefs[1])+(mass*coefs[2])+(temp*coefs[3])+(pressure*coefs[4])+(height*coefs[5]) + return time + +for radius in radii: + radiusDf = ironDf[ironDf["Radius"] == radius] + plt.scatter(radiusDf["Height"], radiusDf["Time"],label="Experimental data") + radiusFeatures = radiusDf[["Density", "Radius", "Mass", "Temperature", "Pressure", "Height"]] + plt.scatter(radiusDf["Height"], linearReg.predict(radiusFeatures),label="Predicted data") + heightBounds = [radiusDf["Height"].min(),radiusDf["Height"].max()] + linearByMeans = [fitByMeans(radiusDf["Density"].mean(),radiusDf["Radius"].mean(),radiusDf["Mass"].mean(),radiusDf["Temperature"].mean(),radiusDf["Pressure"].mean(),radiusDf["Height"].min()),fitByMeans(radiusDf["Density"].mean(),radiusDf["Radius"].mean(),radiusDf["Mass"].mean(),radiusDf["Temperature"].mean(),radiusDf["Pressure"].mean(),radiusDf["Height"].max())] + plt.plot(heightBounds,linearByMeans,label="Fit Using Means") + plt.xlabel("Drop Height/m") + plt.ylabel("Fall Time/s") + plt.legend() + plt.title(f'Iron data and predictions for radius of {radius}m') + plt.show()