Skip to content

Instantly share code, notes, and snippets.

@Sigfried
Last active August 29, 2015 14:17
Show Gist options
  • Save Sigfried/36bc5c7e241850262d9a to your computer and use it in GitHub Desktop.
Save Sigfried/36bc5c7e241850262d9a to your computer and use it in GitHub Desktop.
Supergroup examples
<!DOCTYPE html><html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Supergroup Examples</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.2/underscore.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.js"></script>
<script src="../supergroup.js"></script>
<script src="examples.js"></script>
<script src="prism.js"></script>
<link rel="stylesheet" href="prism.css">
</head>
<body style="background: #f5f2f0;">
<code class="language-javascript" id="output">
</code>
</body>
</html>
d3.xhr('./fake-patient_data.csv', function(err, resp) {
if (window.location.search === '?data') {
d3.select('#output')
//.text(JSON.stringify(data.response, null, 2))
.text(resp.response);
}
var data = d3.csv.parse(resp.response);
if (window.location.search === '?json') {
d3.select('#output')
.text(JSON.stringify(data).fixJSON('json'));
//.replace(/{/g,'\n {')
//.replace(/]/,'\n]'))
}
if (window.location.search === '?sgphysunit') {
var sg = _.supergroup(data, ['Physician','Unit']);
d3.select('#output')
.text(
[
"var sg = _.supergroup(data, ['Physician','Unit']);" +
' // returns an Array of String objects representing top level groups\n' +
' ==>' + JSON.stringify(sg),
'sg[0].records // records in first group\n ==>' +
JSON.stringify(sg[0].records),
'sg[0].children // children of first group\n ==>' +
JSON.stringify(sg[0].children),
'sg[0].children[0].namePath() // full path to a bottom level group\n ==>' +
JSON.stringify(sg[0].children[0].namePath()),
'sg[0].children[0].dimPath() // and it\'s dimension names\n ==>' +
JSON.stringify(sg[0].children[0].dimPath()),
'sg.leafNodes() // all bottom level groups\n ==>' +
JSON.stringify(sg.leafNodes()),
'sg.flattenTree() // all groups\n ==>' +
JSON.stringify(sg.flattenTree()),
'_(sg.leafNodes()).invoke("namePath") // call .namePath() on all bottom level groups using underscore invoke\n ==>' +
JSON.stringify(_(sg.leafNodes()).invoke("namePath"))
].join('\n\n'))
}
if (window.location.search === '?d3nest') {
var physunitNest = d3.nest()
.key(function(d) { return d.Physician; })
.key(function(d) { return d.Unit; });
d3.select('#output')
.text(
[
//"var physunitNest = d3.nest()\n .key(function(d) { return d.Physician; })\n .key(function(d) { return d.Unit; });",
//'physunitNest.entries(data) ==>' +
JSON.stringify(physunitNest.entries(data), null, 2).fixJSON('nest'),
].join('\n\n'))
}
if (window.location.search === '?d3map') {
var physunitNest = d3.nest()
.key(function(d) { return d.Physician; })
.key(function(d) { return d.Unit; });
d3.select('#output')
.text(
[
//'physunitNest.map(data) ==>' +
JSON.stringify(physunitNest.map(data),null,2)//.fixJSON('nest'),
].join('\n\n'))
}
Prism.highlightAll();
});
String.prototype.fixJSON = function(which) {
if (which === 'json')
return this.replace(/{/g,'\n {').replace(/]/,'\n]');
if (which === 'nest')
return this.replace(/,\n/g,', ').replace(/("key".*, )/g,'$1\n').replace(/, */g,', ')
return this;
};
Patient Patient Age PatientVisit Date Time Unit Physician Cost Copay Insurance Inpatient
Alice 46 1 2014-01-07 9:30 AM preop Adams 0 0 Aetna PPO TRUE
Alice 46 1 2014-01-07 10:30 AM operating room Adams 1200 0 Aetna PPO TRUE
Alice 46 1 2014-01-07 12:15 PM ICU Adams 0 0 Aetna PPO TRUE
Alice 46 1 2014-01-07 6:00 PM recovery Adams 600 0 Aetna PPO TRUE
Alice 46 1 2014-01-08 11:00 AM discharge Adams 0 0 Aetna PPO TRUE
Alice 46 2 2014-01-13 2:00 PM office Adams 120 25 Aetna PPO FALSE
Alice 46 3 2014-02-25 1:00 PM office Baker 150 25 Aetna PPO FALSE
Alice 46 4 2014-03-25 1:00 PM office Baker 150 25 Aetna PPO FALSE
Bob 63 1 2014-01-07 3:00 AM emergency Cohen 300 0 None TRUE
Bob 63 1 2014-01-07 8:00 AM operating room Adams 2300 0 None TRUE
Bob 63 1 2014-01-07 11:30 AM morgue Doom 300 0 None TRUE
Carol 37 1 2014-01-07 4:00 AM emergency Cohen 300 40 Blue Cross TRUE
Carol 37 1 2014-01-07 5:30 AM delivery Edwards 1800 0 Blue Cross TRUE
Carol 37 1 2014-01-07 1:00 PM maternity Edwards 2000 0 Blue Cross TRUE
Carol 37 1 2014-01-09 11:00 AM discharge Edwards 0 0 Blue Cross TRUE
Carol 37 2 2014-01-13 9:00 AM office Feldman 200 20 Blue Cross FALSE
Carol 37 3 2014-01-27 9:00 AM office Feldman 200 20 Blue Cross FALSE
Esther 0 1 2014-01-07 3:00 PM pediatrics Gupta 300 0 Blue Cross TRUE
Esther 0 1 2014-01-08 8:00 AM pediatrics Gupta 300 0 Blue Cross TRUE
Esther 0 1 2014-01-09 8:00 AM pediatrics Gupta 300 0 Blue Cross TRUE
Esther 0 2 2014-01-13 11:00 AM office Gupta 180 20 Blue Cross FALSE
Esther 0 3 2014-01-27 11:00 AM office Gupta 180 20 Blue Cross FALSE

