Public
Edited
May 10, 2023
Insert cell
Insert cell
viewof FILE = Inputs.file({
label: 'USAA Export',
})
Insert cell
DATA = (await FILE.csv({ typed: true }))
.map((d) => {
let { Date: date } = d;
date = new Date(date);

const YYYY = PAD(`${date.getFullYear()}`, 4, '0');
const MM = PAD(`${date.getMonth() + 1}`, 2, '0');
const DD = PAD(`${date.getDate()}`, 2, '0');

const YYYYMM = `${YYYY}-${MM}`;
const YYYYMMDD = `${YYYY}-${MM}-${DD}`;
return { ...d, YYYY, MM, DD, YYYYMM, date };

function PAD(s, n, pad) {
while (s.length < n) {
s = pad + s;
}
return s;
}
})
.filter(({ Amount }) => Amount < 0)
// .filter(({ Category }) => Category !== 'Pharmacy')
// .filter(({ Category }) => Category !== 'Dentist')
// .filter(({ Category }) => Category !== 'Category Pending')
// .filter(({ Category }) => Category !== 'Education')
// .filter(({ Category }) => Category !== 'Groceries')
// .filter(({ Category }) => Category !== 'Shopping')
.filter(({ YYYY }) => YYYY !== '2022')
// .filter(({ YYYYMM }) => {
// return YYYYMM === '2023-04';
// })
Insert cell
DATA
.filter(({ YYYYMM }) => YYYYMM === '2023-03')
.filter(({ Category }) => Category === 'Entertainment')
.slice().sort(({ Amount: a }, { Amount: b }) => a - b)
Insert cell
d3.groups(
DATA,
// Array.from(d3.group(DATA, ({ Category }) => Category).values()),
// ({ length }) => length,
({ Amount, Description, DD }) => `${Description}`,
)
.filter(({ [1]: { length } }) => length > 1)
.slice().sort(({ [1]: { length: a } }, { [1]: { length: b } }) => b - a)

Insert cell
DATA
X
Category
Y
sum
Amount
Color
Category
Size
Facet X
Facet Y
YYYYMM
Mark
bar
Type Chart, then Shift-Enter. Ctrl-space for more options.

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