Radar chart visualization of skills in the bellingham.design community.
Based on blocks from nbremer and alandunning.
| height: 650 |
Radar chart visualization of skills in the bellingham.design community.
Based on blocks from nbremer and alandunning.
| [ | |
| [ | |
| {"area": "Central ", "value": 80}, | |
| {"area": "Kirkdale", "value": 40}, | |
| {"area": "Kensington ", "value": 40}, | |
| {"area": "Everton ", "value": 90}, | |
| {"area": "Picton ", "value": 60}, | |
| {"area": "Riverside ", "value": 80} | |
| ] | |
| ] |
| <!DOCTYPE html> | |
| <meta charset="utf-8"> | |
| <head> | |
| </head> | |
| <style> | |
| body { | |
| background-color: #F1F3F3 | |
| } | |
| .axis { | |
| font: 15px sans-serif; | |
| } | |
| .axis path, | |
| .axis line { | |
| fill: none; | |
| stroke: #D4D8DA; | |
| stroke-width: 2px; | |
| shape-rendering: crispEdges; | |
| } | |
| #chart1 { | |
| position: absolute; | |
| top: 50px; | |
| left: 50px; | |
| } | |
| #chart2 { | |
| position: absolute; | |
| top: 50px; | |
| left: 400px; | |
| } | |
| #label1 { | |
| font: 15px sans-serif; | |
| position: absolute; | |
| top: 400px; | |
| left: 250px; | |
| } | |
| #label2 { | |
| font: 15px sans-serif; | |
| position: absolute; | |
| top: 400px; | |
| left: 600px; | |
| } | |
| .toolTip { | |
| font: 15px sans-serif; | |
| pointer-events: none; | |
| position: absolute; | |
| display: none; | |
| min-width: 50px; | |
| height: auto; | |
| background: none repeat scroll 0 0 #ffffff; | |
| padding: 9px 14px 6px 14px; | |
| border-radius: 2px; | |
| text-align: center; | |
| line-height: 1.3; | |
| color: #5B6770; | |
| box-shadow: 0px 3px 9px rgba(0, 0, 0, .15); | |
| } | |
| .toolTip span { | |
| font-weight: 500; | |
| color: #081F2C; | |
| } | |
| </style> | |
| <script src="https://d3js.org/d3.v4.min.js"></script> | |
| <script src="https://d3js.org/d3-queue.v3.min.js"></script> | |
| <script src="RadarChart.js"></script> | |
| <div id="chart1"></div> | |
| <div id="chart2"></div> | |
| <div id="label1">Skill level</div> | |
| <div id="label2">Skill interest</div> | |
| <script> | |
| var width = 300, | |
| height = 300; | |
| // Config for the Radar chart | |
| var config = { | |
| w: width, | |
| h: height, | |
| radius: 5, | |
| dotOpacityArea: 0.001, | |
| dotOpacityStroke: 0, | |
| opacityArea: 0.1, | |
| opacityStroke: 0.2, | |
| maxValue: 10, | |
| levels: 5, | |
| ExtraWidthX: 300 | |
| } | |
| d3.queue() | |
| .defer(d3.csv,"survey_results_skill_level.csv") | |
| .defer(d3.csv,"survey_results_skill_interest.csv") | |
| .awaitAll(function(error, data) { | |
| //d3.json("data.json", function(error, data) { | |
| if (error) throw error; | |
| var dataJson1 = []; | |
| data[0].forEach((row) => { | |
| console.log(row); | |
| var record = []; | |
| d3.keys(row).forEach((key) => { | |
| if (key != 'id') { | |
| record.push({ | |
| "axis": key, | |
| "value": +row[key] | |
| }); | |
| } | |
| }); | |
| dataJson1.push(record); | |
| }); | |
| console.log(dataJson1); | |
| var dataJson2 = []; | |
| data[1].forEach((row) => { | |
| console.log(row); | |
| var record = []; | |
| d3.keys(row).forEach((key) => { | |
| if (key != 'id') { | |
| record.push({ | |
| "axis": key, | |
| "value": +row[key] | |
| }); | |
| } | |
| }); | |
| dataJson2.push(record); | |
| }); | |
| console.log(dataJson2); | |
| //Call function to draw the Radar chart | |
| RadarChart.draw("#chart1", dataJson1, config); | |
| RadarChart.draw("#chart2", dataJson2, config); | |
| }); | |
| var svg = d3.select('body') | |
| .selectAll('svg') | |
| .append('svg') | |
| .attr("width", width) | |
| .attr("height", height); | |
| </script> |
| var RadarChart = { | |
| draw: function(id, d, options){ | |
| var cfg = { | |
| radius: 5, | |
| w: 600, | |
| h: 600, | |
| factor: 1, | |
| factorLegend: .85, | |
| levels: 3, | |
| maxValue: 100, | |
| radians: 2 * Math.PI, | |
| dotOpacityArea: 1, | |
| dotOpacityStroke: 1, | |
| opacityArea: 0.5, | |
| opacityStroke: 0.8, | |
| ToRight: 5, | |
| TranslateX: 80, | |
| TranslateY: 30, | |
| ExtraWidthX: 100, | |
| ExtraWidthY: 100, | |
| color: d3.scaleOrdinal().range(["#6F257F", "#CA0D59"]) | |
| }; | |
| if('undefined' !== typeof options){ | |
| for(var i in options){ | |
| if('undefined' !== typeof options[i]){ | |
| cfg[i] = options[i]; | |
| } | |
| } | |
| } | |
| var allAxis = (d[0].map(function(i, j){return i.axis})); | |
| var total = allAxis.length; | |
| var radius = cfg.factor*Math.min(cfg.w/2, cfg.h/2); | |
| var Format = d3.format('%'); | |
| d3.select(id).select("svg").remove(); | |
| var g = d3.select(id) | |
| .append("svg") | |
| .attr("width", cfg.w+cfg.ExtraWidthX) | |
| .attr("height", cfg.h+cfg.ExtraWidthY) | |
| .append("g") | |
| .attr("transform", "translate(" + cfg.TranslateX + "," + cfg.TranslateY + ")"); | |
| var tooltip; | |
| /* | |
| //Circular segments | |
| for(var j=0; j<cfg.levels; j++){ | |
| var levelFactor = cfg.factor*radius*((j+1)/cfg.levels); | |
| g.selectAll(".levels") | |
| .data(allAxis) | |
| .enter() | |
| .append("svg:line") | |
| .attr("x1", function(d, i){return levelFactor*(1-cfg.factor*Math.sin(i*cfg.radians/total));}) | |
| .attr("y1", function(d, i){return levelFactor*(1-cfg.factor*Math.cos(i*cfg.radians/total));}) | |
| .attr("x2", function(d, i){return levelFactor*(1-cfg.factor*Math.sin((i+1)*cfg.radians/total));}) | |
| .attr("y2", function(d, i){return levelFactor*(1-cfg.factor*Math.cos((i+1)*cfg.radians/total));}) | |
| .attr("class", "line") | |
| .style("stroke", "grey") | |
| .style("stroke-opacity", "0.75") | |
| .style("stroke-width", "0.3px") | |
| .attr("transform", "translate(" + (cfg.w/2-levelFactor) + ", " + (cfg.h/2-levelFactor) + ")"); | |
| } | |
| //Text indicating at what % each level is | |
| for(var j=0; j<cfg.levels; j++){ | |
| var levelFactor = cfg.factor*radius*((j+1)/cfg.levels); | |
| g.selectAll(".levels") | |
| .data([1]) //dummy data | |
| .enter() | |
| .append("svg:text") | |
| .attr("x", function(d){return levelFactor*(1-cfg.factor*Math.sin(0));}) | |
| .attr("y", function(d){return levelFactor*(1-cfg.factor*Math.cos(0));}) | |
| .attr("class", "legend") | |
| .style("font-family", "sans-serif") | |
| .style("font-size", "10px") | |
| .attr("transform", "translate(" + (cfg.w/2-levelFactor + cfg.ToRight) + ", " + (cfg.h/2-levelFactor) + ")") | |
| .attr("fill", "#737373") | |
| .text((j+1)*cfg.maxValue/cfg.levels); | |
| } | |
| */ | |
| series = 0; | |
| /* | |
| var axis = g.selectAll(".axis") | |
| .data(allAxis) | |
| .enter() | |
| .append("g") | |
| .attr("class", "axis"); | |
| axis.append("line") | |
| .attr("x1", cfg.w/2) | |
| .attr("y1", cfg.h/2) | |
| .attr("x2", function(d, i){return cfg.w/2*(1-cfg.factor*Math.sin(i*cfg.radians/total));}) | |
| .attr("y2", function(d, i){return cfg.h/2*(1-cfg.factor*Math.cos(i*cfg.radians/total));}) | |
| .attr("class", "line") | |
| .style("stroke", "grey") | |
| .style("stroke-width", "1px"); | |
| /* | |
| axis.append("text") | |
| .attr("class", "legend") | |
| .text(function(d){return d}) | |
| .style("font-family", "sans-serif") | |
| .style("font-size", "11px") | |
| .attr("text-anchor", "middle") | |
| .attr("dy", "1.5em") | |
| .attr("transform", function(d, i){return "translate(0, -10)"}) | |
| .attr("x", function(d, i){return cfg.w/2*(1-cfg.factorLegend*Math.sin(i*cfg.radians/total))-60*Math.sin(i*cfg.radians/total);}) | |
| .attr("y", function(d, i){return cfg.h/2*(1-Math.cos(i*cfg.radians/total))-20*Math.cos(i*cfg.radians/total);}); | |
| */ | |
| d.forEach(function(y, x){ | |
| dataValues = []; | |
| g.selectAll(".nodes") | |
| .data(y, function(j, i){ | |
| dataValues.push([ | |
| cfg.w/2*(1-(parseFloat(Math.max(j.value, 0))/cfg.maxValue)*cfg.factor*Math.sin(i*cfg.radians/total)), | |
| cfg.h/2*(1-(parseFloat(Math.max(j.value, 0))/cfg.maxValue)*cfg.factor*Math.cos(i*cfg.radians/total)) | |
| ]); | |
| }); | |
| dataValues.push(dataValues[0]); | |
| g.selectAll(".area") | |
| .data([dataValues]) | |
| .enter() | |
| .append("polygon") | |
| .attr("class", "radar-chart-serie"+series) | |
| .style("stroke-width", "2px") | |
| .style("stroke-opacity", cfg.opacityStroke) | |
| .style("stroke", cfg.color(series)) | |
| .attr("points",function(d) { | |
| var str=""; | |
| for(var pti=0;pti<d.length;pti++){ | |
| str=str+d[pti][0]+","+d[pti][1]+" "; | |
| } | |
| return str; | |
| }) | |
| .style("fill", function(j, i){return cfg.color(series)}) | |
| .style("fill-opacity", cfg.opacityArea) | |
| .on('mouseover', function (d){ | |
| z = "polygon."+d3.select(this).attr("class"); | |
| g.selectAll("polygon") | |
| .transition(200) | |
| .style("fill-opacity", 0.1); | |
| g.selectAll(z) | |
| .transition(200) | |
| .style("fill-opacity", .7); | |
| }) | |
| .on('mouseout', function(){ | |
| g.selectAll("polygon") | |
| .transition(200) | |
| .style("fill-opacity", cfg.opacityArea); | |
| }); | |
| series++; | |
| }); | |
| series=0; | |
| var tooltip = d3.select("body").append("div").attr("class", "toolTip"); | |
| d.forEach(function(y, x){ | |
| g.selectAll(".nodes") | |
| .data(y).enter() | |
| .append("svg:circle") | |
| .attr("class", "radar-chart-serie"+series) | |
| .attr('r', cfg.radius) | |
| .attr("alt", function(j){return Math.max(j.value, 0)}) | |
| .attr("cx", function(j, i){ | |
| dataValues.push([ | |
| cfg.w/2*(1-(parseFloat(Math.max(j.value, 0))/cfg.maxValue)*cfg.factor*Math.sin(i*cfg.radians/total)), | |
| cfg.h/2*(1-(parseFloat(Math.max(j.value, 0))/cfg.maxValue)*cfg.factor*Math.cos(i*cfg.radians/total)) | |
| ]); | |
| return cfg.w/2*(1-(Math.max(j.value, 0)/cfg.maxValue)*cfg.factor*Math.sin(i*cfg.radians/total)); | |
| }) | |
| .attr("cy", function(j, i){ | |
| return cfg.h/2*(1-(Math.max(j.value, 0)/cfg.maxValue)*cfg.factor*Math.cos(i*cfg.radians/total)); | |
| }) | |
| .attr("data-id", function(j){return j.axis}) | |
| .style("fill", "#fff") | |
| .style("stroke-width", "2px") | |
| .style("stroke", cfg.color(series)) | |
| .style("fill-opacity", cfg.dotOpacityArea) | |
| .style("stroke-opacity", cfg.dotOpacityStroke) | |
| .on('mouseover', function (d){ | |
| console.log(d.axis) | |
| tooltip | |
| .style("left", d3.event.pageX - 40 + "px") | |
| .style("top", d3.event.pageY - 80 + "px") | |
| .style("display", "inline-block") | |
| .html((d.axis) + "<br><span>" + (d.value) + "</span>"); | |
| }) | |
| .on("mouseout", function(d){ tooltip.style("display", "none");}); | |
| series++; | |
| }); | |
| } | |
| }; |
| id | ethnography and discovery—user goals, motivations, and work patterns | user modeling—persona and scenario creation; role-playing | product design—product-level interaction principles and concepts | interaction design—function-level interaction principles and concepts | interface design—component-level interaction principles and concepts | information architecture and information design—content structure and presentation principles | project management | time management | stakeholder or client management | basic business writing—letters, email messages, meeting notes, and summaries | rhetoric and persuasive writing | expository writing and composition | technical writing | public speaking and presenting | visual communication | mediation and facilitation | active listening | team-building | collaboration | understanding of bit-depth, pixel-density, and resolution issues | managing color palettes | icon design and pixel-level design | graphic user interface (GUI) screen layout and composition | page layout and composition | animation | sound design | prototyping—paper, Visual Basic, HTML/CSS, Director, Flash, or other methods | knowledge of file formats and tradeoffs | understanding of basic computer programming principles, tools, and technologies | GUI development principles, tools, and technologies | database principles, tools, and technologies | understanding of software and hardware development processes—specification, coding, and testing | knowledge of existing and new technologies and constraints | knowledge of mechanical engineering and manufacturing—for hardware devices | knowledge of usability testing principles and methods | knowledge of principles of cognitive psychology | Wireframing / low / medium fidelity (Visio or OmniGraffle) | High Fidelity (Sketch, Adobe Creative Suite) | empathy | passion | humor | skepticism | analytical thinking | ability to synthesize information and identify salient points | ability to visualize solutions—before they are built | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
| 2 | 4 | 7 | 5 | 7 | 7 | 8 | 8 | 8 | 6 | 3 | 3 | 2 | 3 | 3 | 2 | 5 | 3 | 6 | 7 | 2 | 4 | 2 | 6 | 5 | 3 | 1 | 4 | 3 | 7 | 5 | 7 | 8 | 5 | 1 | 7 | 6 | 4 | 4 | 7 | 5 | 6 | 3 | 3 | 4 | 3 | |
| 3 | 4 | 3 | 5 | 4 | 7 | 5 | 5 | 7 | 8 | 8 | 7 | 5 | 4 | 8 | 7 | 5 | 6 | 5 | 6 | 7 | 7 | 6 | 4 | 4 | 7 | 6 | 7 | 6 | 5 | 5 | 7 | 7 | 6 | 7 | 6 | 7 | 5 | 8 | 5 | 5 | 7 | 8 | 4 | 4 | 5 | |
| 4 | 7 | 5 | 3 | 7 | 9 | 5 | 6 | 6 | 2 | 3 | 2 | 2 | 2 | 6 | 6 | 3 | 2 | 2 | 2 | 5 | 7 | 8 | 8 | 8 | 10 | 6 | 8 | 5 | 7 | 7 | 4 | 2 | 4 | 2 | 7 | 4 | 8 | 9 | 3 | 8 | 5 | 5 | 8 | 8 | 5 | |
| 5 | 8 | 8 | 10 | 10 | 10 | 10 | 5 | 6 | 9 | 4 | 7 | 7 | 7 | 7 | 7 | 9 | 4 | 5 | 7 | 3 | 6 | 6 | 10 | 10 | 10 | 1 | 10 | 1 | 5 | 7 | 1 | 3 | 10 | 1 | 10 | 10 | 10 | 10 | 7 | 7 | 7 | 7 | 10 | 10 | 10 | |
| 6 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | 3 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | 3 | 3 | 1 | 3 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | 1 | 1 | 3 | 1 | 1 | 1 | 1 | |
| 7 | 5 | 6 | 7 | 3 | 3 | 5 | 5 | 4 | 6 | 3 | 3 | 4 | 5 | 4 | 3 | 3 | 2 | 2 | 2 | 7 | 8 | 8 | 8 | 8 | 9 | 7 | 4 | 6 | 7 | 8 | 5 | 5 | 4 | 3 | 6 | 6 | 5 | 7 | 5 | 4 | 4 | 4 | 7 | 8 | 4 | |
| 8 | 10 | 10 | 10 | 7 | 7 | 8 | 6 | 4 | 7 | 4 | 6 | 6 | 2 | 7 | 8 | 7 | 6 | 2 | 6 | 4 | 4 | 4 | 4 | 4 | 2 | 1 | 6 | 1 | 6 | 7 | 7 | 7 | 6 | 1 | 10 | 10 | 6 | 6 | 8 | 8 | 8 | 8 | 8 | 9 | 9 | |
| 9 | 5 | 5 | 10 | 10 | 10 | 10 | 6 | 6 | 8 | 5 | 7 | 7 | 8 | 7 | 8 | 7 | 8 | 10 | 10 | 7 | 8 | 8 | 8 | 8 | 5 | 6 | 8 | 6 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 6 | 3 | 10 | 10 | 10 | 4 | 6 | 10 | 10 | |
| 10 | 8 | 4 | 1 | 7 | 7 | 9 | 6 | 10 | 4 | 1 | 1 | 1 | 1 | 1 | 6 | 7 | 1 | 5 | 5 | 2 | 3 | 1 | 4 | 8 | 1 | 1 | 1 | 5 | 1 | 1 | 3 | 1 | 2 | 1 | 9 | 9 | 1 | 1 | 1 | 9 | 2 | 1 | 6 | 6 | 7 | |
| 11 | 3 | 2 | 4 | 4 | 3 | 6 | 5 | 6 | 6 | 3 | 2 | 2 | 1 | 3 | 7 | 2 | 7 | 5 | 8 | 4 | 6 | 6 | 6 | 8 | 5 | 2 | 4 | 3 | 2 | 4 | 2 | 4 | 6 | 1 | 6 | 5 | 2 | 6 | 5 | 5 | 5 | 1 | 4 | 5 | 6 | |
| 12 | 6 | 8 | 8 | 8 | 8 | 8 | 6 | 6 | 4 | 1 | 5 | 5 | 5 | 8 | 10 | 5 | 1 | 5 | 5 | 10 | 8 | 8 | 8 | 9 | 1 | 1 | 10 | 8 | 1 | 8 | 8 | 10 | 10 | 10 | 9 | 10 | 8 | 8 | 1 | 1 | 10 | 1 | 1 | 1 | 1 | |
| 13 | 5 | 4 | 6 | 6 | 8 | 5 | 2 | 2 | 3 | 1 | 2 | 2 | 2 | 1 | 2 | 2 | 2 | 2 | 2 | 7 | 7 | 8 | 9 | 8 | 7 | 6 | 7 | 7 | 5 | 9 | 3 | 6 | 7 | 1 | 6 | 6 | 3 | 7 | 5 | 2 | 3 | 1 | 5 | 3 | 4 | |
| 14 | 6 | 4 | 10 | 5 | 10 | 4 | 10 | 7 | 5 | 1 | 6 | 6 | 1 | 1 | 8 | 8 | 5 | 5 | 1 | 8 | 10 | 6 | 8 | 8 | 6 | 8 | 8 | 4 | 1 | 7 | 5 | 1 | 2 | 3 | 10 | 10 | 7 | 5 | 10 | 10 | 10 | 1 | 1 | 10 | 10 | |
| 15 | 6 | 6 | 7 | 7 | 7 | 6 | 7 | 7 | 7 | 6 | 6 | 6 | 6 | 6 | 8 | 7 | 6 | 7 | 7 | 7 | 8 | 8 | 8 | 8 | 8 | 8 | 7 | 7 | 10 | 8 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 10 | 7 | 7 | 7 | 6 | 9 | 8 | 8 | |
| 16 | 4 | 3 | 7 | 8 | 7 | 8 | 3 | 3 | 4 | 4 | 5 | 5 | 4 | 3 | 7 | 4 | 5 | 5 | 5 | 9 | 9 | 9 | 9 | 9 | 8 | 5 | 5 | 4 | 7 | 9 | 9 | 9 | 8 | 8 | 8 | 6 | 6 | 6 | 5 | 8 | 5 | 5 | 7 | 7 | 10 | |
| 17 | 7 | 7 | 4 | 4 | 8 | 9 | 4 | 6 | 6 | 7 | 7 | 7 | 7 | 7 | 5 | 5 | 5 | 5 | 5 | 6 | 6 | 7 | 7 | 7 | 3 | 3 | 7 | 7 | 3 | 7 | 3 | 6 | 6 | 3 | 8 | 8 | 7 | 7 | 5 | 5 | 5 | 5 | 5 | 7 | 7 | |
| 18 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
| 19 | 5 | 4 | 6 | 8 | 10 | 10 | 6 | 9 | 4 | 4 | 3 | 6 | 3 | 6 | 10 | 5 | 9 | 5 | 10 | 10 | 10 | 10 | 10 | 10 | 6 | 3 | 8 | 9 | 10 | 8 | 6 | 4 | 6 | 3 | 7 | 8 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 |
| id | ethnography and discovery—user goals, motivations, and work patterns | user modeling—persona and scenario creation; role-playing | product design—product-level interaction principles and concepts | interaction design—function-level interaction principles and concepts | interface design—component-level interaction principles and concepts | information architecture and information design—content structure and presentation principles | project management | time management | stakeholder or client management | basic business writing—letters, email messages, meeting notes, and summaries | rhetoric and persuasive writing | expository writing and composition | technical writing | public speaking and presenting | visual communication | mediation and facilitation | active listening | team-building | collaboration | knowledge of usability testing principles and methods | knowledge of principles of cognitive psychology | understanding of bit-depth, pixel-density, and resolution issues | managing color palettes | icon design and pixel-level design | graphic user interface (GUI) screen layout and composition | page layout and composition | animation | sound design | prototyping—paper, Visual Basic, HTML/CSS, Director, Flash, or other methods | knowledge of file formats and tradeoffs | understanding of basic computer programming principles, tools, and technologies | GUI development principles, tools, and technologies | database principles, tools, and technologies | understanding of software and hardware development processes—specification, coding, and testing | knowledge of existing and new technologies and constraints | knowledge of mechanical engineering and manufacturing—for hardware devices | Wireframing / low / medium fidelity (Visio or OmniGraffle) | High Fidelity (Sketch, Adobe Creative Suite) | empathy | passion | humor | skepticism | analytical thinking | ability to synthesize information and identify salient points | ability to visualize solutions—before they are built | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 8 | 0 | 0 | 0 | 0 | 0 | 8 | 8 | 8 | 10 | 10 | 10 | 0 | 8 | 8 | 8 | 8 | 8 | 8 | 0 | 0 | 6 | 6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 6 | 8 | 8 | 0 | 0 | 8 | 6 | 6 | |
| 2 | 6 | 4 | 6 | 6 | 6 | 6 | 6 | 6 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 6 | 6 | 6 | 8 | 4 | 6 | 8 | 4 | 4 | 6 | 6 | 4 | 2 | 6 | 8 | 8 | 6 | 8 | 4 | 8 | 2 | 4 | 8 | 6 | 8 | 6 | 8 | 10 | 8 | 10 | |
| 3 | 8 | 8 | 6 | 8 | 6 | 6 | 8 | 4 | 6 | 6 | 4 | 6 | 8 | 6 | 8 | 6 | 6 | 6 | 6 | 8 | 6 | 4 | 4 | 4 | 8 | 6 | 2 | 2 | 8 | 4 | 8 | 8 | 4 | 6 | 6 | 2 | 8 | 8 | 8 | 8 | 6 | 4 | 8 | 8 | 8 | |
| 4 | 4 | 4 | 2 | 2 | 2 | 4 | 6 | 6 | 2 | 4 | 6 | 2 | 2 | 6 | 6 | 6 | 8 | 4 | 6 | 2 | 2 | 2 | 2 | 4 | 2 | 6 | 4 | 2 | 4 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 6 | 8 | 8 | 6 | 4 | 6 | 8 | 6 | |
| 5 | 8 | 6 | 8 | 8 | 8 | 8 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 8 | 6 | 6 | 6 | 2 | 6 | 6 | 8 | 8 | 8 | 4 | 0 | 6 | 8 | 2 | 6 | 2 | 2 | 4 | 0 | 8 | 8 | 6 | 8 | 6 | 6 | 8 | 8 | 8 | |
| 6 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 8 | 6 | 10 | 8 | 10 | 10 | 8 | 8 | 6 | 4 | 2 | 4 | 4 | 2 | 2 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 2 | 10 | 8 | 8 | 10 | 10 | 10 | 10 | 10 | 10 | |
| 7 | 4 | 4 | 6 | 2 | 2 | 4 | 6 | 8 | 4 | 6 | 4 | 6 | 4 | 6 | 6 | 4 | 6 | 6 | 8 | 2 | 2 | 2 | 6 | 2 | 2 | 4 | 6 | 2 | 4 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 6 | 8 | 8 | 10 | 6 | 6 | 6 | 8 | |
| 8 | 6 | 6 | 6 | 6 | 8 | 8 | 6 | 6 | 6 | 8 | 4 | 4 | 4 | 4 | 6 | 4 | 6 | 6 | 8 | 4 | 2 | 8 | 8 | 8 | 8 | 8 | 2 | 2 | 8 | 8 | 8 | 8 | 2 | 4 | 6 | 2 | 8 | 8 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | |
| 9 | 4 | 6 | 4 | 4 | 4 | 4 | 6 | 6 | 6 | 6 | 6 | 6 | 4 | 8 | 6 | 4 | 4 | 4 | 8 | 6 | 4 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 4 | 2 | 4 | 2 | 4 | 4 | 4 | 2 | 4 | 2 | 4 | 6 | 8 | 10 | 8 | 6 | 6 | |
| 10 | 2 | 2 | 2 | 2 | 2 | 6 | 6 | 6 | 8 | 10 | 10 | 8 | 8 | 6 | 6 | 4 | 8 | 6 | 6 | 2 | 4 | 2 | 2 | 2 | 2 | 4 | 2 | 0 | 0 | 6 | 8 | 2 | 0 | 0 | 2 | 0 | 0 | 2 | 8 | 6 | 8 | 8 | 10 | 8 | 6 | |
| 11 | 2 | 2 | 2 | 4 | 2 | 6 | 6 | 6 | 4 | 6 | 4 | 4 | 4 | 4 | 8 | 2 | 4 | 6 | 6 | 2 | 2 | 6 | 6 | 6 | 4 | 8 | 4 | 2 | 2 | 6 | 6 | 4 | 4 | 2 | 2 | 2 | 2 | 6 | 6 | 8 | 6 | 6 | 6 | 6 | 6 | |
| 12 | 4 | 4 | 4 | 4 | 4 | 4 | 6 | 8 | 4 | 6 | 6 | 6 | 6 | 6 | 6 | 4 | 6 | 6 | 6 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 2 | 2 | 8 | 4 | 8 | 4 | 4 | 6 | 4 | 2 | 4 | 6 | 8 | 8 | 10 | 10 | 10 | 8 | 8 | |
| 13 | 4 | 4 | 4 | 4 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 6 | 6 | 8 | 6 | 8 | 2 | 6 | 2 | 2 | 2 | 4 | 4 | 2 | 2 | 4 | 2 | 6 | 4 | 8 | 6 | 4 | 2 | 2 | 2 | 8 | 8 | 6 | 6 | 8 | 8 | 6 | |
| 14 | 2 | 4 | 4 | 2 | 4 | 2 | 4 | 8 | 2 | 10 | 6 | 8 | 10 | 10 | 6 | 6 | 10 | 10 | 10 | 4 | 4 | 2 | 2 | 2 | 4 | 4 | 2 | 2 | 2 | 2 | 10 | 6 | 6 | 10 | 6 | 2 | 2 | 2 | 10 | 10 | 10 | 10 | 10 | 6 | 6 | |
| 15 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 4 | 2 | 2 | 4 | 4 | 2 | 4 | 6 | 4 | 4 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 4 | 4 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 4 | 4 | 4 | 4 | |
| 16 | 4 | 4 | 2 | 4 | 2 | 4 | 8 | 6 | 6 | 4 | 2 | 4 | 6 | 6 | 6 | 8 | 8 | 8 | 8 | 6 | 4 | 2 | 2 | 2 | 4 | 4 | 2 | 2 | 4 | 2 | 4 | 4 | 2 | 2 | 2 | 4 | 4 | 6 | 10 | 4 | 4 | 4 | 6 | 6 | 4 | |
| 17 | 6 | 6 | 4 | 6 | 8 | 6 | 6 | 6 | 4 | 4 | 6 | 4 | 4 | 4 | 8 | 6 | 6 | 8 | 8 | 6 | 4 | 6 | 8 | 6 | 8 | 8 | 2 | 2 | 6 | 6 | 2 | 6 | 2 | 4 | 6 | 2 | 6 | 8 | 6 | 6 | 6 | 6 | 6 | 4 | 6 | |
| 18 | 0 | 2 | 4 | 2 | 2 | 6 | 8 | 6 | 6 | 4 | 10 | 10 | 6 | 10 | 6 | 10 | 10 | 10 | 10 | 2 | 8 | 10 | 6 | 4 | 8 | 6 | 6 | 4 | 6 | 8 | 10 | 6 | 10 | 10 | 8 | 2 | 2 | 2 | 10 | 10 | 6 | 6 | 8 | 10 | 10 | |
| 19 | 0 | 0 | 2 | 4 | 6 | 4 | 2 | 2 | 0 | 2 | 0 | 0 | 0 | 4 | 6 | 0 | 6 | 2 | 6 | 2 | 2 | 6 | 6 | 6 | 4 | 6 | 0 | 0 | 4 | 4 | 2 | 4 | 4 | 0 | 4 | 0 | 2 | 6 | 8 | 6 | 6 | 6 | 8 | 6 | 6 |