More Ex 3

This commit is contained in:
Ceres 2026-02-15 13:29:47 +00:00
parent 8151dd11c8
commit 5c72bc22b4
Signed by: ceres-sees-all
GPG key ID: 9814758436430045

View file

@ -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()