Public
Edited
Feb 23, 2023
Fork of Setup
5 forks
Insert cell
Insert cell
Insert cell
Insert cell
NYCHA_Development_Data_Book.csv
Type Table, then Shift-Enter. Ctrl-space for more options.

Insert cell
Insert cell
Insert cell
Insert cell
url = "https://data.cityofnewyork.us/resource/evjd-dqpz.csv"
Insert cell
nycha_fetched_data = d3.csv(url, d3.autoType)
Insert cell
Insert cell
// using an index to select an item from an array
nycha_fetched_data[0]
Insert cell
// this is like extracting a column from the data
nycha_fetched_data.map((d) => d.development)
Insert cell
// calculate the minimum of a column
d3.min(nycha_fetched_data, (d) => d.total_number_of_apartments)
Insert cell
// calculate the minimum and maximum of a column
d3.extent(nycha_fetched_data, (d) => d.total_population)
Insert cell
// get a sample of the data
sample = nycha_fetched_data.filter((d) => d.total_population > 400)
Insert cell
Insert cell
Insert cell
Insert cell
Number(nycha_fetched_data[0].avg_monthly_gross_rent.replace(/[^0-9.-]+/g, ""))
Insert cell
Insert cell
import { tidy, mutate, arrange, desc } from "@pbeshai/tidyjs"
Insert cell
nycha_clean_data = tidy(
nycha_fetched_data,

// 1. Cast Monthly Gross Rent as Numbers
mutate({
avg_monthly_gross_rent: (d) => {
if (d.avg_monthly_gross_rent !== null)
return Number(d.avg_monthly_gross_rent.replace(/[^0-9.-]+/g, ""));
else return 0;
}
})
)
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
// Type your code here:
Insert cell
Insert cell
Insert cell
// your code here
Insert cell
Insert cell
Insert cell
Plot.dot(nycha_clean_data, {
x: (d) => d.avg_monthly_gross_rent / d.avg_no_r_r_per_apartment,
y: "total_number_of_apartments",
fill: "blue"
}).plot()
Insert cell
Insert cell
Plot.dot(nycha_clean_data, {
x: (d) => d.avg_monthly_gross_rent / d.avg_no_r_r_per_apartment,
y: "total_number_of_apartments",
// This applies a function to interpolate the color values based on the rent/no. of rooms
fill: (d) => d.avg_monthly_gross_rent / d.avg_no_r_r_per_apartment
}).plot({
color: { scheme: "reds" }
})
Insert cell
Let's color the stroke of our dots according to whether the average gross rent is larger than $600:
Insert cell
Plot.dot(nycha_clean_data, {
x: (d) => d.avg_monthly_gross_rent / d.avg_no_r_r_per_apartment,
y: "total_number_of_apartments",
// This applies a function to interpolate the color values based on the rent/no. of rooms
fill: (d) => d.avg_monthly_gross_rent > 600
}).plot({
color: { range: ["orange", "steelblue"] }
})
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Plot.rect(
nycha_clean_data,
Plot.bin(
{ fillOpacity: "count" },
{
x: "avg_monthly_gross_rent",
y: "total_number_of_apartments",
// This applies a function to interpolate the color values based on the rent/no. of rooms
fill: (d) => d.avg_monthly_gross_rent > 600
}
)
).plot({ color: { range: ["orange", "steelblue"] } })
Insert cell
Insert cell
Plot.plot({
marks: [
Plot.rectY(
nycha_clean_data,
Plot.binX({ y: "count" }, { x: "avg_monthly_gross_rent" })
),
Plot.ruleY([0])
],
grid: true,
color: { legend: true }
})
Insert cell
Insert cell
Plot.barX(
nycha_clean_data,
Plot.groupY(
{ x: "mean" },
{
x: "avg_monthly_gross_rent",
y: "borough",
sort: { y: "x", reverse: false }
}
)
).plot({ marginLeft: 120 })
Insert cell
Insert cell
Insert cell
Plot.plot({
marks: [
Plot.rectY(
nycha_clean_data,
Plot.binX(
{ y: "count" },
{ x: "avg_monthly_gross_rent", fill: "borough" }
)
),
Plot.ruleY([0])
],
x: { label: "Average Monthly Gross Rent" },
y: { label: "Number of Developments" },
grid: true,
color: { scheme: "cool", legend: true, label: "Borough" }
})
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell

One platform to build and deploy the best data apps

Experiment and prototype by building visualizations in live JavaScript notebooks. Collaborate with your team and decide which concepts to build out.
Use Observable Framework to build data apps locally. Use data loaders to build in any language or library, including Python, SQL, and R.
Seamlessly deploy to Observable. Test before you ship, use automatic deploy-on-commit, and ensure your projects are always up-to-date.
Learn more