Public
Edited
Mar 27, 2023
Insert cell
Insert cell
data = FileAttachment("imdb_most_voted_500.json").json()
Insert cell
genres = Array.from(new Set(data.flatMap((d) => d['genres']))).sort()
Insert cell
import { tidy, groupBy, summarize } from "@pbeshai/tidyjs"
Insert cell
genreCounts = genres.map((genre) => ({
genre,
count: data.filter((d) => d['genres'].includes(genre)).length,
}));
Insert cell
genreSetCounts = Array.from(new Set(data.map((d) => d['genres'].sort().join(',')))).map((genres) => ({
genres: genres.split(','),
count: data.filter((d) => d['genres'].sort().join(',') === genres).length,
}));
Insert cell
genreSetCounts.reduce((acc, d) => acc + d.count, 0)
Insert cell
data.map((d) => d['genres'].sort().join(','))
Insert cell
genreSetCounts.filter((d) => d.genres.includes("Action") && d.genres.includes("Adventure"))
Insert cell
hashGenreSet = (genres) => genres.sort().join(',');
Insert cell
dehashGenreSet = (genresHash) => genresHash.split(',')
Insert cell
genreSetHashes = Array.from(new Set(data.map((d) => hashGenreSet(d['genres']))))
Insert cell
genreSetCountsRefactored = genreSetHashes.map((genresHash) => ({
genres: dehashGenreSet(genresHash),
count: data.filter((d) => hashGenreSet(d['genres']) === genresHash).length,
}))
Insert cell
genreSetCountsRefactored.filter((d) => d.genres.includes("Action") && d.genres.includes("Adventure"))
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