diff --git a/src/defined.js b/src/defined.js
index c506d52377..f22f500b9c 100644
--- a/src/defined.js
+++ b/src/defined.js
@@ -1,4 +1,4 @@
-import {ascending} from "d3-array";
+import {ascending, descending} from "d3-array";
export function defined(x) {
return x != null && !Number.isNaN(x);
@@ -8,6 +8,10 @@ export function ascendingDefined(a, b) {
return defined(b) - defined(a) || ascending(a, b);
}
+export function descendingDefined(a, b) {
+ return defined(b) - defined(a) || descending(a, b);
+}
+
export function nonempty(x) {
return x != null && (x + "") !== "";
}
diff --git a/src/index.js b/src/index.js
index 8a029bd593..515700c1d3 100644
--- a/src/index.js
+++ b/src/index.js
@@ -17,4 +17,4 @@ export {TickX, TickY, tickX, tickY} from "./marks/tick.js";
export {bin, binX, binY, binR} from "./transforms/bin.js";
export {group, groupX, groupY} from "./transforms/group.js";
export {movingAverage} from "./transforms/movingAverage.js";
-export {stackX, stackY} from "./transforms/stack.js";
+export {stackX, stackX1, stackX2, stackXMid, stackY, stackY1, stackY2, stackYMid} from "./transforms/stack.js";
diff --git a/src/transforms/stack.js b/src/transforms/stack.js
index c0d0e1e57b..c0674a420a 100644
--- a/src/transforms/stack.js
+++ b/src/transforms/stack.js
@@ -1,38 +1,88 @@
-import {InternMap} from "d3-array";
-import {valueof} from "../mark.js";
+import {InternMap, ascending, cumsum, group, groupSort, greatest, rollup, sum} from "d3-array";
+import {field, maybeColor, range, valueof} from "../mark.js";
export function stackX({x, y, ...options}) {
- const [transform, Y, x1, x2] = stack(y, x);
+ const [transform, Y, x1, x2] = stack(y, x, options);
return {...options, transform, y: Y, x1, x2};
}
+export function stackX1({x, y, ...options}) {
+ const [transform, Y, X] = stack(y, x, options);
+ return {...options, transform, y: Y, x: X};
+}
+
+export function stackX2({x, y, ...options}) {
+ const [transform, Y,, X] = stack(y, x, options);
+ return {...options, transform, y: Y, x: X};
+}
+
+export function stackXMid({x, y, ...options}) {
+ const [transform, Y, X1, X2] = stack(y, x, options);
+ return {...options, transform, y: Y, x: mid(X1, X2)};
+}
+
export function stackY({x, y, ...options}) {
- const [transform, X, y1, y2] = stack(x, y);
+ const [transform, X, y1, y2] = stack(x, y, options);
return {...options, transform, x: X, y1, y2};
}
-// TODO configurable series order
-function stack(x, y) {
+export function stackY1({x, y, ...options}) {
+ const [transform, X, Y] = stack(x, y, options);
+ return {...options, transform, x: X, y: Y};
+}
+
+export function stackY2({x, y, ...options}) {
+ const [transform, X,, Y] = stack(x, y, options);
+ return {...options, transform, x: X, y: Y};
+}
+
+export function stackYMid({x, y, ...options}) {
+ const [transform, X, Y1, Y2] = stack(x, y, options);
+ return {...options, transform, x: X, y: mid(Y1, Y2)};
+}
+
+function stack(x, y = () => 1, {
+ z,
+ fill,
+ stroke,
+ offset,
+ order,
+ reverse
+}) {
+ if (z === undefined && ([fill] = maybeColor(fill), fill != null)) z = fill;
+ if (z === undefined && ([stroke] = maybeColor(stroke), stroke != null)) z = stroke;
const [X, setX] = lazyChannel(x);
const [Y1, setY1] = lazyChannel(y);
const [Y2, setY2] = lazyChannel(y);
+ offset = maybeOffset(offset);
+ order = order === undefined && offset === offsetWiggle ? orderInsideOut : maybeOrder(order, offset);
return [
- data => {
- const X = setX(valueof(data, x));
+ (data, facets) => {
+ const I = range(data);
+ const X = x == null ? [] : setX(valueof(data, x));
const Y = valueof(data, y);
- const n = X.length;
- const Y0 = new InternMap();
+ const Z = valueof(data, z);
+ const n = data.length;
const Y1 = setY1(new Float64Array(n));
const Y2 = setY2(new Float64Array(n));
- for (let i = 0; i < n; ++i) {
- const k = X[i];
- const y1 = Y1[i] = Y0.has(k) ? Y0.get(k) : 0;
- const y2 = Y2[i] = y1 + +Y[i];
- Y0.set(k, isNaN(y2) ? y1 : y2);
+ for (const index of facets === undefined ? [I] : facets) {
+ const stacks = Array.from(group(index, i => X[i]).values());
+ if (order) applyOrder(stacks, order(data, I, X, Y, Z));
+ for (const stack of stacks) {
+ let yn = 0, yp = 0;
+ if (reverse) stack.reverse();
+ for (const i of stack) {
+ const y = +Y[i];
+ if (y < 0) yn = Y2[i] = (Y1[i] = yn) + y;
+ else if (y > 0) yp = Y2[i] = (Y1[i] = yp) + y;
+ else Y2[i] = Y1[i] = yp; // NaN or zero
+ }
+ }
+ if (offset) offset(stacks, Y1, Y2, Z);
}
- return data;
+ return {index: facets === undefined ? I : facets, data};
},
- X,
+ x == null ? x : X,
Y1,
Y2
];
@@ -45,7 +95,7 @@ function lazyChannel(source) {
let value;
return [
{
- transform() { return value; },
+ transform: () => value,
label: typeof source === "string" ? source
: source ? source.label
: undefined
@@ -53,3 +103,156 @@ function lazyChannel(source) {
v => value = v
];
}
+
+// Assuming that both x1 and x2 and lazy channels (per above), this derives a
+// new a channel that’s the average of the two, and which inherits the channel
+// label (if any).
+function mid(x1, x2) {
+ return {
+ transform() {
+ const X1 = x1.transform();
+ const X2 = x2.transform();
+ return Float64Array.from(X1, (_, i) => (X1[i] + X2[i]) / 2);
+ },
+ label: x1.label
+ };
+}
+
+function maybeOffset(offset) {
+ if (offset == null) return;
+ switch ((offset + "").toLowerCase()) {
+ case "expand": return offsetExpand;
+ case "silhouette": return offsetSilhouette;
+ case "wiggle": return offsetWiggle;
+ }
+ throw new Error(`unknown offset: ${offset}`);
+}
+
+// Given a single stack, returns the minimum and maximum values from the given
+// Y2 column. Note that this relies on Y2 always being the outer column for
+// diverging values.
+function extent(stack, Y2) {
+ let min = 0, max = 0;
+ for (const i of stack) {
+ const y = Y2[i];
+ if (y < min) min = y;
+ if (y > max) max = y;
+ }
+ return [min, max];
+}
+
+function offsetExpand(stacks, Y1, Y2) {
+ for (const stack of stacks) {
+ const [yn, yp] = extent(stack, Y2);
+ for (const i of stack) {
+ const m = 1 / (yp - yn || 1);
+ Y1[i] = m * (Y1[i] - yn);
+ Y2[i] = m * (Y2[i] - yn);
+ }
+ }
+}
+
+function offsetSilhouette(stacks, Y1, Y2) {
+ for (const stack of stacks) {
+ const [yn, yp] = extent(stack, Y2);
+ for (const i of stack) {
+ const m = (yp + yn) / 2;
+ Y1[i] -= m;
+ Y2[i] -= m;
+ }
+ }
+}
+
+function offsetWiggle(stacks, Y1, Y2, Z) {
+ const prev = new InternMap();
+ let y = 0;
+ for (const stack of stacks) {
+ let j = -1;
+ const Fi = stack.map(i => Math.abs(Y2[i] - Y1[i]));
+ const Df = stack.map(i => {
+ j = Z ? Z[i] : ++j;
+ const value = Y2[i] - Y1[i];
+ const diff = prev.has(j) ? value - prev.get(j) : 0;
+ prev.set(j, value);
+ return diff;
+ });
+ const Cf1 = [0, ...cumsum(Df)];
+ for (const i of stack) {
+ Y1[i] += y;
+ Y2[i] += y;
+ }
+ const s1 = sum(Fi);
+ if (s1) y -= sum(Fi, (d, i) => (Df[i] / 2 + Cf1[i]) * d) / s1;
+ }
+}
+
+function maybeOrder(order) {
+ if (order == null) return;
+ if (typeof order === "string") {
+ switch (order.toLowerCase()) {
+ case "sum": return orderSum;
+ case "value": return orderY;
+ case "appearance": return orderAppearance;
+ case "inside-out": return orderInsideOut;
+ }
+ return orderFunction(field(order));
+ }
+ if (typeof order === "function") return orderFunction(order);
+ return orderZDomain(order);
+}
+
+// by sum of value (a.k.a. “ascending”)
+function orderSum(data, I, X, Y, Z) {
+ return orderZ(Z, groupSort(I, I => sum(I, i => Y[i]), i => Z[i]));
+}
+
+// by value
+function orderY(data, I, X, Y) {
+ return Y;
+}
+
+// by x = argmax of value
+function orderAppearance(data, I, X, Y, Z) {
+ return orderZ(Z, groupSort(I, I => X[greatest(I, i => Y[i])], i => Z[i]));
+}
+
+// by x = argmax of value, but rearranged inside-out by alternating series
+// according to the sign of a running divergence of sums
+function orderInsideOut(data, I, X, Y, Z) {
+ const K = groupSort(I, I => X[greatest(I, i => Y[i])], i => Z[i]);
+ const sums = rollup(I, I => sum(I, i => Y[i]), i => Z[i]);
+ const Kp = [], Kn = [];
+ let s = 0;
+ for (const k of K) {
+ if (s < 0) {
+ s += sums.get(k);
+ Kp.push(k);
+ } else {
+ s -= sums.get(k);
+ Kn.push(k);
+ }
+ }
+ return orderZ(Z, Kn.reverse().concat(Kp));
+}
+
+function orderFunction(f) {
+ return data => valueof(data, f);
+}
+
+function orderZDomain(domain) {
+ return (data, I, X, Y, Z) => orderZ(Z, domain);
+}
+
+// Given an explicit ordering of distinct values in z, returns a parallel column
+// O that can be used with applyOrder to sort stacks. Note that this is a series
+// order: it will be consistent across stacks.
+function orderZ(Z, domain) {
+ domain = new InternMap(domain.map((d, i) => [d, i]));
+ return Z.map(z => domain.get(z));
+}
+
+function applyOrder(stacks, O) {
+ for (const stack of stacks) {
+ stack.sort((i, j) => ascending(O[i], O[j]));
+ }
+}
diff --git a/test/data/caltrain.csv b/test/data/caltrain.csv
new file mode 100644
index 0000000000..7618b26192
--- /dev/null
+++ b/test/data/caltrain.csv
@@ -0,0 +1,79 @@
+station,time,line,type,orientation,hours,minutes
+Palo Alto,5:01am,101N,N,N,5,01
+Palo Alto,8:01pm,191N,N,N,20,01
+Palo Alto,9:01pm,193N,N,N,21,01
+Palo Alto,10:01pm,195N,N,N,22,01
+Palo Alto,11:01pm,197N,N,N,23,01
+Palo Alto,8:01am,216L,L,S,8,01
+Palo Alto,9:01am,226L,L,S,9,01
+Palo Alto,5:01pm,264L,L,S,17,01
+Palo Alto,6:02pm,274L,L,S,18,02
+Palo Alto,10:03am,134N,N,S,10,03
+Palo Alto,11:03am,138N,N,S,11,03
+Palo Alto,12:03pm,142N,N,S,12,03
+Palo Alto,1:03pm,146N,N,S,13,03
+Palo Alto,2:03pm,150N,N,S,14,03
+Palo Alto,3:03pm,154N,N,S,15,03
+Palo Alto,4:03pm,158N,N,S,16,03
+Palo Alto,6:05am,305B,B,N,6,05
+Palo Alto,7:05am,313B,B,N,7,05
+Palo Alto,8:05am,323B,B,N,8,05
+Palo Alto,5:06pm,369B,B,N,17,06
+Palo Alto,6:06pm,379B,B,N,18,06
+Palo Alto,7:10pm,287L,L,N,19,10
+Palo Alto,9:11am,233L,L,N,9,11
+Palo Alto,10:11am,237L,L,N,10,11
+Palo Alto,3:11pm,257L,L,N,15,11
+Palo Alto,5:12pm,368B,B,S,17,12
+Palo Alto,6:12pm,378B,B,S,18,12
+Palo Alto,7:12pm,386B,B,S,19,12
+Palo Alto,7:16am,215L,L,N,7,16
+Palo Alto,8:16am,225L,L,N,8,16
+Palo Alto,4:16pm,261L,L,N,16,16
+Palo Alto,5:16pm,267L,L,N,17,16
+Palo Alto,6:16pm,277L,L,N,18,16
+Palo Alto,7:18am,208L,L,S,7,18
+Palo Alto,8:18am,218L,L,S,8,18
+Palo Alto,9:18am,228L,L,S,9,18
+Palo Alto,7:21pm,189N,N,N,19,21
+Palo Alto,6:21am,104N,N,S,6,21
+Palo Alto,6:23am,309B,B,N,6,23
+Palo Alto,7:23am,319B,B,N,7,23
+Palo Alto,8:23am,329B,B,N,8,23
+Palo Alto,4:24pm,263L,L,N,16,24
+Palo Alto,5:24pm,271L,L,N,17,24
+Palo Alto,6:24pm,281L,L,N,18,24
+Palo Alto,10:25am,236L,L,S,10,25
+Palo Alto,3:25pm,256L,L,S,15,25
+Palo Alto,4:25pm,260L,L,S,16,25
+Palo Alto,7:26am,210L,L,S,7,26
+Palo Alto,8:26am,220L,L,S,8,26
+Palo Alto,9:26am,230L,L,S,9,26
+Palo Alto,8:26pm,190N,N,S,20,26
+Palo Alto,5:36am,103N,N,N,5,36
+Palo Alto,6:36am,207L,L,N,6,36
+Palo Alto,7:36am,217L,L,N,7,36
+Palo Alto,8:36am,227L,L,N,8,36
+Palo Alto,9:36pm,192N,N,S,21,36
+Palo Alto,10:36pm,194N,N,S,22,36
+Palo Alto,11:36pm,196N,N,S,23,36
+Palo Alto,3:38pm,159N,N,N,15,38
+Palo Alto,5:38pm,270L,L,S,17,38
+Palo Alto,6:38pm,280L,L,S,18,38
+Palo Alto,7:38pm,288L,L,S,19,38
+Palo Alto,9:41am,135N,N,N,9,41
+Palo Alto,10:41am,139N,N,N,10,41
+Palo Alto,11:41am,143N,N,N,11,41
+Palo Alto,12:41pm,147N,N,N,12,41
+Palo Alto,1:41pm,151N,N,N,13,41
+Palo Alto,2:41pm,155N,N,N,14,41
+Palo Alto,4:44pm,362B,B,S,16,44
+Palo Alto,5:49pm,372B,B,S,17,49
+Palo Alto,6:49pm,382B,B,S,18,49
+Palo Alto,5:51am,102N,N,S,5,51
+Palo Alto,7:51am,314B,B,S,7,51
+Palo Alto,8:51am,324B,B,S,8,51
+Palo Alto,5:54pm,275L,L,N,17,54
+Palo Alto,6:54pm,285L,L,N,18,54
+Palo Alto,6:57am,206L,L,S,6,57
+Palo Alto,12:57am,198N,N,S,24,57
\ No newline at end of file
diff --git a/test/data/learning-poverty.csv b/test/data/learning-poverty.csv
new file mode 100644
index 0000000000..3f2d571a49
--- /dev/null
+++ b/test/data/learning-poverty.csv
@@ -0,0 +1,101 @@
+Country Name,Out-of-School (OoS),Below Minimum Proficiency (in School),Learning Poverty,Assessment Year,Assessment,population,density
+Afghanistan,49.6,87,93.4,2013,NLA,38928346,60
+Argentina,0.6,53.6,53.9,2013,LLECE,45195774,17
+Armenia,7.2,30,35,2015,TIMSS,2963243,104
+Australia,3.2,5.5,8.6,2016,PIRLS,25499884,3
+Austria,0,2.4,2.4,2016,PIRLS,9006398,109
+Azerbaijan,5,19.2,23.3,2016,PIRLS,10139177,123
+Bahrain,2.1,30.6,32.1,2016,PIRLS,1701575,2239
+Bangladesh,4.9,56,58.1,2017,NLA,164689383,1265
+Belgium,1.3,5.1,6.4,2016,PIRLS,11589623,383
+Benin,3.6,77.3,78.2,2014,PASEC,12123200,108
+Botswana,7.2,44.3,48.3,2011,PIRLS,2351627,4
+Brazil,2.7,46.9,48.4,2013,LLECE,212559417,25
+Bulgaria,6.8,5.2,11.7,2016,PIRLS,6948445,64
+Burkina Faso,31.7,78.6,85.4,2014,PASEC,20903273,76
+Burundi,2.7,92.7,92.9,2014,PASEC,11890784,463
+Cambodia,2.6,49.8,51.1,2013,NLA,16718965,95
+Cameroon,5.2,75.9,77.2,2014,PASEC,26545863,56
+Canada,0,4.3,4.3,2016,PIRLS,37742154,4
+Chad,21.1,97,97.7,2014,PASEC,16425864,13
+Chile,9.3,30.3,36.8,2013,LLECE,19116201,26
+China,0,18.2,18.2,2016,NLA,1439323776,153
+Colombia,6.9,44.7,48.6,2013,LLECE,50882891,46
+"Congo, Dem Rep",63.2,62,86,2011,NLA,89561403,40
+"Congo, Rep",12.8,82.9,85.1,2014,PASEC,5518087,16
+Costa Rica,1.1,31.7,32.5,2013,LLECE,5094118,100
+Cote d’Ivoire,21.1,77.6,82.3,2014,PASEC,26378274,83
+Croatia,3,1,4,2011,PIRLS,4105267,73
+Cyprus,2.2,14.3,16.2,2015,TIMSS,1207359,131
+Czech Republic,0,3,3,2016,PIRLS,10708981,139
+Denmark,1,2.6,3.6,2016,PIRLS,5792202,137
+Dominican Republic,6.6,79.4,80.7,2013,LLECE,10847910,225
+Ecuador,1.9,62.1,62.8,2013,LLECE,17643054,71
+"Egypt, Arab Rep",1.4,69.2,69.6,2016,PIRLS,102334404,103
+Ethiopia,14,88.7,90.3,2015,NLA,114963588,115
+Finland,0.9,1.7,2.6,2016,PIRLS,5540720,18
+France,0.9,6.3,7.1,2016,PIRLS,65273511,119
+Georgia,0.4,13.5,13.8,2016,PIRLS,3989167,57
+Germany,0.2,5.5,5.7,2016,PIRLS,83783942,240
+Guatemala,10.1,63.6,67.3,2013,LLECE,17915568,167
+Honduras,17.1,69.4,74.7,2013,LLECE,9904607,89
+"Hong Kong SAR, China",1.9,1.4,3.2,2016,PIRLS,7496981,7140
+Hungary,3.1,2.9,5.9,2016,PIRLS,9660351,107
+India,2.3,53.7,54.8,2017,NLA,1380004385,464
+Indonesia,2.4,33.8,35.4,2011,PIRLS,273523615,151
+"Iran, Islamic Rep",0.9,35.1,35.7,2016,PIRLS,83992949,52
+Ireland,0,2.3,2.3,2016,PIRLS,4937786,72
+Israel,2.9,9,11.7,2016,PIRLS,8655535,400
+Italy,1.4,2.1,3.5,2016,PIRLS,60461826,206
+Japan,1.2,1,2.2,2015,TIMSS,126476461,347
+Jordan,4,50,52,2015,TIMSS,10203134,115
+Kazakhstan,0.3,1.9,2.2,2016,PIRLS,18776707,7
+"Korea, Rep",2.7,0.3,3,2015,TIMSS,51269185,527
+Kuwait,3.3,49.4,51,2016,PIRLS,4270571,240
+Kyrgyz Republic,1.9,63.8,64.5,2014,NLA,6524195,34
+Latvia,3.2,0.8,4,2016,PIRLS,1886198,30
+Lithuania,0.3,2.7,3,2016,PIRLS,2722289,43
+"Macao SAR, China",1.3,2.4,3.7,2016,PIRLS,649335,21645
+Madagascar,21.9,95.8,96.7,2015,NLA,27691018,48
+Malaysia,1.4,11.7,12.9,2017,NLA,32365999,99
+Mali,33,86.6,91,2012,NLA,20250833,17
+Malta,2.4,26.8,28.6,2016,PIRLS,441543,1380
+Mexico,1.2,42.5,43.2,2013,LLECE,128932753,66
+Morocco,5.4,63.8,65.8,2016,PIRLS,36910560,83
+Netherlands,0.3,1.3,1.6,2016,PIRLS,17134872,508
+New Zealand,1.5,10,11.4,2016,PIRLS,4822233,18
+Nicaragua,1.6,69.3,69.8,2013,LLECE,6624554,55
+Niger,38.9,97.9,98.7,2014,PASEC,24206644,19
+Norway,0.2,5.8,6,2016,PIRLS,5421241,15
+Oman,1.5,40.9,41.8,2016,PIRLS,5106626,16
+Pakistan,27.3,65,74.5,2014,NLA,220892340,287
+Panama,7.1,64.1,66.6,2013,LLECE,4314767,58
+Paraguay,10.8,71.3,74.4,2013,LLECE,7132538,18
+Peru,4.2,53.7,55.7,2013,LLECE,32971854,26
+Poland,4.4,2,6.3,2016,PIRLS,37846611,124
+Portugal,3.6,3,6.5,2016,PIRLS,10196709,111
+Qatar,2.2,33.8,35.3,2016,PIRLS,2881053,248
+Romania,6.9,14.1,20,2011,PIRLS,19237691,84
+Russian Federation,2.4,0.9,3.3,2016,PIRLS,145934462,9
+Saudi Arabia,2.5,36.7,38.3,2016,PIRLS,34813871,16
+Senegal,25.7,65.2,74.1,2014,PASEC,16743927,87
+Serbia,0.8,7.4,8.1,2015,TIMSS,8737371,100
+Singapore,0.1,2.7,2.8,2016,PIRLS,5850342,8358
+Slovak Republic,2.1,6.6,8.5,2016,PIRLS,5459642,114
+Slovenia,2.2,3.7,5.8,2016,PIRLS,2078938,103
+South Africa,8.4,77.9,79.8,2016,PIRLS,59308690,49
+Spain,1.5,3.4,4.9,2016,PIRLS,46754778,94
+Sri Lanka,0.9,14,14.8,2015,NLA,21413249,341
+Sweden,0.4,1.9,2.3,2016,PIRLS,10099265,25
+Thailand,2,21.9,23.5,2011,TIMSS,69799978,137
+Togo,8.5,84.2,85.6,2014,PASEC,8278724,152
+Trinidad and Tobago,1.3,19.7,20.7,2016,PIRLS,1399488,273
+Tunisia,0.4,65.1,65.3,2011,TIMSS,11818619,76
+Turkey,5,17.6,21.7,2015,TIMSS,84339067,110
+Uganda,9,81.1,82.8,2014,NLA,45741007,229
+United Arab Emirates,2.8,32.4,34.3,2016,PIRLS,9890402,118
+United Kingdom,0.2,3.2,3.4,2016,PIRLS,67886011,281
+United States,4.1,3.9,7.9,2016,PIRLS,331002651,36
+Uruguay,0.5,41.4,41.7,2013,LLECE,3473730,20
+Vietnam,0.6,1.1,1.7,2011,NLA,97338579,314
+"Yemen, Rep",18.9,93.5,94.7,2011,TIMSS,29825964,56
\ No newline at end of file
diff --git a/test/data/police-deaths.csv b/test/data/police-deaths.csv
new file mode 100644
index 0000000000..8f74e2e489
--- /dev/null
+++ b/test/data/police-deaths.csv
@@ -0,0 +1,5 @@
+race,police,population
+Black,44,13
+Hispanic,32,12
+White,18,60
+All other races,6,15
diff --git a/test/data/riaa-us-revenue.csv b/test/data/riaa-us-revenue.csv
new file mode 100644
index 0000000000..a09401f0af
--- /dev/null
+++ b/test/data/riaa-us-revenue.csv
@@ -0,0 +1,1082 @@
+format,group,year,revenue
+8 - Track,Tape,1973-01-01,2815.68
+8 - Track,Tape,1974-01-01,2848.01
+8 - Track,Tape,1975-01-01,2770.41
+8 - Track,Tape,1976-01-01,3047.22
+8 - Track,Tape,1977-01-01,3421.42
+8 - Track,Tape,1978-01-01,3717.22
+8 - Track,Tape,1979-01-01,2409.73
+8 - Track,Tape,1980-01-01,1635.09
+8 - Track,Tape,1981-01-01,880.315082508
+8 - Track,Tape,1982-01-01,95.374632124
+8 - Track,Tape,1983-01-01,0
+8 - Track,Tape,1984-01-01,0
+8 - Track,Tape,1985-01-01,0
+8 - Track,Tape,1986-01-01,0
+8 - Track,Tape,1987-01-01,0
+8 - Track,Tape,1988-01-01,0
+8 - Track,Tape,1989-01-01,0
+8 - Track,Tape,1990-01-01,0
+8 - Track,Tape,1991-01-01,0
+8 - Track,Tape,1992-01-01,0
+8 - Track,Tape,1993-01-01,0
+8 - Track,Tape,1994-01-01,0
+8 - Track,Tape,1995-01-01,0
+8 - Track,Tape,1996-01-01,0
+8 - Track,Tape,1997-01-01,0
+8 - Track,Tape,1998-01-01,0
+8 - Track,Tape,1999-01-01,0
+8 - Track,Tape,2000-01-01,0
+8 - Track,Tape,2001-01-01,0
+8 - Track,Tape,2002-01-01,0
+8 - Track,Tape,2003-01-01,0
+8 - Track,Tape,2004-01-01,0
+8 - Track,Tape,2005-01-01,0
+8 - Track,Tape,2006-01-01,0
+8 - Track,Tape,2007-01-01,0
+8 - Track,Tape,2008-01-01,0
+8 - Track,Tape,2009-01-01,0
+8 - Track,Tape,2010-01-01,0
+8 - Track,Tape,2011-01-01,0
+8 - Track,Tape,2012-01-01,0
+8 - Track,Tape,2013-01-01,0
+8 - Track,Tape,2014-01-01,0
+8 - Track,Tape,2015-01-01,0
+8 - Track,Tape,2016-01-01,0
+8 - Track,Tape,2017-01-01,0
+8 - Track,Tape,2018-01-01,0
+8 - Track,Tape,2019-01-01,0
+CD,Disc,1973-01-01,0
+CD,Disc,1974-01-01,0
+CD,Disc,1975-01-01,0
+CD,Disc,1976-01-01,0
+CD,Disc,1977-01-01,0
+CD,Disc,1978-01-01,0
+CD,Disc,1979-01-01,0
+CD,Disc,1980-01-01,0
+CD,Disc,1981-01-01,0
+CD,Disc,1982-01-01,0
+CD,Disc,1983-01-01,44.14960241
+CD,Disc,1984-01-01,254.180636189
+CD,Disc,1985-01-01,925.449828067
+CD,Disc,1986-01-01,2169.59
+CD,Disc,1987-01-01,3586.4
+CD,Disc,1988-01-01,4516.46
+CD,Disc,1989-01-01,5335.19
+CD,Disc,1990-01-01,6751.54
+CD,Disc,1991-01-01,8142.17
+CD,Disc,1992-01-01,9706.04
+CD,Disc,1993-01-01,11520.31
+CD,Disc,1994-01-01,14601.95
+CD,Disc,1995-01-01,15730.96
+CD,Disc,1996-01-01,16187.86
+CD,Disc,1997-01-01,15793.55
+CD,Disc,1998-01-01,17905.4
+CD,Disc,1999-01-01,19667.33
+CD,Disc,2000-01-01,19618.93
+CD,Disc,2001-01-01,18635.68
+CD,Disc,2002-01-01,17115.94
+CD,Disc,2003-01-01,15607.44
+CD,Disc,2004-01-01,15491.68
+CD,Disc,2005-01-01,13771.44
+CD,Disc,2006-01-01,11885.77
+CD,Disc,2007-01-01,9190.7
+CD,Disc,2008-01-01,6496.78
+CD,Disc,2009-01-01,5146.58
+CD,Disc,2010-01-01,3973.86
+CD,Disc,2011-01-01,3524.14
+CD,Disc,2012-01-01,2767.78
+CD,Disc,2013-01-01,2349.53
+CD,Disc,2014-01-01,1918.22
+CD,Disc,2015-01-01,1558.63
+CD,Disc,2016-01-01,1204.5
+CD,Disc,2017-01-01,1102.77
+CD,Disc,2018-01-01,711.041239463
+CD,Disc,2019-01-01,614.509779894
+CD Single,Disc,1973-01-01,0
+CD Single,Disc,1974-01-01,0
+CD Single,Disc,1975-01-01,0
+CD Single,Disc,1976-01-01,0
+CD Single,Disc,1977-01-01,0
+CD Single,Disc,1978-01-01,0
+CD Single,Disc,1979-01-01,0
+CD Single,Disc,1980-01-01,0
+CD Single,Disc,1981-01-01,0
+CD Single,Disc,1982-01-01,0
+CD Single,Disc,1983-01-01,0
+CD Single,Disc,1984-01-01,0
+CD Single,Disc,1985-01-01,0
+CD Single,Disc,1986-01-01,0
+CD Single,Disc,1987-01-01,0
+CD Single,Disc,1988-01-01,21.178686391
+CD Single,Disc,1989-01-01,1.443225
+CD Single,Disc,1990-01-01,11.736358072
+CD Single,Disc,1991-01-01,65.885174009
+CD Single,Disc,1992-01-01,82.181972202
+CD Single,Disc,1993-01-01,81.031768858
+CD Single,Disc,1994-01-01,96.77704251
+CD Single,Disc,1995-01-01,186.039116142
+CD Single,Disc,1996-01-01,299.977397706
+CD Single,Disc,1997-01-01,434.377968224
+CD Single,Disc,1998-01-01,334.393082209
+CD Single,Disc,1999-01-01,341.285214886
+CD Single,Disc,2000-01-01,211.859778746
+CD Single,Disc,2001-01-01,114.619795596
+CD Single,Disc,2002-01-01,27.853680934
+CD Single,Disc,2003-01-01,50.019847826
+CD Single,Disc,2004-01-01,20.300979354
+CD Single,Disc,2005-01-01,14.268619048
+CD Single,Disc,2006-01-01,9.764677083
+CD Single,Disc,2007-01-01,15.045901592
+CD Single,Disc,2008-01-01,4.156001078
+CD Single,Disc,2009-01-01,3.694172567
+CD Single,Disc,2010-01-01,3.400068331
+CD Single,Disc,2011-01-01,3.977965137
+CD Single,Disc,2012-01-01,3.59119832
+CD Single,Disc,2013-01-01,2.684056894
+CD Single,Disc,2014-01-01,3.905023683
+CD Single,Disc,2015-01-01,1.291079457
+CD Single,Disc,2016-01-01,0.280361354
+CD Single,Disc,2017-01-01,1.542258972
+CD Single,Disc,2018-01-01,0.157981482
+CD Single,Disc,2019-01-01,0.181678878
+Cassette,Tape,1973-01-01,437.611081081
+Cassette,Tape,1974-01-01,452.196559838
+Cassette,Tape,1975-01-01,469.496498141
+Cassette,Tape,1976-01-01,654.643671353
+Cassette,Tape,1977-01-01,1053
+Cassette,Tape,1978-01-01,1763.72
+Cassette,Tape,1979-01-01,2044.55
+Cassette,Tape,1980-01-01,2187.36
+Cassette,Tape,1981-01-01,2989.13
+Cassette,Tape,1982-01-01,3667.95
+Cassette,Tape,1983-01-01,4648.29
+Cassette,Tape,1984-01-01,5865.84
+Cassette,Tape,1985-01-01,5729.71
+Cassette,Tape,1986-01-01,5830.43
+Cassette,Tape,1987-01-01,6660.81
+Cassette,Tape,1988-01-01,7315.51
+Cassette,Tape,1989-01-01,6898.2
+Cassette,Tape,1990-01-01,6792.22
+Cassette,Tape,1991-01-01,5668
+Cassette,Tape,1992-01-01,5678.57
+Cassette,Tape,1993-01-01,5158.79
+Cassette,Tape,1994-01-01,5134.53
+Cassette,Tape,1995-01-01,3864.38
+Cassette,Tape,1996-01-01,3104.55
+Cassette,Tape,1997-01-01,2425.48
+Cassette,Tape,1998-01-01,2227.04
+Cassette,Tape,1999-01-01,1629.08
+Cassette,Tape,2000-01-01,929.391881533
+Cassette,Tape,2001-01-01,524.594883117
+Cassette,Tape,2002-01-01,298.148074486
+Cassette,Tape,2003-01-01,150.1984875
+Cassette,Tape,2004-01-01,32.07554738
+Cassette,Tape,2005-01-01,17.14852381
+Cassette,Tape,2006-01-01,4.69211756
+Cassette,Tape,2007-01-01,3.699811867
+Cassette,Tape,2008-01-01,1.068685991
+Cassette,Tape,2009-01-01,0
+Cassette,Tape,2010-01-01,0
+Cassette,Tape,2011-01-01,0
+Cassette,Tape,2012-01-01,0
+Cassette,Tape,2013-01-01,0
+Cassette,Tape,2014-01-01,0
+Cassette,Tape,2015-01-01,0
+Cassette,Tape,2016-01-01,0
+Cassette,Tape,2017-01-01,0
+Cassette,Tape,2018-01-01,0
+Cassette,Tape,2019-01-01,0
+Cassette Single,Tape,1973-01-01,0
+Cassette Single,Tape,1974-01-01,0
+Cassette Single,Tape,1975-01-01,0
+Cassette Single,Tape,1976-01-01,0
+Cassette Single,Tape,1977-01-01,0
+Cassette Single,Tape,1978-01-01,0
+Cassette Single,Tape,1979-01-01,0
+Cassette Single,Tape,1980-01-01,0
+Cassette Single,Tape,1981-01-01,0
+Cassette Single,Tape,1982-01-01,0
+Cassette Single,Tape,1983-01-01,0
+Cassette Single,Tape,1984-01-01,0
+Cassette Single,Tape,1985-01-01,0
+Cassette Single,Tape,1986-01-01,0
+Cassette Single,Tape,1987-01-01,32.182175176
+Cassette Single,Tape,1988-01-01,123.830482671
+Cassette Single,Tape,1989-01-01,401.21655
+Cassette Single,Tape,1990-01-01,504.467791125
+Cassette Single,Tape,1991-01-01,432.477039648
+Cassette Single,Tape,1992-01-01,544.47834355
+Cassette Single,Tape,1993-01-01,528.121899654
+Cassette Single,Tape,1994-01-01,474.224759109
+Cassette Single,Tape,1995-01-01,396.40255315
+Cassette Single,Tape,1996-01-01,308.450414914
+Cassette Single,Tape,1997-01-01,212.649280374
+Cassette Single,Tape,1998-01-01,148.061477301
+Cassette Single,Tape,1999-01-01,73.658679472
+Cassette Single,Tape,2000-01-01,6.829397213
+Cassette Single,Tape,2001-01-01,7.650943535
+Cassette Single,Tape,2002-01-01,2.273769872
+Cassette Single,Tape,2003-01-01,0
+Cassette Single,Tape,2004-01-01,0
+Cassette Single,Tape,2005-01-01,0
+Cassette Single,Tape,2006-01-01,0
+Cassette Single,Tape,2007-01-01,0
+Cassette Single,Tape,2008-01-01,0
+Cassette Single,Tape,2009-01-01,0
+Cassette Single,Tape,2010-01-01,0
+Cassette Single,Tape,2011-01-01,0
+Cassette Single,Tape,2012-01-01,0
+Cassette Single,Tape,2013-01-01,0
+Cassette Single,Tape,2014-01-01,0
+Cassette Single,Tape,2015-01-01,0
+Cassette Single,Tape,2016-01-01,0
+Cassette Single,Tape,2017-01-01,0
+Cassette Single,Tape,2018-01-01,0
+Cassette Single,Tape,2019-01-01,0
+DVD Audio,Other,1973-01-01,0
+DVD Audio,Other,1974-01-01,0
+DVD Audio,Other,1975-01-01,0
+DVD Audio,Other,1976-01-01,0
+DVD Audio,Other,1977-01-01,0
+DVD Audio,Other,1978-01-01,0
+DVD Audio,Other,1979-01-01,0
+DVD Audio,Other,1980-01-01,0
+DVD Audio,Other,1981-01-01,0
+DVD Audio,Other,1982-01-01,0
+DVD Audio,Other,1983-01-01,0
+DVD Audio,Other,1984-01-01,0
+DVD Audio,Other,1985-01-01,0
+DVD Audio,Other,1986-01-01,0
+DVD Audio,Other,1987-01-01,0
+DVD Audio,Other,1988-01-01,0
+DVD Audio,Other,1989-01-01,0
+DVD Audio,Other,1990-01-01,0
+DVD Audio,Other,1991-01-01,0
+DVD Audio,Other,1992-01-01,0
+DVD Audio,Other,1993-01-01,0
+DVD Audio,Other,1994-01-01,0
+DVD Audio,Other,1995-01-01,0
+DVD Audio,Other,1996-01-01,0
+DVD Audio,Other,1997-01-01,0
+DVD Audio,Other,1998-01-01,0
+DVD Audio,Other,1999-01-01,0
+DVD Audio,Other,2000-01-01,0
+DVD Audio,Other,2001-01-01,8.661445511
+DVD Audio,Other,2002-01-01,12.079402446
+DVD Audio,Other,2003-01-01,11.115521739
+DVD Audio,Other,2004-01-01,8.797091053
+DVD Audio,Other,2005-01-01,14.661333333
+DVD Audio,Other,2006-01-01,3.043535714
+DVD Audio,Other,2007-01-01,3.453157742
+DVD Audio,Other,2008-01-01,1.424914655
+DVD Audio,Other,2009-01-01,1.906669712
+DVD Audio,Other,2010-01-01,1.05519362
+DVD Audio,Other,2011-01-01,0.34096844
+DVD Audio,Other,2012-01-01,0.20389289
+DVD Audio,Other,2013-01-01,0.544116778
+DVD Audio,Other,2014-01-01,2.310456232
+DVD Audio,Other,2015-01-01,5.842187676
+DVD Audio,Other,2016-01-01,3.020431045
+DVD Audio,Other,2017-01-01,2.718901189
+DVD Audio,Other,2018-01-01,3.377493968
+DVD Audio,Other,2019-01-01,1.067303184
+Download Album,Download,1973-01-01,0
+Download Album,Download,1974-01-01,0
+Download Album,Download,1975-01-01,0
+Download Album,Download,1976-01-01,0
+Download Album,Download,1977-01-01,0
+Download Album,Download,1978-01-01,0
+Download Album,Download,1979-01-01,0
+Download Album,Download,1980-01-01,0
+Download Album,Download,1981-01-01,0
+Download Album,Download,1982-01-01,0
+Download Album,Download,1983-01-01,0
+Download Album,Download,1984-01-01,0
+Download Album,Download,1985-01-01,0
+Download Album,Download,1986-01-01,0
+Download Album,Download,1987-01-01,0
+Download Album,Download,1988-01-01,0
+Download Album,Download,1989-01-01,0
+Download Album,Download,1990-01-01,0
+Download Album,Download,1991-01-01,0
+Download Album,Download,1992-01-01,0
+Download Album,Download,1993-01-01,0
+Download Album,Download,1994-01-01,0
+Download Album,Download,1995-01-01,0
+Download Album,Download,1996-01-01,0
+Download Album,Download,1997-01-01,0
+Download Album,Download,1998-01-01,0
+Download Album,Download,1999-01-01,0
+Download Album,Download,2000-01-01,0
+Download Album,Download,2001-01-01,0
+Download Album,Download,2002-01-01,0
+Download Album,Download,2003-01-01,0
+Download Album,Download,2004-01-01,61.579637374
+Download Album,Download,2005-01-01,177.637761905
+Download Album,Download,2006-01-01,349.879793155
+Download Album,Download,2007-01-01,613.428807525
+Download Album,Download,2008-01-01,754.37356702
+Download Album,Download,2009-01-01,886.958916644
+Download Album,Download,2010-01-01,1022.83
+Download Album,Download,2011-01-01,1217.03
+Download Album,Download,2012-01-01,1341.59
+Download Album,Download,2013-01-01,1352.2
+Download Album,Download,2014-01-01,1207.25
+Download Album,Download,2015-01-01,1148.15
+Download Album,Download,2016-01-01,925.232200992
+Download Album,Download,2017-01-01,697.237618181
+Download Album,Download,2018-01-01,508.704388424
+Download Album,Download,2019-01-01,394.533006158
+Download Music Video,Download,1973-01-01,0
+Download Music Video,Download,1974-01-01,0
+Download Music Video,Download,1975-01-01,0
+Download Music Video,Download,1976-01-01,0
+Download Music Video,Download,1977-01-01,0
+Download Music Video,Download,1978-01-01,0
+Download Music Video,Download,1979-01-01,0
+Download Music Video,Download,1980-01-01,0
+Download Music Video,Download,1981-01-01,0
+Download Music Video,Download,1982-01-01,0
+Download Music Video,Download,1983-01-01,0
+Download Music Video,Download,1984-01-01,0
+Download Music Video,Download,1985-01-01,0
+Download Music Video,Download,1986-01-01,0
+Download Music Video,Download,1987-01-01,0
+Download Music Video,Download,1988-01-01,0
+Download Music Video,Download,1989-01-01,0
+Download Music Video,Download,1990-01-01,0
+Download Music Video,Download,1991-01-01,0
+Download Music Video,Download,1992-01-01,0
+Download Music Video,Download,1993-01-01,0
+Download Music Video,Download,1994-01-01,0
+Download Music Video,Download,1995-01-01,0
+Download Music Video,Download,1996-01-01,0
+Download Music Video,Download,1997-01-01,0
+Download Music Video,Download,1998-01-01,0
+Download Music Video,Download,1999-01-01,0
+Download Music Video,Download,2000-01-01,0
+Download Music Video,Download,2001-01-01,0
+Download Music Video,Download,2002-01-01,0
+Download Music Video,Download,2003-01-01,0
+Download Music Video,Download,2004-01-01,0
+Download Music Video,Download,2005-01-01,4.84347619
+Download Music Video,Download,2006-01-01,24.982355655
+Download Music Video,Download,2007-01-01,34.778231548
+Download Music Video,Download,2008-01-01,49.040812715
+Download Music Video,Download,2009-01-01,48.739244513
+Download Music Video,Download,2010-01-01,42.911207213
+Download Music Video,Download,2011-01-01,36.824591556
+Download Music Video,Download,2012-01-01,23.208206935
+Download Music Video,Download,2013-01-01,18.372074986
+Download Music Video,Download,2014-01-01,14.662197203
+Download Music Video,Download,2015-01-01,6.918875516
+Download Music Video,Download,2016-01-01,4.547792467
+Download Music Video,Download,2017-01-01,2.905533136
+Download Music Video,Download,2018-01-01,2.261051168
+Download Music Video,Download,2019-01-01,1.858910402
+Download Single,Download,1973-01-01,0
+Download Single,Download,1974-01-01,0
+Download Single,Download,1975-01-01,0
+Download Single,Download,1976-01-01,0
+Download Single,Download,1977-01-01,0
+Download Single,Download,1978-01-01,0
+Download Single,Download,1979-01-01,0
+Download Single,Download,1980-01-01,0
+Download Single,Download,1981-01-01,0
+Download Single,Download,1982-01-01,0
+Download Single,Download,1983-01-01,0
+Download Single,Download,1984-01-01,0
+Download Single,Download,1985-01-01,0
+Download Single,Download,1986-01-01,0
+Download Single,Download,1987-01-01,0
+Download Single,Download,1988-01-01,0
+Download Single,Download,1989-01-01,0
+Download Single,Download,1990-01-01,0
+Download Single,Download,1991-01-01,0
+Download Single,Download,1992-01-01,0
+Download Single,Download,1993-01-01,0
+Download Single,Download,1994-01-01,0
+Download Single,Download,1995-01-01,0
+Download Single,Download,1996-01-01,0
+Download Single,Download,1997-01-01,0
+Download Single,Download,1998-01-01,0
+Download Single,Download,1999-01-01,0
+Download Single,Download,2000-01-01,0
+Download Single,Download,2001-01-01,0
+Download Single,Download,2002-01-01,0
+Download Single,Download,2003-01-01,0
+Download Single,Download,2004-01-01,186.769010058
+Download Single,Download,2005-01-01,475.577
+Download Single,Download,2006-01-01,736.282014881
+Download Single,Download,2007-01-01,1000.18
+Download Single,Download,2008-01-01,1225.66
+Download Single,Download,2009-01-01,1396.64
+Download Single,Download,2010-01-01,1566.85
+Download Single,Download,2011-01-01,1730.3
+Download Single,Download,2012-01-01,1831.26
+Download Single,Download,2013-01-01,1726.74
+Download Single,Download,2014-01-01,1463.66
+Download Single,Download,2015-01-01,1278.45
+Download Single,Download,2016-01-01,958.87910313
+Download Single,Download,2017-01-01,707.692711218
+Download Single,Download,2018-01-01,499.316974193
+Download Single,Download,2019-01-01,414.804250982
+Kiosk,Other,1973-01-01,0
+Kiosk,Other,1974-01-01,0
+Kiosk,Other,1975-01-01,0
+Kiosk,Other,1976-01-01,0
+Kiosk,Other,1977-01-01,0
+Kiosk,Other,1978-01-01,0
+Kiosk,Other,1979-01-01,0
+Kiosk,Other,1980-01-01,0
+Kiosk,Other,1981-01-01,0
+Kiosk,Other,1982-01-01,0
+Kiosk,Other,1983-01-01,0
+Kiosk,Other,1984-01-01,0
+Kiosk,Other,1985-01-01,0
+Kiosk,Other,1986-01-01,0
+Kiosk,Other,1987-01-01,0
+Kiosk,Other,1988-01-01,0
+Kiosk,Other,1989-01-01,0
+Kiosk,Other,1990-01-01,0
+Kiosk,Other,1991-01-01,0
+Kiosk,Other,1992-01-01,0
+Kiosk,Other,1993-01-01,0
+Kiosk,Other,1994-01-01,0
+Kiosk,Other,1995-01-01,0
+Kiosk,Other,1996-01-01,0
+Kiosk,Other,1997-01-01,0
+Kiosk,Other,1998-01-01,0
+Kiosk,Other,1999-01-01,0
+Kiosk,Other,2000-01-01,0
+Kiosk,Other,2001-01-01,0
+Kiosk,Other,2002-01-01,0
+Kiosk,Other,2003-01-01,0
+Kiosk,Other,2004-01-01,0
+Kiosk,Other,2005-01-01,1.309047619
+Kiosk,Other,2006-01-01,2.409465774
+Kiosk,Other,2007-01-01,3.206503618
+Kiosk,Other,2008-01-01,3.087315086
+Kiosk,Other,2009-01-01,7.507511991
+Kiosk,Other,2010-01-01,7.503599075
+Kiosk,Other,2011-01-01,3.068715963
+Kiosk,Other,2012-01-01,4.068866328
+Kiosk,Other,2013-01-01,6.786152156
+Kiosk,Other,2014-01-01,2.789051821
+Kiosk,Other,2015-01-01,3.99147413
+Kiosk,Other,2016-01-01,3.13587911
+Kiosk,Other,2017-01-01,2.351668038
+Kiosk,Other,2018-01-01,2.000651969
+Kiosk,Other,2019-01-01,1.586470587
+LP/EP,Vinyl,1973-01-01,7174.52
+LP/EP,Vinyl,1974-01-01,7031.86
+LP/EP,Vinyl,1975-01-01,7056.7
+LP/EP,Vinyl,1976-01-01,7472.01
+LP/EP,Vinyl,1977-01-01,9260.61
+LP/EP,Vinyl,1978-01-01,9698.11
+LP/EP,Vinyl,1979-01-01,7243.62
+LP/EP,Vinyl,1980-01-01,6825.79
+LP/EP,Vinyl,1981-01-01,6586.05
+LP/EP,Vinyl,1982-01-01,5100.16
+LP/EP,Vinyl,1983-01-01,4335.39
+LP/EP,Vinyl,1984-01-01,3810.99
+LP/EP,Vinyl,1985-01-01,3042.46
+LP/EP,Vinyl,1986-01-01,2292.98
+LP/EP,Vinyl,1987-01-01,1784.87
+LP/EP,Vinyl,1988-01-01,1150.13
+LP/EP,Vinyl,1989-01-01,454.203525
+LP/EP,Vinyl,1990-01-01,169.199162204
+LP/EP,Vinyl,1991-01-01,55.185872247
+LP/EP,Vinyl,1992-01-01,24.59992516
+LP/EP,Vinyl,1993-01-01,18.754077509
+LP/EP,Vinyl,1994-01-01,30.706441296
+LP/EP,Vinyl,1995-01-01,42.106238189
+LP/EP,Vinyl,1996-01-01,59.962891013
+LP/EP,Vinyl,1997-01-01,53.042854206
+LP/EP,Vinyl,1998-01-01,53.327226994
+LP/EP,Vinyl,1999-01-01,48.79887515
+LP/EP,Vinyl,2000-01-01,41.124848432
+LP/EP,Vinyl,2001-01-01,39.5539345
+LP/EP,Vinyl,2002-01-01,29.132676487
+LP/EP,Vinyl,2003-01-01,30.150852717
+LP/EP,Vinyl,2004-01-01,26.120593436
+LP/EP,Vinyl,2005-01-01,18.58847619
+LP/EP,Vinyl,2006-01-01,19.909796131
+LP/EP,Vinyl,2007-01-01,28.24189725
+LP/EP,Vinyl,2008-01-01,67.327217456
+LP/EP,Vinyl,2009-01-01,76.028454765
+LP/EP,Vinyl,2010-01-01,104.229680908
+LP/EP,Vinyl,2011-01-01,135.705439252
+LP/EP,Vinyl,2012-01-01,178.967982236
+LP/EP,Vinyl,2013-01-01,231.274070194
+LP/EP,Vinyl,2014-01-01,263.336179145
+LP/EP,Vinyl,2015-01-01,359.598162864
+LP/EP,Vinyl,2016-01-01,378.607270991
+LP/EP,Vinyl,2017-01-01,405.212077272
+LP/EP,Vinyl,2018-01-01,426.820186646
+LP/EP,Vinyl,2019-01-01,497.588920842
+Limited Tier Paid Subscription,Streaming,1973-01-01,0
+Limited Tier Paid Subscription,Streaming,1974-01-01,0
+Limited Tier Paid Subscription,Streaming,1975-01-01,0
+Limited Tier Paid Subscription,Streaming,1976-01-01,0
+Limited Tier Paid Subscription,Streaming,1977-01-01,0
+Limited Tier Paid Subscription,Streaming,1978-01-01,0
+Limited Tier Paid Subscription,Streaming,1979-01-01,0
+Limited Tier Paid Subscription,Streaming,1980-01-01,0
+Limited Tier Paid Subscription,Streaming,1981-01-01,0
+Limited Tier Paid Subscription,Streaming,1982-01-01,0
+Limited Tier Paid Subscription,Streaming,1983-01-01,0
+Limited Tier Paid Subscription,Streaming,1984-01-01,0
+Limited Tier Paid Subscription,Streaming,1985-01-01,0
+Limited Tier Paid Subscription,Streaming,1986-01-01,0
+Limited Tier Paid Subscription,Streaming,1987-01-01,0
+Limited Tier Paid Subscription,Streaming,1988-01-01,0
+Limited Tier Paid Subscription,Streaming,1989-01-01,0
+Limited Tier Paid Subscription,Streaming,1990-01-01,0
+Limited Tier Paid Subscription,Streaming,1991-01-01,0
+Limited Tier Paid Subscription,Streaming,1992-01-01,0
+Limited Tier Paid Subscription,Streaming,1993-01-01,0
+Limited Tier Paid Subscription,Streaming,1994-01-01,0
+Limited Tier Paid Subscription,Streaming,1995-01-01,0
+Limited Tier Paid Subscription,Streaming,1996-01-01,0
+Limited Tier Paid Subscription,Streaming,1997-01-01,0
+Limited Tier Paid Subscription,Streaming,1998-01-01,0
+Limited Tier Paid Subscription,Streaming,1999-01-01,0
+Limited Tier Paid Subscription,Streaming,2000-01-01,0
+Limited Tier Paid Subscription,Streaming,2001-01-01,0
+Limited Tier Paid Subscription,Streaming,2002-01-01,0
+Limited Tier Paid Subscription,Streaming,2003-01-01,0
+Limited Tier Paid Subscription,Streaming,2004-01-01,0
+Limited Tier Paid Subscription,Streaming,2005-01-01,0
+Limited Tier Paid Subscription,Streaming,2006-01-01,0
+Limited Tier Paid Subscription,Streaming,2007-01-01,0
+Limited Tier Paid Subscription,Streaming,2008-01-01,0
+Limited Tier Paid Subscription,Streaming,2009-01-01,0
+Limited Tier Paid Subscription,Streaming,2010-01-01,0
+Limited Tier Paid Subscription,Streaming,2011-01-01,0
+Limited Tier Paid Subscription,Streaming,2012-01-01,0
+Limited Tier Paid Subscription,Streaming,2013-01-01,0
+Limited Tier Paid Subscription,Streaming,2014-01-01,0
+Limited Tier Paid Subscription,Streaming,2015-01-01,0
+Limited Tier Paid Subscription,Streaming,2016-01-01,280.536691286
+Limited Tier Paid Subscription,Streaming,2017-01-01,617.032317981
+Limited Tier Paid Subscription,Streaming,2018-01-01,760.591366006
+Limited Tier Paid Subscription,Streaming,2019-01-01,829.498739675
+Music Video (Physical),Other,1973-01-01,0
+Music Video (Physical),Other,1974-01-01,0
+Music Video (Physical),Other,1975-01-01,0
+Music Video (Physical),Other,1976-01-01,0
+Music Video (Physical),Other,1977-01-01,0
+Music Video (Physical),Other,1978-01-01,0
+Music Video (Physical),Other,1979-01-01,0
+Music Video (Physical),Other,1980-01-01,0
+Music Video (Physical),Other,1981-01-01,0
+Music Video (Physical),Other,1982-01-01,0
+Music Video (Physical),Other,1983-01-01,0
+Music Video (Physical),Other,1984-01-01,0
+Music Video (Physical),Other,1985-01-01,0
+Music Video (Physical),Other,1986-01-01,0
+Music Video (Physical),Other,1987-01-01,0
+Music Video (Physical),Other,1988-01-01,0
+Music Video (Physical),Other,1989-01-01,237.92595
+Music Video (Physical),Other,1990-01-01,337.029082632
+Music Video (Physical),Other,1991-01-01,221.682024229
+Music Video (Physical),Other,1992-01-01,286.816905203
+Music Video (Physical),Other,1993-01-01,377.381578547
+Music Video (Physical),Other,1994-01-01,398.666212551
+Music Video (Physical),Other,1995-01-01,369.561923228
+Music Video (Physical),Other,1996-01-01,384.70756979
+Music Video (Physical),Other,1997-01-01,515.933347664
+Music Video (Physical),Other,1998-01-01,796.771509202
+Music Video (Physical),Other,1999-01-01,578.067178271
+Music Video (Physical),Other,2000-01-01,418.523277003
+Music Video (Physical),Other,2001-01-01,475.224643704
+Music Video (Physical),Other,2002-01-01,409.847019455
+Music Video (Physical),Other,2003-01-01,555.637142935
+Music Video (Physical),Other,2004-01-01,821.783644256
+Music Video (Physical),Other,2005-01-01,788.30847619
+Music Video (Physical),Other,2006-01-01,572.057900298
+Music Video (Physical),Other,2007-01-01,598.012924747
+Music Video (Physical),Other,2008-01-01,269.902584265
+Music Video (Physical),Other,2009-01-01,249.77373227
+Music Video (Physical),Other,2010-01-01,208.224874344
+Music Video (Physical),Other,2011-01-01,171.620781634
+Music Video (Physical),Other,2012-01-01,129.85137719
+Music Video (Physical),Other,2013-01-01,116.639672376
+Music Video (Physical),Other,2014-01-01,96.875251056
+Music Video (Physical),Other,2015-01-01,75.973614493
+Music Video (Physical),Other,2016-01-01,60.634642175
+Music Video (Physical),Other,2017-01-01,40.279585351
+Music Video (Physical),Other,2018-01-01,28.060663877
+Music Video (Physical),Other,2019-01-01,27.705246783
+On-Demand Streaming (Ad-Supported),Streaming,1973-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1974-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1975-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1976-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1977-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1978-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1979-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1980-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1981-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1982-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1983-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1984-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1985-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1986-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1987-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1988-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1989-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1990-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1991-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1992-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1993-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1994-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1995-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1996-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1997-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1998-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,1999-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,2000-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,2001-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,2002-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,2003-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,2004-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,2005-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,2006-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,2007-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,2008-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,2009-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,2010-01-01,0
+On-Demand Streaming (Ad-Supported),Streaming,2011-01-01,129.340695033
+On-Demand Streaming (Ad-Supported),Streaming,2012-01-01,190.339615647
+On-Demand Streaming (Ad-Supported),Streaming,2013-01-01,242.396097837
+On-Demand Streaming (Ad-Supported),Streaming,2014-01-01,306.475448007
+On-Demand Streaming (Ad-Supported),Streaming,2015-01-01,401.245264147
+On-Demand Streaming (Ad-Supported),Streaming,2016-01-01,521.288175026
+On-Demand Streaming (Ad-Supported),Streaming,2017-01-01,686.918081261
+On-Demand Streaming (Ad-Supported),Streaming,2018-01-01,773.294916688
+On-Demand Streaming (Ad-Supported),Streaming,2019-01-01,908.149330523
+Other Ad-Supported Streaming,Streaming,1973-01-01,0
+Other Ad-Supported Streaming,Streaming,1974-01-01,0
+Other Ad-Supported Streaming,Streaming,1975-01-01,0
+Other Ad-Supported Streaming,Streaming,1976-01-01,0
+Other Ad-Supported Streaming,Streaming,1977-01-01,0
+Other Ad-Supported Streaming,Streaming,1978-01-01,0
+Other Ad-Supported Streaming,Streaming,1979-01-01,0
+Other Ad-Supported Streaming,Streaming,1980-01-01,0
+Other Ad-Supported Streaming,Streaming,1981-01-01,0
+Other Ad-Supported Streaming,Streaming,1982-01-01,0
+Other Ad-Supported Streaming,Streaming,1983-01-01,0
+Other Ad-Supported Streaming,Streaming,1984-01-01,0
+Other Ad-Supported Streaming,Streaming,1985-01-01,0
+Other Ad-Supported Streaming,Streaming,1986-01-01,0
+Other Ad-Supported Streaming,Streaming,1987-01-01,0
+Other Ad-Supported Streaming,Streaming,1988-01-01,0
+Other Ad-Supported Streaming,Streaming,1989-01-01,0
+Other Ad-Supported Streaming,Streaming,1990-01-01,0
+Other Ad-Supported Streaming,Streaming,1991-01-01,0
+Other Ad-Supported Streaming,Streaming,1992-01-01,0
+Other Ad-Supported Streaming,Streaming,1993-01-01,0
+Other Ad-Supported Streaming,Streaming,1994-01-01,0
+Other Ad-Supported Streaming,Streaming,1995-01-01,0
+Other Ad-Supported Streaming,Streaming,1996-01-01,0
+Other Ad-Supported Streaming,Streaming,1997-01-01,0
+Other Ad-Supported Streaming,Streaming,1998-01-01,0
+Other Ad-Supported Streaming,Streaming,1999-01-01,0
+Other Ad-Supported Streaming,Streaming,2000-01-01,0
+Other Ad-Supported Streaming,Streaming,2001-01-01,0
+Other Ad-Supported Streaming,Streaming,2002-01-01,0
+Other Ad-Supported Streaming,Streaming,2003-01-01,0
+Other Ad-Supported Streaming,Streaming,2004-01-01,0
+Other Ad-Supported Streaming,Streaming,2005-01-01,0
+Other Ad-Supported Streaming,Streaming,2006-01-01,0
+Other Ad-Supported Streaming,Streaming,2007-01-01,0
+Other Ad-Supported Streaming,Streaming,2008-01-01,0
+Other Ad-Supported Streaming,Streaming,2009-01-01,0
+Other Ad-Supported Streaming,Streaming,2010-01-01,0
+Other Ad-Supported Streaming,Streaming,2011-01-01,0
+Other Ad-Supported Streaming,Streaming,2012-01-01,0
+Other Ad-Supported Streaming,Streaming,2013-01-01,0
+Other Ad-Supported Streaming,Streaming,2014-01-01,0
+Other Ad-Supported Streaming,Streaming,2015-01-01,0
+Other Ad-Supported Streaming,Streaming,2016-01-01,86.559596683
+Other Ad-Supported Streaming,Streaming,2017-01-01,273.040319024
+Other Ad-Supported Streaming,Streaming,2018-01-01,255.967443871
+Other Ad-Supported Streaming,Streaming,2019-01-01,251.064710118
+Other Digital,Download,1973-01-01,0
+Other Digital,Download,1974-01-01,0
+Other Digital,Download,1975-01-01,0
+Other Digital,Download,1976-01-01,0
+Other Digital,Download,1977-01-01,0
+Other Digital,Download,1978-01-01,0
+Other Digital,Download,1979-01-01,0
+Other Digital,Download,1980-01-01,0
+Other Digital,Download,1981-01-01,0
+Other Digital,Download,1982-01-01,0
+Other Digital,Download,1983-01-01,0
+Other Digital,Download,1984-01-01,0
+Other Digital,Download,1985-01-01,0
+Other Digital,Download,1986-01-01,0
+Other Digital,Download,1987-01-01,0
+Other Digital,Download,1988-01-01,0
+Other Digital,Download,1989-01-01,0
+Other Digital,Download,1990-01-01,0
+Other Digital,Download,1991-01-01,0
+Other Digital,Download,1992-01-01,0
+Other Digital,Download,1993-01-01,0
+Other Digital,Download,1994-01-01,0
+Other Digital,Download,1995-01-01,0
+Other Digital,Download,1996-01-01,0
+Other Digital,Download,1997-01-01,0
+Other Digital,Download,1998-01-01,0
+Other Digital,Download,1999-01-01,0
+Other Digital,Download,2000-01-01,0
+Other Digital,Download,2001-01-01,0
+Other Digital,Download,2002-01-01,0
+Other Digital,Download,2003-01-01,0
+Other Digital,Download,2004-01-01,0
+Other Digital,Download,2005-01-01,0
+Other Digital,Download,2006-01-01,0
+Other Digital,Download,2007-01-01,0
+Other Digital,Download,2008-01-01,0
+Other Digital,Download,2009-01-01,0
+Other Digital,Download,2010-01-01,0
+Other Digital,Download,2011-01-01,0
+Other Digital,Download,2012-01-01,0
+Other Digital,Download,2013-01-01,0
+Other Digital,Download,2014-01-01,0
+Other Digital,Download,2015-01-01,0
+Other Digital,Download,2016-01-01,18.259409536
+Other Digital,Download,2017-01-01,17.610951916
+Other Digital,Download,2018-01-01,20.199063312
+Other Digital,Download,2019-01-01,21.517175006
+Other Tapes,Tape,1973-01-01,89.825432432
+Other Tapes,Tape,1974-01-01,68.970346856
+Other Tapes,Tape,1975-01-01,48.470286245
+Other Tapes,Tape,1976-01-01,22.914775044
+Other Tapes,Tape,1977-01-01,0
+Other Tapes,Tape,1978-01-01,0
+Other Tapes,Tape,1979-01-01,0
+Other Tapes,Tape,1980-01-01,0
+Other Tapes,Tape,1981-01-01,0
+Other Tapes,Tape,1982-01-01,0
+Other Tapes,Tape,1983-01-01,0
+Other Tapes,Tape,1984-01-01,0
+Other Tapes,Tape,1985-01-01,0
+Other Tapes,Tape,1986-01-01,0
+Other Tapes,Tape,1987-01-01,0
+Other Tapes,Tape,1988-01-01,0
+Other Tapes,Tape,1989-01-01,0
+Other Tapes,Tape,1990-01-01,0
+Other Tapes,Tape,1991-01-01,0
+Other Tapes,Tape,1992-01-01,0
+Other Tapes,Tape,1993-01-01,0
+Other Tapes,Tape,1994-01-01,0
+Other Tapes,Tape,1995-01-01,0
+Other Tapes,Tape,1996-01-01,0
+Other Tapes,Tape,1997-01-01,0
+Other Tapes,Tape,1998-01-01,0
+Other Tapes,Tape,1999-01-01,0
+Other Tapes,Tape,2000-01-01,0
+Other Tapes,Tape,2001-01-01,0
+Other Tapes,Tape,2002-01-01,0
+Other Tapes,Tape,2003-01-01,0
+Other Tapes,Tape,2004-01-01,0
+Other Tapes,Tape,2005-01-01,0
+Other Tapes,Tape,2006-01-01,0
+Other Tapes,Tape,2007-01-01,0
+Other Tapes,Tape,2008-01-01,0
+Other Tapes,Tape,2009-01-01,0
+Other Tapes,Tape,2010-01-01,0
+Other Tapes,Tape,2011-01-01,0
+Other Tapes,Tape,2012-01-01,0
+Other Tapes,Tape,2013-01-01,0
+Other Tapes,Tape,2014-01-01,0
+Other Tapes,Tape,2015-01-01,0
+Other Tapes,Tape,2016-01-01,0
+Other Tapes,Tape,2017-01-01,0
+Other Tapes,Tape,2018-01-01,0
+Other Tapes,Tape,2019-01-01,0
+Paid Subscription,Streaming,1973-01-01,0
+Paid Subscription,Streaming,1974-01-01,0
+Paid Subscription,Streaming,1975-01-01,0
+Paid Subscription,Streaming,1976-01-01,0
+Paid Subscription,Streaming,1977-01-01,0
+Paid Subscription,Streaming,1978-01-01,0
+Paid Subscription,Streaming,1979-01-01,0
+Paid Subscription,Streaming,1980-01-01,0
+Paid Subscription,Streaming,1981-01-01,0
+Paid Subscription,Streaming,1982-01-01,0
+Paid Subscription,Streaming,1983-01-01,0
+Paid Subscription,Streaming,1984-01-01,0
+Paid Subscription,Streaming,1985-01-01,0
+Paid Subscription,Streaming,1986-01-01,0
+Paid Subscription,Streaming,1987-01-01,0
+Paid Subscription,Streaming,1988-01-01,0
+Paid Subscription,Streaming,1989-01-01,0
+Paid Subscription,Streaming,1990-01-01,0
+Paid Subscription,Streaming,1991-01-01,0
+Paid Subscription,Streaming,1992-01-01,0
+Paid Subscription,Streaming,1993-01-01,0
+Paid Subscription,Streaming,1994-01-01,0
+Paid Subscription,Streaming,1995-01-01,0
+Paid Subscription,Streaming,1996-01-01,0
+Paid Subscription,Streaming,1997-01-01,0
+Paid Subscription,Streaming,1998-01-01,0
+Paid Subscription,Streaming,1999-01-01,0
+Paid Subscription,Streaming,2000-01-01,0
+Paid Subscription,Streaming,2001-01-01,0
+Paid Subscription,Streaming,2002-01-01,0
+Paid Subscription,Streaming,2003-01-01,0
+Paid Subscription,Streaming,2004-01-01,0
+Paid Subscription,Streaming,2005-01-01,195.309904762
+Paid Subscription,Streaming,2006-01-01,261.490443452
+Paid Subscription,Streaming,2007-01-01,288.585325615
+Paid Subscription,Streaming,2008-01-01,262.896753877
+Paid Subscription,Streaming,2009-01-01,245.722059132
+Paid Subscription,Streaming,2010-01-01,249.025694317
+Paid Subscription,Streaming,2011-01-01,281.639931715
+Paid Subscription,Streaming,2012-01-01,445.276306223
+Paid Subscription,Streaming,2013-01-01,706.011657475
+Paid Subscription,Streaming,2014-01-01,831.834027499
+Paid Subscription,Streaming,2015-01-01,1247.68
+Paid Subscription,Streaming,2016-01-01,2390.49
+Paid Subscription,Streaming,2017-01-01,3651.03
+Paid Subscription,Streaming,2018-01-01,4740.33
+Paid Subscription,Streaming,2019-01-01,5934.4
+Ringtones & Ringbacks,Download,1973-01-01,0
+Ringtones & Ringbacks,Download,1974-01-01,0
+Ringtones & Ringbacks,Download,1975-01-01,0
+Ringtones & Ringbacks,Download,1976-01-01,0
+Ringtones & Ringbacks,Download,1977-01-01,0
+Ringtones & Ringbacks,Download,1978-01-01,0
+Ringtones & Ringbacks,Download,1979-01-01,0
+Ringtones & Ringbacks,Download,1980-01-01,0
+Ringtones & Ringbacks,Download,1981-01-01,0
+Ringtones & Ringbacks,Download,1982-01-01,0
+Ringtones & Ringbacks,Download,1983-01-01,0
+Ringtones & Ringbacks,Download,1984-01-01,0
+Ringtones & Ringbacks,Download,1985-01-01,0
+Ringtones & Ringbacks,Download,1986-01-01,0
+Ringtones & Ringbacks,Download,1987-01-01,0
+Ringtones & Ringbacks,Download,1988-01-01,0
+Ringtones & Ringbacks,Download,1989-01-01,0
+Ringtones & Ringbacks,Download,1990-01-01,0
+Ringtones & Ringbacks,Download,1991-01-01,0
+Ringtones & Ringbacks,Download,1992-01-01,0
+Ringtones & Ringbacks,Download,1993-01-01,0
+Ringtones & Ringbacks,Download,1994-01-01,0
+Ringtones & Ringbacks,Download,1995-01-01,0
+Ringtones & Ringbacks,Download,1996-01-01,0
+Ringtones & Ringbacks,Download,1997-01-01,0
+Ringtones & Ringbacks,Download,1998-01-01,0
+Ringtones & Ringbacks,Download,1999-01-01,0
+Ringtones & Ringbacks,Download,2000-01-01,0
+Ringtones & Ringbacks,Download,2001-01-01,0
+Ringtones & Ringbacks,Download,2002-01-01,0
+Ringtones & Ringbacks,Download,2003-01-01,0
+Ringtones & Ringbacks,Download,2004-01-01,0
+Ringtones & Ringbacks,Download,2005-01-01,551.89447619
+Ringtones & Ringbacks,Download,2006-01-01,981.286639881
+Ringtones & Ringbacks,Download,2007-01-01,1302.09
+Ringtones & Ringbacks,Download,2008-01-01,1160.24
+Ringtones & Ringbacks,Download,2009-01-01,837.504670989
+Ringtones & Ringbacks,Download,2010-01-01,525.251935283
+Ringtones & Ringbacks,Download,2011-01-01,313.9182774
+Ringtones & Ringbacks,Download,2012-01-01,162.565728249
+Ringtones & Ringbacks,Download,2013-01-01,107.548976379
+Ringtones & Ringbacks,Download,2014-01-01,71.61127201
+Ringtones & Ringbacks,Download,2015-01-01,58.874581007
+Ringtones & Ringbacks,Download,2016-01-01,59.998070883
+Ringtones & Ringbacks,Download,2017-01-01,37.040368455
+Ringtones & Ringbacks,Download,2018-01-01,25.41009037
+Ringtones & Ringbacks,Download,2019-01-01,21.426736902
+SACD,Disc,1973-01-01,0
+SACD,Disc,1974-01-01,0
+SACD,Disc,1975-01-01,0
+SACD,Disc,1976-01-01,0
+SACD,Disc,1977-01-01,0
+SACD,Disc,1978-01-01,0
+SACD,Disc,1979-01-01,0
+SACD,Disc,1980-01-01,0
+SACD,Disc,1981-01-01,0
+SACD,Disc,1982-01-01,0
+SACD,Disc,1983-01-01,0
+SACD,Disc,1984-01-01,0
+SACD,Disc,1985-01-01,0
+SACD,Disc,1986-01-01,0
+SACD,Disc,1987-01-01,0
+SACD,Disc,1988-01-01,0
+SACD,Disc,1989-01-01,0
+SACD,Disc,1990-01-01,0
+SACD,Disc,1991-01-01,0
+SACD,Disc,1992-01-01,0
+SACD,Disc,1993-01-01,0
+SACD,Disc,1994-01-01,0
+SACD,Disc,1995-01-01,0
+SACD,Disc,1996-01-01,0
+SACD,Disc,1997-01-01,0
+SACD,Disc,1998-01-01,0
+SACD,Disc,1999-01-01,0
+SACD,Disc,2000-01-01,0
+SACD,Disc,2001-01-01,0
+SACD,Disc,2002-01-01,0
+SACD,Disc,2003-01-01,36.542277717
+SACD,Disc,2004-01-01,22.466417152
+SACD,Disc,2005-01-01,13.09047619
+SACD,Disc,2006-01-01,6.974769345
+SACD,Disc,2007-01-01,4.43977424
+SACD,Disc,2008-01-01,3.681029526
+SACD,Disc,2009-01-01,2.860004568
+SACD,Disc,2010-01-01,1.993143504
+SACD,Disc,2011-01-01,1.704842202
+SACD,Disc,2012-01-01,1.494897613
+SACD,Disc,2013-01-01,1.073719014
+SACD,Disc,2014-01-01,0.82446336
+SACD,Disc,2015-01-01,1.125529098
+SACD,Disc,2016-01-01,1.28555661
+SACD,Disc,2017-01-01,0.887142473
+SACD,Disc,2018-01-01,0.875277267
+SACD,Disc,2019-01-01,0.433302292
+SoundExchange Distributions,Streaming,1973-01-01,0
+SoundExchange Distributions,Streaming,1974-01-01,0
+SoundExchange Distributions,Streaming,1975-01-01,0
+SoundExchange Distributions,Streaming,1976-01-01,0
+SoundExchange Distributions,Streaming,1977-01-01,0
+SoundExchange Distributions,Streaming,1978-01-01,0
+SoundExchange Distributions,Streaming,1979-01-01,0
+SoundExchange Distributions,Streaming,1980-01-01,0
+SoundExchange Distributions,Streaming,1981-01-01,0
+SoundExchange Distributions,Streaming,1982-01-01,0
+SoundExchange Distributions,Streaming,1983-01-01,0
+SoundExchange Distributions,Streaming,1984-01-01,0
+SoundExchange Distributions,Streaming,1985-01-01,0
+SoundExchange Distributions,Streaming,1986-01-01,0
+SoundExchange Distributions,Streaming,1987-01-01,0
+SoundExchange Distributions,Streaming,1988-01-01,0
+SoundExchange Distributions,Streaming,1989-01-01,0
+SoundExchange Distributions,Streaming,1990-01-01,0
+SoundExchange Distributions,Streaming,1991-01-01,0
+SoundExchange Distributions,Streaming,1992-01-01,0
+SoundExchange Distributions,Streaming,1993-01-01,0
+SoundExchange Distributions,Streaming,1994-01-01,0
+SoundExchange Distributions,Streaming,1995-01-01,0
+SoundExchange Distributions,Streaming,1996-01-01,0
+SoundExchange Distributions,Streaming,1997-01-01,0
+SoundExchange Distributions,Streaming,1998-01-01,0
+SoundExchange Distributions,Streaming,1999-01-01,0
+SoundExchange Distributions,Streaming,2000-01-01,0
+SoundExchange Distributions,Streaming,2001-01-01,0
+SoundExchange Distributions,Streaming,2002-01-01,0
+SoundExchange Distributions,Streaming,2003-01-01,0
+SoundExchange Distributions,Streaming,2004-01-01,9.338450503
+SoundExchange Distributions,Streaming,2005-01-01,26.704571429
+SoundExchange Distributions,Streaming,2006-01-01,41.594988095
+SoundExchange Distributions,Streaming,2007-01-01,44.644396527
+SoundExchange Distributions,Streaming,2008-01-01,118.74288793
+SoundExchange Distributions,Streaming,2009-01-01,185.304462633
+SoundExchange Distributions,Streaming,2010-01-01,292.171389001
+SoundExchange Distributions,Streaming,2011-01-01,331.875948591
+SoundExchange Distributions,Streaming,2012-01-01,514.445211983
+SoundExchange Distributions,Streaming,2013-01-01,647.930273827
+SoundExchange Distributions,Streaming,2014-01-01,835.213587287
+SoundExchange Distributions,Streaming,2015-01-01,865.719793095
+SoundExchange Distributions,Streaming,2016-01-01,941.535964784
+SoundExchange Distributions,Streaming,2017-01-01,680.027594648
+SoundExchange Distributions,Streaming,2018-01-01,970.064512738
+SoundExchange Distributions,Streaming,2019-01-01,908.2
+Synchronization,Other,1973-01-01,0
+Synchronization,Other,1974-01-01,0
+Synchronization,Other,1975-01-01,0
+Synchronization,Other,1976-01-01,0
+Synchronization,Other,1977-01-01,0
+Synchronization,Other,1978-01-01,0
+Synchronization,Other,1979-01-01,0
+Synchronization,Other,1980-01-01,0
+Synchronization,Other,1981-01-01,0
+Synchronization,Other,1982-01-01,0
+Synchronization,Other,1983-01-01,0
+Synchronization,Other,1984-01-01,0
+Synchronization,Other,1985-01-01,0
+Synchronization,Other,1986-01-01,0
+Synchronization,Other,1987-01-01,0
+Synchronization,Other,1988-01-01,0
+Synchronization,Other,1989-01-01,0
+Synchronization,Other,1990-01-01,0
+Synchronization,Other,1991-01-01,0
+Synchronization,Other,1992-01-01,0
+Synchronization,Other,1993-01-01,0
+Synchronization,Other,1994-01-01,0
+Synchronization,Other,1995-01-01,0
+Synchronization,Other,1996-01-01,0
+Synchronization,Other,1997-01-01,0
+Synchronization,Other,1998-01-01,0
+Synchronization,Other,1999-01-01,0
+Synchronization,Other,2000-01-01,0
+Synchronization,Other,2001-01-01,0
+Synchronization,Other,2002-01-01,0
+Synchronization,Other,2003-01-01,0
+Synchronization,Other,2004-01-01,0
+Synchronization,Other,2005-01-01,0
+Synchronization,Other,2006-01-01,0
+Synchronization,Other,2007-01-01,0
+Synchronization,Other,2008-01-01,0
+Synchronization,Other,2009-01-01,239.763716282
+Synchronization,Other,2010-01-01,221.238928991
+Synchronization,Other,2011-01-01,223.334328418
+Synchronization,Other,2012-01-01,212.233985813
+Synchronization,Other,2013-01-01,208.162343515
+Synchronization,Other,2014-01-01,204.875818427
+Synchronization,Other,2015-01-01,218.894529344
+Synchronization,Other,2016-01-01,228.847859543
+Synchronization,Other,2017-01-01,242.063251407
+Synchronization,Other,2018-01-01,290.686928901
+Synchronization,Other,2019-01-01,276.262360199
+Vinyl Single,Vinyl,1973-01-01,1094.03
+Vinyl Single,Vinyl,1974-01-01,1006.03
+Vinyl Single,Vinyl,1975-01-01,1005.05
+Vinyl Single,Vinyl,1976-01-01,1101.26
+Vinyl Single,Vinyl,1977-01-01,1034.02
+Vinyl Single,Vinyl,1978-01-01,1020.67
+Vinyl Single,Vinyl,1979-01-01,1245.18
+Vinyl Single,Vinyl,1980-01-01,775.658373786
+Vinyl Single,Vinyl,1981-01-01,721.127115512
+Vinyl Single,Vinyl,1982-01-01,749.750580311
+Vinyl Single,Vinyl,1983-01-01,691.249298193
+Vinyl Single,Vinyl,1984-01-01,734.983117421
+Vinyl Single,Vinyl,1985-01-01,667.654433086
+Vinyl Single,Vinyl,1986-01-01,532.074468066
+Vinyl Single,Vinyl,1987-01-01,457.527007923
+Vinyl Single,Vinyl,1988-01-01,389.860716822
+Vinyl Single,Vinyl,1989-01-01,239.9877
+Vinyl Single,Vinyl,1990-01-01,184.652033665
+Vinyl Single,Vinyl,1991-01-01,119.944803965
+Vinyl Single,Vinyl,1992-01-01,120.995187455
+Vinyl Single,Vinyl,1993-01-01,90.585732872
+Vinyl Single,Vinyl,1994-01-01,81.423821862
+Vinyl Single,Vinyl,1995-01-01,78.341088583
+Vinyl Single,Vinyl,1996-01-01,77.397753346
+Vinyl Single,Vinyl,1997-01-01,56.706474766
+Vinyl Single,Vinyl,1998-01-01,40.309109816
+Vinyl Single,Vinyl,1999-01-01,42.814107443
+Vinyl Single,Vinyl,2000-01-01,39.046336237
+Vinyl Single,Vinyl,2001-01-01,45.328231508
+Vinyl Single,Vinyl,2002-01-01,35.385543635
+Vinyl Single,Vinyl,2003-01-01,29.872964674
+Vinyl Single,Vinyl,2004-01-01,26.93263261
+Vinyl Single,Vinyl,2005-01-01,17.279428571
+Vinyl Single,Vinyl,2006-01-01,12.554584821
+Vinyl Single,Vinyl,2007-01-01,4.933082489
+Vinyl Single,Vinyl,2008-01-01,3.44354375
+Vinyl Single,Vinyl,2009-01-01,2.979171425
+Vinyl Single,Vinyl,2010-01-01,2.696605918
+Vinyl Single,Vinyl,2011-01-01,5.228182752
+Vinyl Single,Vinyl,2012-01-01,5.281477044
+Vinyl Single,Vinyl,2013-01-01,3.269213385
+Vinyl Single,Vinyl,2014-01-01,5.938887283
+Vinyl Single,Vinyl,2015-01-01,6.205390253
+Vinyl Single,Vinyl,2016-01-01,5.198931395
+Vinyl Single,Vinyl,2017-01-01,6.33967756
+Vinyl Single,Vinyl,2018-01-01,5.386196747
+Vinyl Single,Vinyl,2019-01-01,6.795945687
diff --git a/test/data/us-congress-members.csv b/test/data/us-congress-members.csv
new file mode 100644
index 0000000000..906ea36174
--- /dev/null
+++ b/test/data/us-congress-members.csv
@@ -0,0 +1,888 @@
+full_name,gender,birth
+Alexandria Ocasio-Cortez,F,1989
+Abby Finkenauer,F,1988
+Katie Hill,F,1987
+Josh Harder,M,1986
+Lauren Underwood,F,1986
+Max Rose,M,1986
+Elise M. Stefanik,F,1984
+Mike Gallagher,M,1984
+Conor Lamb,M,1984
+Joe Neguse,M,1984
+Xochitl Torres Small,F,1984
+Anthony Gonzalez,M,1984
+William R. Timmons IV,M,1984
+Dan Crenshaw,M,1984
+Patrick Murphy,M,1983
+Trey Hollingsworth,M,1983
+Haley M. Stevens,F,1983
+Guy Reschenthaler,M,1983
+Colin Z. Allred,M,1983
+Matt Gaetz,M,1982
+Andy Kim,M,1982
+Joe Cunningham,M,1982
+Lance Gooden,M,1982
+Jared F. Golden,M,1982
+Aaron Schock,M,1981
+Tulsi Gabbard,F,1981
+Michael F. Q. San Nicolas,M,1981
+Ilhan Omar,F,1981
+Bryan Steil,M,1981
+Carlos Curbelo,M,1980
+Ruben J. Kihuen,M,1980
+Justin Amash,M,1980
+Eric Swalwell,M,1980
+Joseph P. Kennedy III,M,1980
+Jason Smith,M,1980
+Lee M. Zeldin,M,1980
+Brian J. Mast,M,1980
+Sharice Davids,F,1980
+Chris Pappas,M,1980
+Scott Taylor,M,1979
+Ruben Gallego,M,1979
+Pete Aguilar,M,1979
+Jim Banks,M,1979
+Jason Crow,M,1979
+Abigail Davis Spanberger,F,1979
+Josh Hawley,M,1979
+Ron DeSantis,M,1978
+Jaime Herrera Beutler,F,1978
+Adam Kinzinger,M,1978
+Seth Moulton,M,1978
+Stephanie N. Murphy,F,1978
+Darren Soto,M,1978
+Mike Levin,M,1978
+W. Gregory Steube,M,1978
+Anthony Brindisi,M,1978
+David G. Valadao,M,1977
+Tom Cotton,M,1977
+Markwayne Mullin,M,1977
+Brendan F. Boyle,M,1977
+Will Hurd,M,1977
+Antonio Delgado,M,1977
+Benjamin Quayle,M,1976
+Trey Radel,M,1976
+Marlin A. Stutzman,M,1976
+Kevin Yoder,M,1976
+Ryan A. Costello,M,1976
+Duncan Hunter,M,1976
+Martha Roby,F,1976
+Kyrsten Sinema,F,1976
+Ro Khanna,M,1976
+Nanette Diaz Barragán,F,1976
+Jenniffer González-Colón,F,1976
+Steve Watkins,M,1976
+Elissa Slotkin,F,1976
+Rashida Tlaib,F,1976
+Kelly Armstrong,M,1976
+Kendra S. Horn,F,1976
+Dusty Johnson,M,1976
+Mike Garcia,M,1976
+Jim Bridenstine,M,1975
+Jared Polis,M,1975
+Mia B. Love,F,1975
+Patrick T. McHenry,M,1975
+Grace Meng,F,1975
+Josh Gottheimer,M,1975
+Michael Cloud,M,1975
+Lizzie Fletcher,F,1975
+Elaine G. Luria,F,1975
+Vance M. McAllister,M,1974
+André Carson,M,1974
+Cory Gardner,M,1974
+Joaquin Castro,M,1974
+Derek Kilmer,M,1974
+Jimmy Gomez,M,1974
+Katie Porter,F,1974
+Michael Waltz,M,1974
+Ayanna Pressley,F,1974
+Ben McAdams,M,1974
+Dan Boren,M,1973
+Jon Runyan,M,1973
+Stephen Lee Fincher,M,1973
+Christopher Murphy,M,1973
+Devin Nunes,M,1973
+Cedric L. Richmond,M,1973
+Tim Ryan,M,1973
+Andy Barr,M,1973
+Raja Krishnamoorthi,M,1973
+Brian K. Fitzpatrick,M,1973
+Steven Horsford,M,1973
+Jahana Hayes,F,1973
+Russ Fulcher,M,1973
+Lori Trahan,F,1973
+David W. Jolly,M,1972
+Beto O’Rourke,M,1972
+"Thomas A. Garrett, Jr.",M,1972
+Ben Ray Luján,M,1972
+Todd Young,M,1972
+Brian Schatz,M,1972
+Raul Ruiz,M,1972
+Garret Graves,M,1972
+David Rouzer,M,1972
+Ben Sasse,M,1972
+James Comer,M,1972
+Mike Johnson,M,1972
+Jodey C. Arrington,M,1972
+Angie Craig,F,1972
+Mikie Sherrill,F,1972
+Van Taylor,M,1972
+Chip Roy,M,1972
+Ben Cline,M,1972
+Heath Shuler,M,1971
+Kristi L. Noem,F,1971
+Sean P. Duffy,M,1971
+Martin Heinrich,M,1971
+Mike Lee,M,1971
+Tom Reed,M,1971
+Marco Rubio,M,1971
+Thomas Massie,M,1971
+Richard Hudson,M,1971
+Marc A. Veasey,M,1971
+Alexander X. Mooney,M,1971
+Ted Budd,M,1971
+"Gilbert Ray Cisneros, Jr.",M,1971
+Debbie Mucarsel-Powell,F,1971
+Sean Casten,M,1971
+Jeffrey M. Landry,M,1970
+Michael G. Grimm,M,1970
+Frank C. Guinta,M,1970
+Todd Rokita,M,1970
+Thomas J. Rooney,M,1970
+Paul D. Ryan,M,1970
+Tom Graves,M,1970
+Steven M. Palazzo,M,1970
+Adrian Smith,M,1970
+Rob Woodall,M,1970
+Rodney Davis,M,1970
+Hakeem S. Jeffries,M,1970
+Ted Cruz,M,1970
+Joni Ernst,F,1970
+Warren Davidson,M,1970
+Greg Stanton,M,1970
+Michael Guest,M,1970
+Denver Riggleman,M,1970
+Kelly Loeffler,F,1970
+William M. Cowan,M,1969
+Robert Hurt,M,1969
+Robert J. Dold,M,1969
+Luke Messer,M,1969
+Bill Huizenga,M,1969
+Cathy McMorris Rodgers,F,1969
+Austin Scott,M,1969
+Linda T. Sánchez,F,1969
+Cory A. Booker,M,1969
+Ted Lieu,M,1969
+Mark Walker,M,1969
+Jimmy Panetta,M,1969
+Dean Phillips,M,1969
+Veronica Escobar,F,1969
+Jason Altmire,M,1968
+Tim Griffin,M,1968
+Daniel B. Maffei,M,1968
+Kelly Ayotte,F,1968
+Tim Huelskamp,M,1968
+David Young,M,1968
+James Lankford,M,1968
+Tammy Duckworth,F,1968
+George Holding,M,1968
+Darin LaHood,M,1968
+Jennifer Wexton,F,1968
+Kim Schrier,F,1968
+Connie Mack,M,1967
+Mark Takai,M,1967
+Mick Mulvaney,M,1967
+Jason Chaffetz,M,1967
+Jeff Denham,M,1967
+Raúl R. Labrador,M,1967
+Mike Bishop,M,1967
+Bruce Westerman,M,1967
+Vicente Gonzalez,M,1967
+Chrissy Houlahan,F,1967
+Randy Hultgren,M,1966
+Stephen Knight,M,1966
+Kirsten E. Gillibrand,F,1966
+Kathy Castor,F,1966
+"Eric A. ""Rick"" Crawford",M,1966
+Theodore E. Deutch,M,1966
+Jeff Duncan,M,1966
+James A. Himes,M,1966
+Daniel Lipinski,M,1966
+Debbie Wasserman Schultz,F,1966
+Doug Collins,M,1966
+Sean Patrick Maloney,M,1966
+Stacey E. Plaskett,F,1966
+Trent Kelly,M,1966
+A. Drew Ferguson IV,M,1966
+David Kustoff,M,1966
+Liz Cheney,F,1966
+Ross Spano,M,1966
+Pete Stauber,M,1966
+Susie Lee,F,1966
+Martha McSally,F,1966
+Chris Jacobs,M,1966
+Jesse L. Jackson Jr.,M,1965
+David Rivera,M,1965
+John Sullivan,M,1965
+Jeff Chiesa,M,1965
+Steve Southerland II,M,1965
+Erik Paulsen,M,1965
+John Ratcliffe,M,1965
+Robert B. Aderholt,M,1965
+Rick Larsen,M,1965
+Kevin McCarthy,M,1965
+Steve Scalise,M,1965
+Tim Scott,M,1965
+Terri A. Sewell,F,1965
+Adam Smith,M,1965
+Steve Stivers,M,1965
+Ami Bera,M,1965
+Norma J. Torres,F,1965
+Kathleen M. Rice,F,1965
+Pramila Jayapal,F,1965
+Cynthia Axne,F,1965
+Tom Malinowski,M,1965
+John W. Rose,M,1965
+Fred Keller,M,1965
+Robert T. Schilling,M,1964
+Renee L. Ellmers,F,1964
+Christopher P. Gibson,M,1964
+Trey Gowdy,M,1964
+Timothy J. Walz,M,1964
+Dave Brat,M,1964
+Michael F. Bennet,M,1964
+Yvette D. Clarke,F,1964
+Scott DesJarlais,M,1964
+Brett Guthrie,M,1964
+Jim Jordan,M,1964
+James R. Langevin,M,1964
+Jared Huffman,M,1964
+Mark Pocan,M,1964
+Dan Sullivan,M,1964
+Kamala D. Harris,F,1964
+Catherine Cortez Masto,F,1964
+Salud O. Carbajal,M,1964
+Lloyd Smucker,M,1964
+Daniel Meuser,M,1964
+Tim Burchett,M,1964
+Mark E. Green,M,1964
+Dan Bishop,M,1964
+Betty Sutton,F,1963
+Eric Cantor,M,1963
+Mark L. Pryor,M,1963
+Mike Rogers,M,1963
+Joe Garcia,M,1963
+Michael G. Fitzpatrick,M,1963
+Gwen Graham,F,1963
+Mike Pompeo,M,1963
+Keith Ellison,M,1963
+Lynn Jenkins,F,1963
+John K. Delaney,M,1963
+Steve Russell,M,1963
+Christopher A. Coons,M,1963
+Gus M. Bilirakis,M,1963
+Sam Graves,M,1963
+Ron Kind,M,1963
+Rand Paul,M,1963
+Tony Cárdenas,M,1963
+Jackie Walorski,F,1963
+Filemon Vela,M,1963
+Katherine M. Clark,F,1963
+Barry Loudermilk,M,1963
+Don Bacon,M,1963
+TJ Cox,M,1963
+Gregory F. Murphy,M,1963
+Mark S. Critz,M,1962
+Todd Russell Platts,M,1962
+Laura Richardson,F,1962
+Mark Begich,M,1962
+Lee Terry,M,1962
+Patrick J. Tiberi,M,1962
+Joseph Crowley,M,1962
+Jeff Flake,M,1962
+Keith J. Rothfus,M,1962
+Mimi Walters,F,1962
+Karen C. Handel,F,1962
+Tammy Baldwin,F,1962
+Larry Bucshon,M,1962
+"Charles J. ""Chuck"" Fleischmann",M,1962
+Michael T. McCaul,M,1962
+Pete Olson,M,1962
+John P. Sarbanes,M,1962
+David Schweikert,M,1962
+Suzan K. DelBene,F,1962
+Ann Wagner,F,1962
+Steve Daines,M,1962
+Scott Perry,M,1962
+John Katko,M,1962
+Lisa Blunt Rochester,F,1962
+Jamie Raskin,M,1962
+Thomas R. Suozzi,M,1962
+Troy Balderson,M,1962
+Jim Hagedorn,M,1962
+Mary Bono Mack,F,1961
+Mike Ross,M,1961
+Joe Walsh,M,1961
+Allen B. West,M,1961
+Pete P. Gallego,M,1961
+David Vitter,M,1961
+Joseph J. Heck,M,1961
+Ryan K. Zinke,M,1961
+Blake Farenthold,M,1961
+Peter J. Roskam,M,1961
+Bill Shuster,M,1961
+Claudia Tenney,F,1961
+David N. Cicilline,M,1961
+Mario Diaz-Balart,M,1961
+John Thune,M,1961
+Patrick J. Toomey,M,1961
+Juan Vargas,M,1961
+Cheri Bustos,F,1961
+Kevin Cramer,M,1961
+Matt Cartwright,M,1961
+John R. Moolenaar,M,1961
+Tom Emmer,M,1961
+Bradley Scott Schneider,M,1961
+Clay Higgins,M,1961
+Anthony G. Brown,M,1961
+Paul Mitchell,M,1961
+A. Donald McEachin,M,1961
+Greg Gianforte,M,1961
+Kevin Hern,M,1961
+Harley Rouda,M,1961
+Jim Matheson,M,1960
+John E. Walsh,M,1960
+E. Scott Rigell,M,1960
+Loretta Sanchez,F,1960
+Charles W. Dent,M,1960
+Evan H. Jenkins,M,1960
+Dean Heller,M,1960
+Mark Sanford,M,1960
+David A. Trott,M,1960
+Thomas MacArthur,M,1960
+"Robert P. Casey, Jr.",M,1960
+Amy Klobuchar,F,1960
+Jeff Fortenberry,M,1960
+Vicky Hartzler,F,1960
+Frank D. Lucas,M,1960
+Adam B. Schiff,M,1960
+Michael R. Turner,M,1960
+Doug LaMalfa,M,1960
+Mark Takano,M,1960
+Susan W. Brooks,F,1960
+Chris Stewart,M,1960
+Jody B. Hice,M,1960
+Mike Bost,M,1960
+Thom Tillis,M,1960
+Roger W. Marshall,M,1960
+John R. Curtis,M,1960
+Lucy McBath,F,1960
+Andy Levin,M,1960
+Debra A. Haaland,F,1960
+Scott P. Brown,M,1959
+Rick Berg,M,1959
+Ben Chandler,M,1959
+Chip Cravaack,M,1959
+Nan A. S. Hayworth,F,1959
+Mike Pence,M,1959
+Jo Bonner,M,1959
+Mark Kirk,M,1959
+Scott Garrett,M,1959
+Jeff Miller,M,1959
+Pedro R. Pierluisi,M,1959
+Curt Clawson,M,1959
+Michelle Lujan Grisham,F,1959
+Dennis A. Ross,M,1959
+Elizabeth H. Esty,F,1959
+Barbara Comstock,F,1959
+Brenda Jones,F,1959
+Mark Meadows,M,1959
+Brian Higgins,M,1959
+James P. McGovern,M,1959
+Glenn Thompson,M,1959
+Chris Van Hollen,M,1959
+Robert J. Wittman,M,1959
+Ken Buck,M,1959
+Cindy Hyde-Smith,F,1959
+Mary Gay Scanlon,F,1959
+Madeleine Dean,F,1959
+Enid Greene Waldholtz,F,1958
+Steve Austria,M,1958
+Russ Carnahan,M,1958
+Kathleen C. Hochul,F,1958
+Alan Nunnelee,M,1958
+Donna F. Edwards,F,1958
+Steve Israel,M,1958
+Matt Salmon,M,1958
+Alan Grayson,M,1958
+Xavier Becerra,M,1958
+James B. Renacci,M,1958
+Maria Cantwell,F,1958
+Paul A. Gosar,M,1958
+H. Morgan Griffith,M,1958
+Gary C. Peters,M,1958
+Mike Quigley,M,1958
+Mike Rogers,M,1958
+John Shimkus,M,1958
+Mac Thornberry,M,1958
+Mark E. Amodei,M,1958
+"Donald M. Payne, Jr.",M,1958
+Scott H. Peters,M,1958
+Daniel T. Kildee,M,1958
+Brad R. Wenstrup,M,1958
+Tim Kaine,M,1958
+Donald Norcross,M,1958
+Margaret Wood Hassan,F,1958
+Andy Biggs,M,1958
+J. Luis Correa,M,1958
+Tina Smith,F,1958
+Debbie Lesko,F,1958
+Hansen Clarke,M,1957
+Tim Holden,M,1957
+Robert E. Andrews,M,1957
+Bruce L. Braley,M,1957
+Cresent Hardy,M,1957
+Trent Franks,M,1957
+Jeb Hensarling,M,1957
+Bill Cassidy,M,1957
+Diana DeGette,F,1957
+Andy Harris,M,1957
+John Hoeven,M,1957
+Lisa Murkowski,F,1957
+Greg Walden,M,1957
+Steve Womack,M,1957
+David P. Joyce,M,1957
+Tom Rice,M,1957
+"Earl L. ""Buddy"" Carter",M,1957
+Val Butler Demings,F,1957
+Jacky Rosen,F,1957
+Joseph D. Morelle,M,1957
+Susan Wild,F,1957
+John Joyce,M,1957
+Thomas P. Tiffany,M,1957
+Sandy Adams,F,1956
+Michele Bachmann,F,1956
+Mike McIntyre,M,1956
+Steve Stockman,M,1956
+Chaka Fattah,M,1956
+Charles W. Boustany Jr.,M,1956
+John C. Carney Jr.,M,1956
+Reid J. Ribble,M,1956
+Lou Barletta,M,1956
+John Abney Culberson,M,1956
+Gregg Harper,M,1956
+"Daniel M. Donovan, Jr.",M,1956
+Jon Tester,M,1956
+Jeff Merkley,M,1956
+Wm. Lacy Clay,M,1956
+Robert E. Latta,M,1956
+Tom McClintock,M,1956
+Scott R. Tipton,M,1956
+Ann M. Kuster,F,1956
+Robin L. Kelly,F,1956
+J. French Hill,M,1956
+Charlie Crist,M,1956
+Ron Estes,M,1956
+"Jesús G. ""Chuy"" García",M,1956
+Greg Pence,M,1956
+Denny Rehberg,M,1955
+Mary L. Landrieu,F,1955
+John Barrow,M,1955
+John Campbell,M,1955
+Jim Gerlach,M,1955
+Jack Kingston,M,1955
+Michael H. Michaud,M,1955
+Patrick Meehan,M,1955
+Mike Coffman,M,1955
+Joe Donnelly,M,1955
+Pete Sessions,M,1955
+Heidi Heitkamp,F,1955
+Rod Blum,M,1955
+Jason Lewis,M,1955
+Sheldon Whitehouse,M,1955
+Lindsey Graham,M,1955
+Kevin Brady,M,1955
+Richard Burr,M,1955
+Henry Cuellar,M,1955
+Ron Johnson,M,1955
+Billy Long,M,1955
+Stephen F. Lynch,M,1955
+Chellie Pingree,F,1955
+Rob Portman,M,1955
+Gregorio Kilili Camacho Sablan,M,1955
+Bill Foster,M,1955
+Ted S. Yoho,M,1955
+Bradley Byrne,M,1955
+Dan Newhouse,M,1955
+Glenn Grothman,M,1955
+David J. Trone,M,1955
+Steven C. LaTourette,M,1954
+Candice S. Miller,F,1954
+Cynthia M. Lummis,F,1954
+Tom Price,M,1954
+Robert Menendez,M,1954
+Mark R. Warner,M,1954
+Mo Brooks,M,1954
+Jim Cooper,M,1954
+Bill Flores,M,1954
+Bob Gibbs,M,1954
+Bill Johnson,M,1954
+"Henry C. ""Hank"" Johnson, Jr.",M,1954
+Doug Lamborn,M,1954
+Betty McCollum,F,1954
+Jerry Moran,M,1954
+Brad Sherman,M,1954
+Suzanne Bonamici,F,1954
+Gary J. Palmer,M,1954
+Ralph Lee Abraham,M,1954
+Brenda L. Lawrence,F,1954
+Mike Rounds,M,1954
+Dwight Evans,M,1954
+Adriano Espaillat,M,1954
+Doug Jones,M,1954
+Mike Braun,M,1954
+Brad Miller,M,1953
+Kay R. Hagan,F,1953
+Dave Camp,M,1953
+Luther Strange,M,1953
+Claire McCaskill,F,1953
+Luis V. Gutiérrez,M,1953
+Darrell E. Issa,M,1953
+Bruce Poliquin,M,1953
+Karen Bass,F,1953
+Ken Calvert,M,1953
+Shelley Moore Capito,F,1953
+Steve Chabot,M,1953
+Judy Chu,F,1953
+Joe Courtney,M,1953
+Michael F. Doyle,M,1953
+Louie Gohmert,M,1953
+Gregory W. Meeks,M,1953
+Ed Perlmutter,M,1953
+Christopher H. Smith,M,1953
+Fred Upton,M,1953
+Nydia M. Velázquez,F,1953
+"Randy K. Weber, Sr.",M,1953
+Debbie Dingell,F,1953
+Neal P. Dunn,M,1953
+Francis Rooney,M,1953
+Ralph Norman,M,1953
+Jefferson Van Drew,M,1953
+Ron Wright,M,1953
+Charles F. Bass,M,1952
+David Dreier,M,1952
+Steven R. Rothman,M,1952
+Janice Hahn,F,1952
+Dan Benishek,M,1952
+J. Randy Forbes,M,1952
+Tim Murphy,M,1952
+Bob Corker,M,1952
+Michael E. Capuano,M,1952
+Bob Goodlatte,M,1952
+Leonard Lance,M,1952
+Ileana Ros-Lehtinen,F,1952
+Carol Shea-Porter,F,1952
+John J. Faso,M,1952
+Tom Marino,M,1952
+Sherrod Brown,M,1952
+John Barrasso,M,1952
+Susan M. Collins,F,1952
+John Cornyn,M,1952
+Marsha Blackburn,F,1952
+Jim Costa,M,1952
+Marcia L. Fudge,F,1952
+William R. Keating,M,1952
+David Loebsack,M,1952
+Blaine Luetkemeyer,M,1952
+Julia Brownley,F,1952
+Denny Heck,M,1952
+Mark DeSaulnier,M,1952
+John H. Rutherford,M,1952
+Ed Case,M,1952
+Rick Scott,M,1952
+Shelley Berkley,F,1951
+Brian P. Bilbray,M,1951
+Ann Marie Buerkle,F,1951
+Larry Kissell,M,1951
+Jean Schmidt,F,1951
+Jim DeMint,M,1951
+John F. Tierney,M,1951
+Kerry L. Bentivolio,M,1951
+John Fleming,M,1951
+Richard L. Hanna,M,1951
+Richard B. Nugent,M,1951
+Al Franken,M,1951
+Diane Black,F,1951
+Edward R. Royce,M,1951
+Colleen Hanabusa,F,1951
+Elijah E. Cummings,M,1951
+Roger F. Wicker,M,1951
+Rob Bishop,M,1951
+Vern Buchanan,M,1951
+Mike Crapo,M,1951
+Kenny Marchant,M,1951
+Jerry McNerney,M,1951
+Gwen Moore,F,1951
+"Frank Pallone, Jr.",M,1951
+Kurt Schrader,M,1951
+Albio Sires,M,1951
+Mike Thompson,M,1951
+Tim Walberg,M,1951
+Deb Fischer,F,1951
+Rick W. Allen,M,1951
+John Kennedy,M,1951
+Jo Ann Emerson,F,1950
+Mark Udall,M,1950
+Timothy H. Bishop,M,1950
+Mike Johanns,M,1950
+Lynn A. Westmoreland,M,1950
+David G. Reichert,M,1950
+Chris Collins,M,1950
+Debbie Stabenow,F,1950
+Roy Blunt,M,1950
+John Boozman,M,1950
+Michael C. Burgess,M,1950
+Gerald E. Connolly,M,1950
+Sheila Jackson Lee,F,1950
+Patty Murray,F,1950
+Charles E. Schumer,M,1950
+Michael K. Simpson,M,1950
+Jackie Speier,F,1950
+Dina Titus,F,1950
+Joyce Beatty,F,1950
+"Donald S. Beyer, Jr.",M,1950
+Ann Kirkpatrick,F,1950
+Sylvia R. Garcia,F,1950
+Carol D. Miller,F,1950
+"Francisco ""Quico"" Canseco",M,1949
+Jerry F. Costello,M,1949
+William L. Owens,M,1949
+Nick J. Rahall II,M,1949
+William L. Enyart,M,1949
+John A. Boehner,M,1949
+Randy Neugebauer,M,1949
+Brad Ashford,M,1949
+Joe Barton,M,1949
+Jack Reed,M,1949
+Steve Cohen,M,1949
+Tom Cole,M,1949
+Steve King,M,1949
+Richard E. Neal,M,1949
+Paul Tonko,M,1949
+Peter J. Visclosky,M,1949
+Daniel Webster,M,1949
+Ron Wyden,M,1949
+Elizabeth Warren,F,1949
+Roger Williams,M,1949
+David Perdue,M,1949
+Kent Conrad,M,1948
+David Alan Curson,M,1948
+Tom Coburn,M,1948
+Rush Holt,M,1948
+Tom Latham,M,1948
+Gary G. Miller,M,1948
+Allyson Y. Schwartz,F,1948
+Ted Poe,M,1948
+Robert Pittenger,M,1948
+Tom Udall,M,1948
+Earl Blumenauer,M,1948
+K. Michael Conaway,M,1948
+Raúl M. Grijalva,M,1948
+Mike Kelly,M,1948
+John B. Larson,M,1948
+Bennie G. Thompson,M,1948
+Lois Frankel,F,1948
+Brian Babin,M,1948
+"Al Lawson, Jr.",M,1948
+Kweisi Mfume,M,1948
+Olympia J. Snowe,F,1947
+W. Todd Akin,M,1947
+Joe Baca,M,1947
+Spencer Bachus,M,1947
+John Kline,M,1947
+"John J. Duncan, Jr.",M,1947
+Gene Green,M,1947
+Stevan Pearce,M,1947
+Dana Rohrabacher,M,1947
+Lamar Smith,M,1947
+Thomas R. Carper,M,1947
+Jeanne Shaheen,F,1947
+"Joe Manchin, III",M,1947
+"Sanford D. Bishop, Jr.",M,1947
+G. K. Butterfield,M,1947
+Peter A. DeFazio,M,1947
+Eliot L. Engel,M,1947
+Al Green,M,1947
+Mazie K. Hirono,F,1947
+Zoe Lofgren,F,1947
+David B. McKinley,M,1947
+Jerrold Nadler,M,1947
+Bill Posey,M,1947
+"Robert C. ""Bobby"" Scott",M,1947
+Peter Welch,M,1947
+Joe Wilson,M,1947
+John A. Yarmuth,M,1947
+Aumua Amata Coleman Radewagen,F,1947
+Jack Bergman,M,1947
+Mitt Romney,M,1947
+Jim Webb,M,1946
+Timothy V. Johnson,M,1946
+Dennis J. Kucinich,M,1946
+Daniel E. Lungren,M,1946
+Rodney Alexander,M,1946
+Tim Johnson,M,1946
+Paul C. Broun,M,1946
+Corrine Brown,F,1946
+Jeff Sessions,M,1946
+Rodney P. Frelinghuysen,M,1946
+Frank A. LoBiondo,M,1946
+Niki Tsongas,F,1946
+Richard Blumenthal,M,1946
+Lloyd Doggett,M,1946
+Marcy Kaptur,F,1946
+Barbara Lee,F,1946
+Carolyn B. Maloney,F,1946
+Edward J. Markey,M,1946
+C. A. Dutch Ruppersberger,M,1946
+Bobby L. Rush,M,1946
+Alma S. Adams,F,1946
+Tom O’Halleran,M,1946
+Charles A. Gonzalez,M,1945
+Wally Herger,M,1945
+Melvin L. Watt,M,1945
+Donna M. Christensen,F,1945
+George Miller,M,1945
+James P. Moran,M,1945
+Ron Barber,M,1945
+Robert A. Brady,M,1945
+John Garamendi,M,1945
+David P. Roe,M,1945
+David Scott,M,1945
+Bonnie Watson Coleman,F,1945
+James R. Baird,M,1945
+Elton Gallegly,M,1944
+Donald A. Manzullo,M,1944
+Silvestre Reyes,M,1944
+Carolyn McCarthy,F,1944
+Ander Crenshaw,M,1944
+Johnny Isakson,M,1944
+Richard J. Durbin,M,1944
+Michael B. Enzi,M,1944
+Emanuel Cleaver,M,1944
+Susan A. Davis,F,1944
+Peter T. King,M,1944
+Doris O. Matsui,F,1944
+Collin C. Peterson,M,1944
+Janice D. Schakowsky,F,1944
+"Angus S. King, Jr.",M,1944
+Jeff Bingaman,M,1943
+Kay Bailey Hutchison,F,1943
+John F. Kerry,M,1943
+Saxby Chambliss,M,1943
+Eni F. H. Faleomavaega,M,1943
+Ed Pastor,M,1943
+Ed Whitfield,M,1943
+Daniel Coats,M,1943
+John L. Mica,M,1943
+Richard M. Nolan,M,1943
+Walter B. Jones,M,1943
+Benjamin L. Cardin,M,1943
+James E. Risch,M,1943
+Rosa L. DeLauro,F,1943
+Virginia Foxx,F,1943
+Kay Granger,F,1943
+"F. James Sensenbrenner, Jr.",M,1943
+José E. Serrano,M,1943
+Paul Cook,M,1943
+Bob Filner,M,1942
+Joseph I. Lieberman,M,1942
+Gary L. Ackerman,M,1942
+Phil Gingrey,M,1942
+Jon Kyl,M,1942
+Bill Nelson,M,1942
+Mitch McConnell,M,1942
+Anna G. Eshoo,F,1942
+Frederica S. Wilson,F,1942
+Ben Nelson,M,1941
+Howard L. Berman,M,1941
+Sue Wilkins Myrick,F,1941
+Cliff Stearns,M,1941
+Robert L. Turner,M,1941
+Max Baucus,M,1941
+Doc Hastings,M,1941
+Gloria Negrete McLeod,F,1941
+Sam Farr,M,1941
+Michael M. Honda,M,1941
+Bernard Sanders,M,1941
+John R. Carter,M,1941
+Danny K. Davis,M,1941
+Lucille Roybal-Allard,F,1941
+Alan S. Lowenthal,M,1941
+Donna E. Shalala,F,1941
+Norman D. Dicks,M,1940
+Barney Frank,M,1940
+Thomas E. Petri,M,1940
+Barbara Boxer,F,1940
+Rubén Hinojosa,M,1940
+John Lewis,M,1940
+Lamar Alexander,M,1940
+James E. Clyburn,M,1940
+Patrick J. Leahy,M,1940
+Nancy Pelosi,F,1940
+David E. Price,M,1940
+Tom Harkin,M,1939
+Henry A. Waxman,M,1939
+Frank R. Wolf,M,1939
+Harry Reid,M,1939
+Joseph R. Pitts,M,1939
+Steny H. Hoyer,M,1939
+Dan Burton,M,1938
+Maurice D. Hinchey,M,1938
+"Howard P. ""Buck"" McKeon",M,1938
+Lois Capps,F,1938
+Maxine Waters,F,1938
+Judy Biggert,F,1937
+Lynn C. Woolsey,F,1937
+"John D. Rockefeller, IV",M,1937
+Thad Cochran,M,1937
+Nita M. Lowey,F,1937
+Eleanor Holmes Norton,F,1937
+"Bill Pascrell, Jr.",M,1937
+Harold Rogers,M,1937
+John W. Olver,M,1936
+Barbara A. Mikulski,F,1936
+Jim McDermott,M,1936
+John McCain,M,1936
+Pat Roberts,M,1936
+Alcee L. Hastings,M,1936
+Grace F. Napolitano,F,1936
+Herb Kohl,M,1935
+Ron Paul,M,1935
+Eddie Bernice Johnson,F,1935
+Leonard L. Boswell,M,1934
+Jerry Lewis,M,1934
+Edolphus Towns,M,1934
+Carl Levin,M,1934
+Orrin G. Hatch,M,1934
+James M. Inhofe,M,1934
+Richard C. Shelby,M,1934
+Madeleine Z. Bordallo,F,1933
+Dianne Feinstein,F,1933
+Chuck Grassley,M,1933
+Don Young,M,1933
+Richard G. Lugar,M,1932
+Fortney Pete Stark,M,1931
+Howard Coble,M,1931
+Sander M. Levin,M,1931
+C. W. Bill Young,M,1930
+Charles B. Rangel,M,1930
+Sam Johnson,M,1930
+Dale E. Kildee,M,1929
+"John Conyers, Jr.",M,1929
+Louise McIntosh Slaughter,F,1929
+Roscoe G. Bartlett,M,1926
+John D. Dingell,M,1926
+Daniel K. Inouye,M,1924
+Daniel K. Akaka,M,1924
+Frank R. Lautenberg,M,1924
+Ralph M. Hall,M,1923
\ No newline at end of file
diff --git a/test/output/caltrain.svg b/test/output/caltrain.svg
new file mode 100644
index 0000000000..c0bbd9718d
--- /dev/null
+++ b/test/output/caltrain.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/test/output/industryUnemployment.svg b/test/output/industryUnemployment.svg
index 52a113b7dc..f70cef2117 100644
--- a/test/output/industryUnemployment.svg
+++ b/test/output/industryUnemployment.svg
@@ -74,20 +74,48 @@
date →
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ Wholesale and Retail Trade
+
+
+ Manufacturing
+
+
+ Leisure and hospitality
+
+
+ Business services
+
+
+ Construction
+
+
+ Education and Health
+
+
+ Government
+
+
+ Finance
+
+
+ Self-employed
+
+
+ Other
+
+
+ Transportation and Utilities
+
+
+ Information
+
+
+ Agriculture
+
+
+ Mining and Extraction
+
diff --git a/test/output/industryUnemploymentShare.svg b/test/output/industryUnemploymentShare.svg
new file mode 100644
index 0000000000..f366971653
--- /dev/null
+++ b/test/output/industryUnemploymentShare.svg
@@ -0,0 +1,135 @@
+
\ No newline at end of file
diff --git a/test/output/industryUnemploymentStream.svg b/test/output/industryUnemploymentStream.svg
new file mode 100644
index 0000000000..d59d6e300e
--- /dev/null
+++ b/test/output/industryUnemploymentStream.svg
@@ -0,0 +1,86 @@
+
\ No newline at end of file
diff --git a/test/output/learningPoverty.svg b/test/output/learningPoverty.svg
new file mode 100644
index 0000000000..f30178b3e1
--- /dev/null
+++ b/test/output/learningPoverty.svg
@@ -0,0 +1,660 @@
+
\ No newline at end of file
diff --git a/test/output/musicRevenue.svg b/test/output/musicRevenue.svg
new file mode 100644
index 0000000000..2e0d3d11ab
--- /dev/null
+++ b/test/output/musicRevenue.svg
@@ -0,0 +1,208 @@
+
\ No newline at end of file
diff --git a/test/output/policeDeaths.svg b/test/output/policeDeaths.svg
new file mode 100644
index 0000000000..0a4b09fa12
--- /dev/null
+++ b/test/output/policeDeaths.svg
@@ -0,0 +1,23 @@
+
\ No newline at end of file
diff --git a/test/output/singleStackedValues.svg b/test/output/singleStackedValues.svg
new file mode 100644
index 0000000000..683cb8dac2
--- /dev/null
+++ b/test/output/singleStackedValues.svg
@@ -0,0 +1,63 @@
+
\ No newline at end of file
diff --git a/test/output/usCongressAge.svg b/test/output/usCongressAge.svg
new file mode 100644
index 0000000000..c70fc549b0
--- /dev/null
+++ b/test/output/usCongressAge.svg
@@ -0,0 +1,2943 @@
+
\ No newline at end of file
diff --git a/test/output/usCongressGender.svg b/test/output/usCongressGender.svg
new file mode 100644
index 0000000000..31d8704673
--- /dev/null
+++ b/test/output/usCongressGender.svg
@@ -0,0 +1,2944 @@
+
\ No newline at end of file
diff --git a/test/plots/caltrain.js b/test/plots/caltrain.js
new file mode 100644
index 0000000000..18ef9bc459
--- /dev/null
+++ b/test/plots/caltrain.js
@@ -0,0 +1,53 @@
+import * as Plot from "@observablehq/plot";
+import * as d3 from "d3";
+
+export default async function() {
+ const data = await d3.csv("data/caltrain.csv");
+ return Plot.plot({
+ x: {
+ axis: null
+ },
+ y: {
+ domain: d3.range(3, 26),
+ axis: null
+ },
+ color: {
+ domain: ["L", "B", "N"],
+ range: ["rgb(183, 116, 9)", "rgb(196, 62, 29)", "rgb(34, 34, 34)"]
+ },
+ width: 240,
+ marks: [
+ Plot.text([[1, 3]], {text: ["Northbound"], textAnchor: "start"}),
+ Plot.text([[-1, 3]], {text: ["Southbound"], textAnchor: "end"}),
+ Plot.text(
+ new Set(data.map(d => d.hours)),
+ {
+ x: () => 0,
+ y: d => d,
+ text: d => `${(d - 1) % 12 + 1}${(d % 24) >= 12 ? "p": "a"}`
+ }
+ ),
+ Plot.text(
+ data.filter(d => d.orientation === "N"),
+ Plot.stackX2({
+ x: () => 1,
+ y: "hours",
+ text: d => d.minutes.padStart(2, "0"),
+ fill: "type",
+ textAnchor: "start"
+ })
+ ),
+ Plot.text(
+ data.filter(d => d.orientation === "S"),
+ Plot.stackX2({
+ x: () => -1,
+ y: "hours",
+ text: d => d.minutes.padStart(2, "0"),
+ fill: "type",
+ textAnchor: "end"
+ })
+ ),
+ Plot.ruleX([-0.5, 0.5])
+ ]
+ });
+}
diff --git a/test/plots/index.js b/test/plots/index.js
index 034c38a308..cb0516ccd0 100644
--- a/test/plots/index.js
+++ b/test/plots/index.js
@@ -5,6 +5,7 @@ export {default as aaplVolume} from "./aapl-volume.js";
export {default as anscombeQuartet} from "./anscombe-quartet.js";
export {default as ballotStatusRace} from "./ballot-status-race.js";
export {default as beckerBarley} from "./becker-barley.js";
+export {default as caltrain} from "./caltrain.js";
export {default as carsParcoords} from "./cars-parcoords.js";
export {default as covidIhmeProjectedDeaths} from "./covid-ihme-projected-deaths.js";
export {default as d3Survey2015Comfort} from "./d3-survey-2015-comfort.js";
@@ -17,6 +18,9 @@ export {default as gistempAnomalyMoving} from "./gistemp-anomaly-moving.js";
export {default as hadcrutWarmingStripes} from "./hadcrut-warming-stripes.js";
export {default as highCardinalityOrdinal} from "./high-cardinality-ordinal.js";
export {default as industryUnemployment} from "./industry-unemployment.js";
+export {default as industryUnemploymentShare} from "./industry-unemployment-share.js";
+export {default as industryUnemploymentStream} from "./industry-unemployment-stream.js";
+export {default as learningPoverty} from "./learning-poverty.js";
export {default as letterFrequencyBar} from "./letter-frequency-bar.js";
export {default as letterFrequencyColumn} from "./letter-frequency-column.js";
export {default as letterFrequencyDot} from "./letter-frequency-dot.js";
@@ -31,18 +35,23 @@ export {default as mobyDickLetterFrequency} from "./moby-dick-letter-frequency.j
export {default as mobyDickLetterPosition} from "./moby-dick-letter-position.js";
export {default as morleyBoxplot} from "./morley-boxplot.js";
export {default as moviesProfitByGenre} from "./movies-profit-by-genre.js";
+export {default as musicRevenue} from "./music-revenue.js";
export {default as penguinCulmen} from "./penguin-culmen.js";
export {default as penguinCulmenArray} from "./penguin-culmen-array.js";
export {default as penguinMassSexSpecies} from "./penguin-mass-sex-species.js";
export {default as penguinMassSex} from "./penguin-mass-sex.js";
export {default as penguinMass} from "./penguin-mass.js";
+export {default as policeDeaths} from "./police-deaths.js";
export {default as randomWalk} from "./random-walk.js";
export {default as seattleTemperatureBand} from "./seattle-temperature-band.js";
export {default as sfTemperatureBand} from "./sf-temperature-band.js";
export {default as simpsonsRatings} from "./simpsons-ratings.js";
export {default as simpsonsViews} from "./simpsons-views.js";
+export {default as singleStackedValues} from "./single-stacked-values.js";
export {default as travelersYearOverYear} from "./travelers-year-over-year.js";
export {default as uniformRandomDifference} from "./uniform-random-difference.js";
+export {default as usCongressAge} from "./us-congress-age.js";
+export {default as usCongressGender} from "./us-congress-gender.js";
export {default as usPopulationStateAge} from "./us-population-state-age.js";
export {default as usPresidentialElection2020} from "./us-presidential-election-2020.js";
export {default as usRetailSales} from "./us-retail-sales.js";
diff --git a/test/plots/industry-unemployment-share.js b/test/plots/industry-unemployment-share.js
new file mode 100644
index 0000000000..1d05b8b9dc
--- /dev/null
+++ b/test/plots/industry-unemployment-share.js
@@ -0,0 +1,22 @@
+import * as Plot from "@observablehq/plot";
+import * as d3 from "d3";
+
+export default async function() {
+ const data = await d3.csv("data/bls-industry-unemployment.csv", d3.autoType);
+ return Plot.plot({
+ y: {
+ grid: true,
+ tickFormat: "%"
+ },
+ marks: [
+ Plot.stackAreaY(data, {
+ x: "date",
+ y: "unemployed",
+ fill: "industry",
+ offset: "expand",
+ title: "industry"
+ }),
+ Plot.ruleY([0])
+ ]
+ });
+}
diff --git a/test/plots/industry-unemployment-stream.js b/test/plots/industry-unemployment-stream.js
new file mode 100644
index 0000000000..5ca1669b6c
--- /dev/null
+++ b/test/plots/industry-unemployment-stream.js
@@ -0,0 +1,20 @@
+import * as Plot from "@observablehq/plot";
+import * as d3 from "d3";
+
+export default async function() {
+ const data = await d3.csv("data/bls-industry-unemployment.csv", d3.autoType);
+ return Plot.plot({
+ y: {
+ axis: null
+ },
+ marks: [
+ Plot.stackAreaY(data, {
+ x: "date",
+ y: "unemployed",
+ fill: "industry",
+ title: "industry",
+ offset: "wiggle"
+ })
+ ]
+ });
+}
diff --git a/test/plots/industry-unemployment.js b/test/plots/industry-unemployment.js
index 24bcfa6add..4c0065e869 100644
--- a/test/plots/industry-unemployment.js
+++ b/test/plots/industry-unemployment.js
@@ -8,7 +8,7 @@ export default async function() {
grid: true
},
marks: [
- Plot.stackAreaY(data, {x: "date", y: "unemployed", fill: "industry"}),
+ Plot.stackAreaY(data, {x: "date", y: "unemployed", fill: "industry", title: "industry"}),
Plot.ruleY([0])
]
});
diff --git a/test/plots/learning-poverty.js b/test/plots/learning-poverty.js
new file mode 100644
index 0000000000..067ba57e17
--- /dev/null
+++ b/test/plots/learning-poverty.js
@@ -0,0 +1,38 @@
+import * as Plot from "@observablehq/plot";
+import * as d3 from "d3";
+
+export default async function() {
+ const data = await d3.csv("data/learning-poverty.csv", d3.autoType);
+ const values = data.flatMap(d => [
+ {...d, type: "ok", share: 100 - d["Learning Poverty"]},
+ {...d, type: "poor", share: d["Learning Poverty"] - d["Out-of-School (OoS)"]},
+ {...d, type: "out of school", share: d["Out-of-School (OoS)"]}
+ ]);
+ return Plot.plot({
+ marginLeft: 120,
+ height: 1160,
+ x: {
+ axis: "top",
+ grid: true,
+ ticks: 10,
+ tickFormat: d => `${Math.abs(d)}%`,
+ nice: true
+ },
+ y: {
+ domain: d3.sort(data, d => d["Learning Poverty"]).map(d => d["Country Name"]).reverse(),
+ label: null
+ },
+ color: {
+ domain: ["ok", "poor", "out of school"],
+ range: ["#aed9e0", "#edd382", "#ffa69e"]
+ },
+ marks: [
+ Plot.stackBarX(values, {
+ x: d => (d.type === "ok" ? -1 : 1) * d.share, // diverging bars
+ y: "Country Name",
+ fill: "type"
+ }),
+ Plot.ruleX([0])
+ ]
+ });
+}
diff --git a/test/plots/music-revenue.js b/test/plots/music-revenue.js
new file mode 100644
index 0000000000..98ad0b8201
--- /dev/null
+++ b/test/plots/music-revenue.js
@@ -0,0 +1,22 @@
+import * as Plot from "@observablehq/plot";
+import * as d3 from "d3";
+
+export default async function() {
+ const data = await d3.csv("data/riaa-us-revenue.csv", d3.autoType);
+ const stack = {x: "year", y: "revenue", z: "format", order: "appearance", reverse: true};
+ return Plot.plot({
+ x: {
+ label: null
+ },
+ y: {
+ grid: true,
+ label: "↑ Annual revenue (billions, adj.)",
+ transform: d => d / 1000
+ },
+ marks: [
+ Plot.stackAreaY(data, {...stack, fill: "group", title: d => `${d.format}\n${d.group}`}),
+ Plot.lineY(data, Plot.stackY2({...stack, stroke: "white", strokeWidth: 1})),
+ Plot.ruleY([0])
+ ]
+ });
+}
diff --git a/test/plots/police-deaths.js b/test/plots/police-deaths.js
new file mode 100644
index 0000000000..68cc982a46
--- /dev/null
+++ b/test/plots/police-deaths.js
@@ -0,0 +1,87 @@
+import * as Plot from "@observablehq/plot";
+import * as d3 from "d3";
+
+export default async function() {
+ const wide = await d3.csv("data/police-deaths.csv", d3.autoType);
+ const columns = wide.columns.slice(1);
+ const data = columns.flatMap(type => wide.map(d => ({race: d.race, type, value: d[type]})));
+ const stack = {x: "type", y: "value", z: "race", order: d3.sort(wide, d => d.police).map(d => d.race)};
+ return Plot.plot({
+ marginLeft: 100,
+ marginRight: 100,
+ x: {
+ domain: columns,
+ axis: "top",
+ label: "",
+ tickFormat: d => d === "population" ? "Share of population" : "Share of deaths by police",
+ padding: 0 // see margins
+ },
+ y: {
+ axis: null
+ },
+ marks: [
+ Plot.stackAreaY(data, {
+ ...stack,
+ curve: curveLinkHorizontal,
+ fill: "race",
+ stroke: "white"
+ }),
+ Plot.text(
+ data.filter(d => d.type === "police"),
+ Plot.stackYMid({
+ ...stack,
+ text: d => `${d.race} ${d.value}%`,
+ textAnchor: "end",
+ dx: -6
+ })
+ ),
+ Plot.text(
+ data.filter(d => d.type === "population"),
+ Plot.stackYMid({
+ ...stack,
+ text: d => `${d.race} ${d.value}%`,
+ textAnchor: "start",
+ dx: +6
+ })
+ )
+ ]
+ });
+}
+
+// https://github.com/d3/d3-shape/issues/152
+function curveLinkHorizontal(context) {
+ let line, point, x0, y0;
+ return {
+ areaStart() {
+ line = 0;
+ },
+ areaEnd() {
+ line = NaN;
+ },
+ lineStart() {
+ point = 0;
+ },
+ lineEnd() {
+ if (line || (line !== 0 && point === 1)) context.closePath();
+ line = 1 - line;
+ },
+ point(x, y) {
+ x = +x, y = +y;
+ switch (point) {
+ case 0: {
+ point = 1;
+ if (line) context.lineTo(x, y);
+ else context.moveTo(x, y);
+ break;
+ }
+ case 1: point = 2; // eslint-disable-line no-fallthrough
+ default: {
+ x0 = (x0 + x) / 2;
+ context.bezierCurveTo(x0, y0, x0, y, x, y);
+ break;
+ }
+ }
+ x0 = x, y0 = y;
+ }
+ };
+}
diff --git a/test/plots/single-stacked-values.js b/test/plots/single-stacked-values.js
new file mode 100644
index 0000000000..135365217a
--- /dev/null
+++ b/test/plots/single-stacked-values.js
@@ -0,0 +1,23 @@
+import * as Plot from "@observablehq/plot";
+import * as d3 from "d3";
+
+export default async function() {
+ const data = d3.range(1, 20).map(d => d * (20 - d));
+ return Plot.plot({
+ x: {
+ tickFormat: "%"
+ },
+ color: {
+ scheme: "rdbu"
+ },
+ marks: [
+ Plot.stackBarX(data, {
+ y: null,
+ x: d => d,
+ fill: d => d,
+ stroke: "black",
+ offset: "expand"
+ })
+ ]
+ });
+}
diff --git a/test/plots/us-congress-age.js b/test/plots/us-congress-age.js
new file mode 100644
index 0000000000..5a9ba34b79
--- /dev/null
+++ b/test/plots/us-congress-age.js
@@ -0,0 +1,26 @@
+import * as Plot from "@observablehq/plot";
+import * as d3 from "d3";
+
+export default async function() {
+ const data = await d3.csv("data/us-congress-members.csv", d3.autoType);
+ return Plot.plot({
+ y: { axis: null },
+ x: {
+ // a complicated way to get (min, max) inclusive
+ domain: d3.range(...d3.extent(data, d => 2021 - d.birth).map((d, i) => d + i)),
+ tickSize: 0,
+ grid: true
+ },
+ marks: [
+ Plot.ruleX([d3.median(data, d => 2021 - d.birth)], { strokeDasharray: [2, 2] }),
+ Plot.stackBarY(data, {
+ x: d => 2021 - d.birth,
+ stroke: "white",
+ strokeWidth: 2,
+ title: "full_name"
+ })
+ ],
+ height: 400,
+ width: 950
+ });
+}
diff --git a/test/plots/us-congress-gender.js b/test/plots/us-congress-gender.js
new file mode 100644
index 0000000000..962ed553af
--- /dev/null
+++ b/test/plots/us-congress-gender.js
@@ -0,0 +1,34 @@
+import * as Plot from "@observablehq/plot";
+import * as d3 from "d3";
+
+export default async function() {
+ const data = await d3.csv("data/us-congress-members.csv", d3.autoType);
+ return Plot.plot({
+ marginLeft: 50,
+ marginRight: 150,
+ x: { domain: [-11, 28], axis: null },
+ y: {
+ // a complicated way to get (min, max) inclusive
+ domain: d3.range(...d3.extent(data, d => d.birth).map((d, i) => d + i)),
+ tickSize: 0,
+ grid: true
+ },
+ marks: [
+ Plot.ruleY([d3.median(data, d => d.birth)], { strokeDasharray: [2, 2] }),
+ Plot.stackBarX(data, {
+ y: "birth",
+ x: d => d.gender === "M" ? 1 : -1,
+ fill: "gender",
+ stroke: "white",
+ title: "full_name"
+ }),
+ Plot.text(new Set(data.map(d => d.birth)), {
+ x: () => 30, y: d => d,
+ textAnchor: "start",
+ text: d => `${2021 - d}${d === d3.median(data, d => d.birth) ? " years old (median age)" : ""}`
+ })
+ ],
+ height: 700,
+ width: 530
+ });
+}