Public
Edited
Jul 18, 2023
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
// Access Adélie data here:
adelie = d3.csv(
"https://portal.edirepository.org/nis/dataviewer?packageid=knb-lter-pal.219.5&entityid=002f3893385f710df69eeebe893144ff",
d3.autoType
)
Insert cell
// Access chinstrap data here:
chinstrap = d3.csv(
"https://portal.edirepository.org/nis/dataviewer?packageid=knb-lter-pal.221.8&entityid=fe853aa8f7a59aa84cdd3197619ef462",
d3.autoType
)
Insert cell
Insert cell
Insert cell
// Make combined version, penguinsCombo, here
// penguinsCombo = adelie.concat(gentoo, chinstrap)
penguinsCombo = [...adelie, ...gentoo, ...chinstrap]
Insert cell
Insert cell
Insert cell
// Create the wrangled version of penguins here:
penguins = penguinsCombo.map((d) => ({
species: d.Species.split(" ")[0],
island: d.Island,
sex: d.Sex == null || d.Sex == "." ? null : d.Sex.toLowerCase(),
bill_length_mm: d["Culmen Length (mm)"],
bill_depth_mm: d["Culmen Depth (mm)"],
body_mass_g: d["Body Mass (g)"],
flipper_length_mm: d["Flipper Length (mm)"]
}))
Insert cell
Insert cell
// penguins = penguinsKeyCopy
Insert cell
Insert cell
Insert cell
import {aq, op} from "@uwdata/arquero"
Insert cell
import { Wrangler } from "@observablehq/data-wrangler"
Insert cell
Insert cell
// Convert your array of objects to an Arquero table here:
// penguinsTable = aq.from(penguins)
Insert cell
Insert cell
// Write Arquero code to perform the steps above here:
aq
.from(penguins)
.filter((d) => d.sex === "female")
.select("species", "bill_depth_mm", "bill_length_mm")
.derive({ bill_ratio: (d) => d.bill_length_mm / d.bill_depth_mm })
.groupby("species")
.rollup({ mean_bill_ratio: (d) => op.mean(d.bill_ratio) })
.view()
Insert cell
Wrangler(penguins)
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
import { PlotMatrix } with { penguins as data } from "@observablehq/autoplot-matrix"
Insert cell
import { PlotMatrix as pm } with { fifa as data } from "@observablehq/autoplot-matrix"
Insert cell
fifa = d3.csv(
"https://assets.datacamp.com/production/repositories/288/datasets/026a5211b906ac118a09b1a0dbf7df48faafb379/fifa.csv",
d3.autoType
)
Insert cell
pm(fifa)
Insert cell
Insert cell
// Make a copy of penguins here, stored as data:
// data = penguins
Insert cell
Insert cell
// Make the pairplot with PlotMatrix here:
PlotMatrix(penguins)
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
import {scale} from "@chrispahm/hierarchical-clustering"
Insert cell
// Make a subset of penguins with complete cases (filter out values where bill length is null):
penguinsComplete = penguins.filter((d) => d.bill_length_mm !== null) // && d.sex == "female")
Insert cell
// Create a scaled version of the values (non-numeric will be NaN, which is fine..):
penguinsScale = scale(penguinsComplete)
Insert cell
// Convert the array of objects to an array of arrays:
penguinsArray = penguinsScale.map((d) => [
d.bill_length_mm,
d.bill_depth_mm,
d.body_mass_g,
d.flipper_length_mm
])
Insert cell
Insert cell
Insert cell
// Use ml.js KMeans() method to perform k-means clustering for k centroids:
penguinsClusters = ML.KMeans(penguinsArray, 3)
Insert cell
Insert cell
// Combine the cluster values for each element with the original female penguins data:
penguinsKmeans = penguinsComplete.map((d, i) => ({
...d,
clusterNo: penguinsClusters.clusters[i]
}))
Insert cell
Insert cell
myChart = Plot.plot({
// Remember to name if you want to use embeds!
marks: [
Plot.text(penguinsKmeans, {
x: "body_mass_g",
y: "flipper_length_mm",
text: "clusterNo",
fontSize: "15px",
fontWeight: 500,
fill: "species",
tip: true
})
],
color: { legend: true }
})
Insert cell
clusterCounts = d3.rollup(
penguinsKmeans,
(v) => v.length,
(d) => d.species,
(d) => d.clusterNo
)
Insert cell
Insert cell
Insert cell
ML = require("https://www.lactame.com/lib/ml/6.0.0/ml.min.js")
Insert cell
import {penguinsKeyCopy} from "@observablehq/ds-workflows-in-js-session-2-key"
Insert cell
noUse = FileAttachment("fiddlerCrabBodySize.csv") // Note: this is only added here so that the file is attached in the forked version
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more