using DataFrames using LinearAlgebra using CSV using DataFramesMeta using Plots using StatsPlots begin df = CSV.read("compiled.csv", DataFrame) df.bb_volume = df.bb_length .* df.bb_width .* df.bb_height @eachrow! df begin @newcol :Ix::Vector{Float64} @newcol :Iy::Vector{Float64} @newcol :Iz::Vector{Float64} @newcol :Ibar::Vector{Float64} I = [ :Ixx :Ixy :Ixz :Iyx :Iyy :Iyz :Izx :Izy :Izz ] (:Ix, :Iy, :Iz) = eigvals(I) :Ibar = :Ix^2 + :Iy^2 + :Iz^2 |> sqrt end # Convert material to scalar begin kv = Dict(reverse.(enumerate(Set(df.material_name)))) mats = [] for material in df.material_name push!(mats, kv[material]) end df.material_index = mats end # Remove columns not needed for analysis df = df[!, [:mass, :volume, :density, :area, :bb_volume, :Ibar]] # Remove outliers df = df[df.bb_volume.<1e6, :] df = df[df.mass.<1000, :] end @df df cornerplot(cols(1:4), compact = true) # plot(df.mass) # histogram(df.mass) scatter(df.mass, df.volume) CSV.write("prepped.csv", df)