Public
Edited
Dec 19, 2022
1 fork
Importers
Insert cell
Insert cell
Insert cell
Insert cell
function split_data_stack(data){
let keys = Object.keys(data[0])
let keycols = ["#6da7de", "#9e0059"]
const lreg = /London/g;
if(keys[2].match(lreg)) {
let temp = keys[1]
keys[1] = keys[2]
keys[2] = temp;
}

if(keys[1].match(lreg)) {
keycols[1] = "#AAAAAA"
}

let data1 = [],
data2 = [],
data1_key = keys[1],
data2_key = keys[2];


data.forEach((d) => {
let dd1 = {xd: d.xd}
let dd2 = {xd: d.xd}
dd1[data1_key] = d[data1_key]
dd2[data2_key] = d[data2_key]
data1.push(dd1);
data2.push(dd2);

})
return {"d1": data1, "d2": data2, "dkeys": keys, "cols": keycols}
}
Insert cell
function split_data_vertical(data) {
const keys = [...new Set(data.map(item => item.b))]; // = Object.keys(data[0])
console.log(keys)
let keycols = ["#6da7de", "#9e0059"]
const lreg = /London/g;
if(keys[1].match(lreg)) {
let temp = keys[0]
keys[0] = keys[1]
keys[1] = temp;
}

if(keys[1].match(lreg)) {
keycols[1] = "#AAAAAA"
}

let data1 = [],
data2 = [],
data1_key = keys[0],
data2_key = keys[1];


data.forEach((d) => {
if(d.b === data1_key) {
data1.push(d);
} else if(d.b === data2_key) {
data2.push(d)
}
})
return {"d1": data1, "d2": data2, "dkeys": keys, "cols": keycols}
}
Insert cell
split_data_simple = function(data) {
const keys = [...new Set(data.map(item => item.text))]; // = Object.keys(data[0])
let data1 = [],
data2 = [],
data1_key = keys[0],
data2_key = keys[1];


data.forEach((d) => {
if(d.text === data1_key) {
data1.push(d);
} else if(d.text === data2_key) {
data2.push(d)
}
})
return {"d1": data1, "d2": data2, "dkeys": keys}
}
Insert cell
function data_control(data,{
yvlkp = [],
xtype = "date",
convert_b = true,
parseTimeString = "%Y-%m-%d",
is_stack = false
} = {}) {
let self = this;
self.data = []
const parseTime = d3.timeParse(parseTimeString);
self.ext = []
self.datacols;
//console.log("checking data controller")
//console.log(data)

// way of checking data type?
let dtid = 0;
if(xtype == "date") {
data = data.slice().sort((a, b) => d3.ascending(a.xd, b.xd))
}

let last_xd = data[0].xd


let allmax = 0
// console.log(`Data controller type: ${xtype} | stack: ${is_stack}`)
//console.log(data)

data.forEach((d) => {

if(d.xd > last_xd) {
last_xd = d.xd
dtid += 1
}
d.dtid = dtid
let temp = JSON.parse(JSON.stringify(d)) ;
if(is_stack) {
let ctgs = Object.keys(temp)
//console.log(`ctgs: ${ctgs}`)
let a = ctgs.shift() // this removes the xd vrb that we don't need
let b = ctgs.pop()
// a should be xd and b should dtid
// console.log(`a: ${a} | b: ${b}`)
self.datacols = ctgs
let rowmax = 0;
self.datacols.forEach((ctg) => {
temp[ctg] = +temp[ctg]
rowmax += temp[ctg]
})
allmax = (allmax > rowmax ? allmax : rowmax)

} else {
temp.b = (convert_b === true ? yvlkp[(+temp.b-1)] : temp.b);
if(temp.y == null) temp.y = NaN
temp.y = +temp.y
}
if(xtype == "date" | xtype == "quarter"){
//console.log(`${temp.xd} | ${parseTime(temp.xd)}`)
temp.xd = parseTime(temp.xd);
}
//console.log(temp)
self.data.push(temp)
})

//console.log(self.data)
self.y_ext = d3.extent(this.data, d => d.y)
self.ext = [0, allmax]


self.sort_by_var = function(v, border) {
console.log(v)
console.log(border)
if(v != "") {
self.data.sort(function(x, y){
return d3.ascending(x[v], y[v]);
})
} else {
self.data.forEach((d) => {
d.order = border.indexOf(d.b)
})
self.data.sort(function(x, y){
return d3.ascending(x.order, y.order) || d3.ascending(x.y, y.y);
})
console.log(self.data)


}
console.log("SORTING")



}


}
Insert cell
Insert cell
Insert cell
Insert cell
wkfc = FileAttachment("Total Workforce Jobs .csv").csv()
Insert cell
// ageuc = FileAttachment("microsoft://UCage_bands.csv").csv()
Insert cell
pop = FileAttachment("pop.csv").csv()
Insert cell
tempacc = FileAttachment("bartest.csv").csv()
Insert cell
Insert cell
Insert cell
foodsec = FileAttachment("foodsec.csv").csv()
Insert cell
o2 = FileAttachment("o2.csv").csv()
Insert cell
spending = FileAttachment("spending.csv").csv()
Insert cell
Insert cell
pensmeans = FileAttachment("pensmeans.csv").csv()
Insert cell
pensmeans_long = FileAttachment("pensmeans_long.csv").csv()
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more