# Get set up, but we'll start on the board today
import polars as pl
import scipy as sp
import numpy as np# change penguins to carnivora
url = "https://roualdes.sfo3.digitaloceanspaces.com/data/carnivora.csv"
df = pl.read_csv(url, null_values = ["NA"]).select("SuperFamily", "BW").drop_nulls()x1 = df.select(pl.col("SuperFamily") == "Feliformia").cast(pl.Float64).to_numpy()
X = np.c_[np.ones_like(df[:, 1]), x1]def ll_lm(theta, data):
X = data["X"]
y = data["y"]
N = np.size(y)
lm = np.zeros_like(y)
for n in range(N):
lm[n] = np.sum(X[n] * theta)
d = y - lm
return np.sum(d * d)init = sp.stats.norm().rvs(size = 2)
d = {"X": X, "y": df["BW"].to_numpy()}
o = sp.optimize.minimize(ll_lm, init, args = (d,), method = "L-BFGS-B")
np.sum(o["x"])np.float64(351.7162524773699)
(df
.group_by("SuperFamily")
.agg(pl.col("BW").mean().alias("mean BW"))
)
shape: (2, 2)
| SuperFamily | mean BW |
|---|---|
| str | f64 |
| "Caniformia" | 164.970882 |
| "Feliformia" | 351.714286 |