Skip to content

Instantly share code, notes, and snippets.

@kamermans
Last active March 16, 2020 02:29
Show Gist options
  • Save kamermans/397488317c75b23414100d7e1316e96f to your computer and use it in GitHub Desktop.
Save kamermans/397488317c75b23414100d7e1316e96f to your computer and use it in GitHub Desktop.
COVID-19 Confirmed Cases by US County (from John's Hopkins Dataset)
# COVID-19 by US County
Colorado (20):
El Paso: 2
Denver: 6
Summit: 6
Douglas: 6
Oregon (37):
Washington: 23
Jackson: 3
Klamath: 2
Douglas: 1
Marion: 1
Umatilla: 7
Nevada (9):
Clark: 5
Washoe: 4
New York (255):
Ulster: 1
Westchester: 188
New York: 46
Nassau: 11
Rockland: 4
Saratoga: 4
Suffolk: 1
Pennsylvania (10):
Delaware: 3
Wayne: 3
Montgomery: 4
Connecticut (3):
Fairfield: 3
Hawaii (2):
Honolulu: 2
Oklahoma (2):
Tulsa: 2
Missouri (1):
St. Louis: 1
Wisconsin (33):
Dane: 33
Nebraska (36):
Douglas: 36
New Jersey (13):
Bergen: 12
Hudson: 1
Kentucky (3):
Fayette: 3
Virginia (2):
Fairfax: 2
Kansas (1):
Johnson: 1
Texas (57):
Montgomery: 0
Bexar: 31
Harris: 15
Fort Bend: 11
Arizona (52):
Maricopa: 48
Pinal: 4
Indiana (4):
Marion: 3
Hendricks: 1
Minnesota (3):
Ramsey: 3
Utah (2):
Davis: 2
District of Columbia (2):
District of Columbia: 2
Illinois (105):
Cook: 105
New Hampshire (17):
Grafton: 15
Rockingham: 2
Maryland (11):
Montgomery: 10
Harford: 1
Rhode Island (17):
Providence: 17
South Carolina (4):
Charleston: 2
Kershaw: 2
Vermont (1):
Washington: 1
Georgia (21):
Cobb: 2
Polk: 5
Fulton: 14
Tennessee (6):
Williamson: 4
Davidson: 1
Shelby: 1
Florida (35):
Volusia: 1
Hillsborough: 13
Sarasota: 7
Santa Rosa: 4
Broward: 4
Lee: 4
Manatee: 1
Okaloosa: 1
North Carolina (9):
Wake: 6
Chatham: 3
Massachusetts (75):
Norfolk: 13
Suffolk: 48
Middlesex: 10
Plymouth: 3
Berkshire: 1
Washington (528):
Spokane: 1
Snohomish: 116
Chelan: 15
Clark: 2
Jefferson: 2
Pierce: 5
King: 382
Grant: 4
Kittitas: 1
California (636):
Los Angeles: 97
Sacramento: 28
San Francisco: 22
Fresno: 1
Solano: 15
Placer: 21
Sonoma: 7
Santa Clara: 202
San Diego: 56
Humboldt: 17
San Mateo: 13
Yolo: 3
Alameda: 8
Madera: 2
San Benito: 70
Orange: 53
Contra Costa: 20
Riverside: 1
package main
import (
"encoding/csv"
"encoding/json"
"fmt"
"io"
"io/ioutil"
"log"
"net/http"
"strconv"
)
const (
statsURL = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Confirmed.csv"
fccURL = "https://geo.fcc.gov/api/census/block/find?latitude=%v&longitude=%v&format=json"
colState = 0
colCountry = 1
colLat = 2
colLon = 3
firstDataColumn = 4
)
type FCCData struct {
County FCCCounty
State FCCState
Status string
}
type FCCCounty struct {
Name string
}
type FCCState struct {
Code string
Name string
}
func LookupFCCData(lat, lon float64) *FCCData {
resp, err := http.Get(fmt.Sprintf(fccURL, lat, lon))
if err != nil {
panic(err)
}
defer resp.Body.Close()
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
out := new(FCCData)
err = json.Unmarshal(data, out)
if err != nil {
panic(err)
}
return out
}
func main() {
resp, err := http.Get(statsURL)
if err != nil {
panic(err)
}
defer resp.Body.Close()
r := csv.NewReader(resp.Body)
r.ReuseRecord = true
perStateCounty := map[string]map[string]int{}
perState := map[string]int{}
line := 0
for {
line++
record, err := r.Read()
if err == io.EOF {
break
}
if err != nil {
log.Fatal(err)
}
if line == 1 {
continue
}
if record[colCountry] != "US" {
continue
}
lat, err := strconv.ParseFloat(record[colLat], 64)
if err != nil {
panic(err)
}
lon, err := strconv.ParseFloat(record[colLon], 64)
if err != nil {
panic(err)
}
geo := LookupFCCData(lat, lon)
if geo.State.Name == "" {
continue
}
if _, ok := perState[geo.State.Name]; !ok {
perState[geo.State.Name] = 0
}
if _, ok := perStateCounty[geo.State.Name]; !ok {
perStateCounty[geo.State.Name] = map[string]int{}
}
if _, ok := perStateCounty[geo.State.Name][geo.County.Name]; !ok {
perStateCounty[geo.State.Name][geo.County.Name] = 0
}
for _, val := range record[firstDataColumn:] {
v, err := strconv.Atoi(val)
if err != nil {
panic(err)
}
perState[geo.State.Name] += v
perStateCounty[geo.State.Name][geo.County.Name] += v
}
}
fmt.Println("# COVID-19 by US County")
for state, perCounty := range perStateCounty {
fmt.Printf("%s (%v):\n", state, perState[state])
for county, v := range perCounty {
fmt.Printf(" %s: %v\n", county, v)
}
fmt.Println("")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment