Skip to content

Instantly share code, notes, and snippets.

@wcharczuk
Created December 4, 2019 01:29
Show Gist options
  • Save wcharczuk/be197cbfb174d2bcf59df25756444c5b to your computer and use it in GitHub Desktop.
Save wcharczuk/be197cbfb174d2bcf59df25756444c5b to your computer and use it in GitHub Desktop.
package main
import (
"encoding/csv"
"fmt"
"io"
"log"
"os"
"strconv"
)
var fields = map[string]int{
"borough": 0,
"block": 1,
"lot": 2,
"cd": 3,
"ct2010": 4,
"cb2010": 5,
"schooldist": 6,
"council": 7,
"zipcode": 8,
"firecomp": 9,
"policeprct": 10,
"healtharea": 11,
"sanitboro": 12,
"sanitsub": 13,
"address": 14,
"zonedist1": 15,
"zonedist2": 16,
"zonedist3": 17,
"zonedist4": 18,
"overlay1": 19,
"overlay2": 20,
"spdist1": 21,
"spdist2": 22,
"spdist3": 23,
"ltdheight": 24,
"splitzone": 25,
"bldgclass": 26,
"landuse": 27,
"easements": 28,
"ownertype": 29,
"ownername": 30,
"lotarea": 31,
"bldgarea": 32,
"comarea": 33,
"resarea": 34,
"officearea": 35,
"retailarea": 36,
"garagearea": 37,
"strgearea": 38,
"factryarea": 39,
"otherarea": 40,
"areasource": 41,
"numbldgs": 42,
"numfloors": 43,
"unitsres": 44,
"unitstotal": 45,
"lotfront": 46,
"lotdepth": 47,
"bldgfront": 48,
"bldgdepth": 49,
"ext": 50,
"proxcode": 51,
"irrlotcode": 52,
"lottype": 53,
"bsmtcode": 54,
"assessland": 55,
"assesstot": 56,
"exempttot": 57,
"yearbuilt": 58,
"yearalter1": 59,
"yearalter2": 60,
"histdist": 61,
"landmark": 62,
"builtfar": 63,
"residfar": 64,
"commfar": 65,
"facilfar": 66,
"borocode": 67,
"bbl": 68,
"condono": 69,
"tract2010": 70,
"xcoord": 71,
"ycoord": 72,
"zonemap": 73,
"zmcode": 74,
"sanborn": 75,
"taxmap": 76,
"edesignum": 77,
"appbbl": 78,
"appdate": 79,
"mappluto_f": 80,
"plutomapid": 81,
"version": 82,
"sanitdistrict": 83,
"healthcenterdistrict": 84,
"firm07_flag": 85,
"pfirm15_flag": 86,
"rpaddate": 87,
"dcasdate": 88,
"zoningdate": 89,
"landmkdate": 90,
"basempdate": 91,
"masdate": 92,
"polidate": 93,
"edesigdate": 94,
"geom": 95,
"dcpedited": 96,
}
func main() {
f, err := os.Open("pluto_19v2.csv")
if err != nil {
log.Fatal(err)
}
defer f.Close()
reader := csv.NewReader(f)
var totalFloors float64
var totalRecords float64
var floors float64
var record []string
var zoneMap string
for {
record, err = reader.Read()
if err != nil {
if err == io.EOF {
break
}
log.Fatal(err)
}
if record[fields["borough"]] != "MN" {
continue
}
zoneMap = record[fields["zonemap"]]
switch zoneMap {
case "8c", "8b", "8d", "12a", "12b", "12c", "12d":
default:
continue
}
rawFloors := record[fields["numfloors"]]
if rawFloors == "" {
continue
}
floors, err = strconv.ParseFloat(rawFloors, 64)
if err != nil {
fmt.Printf("%#v\n", record)
log.Fatal(err)
}
totalFloors += floors
totalRecords++
}
fmt.Printf("average number of floors: %.2f\n", totalFloors/totalRecords)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment