Public
Edited
Sep 27, 2023
Insert cell
Insert cell
Insert cell
originalData = FileAttachment("us_daily_treasury_rates-1990-2023.csv").csv({typed: true})
Insert cell
dates = [...new Set(d3.map(originalData, d => d.Date))]
Insert cell
maturities = originalData.columns.slice(1)
Insert cell
// We need to remove element(s) with maturities all null
originalData.filter(d => d3.every(maturities, c => d[c] === null))
Insert cell
// filteredData = originalData.filter(d => d3.some(maturities, c => d[c] !== null)).filter(d => d.Date.getTime() > startDate.getTime())
filteredData = originalData.filter(d => d.Date.getTime() > startDate.getTime())
Insert cell
data = maturities.flatMap((Maturity) => filteredData.map((values) => ({Date: values.Date, Maturity, Yield: values[Maturity]})))
.filter(d => d.Yield !== null)
.filter(d => selectMaturaties.includes(d.Maturity))
Insert cell
import { addDays } from "@chiahsun-ws/recessions-calculation"
Insert cell
highlightedPeriods = {
const days = d3.map(filteredData, (d, i) => [d.Date, 0]);
days.forEach(function(values, i, theArray) {
if (filteredData[i][largerYieldChoice] == null || filteredData[i][smallerYieldChoice] == null || filteredData[i][largerYieldChoice] <= filteredData[i][smallerYieldChoice]) {
theArray[i][1] = 0;
} else {
theArray[i][1] = (i > 0 && theArray[i-1][1] > 0) ? (theArray[i-1][1]+1) : 1;
}
});
let periods = []
for (let i = 0; i < days.length; ++i) {
if (i == days.length-1 || days[i][1] > days[i+1][1]) {
periods.push([addDays(days[i][0], 1-days[i][1]), addDays(days[i][0], 1)])
}
}
return periods
}
Insert cell
Insert cell
dateColumn = "Date"
Insert cell
nameColumn = "Maturity"
Insert cell
valueColumn = "Yield"
Insert cell
yAxisLabel = "Yield"
Insert cell
height = 320
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
viewof selectMaturaties = Inputs.checkbox(maturities, {label: "Select maturities to show", value: maturities})
Insert cell
Insert cell
Insert cell
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