Published
Edited
Apr 9, 2021
Importers
11 stars
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
function visualize(data,params){
InjectDcCss;
tltp;
const columns = Object.keys(data[0])
.filter((c,i)=>{
const nested = d3.nest().key(d=>d).entries(data.map(d=>d[c]));
return nested.length<30
})
var view = html`${container(columns)}`
var cr = crossfilter(data);
var charts = [];
const dcConfigs = columns.map((d,i)=>{
return {
selector:'selector'+i,
group:d
}
})
dcConfigs.forEach(config=>{
var chart = dc.rowChart(view.querySelector('#'+config.selector))
charts.push(chart);
var dimension = cr.dimension(data => {
if(typeof data[config.group] =='boolean'){
if(data[config.group]){
return "true"
}else{
return "false";
}
}
return (data[config.group] && typeof data[config.group] !='object' && data[config.group].trim())||'N\\A'
})
var group = dimension.group().reduceCount(d=>1)
console.log(dimension)
chart
.width(width/3)
.height(450)
.elasticX(true)
.dimension(dimension)
.group(group)

chart.xAxis()
.ticks(5)
})
dc.renderAll() ;
return view
}
Insert cell
Insert cell
tltp = {

setInterval(function(d){
d3.selectAll('svg')
.select('g')
.selectAll('g')
.attr('title',function(d){
const result = d3.select(this).select('title').node();
return result&& result.innerHTML;
})
.nodes()
.forEach(function(d){(tippy(d))})
},1000)
d3.selectAll('h5').nodes().forEach(function(d){(tippy(d))});
return "tooltip"
}
Insert cell
function container(columns) {
return `
<h1>Stats</h1>
<div>
<div>
${columns
.map((c, i) => {
return `<div id="selector${i}" style="display:inline-block;width:30%">
<h5 title="${c}"> ${c}</h5>
</div>`;
})
.join('')}
</div>
</div>

<hr style="clear:both;">
`;
}
Insert cell
data = load(dataUrl)
Insert cell
reducedData = data.map(d=>{
var result = {};
columns.forEach(c=>{
result[c] = d[c];
})
return result;
})

Insert cell
columns = Object.keys(data[0])
.filter((c,i)=>{
const nested = d3.nest().key(d=>d).entries(data.map(d=>d[c]));
return nested.length<30
})


Insert cell
dcConfigs =
columns.map((d,i)=>{
return {
selector:'selector'+i,
group:d
}
})

Insert cell
Insert cell
testUrl = "https://beta.observablehq.com/@bumbeishvili/instant-data-visualizer?data=https://raw.githubusercontent.com/emeeks/data_visualization_survey/master/data/cleaned_survey_results_2018.tsv&skip=Experience,(Buckets)"
Insert cell
params = new URLSearchParams(html`<a href>`.search)
Insert cell
dataUrl = params.get("data")||"https://raw.githubusercontent.com/emeeks/data_visualization_survey/master/data/cleaned_survey_results_2018.tsv"
Insert cell
Insert cell
Insert cell
Insert cell
tippy = require("https://unpkg.com/tippy.js@2.5.4/dist/tippy.all.min.js")
Insert cell
d3 = require('d3@v5')
Insert cell
dc = require('dc@3.1.9')
Insert cell
crossfilter = await require("crossfilter2@1.4.6")
Insert cell
InjectDcCss = {
var div = DOM.element('div');
div.innerHTML = '<link rel="stylesheet" type="text/css" href="https://unpkg.com/dc@3.0.0-beta.1/dc.css">'
return div;
}
Insert cell
windowCrossfilter = {
window.crossfilter = crossfilter;
return "window-crossfilter";
}
Insert cell
import {load} from "@bumbeishvili/fetcher"
Insert cell
Insert cell
function limit(string,number){
var points = '';
var diff = 0;
if(number < string.length){
points='...';
diff=3;
}
string = string.slice(0,number-diff);
return string + points;
}
Insert cell
inputUrl = document.referrer.split('?')[0]
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