Patient|Patient Age|PatientVisit|Date|Time|Unit|Physician|Cost|Copay|Insurance|Inpatient ----|:----:|:----:|----:|----:|----|----|----|----:|----:|----|---- Alice|46|1|2014-01-07|9:30 AM|preop|Adams|0|0|Aetna PPO|TRUE Alice|46|1|2014-01-07|10:30 AM|operating room|Adams|1200|0|Aetna PPO|TRUE Alice|46|1|2014-01-07|12:15 PM|ICU|Adams|0|0|Aetna PPO|TRUE Alice|46|1|2014-01-07|6:00 PM|recovery|Adams|600|0|Aetna PPO|TRUE Alice|46|1|2014-01-08|11:00 AM|discharge|Adams|0|0|Aetna PPO|TRUE Alice|46|2|2014-01-13|2:00 PM|office|Adams|120|25|Aetna PPO|FALSE Alice|46|3|2014-02-25|1:00 PM|office|Baker|150|25|Aetna PPO|FALSE Alice|46|4|2014-03-25|1:00 PM|office|Baker|150|25|Aetna PPO|FALSE Bob|63|1|2014-01-07|3:00 AM|emergency|Cohen|300|0|None|TRUE Bob|63|1|2014-01-07|8:00 AM|operating room|Adams|2300|0|None|TRUE Bob|63|1|2014-01-07|11:30 AM|morgue|Doom|300|0|None|TRUE Carol|37|1|2014-01-07|4:00 AM|emergency|Cohen|300|40|Blue Cross|TRUE Carol|37|1|2014-01-07|5:30 AM|delivery|Edwards|1800|0|Blue Cross|TRUE Carol|37|1|2014-01-07|1:00 PM|maternity|Edwards|2000|0|Blue Cross|TRUE Carol|37|1|2014-01-09|11:00 AM|discharge|Edwards|0|0|Blue Cross|TRUE Carol|37|2|2014-01-13|9:00 AM|office|Feldman|200|20|Blue Cross|FALSE Carol|37|3|2014-01-27|9:00 AM|office|Feldman|200|20|Blue Cross|FALSE Esther|0|1|2014-01-07|3:00 PM|pediatrics|Gupta|300|0|Blue Cross|TRUE Esther|0|1|2014-01-08|8:00 AM|pediatrics|Gupta|300|0|Blue Cross|TRUE Esther|0|1|2014-01-09|8:00 AM|pediatrics|Gupta|300|0|Blue Cross|TRUE Esther|0|2|2014-01-13|11:00 AM|office|Gupta|180|20|Blue Cross|FALSE Esther|0|3|2014-01-27|11:00 AM|office|Gupta|180|20|Blue Cross|FALSE

