-
Notifications
You must be signed in to change notification settings - Fork 6
/
bundle.js.map
1 lines (1 loc) · 37.2 KB
/
bundle.js.map
1
{"version":3,"file":"bundle.js","sources":["useData.js","bar.js","index.js"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\r\nimport { mean, json, nest } from \"d3\";\r\n\r\nconst jsonURL =\r\n // \"https://gist.githubusercontent.com/aulichney/2bdf13ce07abcc3206c5735b4c395400/raw/5bed42ff8cd6d2ebb8c3020a038fb3b0c57b00a8/undercustodygeo.json\";\r\n // \"https://gist.githubusercontent.com/EvanMisshula/019f1f9e4e52c632bf767bda18dd4f55/raw/36223c79d83e8e6606f9df3941f92c6c282133c8/nest.json\";\r\n //\"https://gist.githubusercontent.com/EvanMisshula/a7897b54611544eec4659f45b89102b0/raw/96dddd9c20a05ee15d5a4be6e6ad0c304747e604/cleanDF10jj.json\";\r\n \"https://gist.githubusercontent.com/EvanMisshula/333c2cf929cae8755e6cf55be9b28e3f/raw/bd88603b29344f75f45e8fb7a7646a107936afad/cleanDF10jj.json\";\r\n\r\n// helper function; clean the data\r\nfunction cleanData(row) {\r\n return {\r\n sex: row.sex,\r\n age: Math.round(row.age),\r\n raceEthnicity: row.modEthRace,\r\n timeServed: Math.round(row.timeServed),\r\n timeServedBinned: row.timeServedBinned,\r\n ageBinned: row.ageBinned,\r\n crimeCounty: row.crimeCounty,\r\n downstateResident: row.downstateResident,\r\n nycResident: row.nycResident,\r\n prisonSecLevel: row.prisonSecLevel,\r\n prison: row.prison,\r\n prisonRegion: row.prisonRegion,\r\n homeRegion: row.homeRegion,\r\n };\r\n}\r\n\r\n// Given the JSON data and a specified column name,\r\n// group by the column, compute the value counts and the average age\r\nexport function transformData(data, col) {\r\n let transformed = nest()\r\n .key((d) => d[col])\r\n .rollup((d) => {\r\n return {\r\n amount: d.length,\r\n ageAvg: mean(d.map((correspondent) => correspondent.age)),\r\n avgTimeServed: mean(\r\n d.map(function (correspondent) {\r\n return correspondent.timeServed;\r\n })\r\n ),\r\n };\r\n })\r\n .entries(data);\r\n return transformed;\r\n}\r\n\r\n// main function; retrieve the data from the JSON file\r\nexport const useJSON = () => {\r\n const [data, setData] = useState(null);\r\n useEffect(() => {\r\n json(jsonURL) // retrieve data from the given URL\r\n .then(function (data) {\r\n //when data is retrieved, do the following\r\n data = data.map(cleanData); // map each row to the cleanData function to retrieve the desired columns\r\n setData(data);\r\n // use the react hook to set the data\r\n });\r\n }, []);\r\n return data;\r\n};\r\n","import ReactDropdown from 'react-dropdown';\r\n\r\nimport { useState, useEffect } from \"react\";\r\nimport { select, axisBottom, axisLeft } from \"d3\";\r\nimport { transformData } from \"./useData\";\r\n\r\n\r\n// bar constants\r\nconst WIDTH = 900;\r\nconst HEIGHT= 400;\r\nconst margin={top: 25, right: 25, bottom: 100, left: 190};\r\nconst innerWidth = WIDTH - margin.left - margin.right;\r\nconst innerHeight = HEIGHT - margin.top - margin.bottom;\r\n\r\n//Styling and format functions:\r\n//Title case function for axis title formatting\r\nfunction toTitle(string) {\r\n return string.charAt(0).toUpperCase() + string.slice(1);\r\n}\r\n\r\n//Number formatting\r\nfunction formatNumber(num) {\r\n return num.toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,');\r\n}\r\n\r\n// compute the max length for xAttribute\r\nfunction max_key_length(data) {\r\n\tvar max = 0;\r\n for(var i = 0; i < data.length; i++) {\r\n if (data[i].key.length > max) {\r\n max = data[i].key.length\r\n }\r\n }\r\n return max\r\n}\r\n\r\n// compute the sum of all bars with an x-value greater/smaller than certain bar\r\nfunction add_integral(barData) {\r\n const lessThan = []\r\n const greaterThan = []\r\n for (var i = 0; i < barData.length; i++){\r\n var less = []\r\n var greater = []\r\n for (var j = 0; j < barData.length; j++){\r\n if (barData[j].key <= parseInt(barData[i].key)){\r\n less.push(barData[j].value['amount'])\r\n }else{\r\n greater.push(barData[j].value['amount'])\r\n }\r\n }\r\n barData[i].value.younger = d3.sum(less);\r\n barData[i].value.older = d3.sum(greater);\r\n }\r\n return barData\r\n}\r\n\r\n//sort constant, 'none'; 'height': sort by height descendant; 'x': sort by x value\r\nlet sort_status = 'none';\r\nconst SORT_DURATION = 500;\r\n\r\n// create the svg object\r\nconst SVG = (ref) => {\r\n // the temporary solution is this, prevent react from appending svgs indefinitely\r\n \tif (d3.selectAll(\"svg\").empty()) {\r\n d3.select(ref)\r\n .append(\"svg\")\r\n .attr(\"width\", WIDTH)\r\n .attr(\"height\", HEIGHT)\r\n }\r\n}\r\n\r\nconst Bar = (ref_radio, barData, yAttribute, xAttribute, totalPopulation) => {\r\n\r\n const barAdjust = 100 / (barData.length**1.5) // for adjusting the width of bars\r\n\r\n \t// remove everything from svg and rerender objects\r\n const svg = d3.select(\"svg\")\r\n svg.selectAll(\"*\").remove();\r\n\r\n //-------------------------------------------------------------------------------\r\n // xScale, yScale\r\n const xScale = d3.scaleBand()\r\n .domain(barData.map(d => d.key))\r\n .range([0, innerWidth])\r\n .paddingInner([.2]);\r\n const yScale = d3.scaleLinear()\r\n .domain([0, d3.max( barData.map(d => d.value[yAttribute]) )] )\r\n .range([innerHeight, 0]).nice();\r\n\r\n //--------------------------------------------------------------------------------\r\n // bars and tooltip\r\n\r\n // if age is selected as x-attributes, compute integral\r\n\t\tif (xAttribute == 'age') {\r\n barData = add_integral(barData)\r\n }\r\n\r\n const bars = svg.append('g')\r\n .attr(\"transform\", `translate (${margin.left}, ${margin.top})`)\r\n .selectAll(\"rect\")\r\n .data(barData, d => d.key);\r\n bars.enter().append(\"rect\")\r\n .attr(\"x\", (d, i) => xScale(d.key)+barAdjust)\r\n .attr(\"y\", d => yScale(d.value[yAttribute]))\r\n .attr(\"width\", xScale.bandwidth()-barAdjust*2)\r\n .attr(\"height\", d => innerHeight - yScale(d.value[yAttribute]))\r\n .style('opacity', 1)\r\n .on('mouseover', function (d, i) {\r\n if(yAttribute == 'amount' & xAttribute == 'age'){\r\n tooltip\r\n .html(\r\n `<div>${toTitle(xAttribute)}: ${d.key}</div>\r\n <div>${toTitle(yAttribute)}: ${formatNumber(d.value[yAttribute].toFixed(2))}</div>\r\n <div>${'Percent'}: ${formatNumber((d.value[yAttribute]/totalPopulation*100).toFixed(2))}%</div>\r\n <div>There are ${formatNumber(d.value.younger)} people ${d.key} or younger under custody (${formatNumber((d.value.younger/totalPopulation*100).toFixed(1))}%)</div>\r\n <div>There are ${formatNumber(d.value.older)} people over ${d.key} under custody (${formatNumber((d.value.older/totalPopulation*100).toFixed(1))}%)</div>`\r\n\r\n )\r\n .style('visibility', 'visible');\r\n d3.select(this).style(\"opacity\", 0.7);\r\n\r\n }else if(yAttribute == 'amount'){\r\n tooltip\r\n .html(\r\n `<div>${toTitle(xAttribute)}: ${d.key}</div>\r\n <div>${toTitle(yAttribute)}: ${formatNumber(d.value[yAttribute].toFixed(0))}</div>\r\n <div>${'Percent'}: ${formatNumber((d.value[yAttribute]/totalPopulation*100).toFixed(2))}%</div>`\r\n )\r\n .style('visibility', 'visible');\r\n d3.select(this).style(\"opacity\", 0.7);\r\n }else{\r\n tooltip\r\n .html(\r\n `<div>${toTitle(xAttribute)}: ${d.key}</div>\r\n <div>${toTitle(yAttribute)}: ${formatNumber(d.value[yAttribute].toFixed(2))}</div>\r\n <div>${'Count '}${d.key}: ${formatNumber(d.value.amount.toFixed(0))}</div>`\r\n )\r\n .style('visibility', 'visible');\r\n d3.select(this).style(\"opacity\", 0.7);\r\n }\r\n })\r\n .on('mousemove', function () {\r\n tooltip\r\n .style('top', d3.event.pageY - 10 + 'px')\r\n .style('left', d3.event.pageX + 10 + 'px');\r\n })\r\n .on('mouseout', function () {\r\n tooltip.html(``).style('visibility', 'hidden');\r\n d3.select(this).style(\"opacity\", 1);\r\n });\r\n\r\n\r\n //moueover tooltip\r\n const tooltip = select(\"body\").append(\"div\").attr(\"class\", \"d3-tooltip\");\r\n\r\n //--------------------------------------------------------------------------------\r\n // xAxis, yAxis\r\n\r\n // initialize axis\r\n var xAxis = d3.axisBottom().scale(xScale)\r\n var yAxis = d3.axisLeft().scale(yScale);\r\n\r\n // if xaxis contains too many numbers, consider show every other axis tick\r\n if ((barData.length > 40) & !isNaN(barData[0].key)) {\r\n xAxis = xAxis.tickFormat((interval,i) => {\r\n return i%2 !== 0 ? \" \": interval;})\r\n }\r\n\r\n // show axis\r\n let rotate = 0 // for rotating x axis text when text is too long\r\n if (max_key_length(barData) >= 10 & barData.length >= 10) {rotate=90};\r\n\r\n svg.append(\"g\")\r\n .attr(\"class\", \"axis\")\r\n \t\t.attr(\"id\", \"xAxis\")\r\n .attr(\"transform\", `translate (${margin.left}, ${HEIGHT - margin.bottom})`)\r\n .call(xAxis);\r\n\r\n // if the xaxis label need a rotation, do this\r\n if (rotate == 90) {\r\n svg.select(\"#xAxis\")\r\n .selectAll(\"text\")\r\n .attr(\"dx\", \"0.6em\")\r\n .attr(\"dy\", \"-0.6em\")\r\n .attr(\"text-anchor\", \"start\")\r\n .attr(\"transform\", `rotate(${rotate})`)\r\n }\r\n\r\n svg.append(\"g\")\r\n .attr(\"class\", \"axis\")\r\n .attr(\"transform\", `translate (${margin.left}, ${margin.top})`)\r\n .call(yAxis);\r\n\r\n \t//--------------------------------------------------------------------------------\r\n //Axis labels\r\n svg\r\n \t.append(\"text\")\r\n \t.attr('class', 'axis-label')\r\n .attr('y', 0 + HEIGHT / 2)\r\n .attr('x', 0 + margin.left / 2)\r\n \t.attr(\"dx\", \"-0.95em\")\r\n \t.text(toTitle(yAttribute));\r\n\r\n if (rotate == 90){\r\n null //do nothing\r\n } else {\r\n svg\r\n .append(\"text\")\r\n .attr('class', 'axis-label')\r\n .attr(\"y\", HEIGHT - margin.bottom)\r\n .attr(\"x\", 0 + WIDTH/2 + margin.left/2)\r\n .attr(\"dy\", \"1.5em\")\r\n .text(toTitle(xAttribute));\r\n }\r\n \t \t//--------------------------------------------------------------------------------\r\n \t// sorting\r\n \t// radio button calls sort function on click\r\n \td3.select(ref_radio)\r\n .selectAll(\"input\")\r\n .on(\"click\", sort)\r\n\r\n // sort when changing dropdown menu given the sorted button is already selected\r\n sort(sort_status)\r\n\r\n function change_data(new_data, duration, delay=0) {\r\n //change the axis generator\r\n xScale.domain(new_data.map(d => d.key));\r\n svg.select(\"#xAxis\")\r\n .transition().duration(duration).ease(d3.easeLinear)\r\n .call(xAxis);\r\n\r\n // change bars\r\n const bars = svg.selectAll(\"rect\").data(new_data, d => d.key)\r\n bars.transition().delay(delay).duration(duration).ease(d3.easeLinear)\r\n .attr(\"x\", (d, i) => xScale(d.key)+barAdjust)\r\n .attr(\"y\", d => yScale(d.value[yAttribute]))\r\n .attr(\"width\", xScale.bandwidth()-barAdjust*2)\r\n .attr(\"height\", d => innerHeight - yScale(d.value[yAttribute]))\r\n };\r\n\r\n // argument is optional, used when changing dropdown menu given the sorted button is already selected\r\n function sort(arg) {\r\n\r\n if (typeof arg == 'string') { // when changing dropdown menu given the sorted button is already selected\r\n var action = arg\r\n var duration = 0\r\n } else { // when no argument is passed into sort, get value from the radio button\r\n var action = d3.select(this).node().value;\r\n var duration = SORT_DURATION;\r\n }\r\n // console.log(action)\r\n\r\n if (action == \"height\"){\r\n const new_data = barData.slice().sort((a,b) => d3.ascending(b.value[yAttribute], a.value[yAttribute]));\r\n change_data(new_data, duration);\r\n sort_status = 'height';\r\n } else if (action == 'x') {\r\n // if the str is a number, compare the number, not the strings. If we can process the\r\n // data so that the key remains numeric data type in the transform function, we don't need this step\r\n if (barData[0].key.match(\"\\\\d+\")) {\r\n var new_data = barData.slice().sort((a,b) => d3.ascending(parseInt(a.key), parseInt(b.key)));\r\n } else {\r\n var new_data = barData.slice().sort((a,b) => d3.ascending(a.key, b.key));\r\n }\r\n change_data(new_data, duration)\r\n sort_status = 'x';\r\n }\r\n };\r\n\r\n};\r\n\r\n//Table\r\nconst Table = ({ barData, yAttribute, xAttribute, totalPopulation}) => {\r\n\r\n\r\n\r\n const xScale = d3\r\n .scaleBand()\r\n .domain(barData.map((d) => d.key))\r\n .range([0, innerWidth])\r\n .paddingInner([0.2]);\r\n\r\n const yScale = d3\r\n .scaleLinear()\r\n .domain([0, d3.max(barData.map((d) => d.value[yAttribute]))])\r\n .range([innerHeight, 0]);\r\n\r\n //create arrays of values that will fill table\r\n const count = barData.map((d) => d.value[yAttribute]); //count for each category\r\n const yTotal = d3.sum(count) //total number individuals\r\n const xLength = xScale.domain().length //number of categories for the givenn x attribute\r\n const pct = barData.map((d) => d.value[yAttribute]/yTotal * 100); //percent of total for each category\r\n\r\n\r\n let row1 = [];\r\n let rows = [];\r\n\r\n //Fill first row with table headings\r\n for (var i = 0; i < 1; i++){\r\n let rowID = `row${i}`\r\n let cell = []\r\n for (var idx = 0; idx < 1; idx++){\r\n let cellID = `cell${i}-${idx}`\r\n cell.push(<td key={cellID} id={cellID}>{toTitle(xAttribute)}</td>)\r\n }\r\n \tif(yAttribute == 'amount'){\r\n for (var idx = 1; idx < 2; idx++){\r\n \tlet cellID = `cell${i}-${idx}`\r\n \tcell.push(<td key={cellID} id={cellID}>Percent</td>)\r\n \t}\r\n }\r\n if(yAttribute == 'amount'){\r\n for (var idx = 2; idx < 3; idx++){\r\n \tlet cellID = `cell${i}-${idx}`\r\n \tcell.push(<td key={cellID} id={cellID}>Population</td>)\r\n }\r\n }else{\r\n for (var idx = 2; idx < 3; idx++){\r\n \tlet cellID = `cell${i}-${idx}`\r\n \t\tcell.push(<td key={cellID} id={cellID}>Years</td>)\r\n \t}\r\n }\r\n row1.push(<tr key={i} id={rowID}>{cell}</tr>)\r\n };\r\n\r\n //Fill table by column. Col 1 is each category for the given xattribute. Col 2 is the value for each category.\r\n //Col 3 is percent of total population for each category\r\n for (var i = 1; i < xLength + 1; i++){\r\n let rowID = `row${i}`\r\n let cell = []\r\n for (var idx = 0; idx < 1; idx++){\r\n let cellID = `cell${i}-${idx}`\r\n let entry = xScale.domain()[i-1]\r\n cell.push(<td key={cellID} id={cellID}>{entry}</td>)\r\n }\r\n \tif(yAttribute == 'amount'){\r\n for (var idx = 1; idx < 2; idx++){\r\n let cellID = `cell${i}-${idx}`\r\n let entry = pct[i-1].toFixed(2)\r\n cell.push(<td key={cellID} id={cellID}>{entry}%</td>)\r\n }\r\n }\r\n \tif(yAttribute == 'amount'){\r\n \tfor (var idx = 2; idx < 3; idx++){\r\n let cellID = `cell${i}-${idx}`\r\n \tlet entry = count[i-1].toFixed(0)\r\n \tcell.push(<td key={cellID} id={cellID}>{formatNumber(entry)}</td>)\r\n \t}\r\n }else{\r\n \tfor (var idx = 2; idx < 3; idx++){\r\n \tlet cellID = `cell${i}-${idx}`\r\n \tlet entry = count[i-1].toFixed(2)\r\n \tcell.push(<td key={cellID} id={cellID}>{formatNumber(entry)}</td>)\r\n \t}\r\n }\r\n\r\n rows.push(<tr key={i} id={rowID}>{cell}</tr>)\r\n };\r\n\r\n\r\n\r\n //create table element with rows\r\n const tableElement = (\r\n <table id=\"summary-table\">\r\n <thead>\r\n {row1}\r\n </thead>\r\n <tbody>\r\n {rows}\r\n </tbody>\r\n <caption>Total Number Under Custody: {formatNumber(totalPopulation)}</caption>\r\n </table>\r\n );\r\n\r\n\r\n//render table\r\n ReactDOM.render(tableElement, document.getElementById('table'));\r\n return <></>;\r\n};\r\n\r\nexport const Chart = ( {rawData} ) => {\r\n\r\n // create React hooks for controlling the grouped data we want to generate; also, setup the initial value\r\n const [xAttribute, setXAttribute] = useState('sex');\r\n const [yAttribute, setYAttribute] = useState('amount');\r\n\r\n // according to the current xAttr ibute, group by that attribute and compute the number of observations and the average age\r\n const barData = transformData(rawData, xAttribute)\r\n\r\n //count total entries\r\n const totalPopulation = rawData.length;\r\n\r\n console.log(barData)\r\n\r\n // map each column to { value: col, label: col } to feed into react Dropdown menu\r\n const xFields = Object.keys(rawData[0]).map(d => ({\"value\":d, \"label\":d}));\r\n\r\n console.log(xFields)\r\n\r\n const yFields = Object.keys(barData[0].value).map(d => ({\"value\":d, \"label\":d}));\r\n\r\n // return the title, the dropdown menus, and the barplot with axes\r\n\treturn(\r\n <>\r\n\r\n <h1 ref={d => SVG(d)}> </h1>\r\n\r\n <div className='menu-container'>\r\n <span className=\"dropdown-label\">X</span>\r\n <ReactDropdown\r\n options={xFields}\r\n value={xAttribute}\r\n onChange={({value, label}) => setXAttribute(value)}\r\n />\r\n <span className=\"dropdown-label\">Y</span>\r\n <ReactDropdown\r\n options={yFields}\r\n value={yAttribute}\r\n onChange={({value, label}) => setYAttribute(value)}\r\n />\r\n </div>\r\n\r\n\t\t\t<div id='radio_sort' ref={d => Bar(d, barData, yAttribute, xAttribute, totalPopulation)} class=\"control-group\">\r\n <label class=\"control control-radio\">\r\n Sort by Height\r\n <input className='radio' type=\"radio\" value=\"height\" name=\"sort\" />\r\n <div class=\"control_indicator\"></div>\r\n </label>\r\n <label class=\"control control-radio\">\r\n Sort by X Value\r\n <input className='radio' type=\"radio\" value=\"x\" name=\"sort\" />\r\n <div class=\"control_indicator\"></div>\r\n </label>\r\n </div>\r\n\r\n\r\n <Table barData={barData} yAttribute={yAttribute} xAttribute = {xAttribute} totalPopulation = {totalPopulation}/>\r\n\t\t</>\r\n\t);\r\n};\r\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\n\nimport { useJSON } from \"./useData\";\nimport { Chart } from \"./bar\";\n\nconst App = () => {\n const rawData = useJSON();\n\n if (!rawData) {\n return <h2>Loading...</h2>;\n }\n\n console.log(rawData);\n\n return (\n <>\n <Chart rawData={rawData} />\n </>\n );\n};\n\nconst rootElement = document.getElementById(\"root\");\nReactDOM.render(<App />, rootElement);"],"names":["const","let","nest","mean","useState","useEffect","json","select","new_data","cellID","rowID","cell","entry","React","ReactDOM"],"mappings":"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"}