data = d3.csv(`https://docs.google.com/spreadsheets/d/1pfawvp_5cxehn9PyCl9dWHZ9ZBaDMKZqRbXhMrRvpwo/gviz/tq?tqx=out:csv&sheet=Data`)
.then(data => {
return _.chain(data)
.map(d => {
const FIPS = d['County FIPS'].toString().padStart(5, 0)
const timeString = d['Time of occurrence (EST)']
const date = `11/3/2020 ${timeString} EST`
const electionData = _.find(allElectionsData, d => d.FIPSCode === FIPS)
const demoData = _.find(allDemographicsData, d => d.FIPSCode === FIPS)
if (!electionData || !demoData) return
const {repMargin, totalVotes} = electionData
const {B19301_001E, B02001_003E, B01003_001E} = demoData
const income = B19301_001E[demoYear]
const blackPop = B02001_003E[demoYear] / B01003_001E[demoYear]
const margin = repMargin[presYear] / totalVotes[presYear]
return {
state: d.State,
county: d.County,
FIPS,
description: d['Voting problem description'],
numPrecincts: +d['Precincts affected'] || 1,
url: d['Article URL'],
delay: +d['Delay duration (hours)'],
type: d.Type,
time: new Date(date),
date,
margin, income, blackPop,
}
}).filter().value()
})