/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript&plugins=file-highlight */
/**
* prism.js default theme for JavaScript, CSS and HTML
* Based on dabblet (http://dabblet.com)
* @author Lea Verou
*/
code[class*="language-"],
pre[class*="language-"] {
color: black;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', monospace;
direction: ltr;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
code[class*="language-"]::selection, code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: .5em 0;
overflow: auto;
}
:not(pre) > code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
}
/* Inline code */
:not(pre) > code[class*="language-"] {
padding: .1em;
border-radius: .3em;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
}
.token.punctuation {
color: #999;
}
.namespace {
opacity: .7;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #690;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #a67f59;
background: hsla(0, 0%, 100%, .5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
}
.token.function {
color: #DD4A68;
}
.token.regex,
.token.important,
.token.variable {
color: #e90;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}
/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript&plugins=file-highlight */
self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{};var Prism=function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=self.Prism={util:{encode:function(e){return e instanceof n?new n(e.type,t.util.encode(e.content),e.alias):"Array"===t.util.type(e)?e.map(t.util.encode):e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){var n=t.util.type(e);switch(n){case"Object":var a={};for(var r in e)e.hasOwnProperty(r)&&(a[r]=t.util.clone(e[r]));return a;case"Array":return e.map(function(e){return t.util.clone(e)})}return e}},languages:{extend:function(e,n){var a=t.util.clone(t.languages[e]);for(var r in n)a[r]=n[r];return a},insertBefore:function(e,n,a,r){r=r||t.languages;var i=r[e];if(2==arguments.length){a=arguments[1];for(var l in a)a.hasOwnProperty(l)&&(i[l]=a[l]);return i}var s={};for(var o in i)if(i.hasOwnProperty(o)){if(o==n)for(var l in a)a.hasOwnProperty(l)&&(s[l]=a[l]);s[o]=i[o]}return t.languages.DFS(t.languages,function(t,n){n===r[e]&&t!=e&&(this[t]=s)}),r[e]=s},DFS:function(e,n,a){for(var r in e)e.hasOwnProperty(r)&&(n.call(e,r,e[r],a||r),"Object"===t.util.type(e[r])?t.languages.DFS(e[r],n):"Array"===t.util.type(e[r])&&t.languages.DFS(e[r],n,r))}},highlightAll:function(e,n){for(var a,r=document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'),i=0;a=r[i++];)t.highlightElement(a,e===!0,n)},highlightElement:function(a,r,i){for(var l,s,o=a;o&&!e.test(o.className);)o=o.parentNode;if(o&&(l=(o.className.match(e)||[,""])[1],s=t.languages[l]),s){a.className=a.className.replace(e,"").replace(/\s+/g," ")+" language-"+l,o=a.parentNode,/pre/i.test(o.nodeName)&&(o.className=o.className.replace(e,"").replace(/\s+/g," ")+" language-"+l);var u=a.textContent;if(u){u=u.replace(/^(?:\r?\n|\r)/,"");var g={element:a,language:l,grammar:s,code:u};if(t.hooks.run("before-highlight",g),r&&self.Worker){var c=new Worker(t.filename);c.onmessage=function(e){g.highlightedCode=n.stringify(JSON.parse(e.data),l),t.hooks.run("before-insert",g),g.element.innerHTML=g.highlightedCode,i&&i.call(g.element),t.hooks.run("after-highlight",g)},c.postMessage(JSON.stringify({language:g.language,code:g.code}))}else g.highlightedCode=t.highlight(g.code,g.grammar,g.language),t.hooks.run("before-insert",g),g.element.innerHTML=g.highlightedCode,i&&i.call(a),t.hooks.run("after-highlight",g)}}},highlight:function(e,a,r){var i=t.tokenize(e,a);return n.stringify(t.util.encode(i),r)},tokenize:function(e,n){var a=t.Token,r=[e],i=n.rest;if(i){for(var l in i)n[l]=i[l];delete n.rest}e:for(var l in n)if(n.hasOwnProperty(l)&&n[l]){var s=n[l];s="Array"===t.util.type(s)?s:[s];for(var o=0;o<s.length;++o){var u=s[o],g=u.inside,c=!!u.lookbehind,f=0,h=u.alias;u=u.pattern||u;for(var p=0;p<r.length;p++){var d=r[p];if(r.length>e.length)break e;if(!(d instanceof a)){u.lastIndex=0;var m=u.exec(d);if(m){c&&(f=m[1].length);var y=m.index-1+f,m=m[0].slice(f),v=m.length,k=y+v,b=d.slice(0,y+1),w=d.slice(k+1),N=[p,1];b&&N.push(b);var O=new a(l,g?t.tokenize(m,g):m,h);N.push(O),w&&N.push(w),Array.prototype.splice.apply(r,N)}}}}}return r},hooks:{all:{},add:function(e,n){var a=t.hooks.all;a[e]=a[e]||[],a[e].push(n)},run:function(e,n){var a=t.hooks.all[e];if(a&&a.length)for(var r,i=0;r=a[i++];)r(n)}}},n=t.Token=function(e,t,n){this.type=e,this.content=t,this.alias=n};if(n.stringify=function(e,a,r){if("string"==typeof e)return e;if("Array"===t.util.type(e))return e.map(function(t){return n.stringify(t,a,e)}).join("");var i={type:e.type,content:n.stringify(e.content,a,r),tag:"span",classes:["token",e.type],attributes:{},language:a,parent:r};if("comment"==i.type&&(i.attributes.spellcheck="true"),e.alias){var l="Array"===t.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(i.classes,l)}t.hooks.run("wrap",i);var s="";for(var o in i.attributes)s+=o+'="'+(i.attributes[o]||"")+'"';return"<"+i.tag+' class="'+i.classes.join(" ")+'" '+s+">"+i.content+"</"+i.tag+">"},!self.document)return self.addEventListener?(self.addEventListener("message",function(e){var n=JSON.parse(e.data),a=n.language,r=n.code;self.postMessage(JSON.stringify(t.util.encode(t.tokenize(r,t.languages[a])))),self.close()},!1),self.Prism):self.Prism;var a=document.getElementsByTagName("script");return a=a[a.length-1],a&&(t.filename=a.src,document.addEventListener&&!a.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)),self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism);;
Prism.languages.markup={comment:/<!--[\w\W]*?-->/,prolog:/<\?.+?\?>/,doctype:/<!DOCTYPE.+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|[^\s'">=]+))?\s*)*\/?>/i,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/=|>|"/}},punctuation:/\/?>/,"attr-name":{pattern:/[\w:-]+/,inside:{namespace:/^[\w-]+?:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.hooks.add("wrap",function(t){"entity"===t.type&&(t.attributes.title=t.content.replace(/&amp;/,"&"))});;
Prism.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{punctuation:/[;:]/}},url:/url\((?:(["'])(\\\n|\\?.)*?\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*(?=\s*\{)/,string:/("|')(\\\n|\\?.)*?\1/,property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,punctuation:/[\{\};:]/,"function":/[-a-z0-9]+(?=\()/i},Prism.languages.markup&&(Prism.languages.insertBefore("markup","tag",{style:{pattern:/<style[\w\W]*?>[\w\W]*?<\/style>/i,inside:{tag:{pattern:/<style[\w\W]*?>|<\/style>/i,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.css},alias:"language-css"}}),Prism.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:Prism.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:Prism.languages.css}},alias:"language-css"}},Prism.languages.markup.tag));;
Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.+/,lookbehind:!0}],string:/("|')(\\\n|\\?.)*?\1/,"class-name":{pattern:/((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(true|false)\b/,"function":{pattern:/[a-z0-9_]+\(/i,inside:{punctuation:/\(/}},number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/,operator:/[-+]{1,2}|!|<=?|>=?|={1,3}|&{1,2}|\|?\||\?|\*|\/|~|\^|%/,ignore:/&(lt|gt|amp);/i,punctuation:/[{}[\];(),.:]/};;
Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|get|if|implements|import|in|instanceof|interface|let|new|null|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|-?Infinity)\b/,"function":/(?!\d)[a-z0-9_$]+(?=\()/i}),Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0}}),Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/<script[\w\W]*?>[\w\W]*?<\/script>/i,inside:{tag:{pattern:/<script[\w\W]*?>|<\/script>/i,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.javascript},alias:"language-javascript"}});;
!function(){if(self.Prism&&self.document&&document.querySelector){var e={js:"javascript",html:"markup",svg:"markup",xml:"markup",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell"};Array.prototype.slice.call(document.querySelectorAll("pre[data-src]")).forEach(function(t){var r=t.getAttribute("data-src"),n=(r.match(/\.(\w+)$/)||[,""])[1],s=e[n]||n,a=document.createElement("code");a.className="language-"+s,t.textContent="",a.textContent="Loading…",t.appendChild(a);var o=new XMLHttpRequest;o.open("GET",r,!0),o.onreadystatechange=function(){4==o.readyState&&(o.status<400&&o.responseText?(a.textContent=o.responseText,Prism.highlightElement(a)):a.textContent=o.status>=400?"✖ Error "+o.status+" while fetching file: "+o.statusText:"✖ Error: File does not exist or is empty")},o.send(null)})}}();;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment