├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── public ├── data │ ├── county-median-incomes.csv │ ├── h1bs-2012-2016-shortened.csv │ ├── h1bs-2012-2016.csv │ ├── us-county-names-normalized.csv │ ├── us-state-names.tsv │ └── us.json ├── favicon.ico ├── index.html └── thumbnail.png └── src ├── App.css ├── App.js ├── App.test.js ├── DataHandling.js ├── assets └── preloading.png ├── components ├── Controls │ ├── ControlRow.js │ ├── Toggle.js │ └── index.js ├── CountyMap │ ├── County.js │ ├── CountyMap.js │ └── index.js ├── D3blackbox.js ├── Histogram │ ├── Axis.js │ ├── Histogram.js │ └── index.js ├── MedianLine.js ├── Meta │ ├── Description.js │ ├── GraphDescription.js │ ├── Title.js │ ├── USStatesMap.js │ └── index.js └── Preloader.js ├── index.css ├── index.js └── logo.svg /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | node_modules 5 | 6 | # testing 7 | coverage 8 | 9 | # production 10 | build 11 | 12 | # misc 13 | .DS_Store 14 | .env 15 | npm-debug.log 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This project was bootstrapped with [Create React App](https://github.com/facebookincubator/create-react-app). 2 | 3 | # React+D3v4 Step by Step Example 4 | 5 | Follow along section by section. 6 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-d3js-step-by-step", 3 | "version": "0.1.0", 4 | "private": true, 5 | "devDependencies": { 6 | "react-scripts": "1.0.13", 7 | "gh-pages": "^0.12.0" 8 | }, 9 | "dependencies": { 10 | "bootstrap": "^3.3.7", 11 | "d3": "^4.4.0", 12 | "lodash": "^4.17.2", 13 | "react": "^15.4.1", 14 | "react-bootstrap": "^0.30.7", 15 | "react-dom": "^15.4.1", 16 | "string": "^3.3.3", 17 | "topojson": "^2.2.0" 18 | }, 19 | "homepage": "https://swizec.github.io/react-d3js-step-by-step", 20 | "scripts": { 21 | "start": "react-scripts start", 22 | "build": "react-scripts build", 23 | "test": "react-scripts test --env=jsdom", 24 | "eject": "react-scripts eject", 25 | "deploy": "npm run build && gh-pages -d build" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /public/data/us-county-names-normalized.csv: -------------------------------------------------------------------------------- 1 | id,name 2 | 1000,Alabama1 3 | 1001,Autauga1 4 | 1003,Baldwin1 5 | 1005,Barbour1 6 | 1007,Bibb1 7 | 1009,Blount1 8 | 1011,Bullock1 9 | 1013,Butler1 10 | 1015,Calhoun1 11 | 1017,Chambers1 12 | 1019,Cherokee1 13 | 1021,Chilton1 14 | 1023,Choctaw1 15 | 1025,Clarke1 16 | 1027,Clay1 17 | 1029,Cleburne1 18 | 1031,Coffee1 19 | 1033,Colbert1 20 | 1035,Conecuh1 21 | 1037,Coosa1 22 | 1039,Covington1 23 | 1041,Crenshaw1 24 | 1043,Cullman1 25 | 1045,Dale1 26 | 1047,Dallas1 27 | 1049,De Kalb1 28 | 1051,Elmore1 29 | 1053,Escambia1 30 | 1055,Etowah1 31 | 1057,Fayette1 32 | 1059,Franklin1 33 | 1061,Geneva1 34 | 1063,Greene1 35 | 1065,Hale1 36 | 1067,Henry1 37 | 1069,Houston1 38 | 1071,Jackson1 39 | 1073,Jefferson1 40 | 1075,Lamar1 41 | 1077,Lauderdale1 42 | 1079,Lawrence1 43 | 1081,Lee1 44 | 1083,Limestone1 45 | 1085,Lowndes1 46 | 1087,Macon1 47 | 1089,Madison1 48 | 1091,Marengo1 49 | 1093,Marion1 50 | 1095,Marshall1 51 | 1097,Mobile1 52 | 1099,Monroe1 53 | 1101,Montgomery1 54 | 1103,Morgan1 55 | 1105,Perry1 56 | 1107,Pickens1 57 | 1109,Pike1 58 | 1111,Randolph1 59 | 1113,Russell1 60 | 1115,St. Clair1 61 | 1117,Shelby1 62 | 1119,Sumter1 63 | 1121,Talladega1 64 | 1123,Tallapoosa1 65 | 1125,Tuscaloosa1 66 | 1127,Walker1 67 | 1129,Washington1 68 | 1131,Wilcox1 69 | 1133,Winston1 70 | 2000,Alaska1 71 | 2013,Aleutians East1 72 | 2016,Aleutians West1 73 | 2020,Anchorage1 74 | 2050,Bethel1 75 | 2060,Bristol Bay1 76 | 2068,Denali1 77 | 2070,Dillingham1 78 | 2090,Fairbanks North Star1 79 | 2100,Haines1 80 | 2110,Juneau1 81 | 2122,Kenai Peninsula1 82 | 2130,Ketchikan Gateway1 83 | 2150,Kodiak Island1 84 | 2164,Lake and Peninsula1 85 | 2170,Matanuska-Susitna1 86 | 2180,Nome1 87 | 2185,North Slope1 88 | 2188,Northwest Arctic1 89 | 2201,Prince of Wales-Outer Ketchikan1 90 | 2220,Sitka1 91 | 2232,Skagway-Hoonah-Angoon1 92 | 2240,Southeast Fairbanks1 93 | 2261,Valdez-Cordova1 94 | 2270,Wade Hampton1 95 | 2280,Wrangell-Petersburg1 96 | 2282,Yakutat1 97 | 2290,Yukon-Koyukuk1 98 | 4000,Arizona1 99 | 4001,Apache1 100 | 4003,Cochise1 101 | 4005,Coconino1 102 | 4007,Gila1 103 | 4009,Graham1 104 | 4011,Greenlee1 105 | 4012,La Paz1 106 | 4013,Maricopa1 107 | 4015,Mohave1 108 | 4017,Navajo1 109 | 4019,Pima1 110 | 4021,Pinal1 111 | 4023,Santa Cruz1 112 | 4025,Yavapai1 113 | 4027,Yuma1 114 | 5000,Arkansas1 115 | 5001,Arkansas2 116 | 5003,Ashley1 117 | 5005,Baxter1 118 | 5007,Benton1 119 | 5009,Boone1 120 | 5011,Bradley1 121 | 5013,Calhoun2 122 | 5015,Carroll1 123 | 5017,Chicot1 124 | 5019,Clark1 125 | 5021,Clay2 126 | 5023,Cleburne2 127 | 5025,Cleveland1 128 | 5027,Columbia1 129 | 5029,Conway1 130 | 5031,Craighead1 131 | 5033,Crawford1 132 | 5035,Crittenden1 133 | 5037,Cross1 134 | 5039,Dallas2 135 | 5041,Desha1 136 | 5043,Drew1 137 | 5045,Faulkner1 138 | 5047,Franklin2 139 | 5049,Fulton1 140 | 5051,Garland1 141 | 5053,Grant1 142 | 5055,Greene2 143 | 5057,Hempstead1 144 | 5059,Hot Spring1 145 | 5061,Howard1 146 | 5063,Independence1 147 | 5065,Izard1 148 | 5067,Jackson2 149 | 5069,Jefferson2 150 | 5071,Johnson1 151 | 5073,Lafayette1 152 | 5075,Lawrence2 153 | 5077,Lee2 154 | 5079,Lincoln1 155 | 5081,Little River1 156 | 5083,Logan1 157 | 5085,Lonoke1 158 | 5087,Madison2 159 | 5089,Marion2 160 | 5091,Miller1 161 | 5093,Mississippi1 162 | 5095,Monroe2 163 | 5097,Montgomery2 164 | 5099,Nevada1 165 | 5101,Newton1 166 | 5103,Ouachita1 167 | 5105,Perry2 168 | 5107,Phillips1 169 | 5109,Pike2 170 | 5111,Poinsett1 171 | 5113,Polk1 172 | 5115,Pope1 173 | 5117,Prairie1 174 | 5119,Pulaski1 175 | 5121,Randolph2 176 | 5123,St. Francis1 177 | 5125,Saline1 178 | 5127,Scott1 179 | 5129,Searcy1 180 | 5131,Sebastian1 181 | 5133,Sevier1 182 | 5135,Sharp1 183 | 5137,Stone1 184 | 5139,Union1 185 | 5141,Van Buren1 186 | 5143,Washington2 187 | 5145,White1 188 | 5147,Woodruff1 189 | 5149,Yell1 190 | 6000,California1 191 | 6001,Alameda1 192 | 6003,Alpine1 193 | 6005,Amador1 194 | 6007,Butte1 195 | 6009,Calaveras1 196 | 6011,Colusa1 197 | 6013,Contra Costa1 198 | 6015,Del Norte1 199 | 6017,El Dorado1 200 | 6019,Fresno1 201 | 6021,Glenn1 202 | 6023,Humboldt1 203 | 6025,Imperial1 204 | 6027,Inyo1 205 | 6029,Kern1 206 | 6031,Kings1 207 | 6033,Lake1 208 | 6035,Lassen1 209 | 6037,Los Angeles1 210 | 6039,Madera1 211 | 6041,Marin1 212 | 6043,Mariposa1 213 | 6045,Mendocino1 214 | 6047,Merced1 215 | 6049,Modoc1 216 | 6051,Mono1 217 | 6053,Monterey1 218 | 6055,Napa1 219 | 6057,Nevada2 220 | 6059,Orange1 221 | 6061,Placer1 222 | 6063,Plumas1 223 | 6065,Riverside1 224 | 6067,Sacramento1 225 | 6069,San Benito1 226 | 6071,San Bernardino1 227 | 6073,San Diego1 228 | 6075,San Francisco1 229 | 6077,San Joaquin1 230 | 6079,San Luis Obispo1 231 | 6081,San Mateo1 232 | 6083,Santa Barbara1 233 | 6085,Santa Clara1 234 | 6087,Santa Cruz2 235 | 6089,Shasta1 236 | 6091,Sierra1 237 | 6093,Siskiyou1 238 | 6095,Solano1 239 | 6097,Sonoma1 240 | 6099,Stanislaus1 241 | 6101,Sutter1 242 | 6103,Tehama1 243 | 6105,Trinity1 244 | 6107,Tulare1 245 | 6109,Tuolumne1 246 | 6111,Ventura1 247 | 6113,Yolo1 248 | 6115,Yuba1 249 | 8000,Colorado1 250 | 8001,Adams1 251 | 8003,Alamosa1 252 | 8005,Arapahoe1 253 | 8007,Archuleta1 254 | 8009,Baca1 255 | 8011,Bent1 256 | 8013,Boulder1 257 | 8015,Chaffee1 258 | 8017,Cheyenne1 259 | 8019,Clear Creek1 260 | 8021,Conejos1 261 | 8023,Costilla1 262 | 8025,Crowley1 263 | 8027,Custer1 264 | 8029,Delta1 265 | 8031,Denver1 266 | 8033,Dolores1 267 | 8035,Douglas1 268 | 8037,Eagle1 269 | 8039,Elbert1 270 | 8041,El Paso1 271 | 8043,Fremont1 272 | 8045,Garfield1 273 | 8047,Gilpin1 274 | 8049,Grand1 275 | 8051,Gunnison1 276 | 8053,Hinsdale1 277 | 8055,Huerfano1 278 | 8057,Jackson3 279 | 8059,Jefferson3 280 | 8061,Kiowa1 281 | 8063,Kit Carson1 282 | 8065,Lake2 283 | 8067,La Plata1 284 | 8069,Larimer1 285 | 8071,Las Animas1 286 | 8073,Lincoln2 287 | 8075,Logan2 288 | 8077,Mesa1 289 | 8079,Mineral1 290 | 8081,Moffat1 291 | 8083,Montezuma1 292 | 8085,Montrose1 293 | 8087,Morgan2 294 | 8089,Otero1 295 | 8091,Ouray1 296 | 8093,Park1 297 | 8095,Phillips2 298 | 8097,Pitkin1 299 | 8099,Prowers1 300 | 8101,Pueblo1 301 | 8103,Rio Blanco1 302 | 8105,Rio Grande1 303 | 8107,Routt1 304 | 8109,Saguache1 305 | 8111,San Juan1 306 | 8113,San Miguel1 307 | 8115,Sedgwick1 308 | 8117,Summit1 309 | 8119,Teller1 310 | 8121,Washington3 311 | 8123,Weld1 312 | 8125,Yuma2 313 | 9000,Connecticut1 314 | 9001,Fairfield1 315 | 9003,Hartford1 316 | 9005,Litchfield1 317 | 9007,Middlesex1 318 | 9009,New Haven1 319 | 9011,New London1 320 | 9013,Tolland1 321 | 9015,Windham1 322 | 10000,Delaware1 323 | 10001,Kent1 324 | 10003,New Castle1 325 | 10005,Sussex1 326 | 11000,District of Columbia1 327 | 11001,District of Columbia2 328 | 12000,Florida1 329 | 12001,Alachua1 330 | 12003,Baker1 331 | 12005,Bay1 332 | 12007,Bradford1 333 | 12009,Brevard1 334 | 12011,Broward1 335 | 12013,Calhoun3 336 | 12015,Charlotte1 337 | 12017,Citrus1 338 | 12019,Clay3 339 | 12021,Collier1 340 | 12023,Columbia2 341 | 12025,Dade1 342 | 12027,De Soto1 343 | 12029,Dixie1 344 | 12031,Duval1 345 | 12033,Escambia2 346 | 12035,Flagler1 347 | 12037,Franklin3 348 | 12039,Gadsden1 349 | 12041,Gilchrist1 350 | 12043,Glades1 351 | 12045,Gulf1 352 | 12047,Hamilton1 353 | 12049,Hardee1 354 | 12051,Hendry1 355 | 12053,Hernando1 356 | 12055,Highlands1 357 | 12057,Hillsborough1 358 | 12059,Holmes1 359 | 12061,Indian River1 360 | 12063,Jackson4 361 | 12065,Jefferson4 362 | 12067,Lafayette2 363 | 12069,Lake3 364 | 12071,Lee3 365 | 12073,Leon1 366 | 12075,Levy1 367 | 12077,Liberty1 368 | 12079,Madison3 369 | 12081,Manatee1 370 | 12083,Marion3 371 | 12085,Martin1 372 | 12087,Monroe3 373 | 12089,Nassau1 374 | 12091,Okaloosa1 375 | 12093,Okeechobee1 376 | 12095,Orange2 377 | 12097,Osceola1 378 | 12099,Palm Beach1 379 | 12101,Pasco1 380 | 12103,Pinellas1 381 | 12105,Polk2 382 | 12107,Putnam1 383 | 12109,St. Johns1 384 | 12111,St. Lucie1 385 | 12113,Santa Rosa1 386 | 12115,Sarasota1 387 | 12117,Seminole1 388 | 12119,Sumter2 389 | 12121,Suwannee1 390 | 12123,Taylor1 391 | 12125,Union2 392 | 12127,Volusia1 393 | 12129,Wakulla1 394 | 12131,Walton1 395 | 12133,Washington4 396 | 13000,Georgia1 397 | 13001,Appling1 398 | 13003,Atkinson1 399 | 13005,Bacon1 400 | 13007,Baker2 401 | 13009,Baldwin2 402 | 13011,Banks1 403 | 13013,Barrow1 404 | 13015,Bartow1 405 | 13017,Ben Hill1 406 | 13019,Berrien1 407 | 13021,Bibb2 408 | 13023,Bleckley1 409 | 13025,Brantley1 410 | 13027,Brooks1 411 | 13029,Bryan1 412 | 13031,Bulloch1 413 | 13033,Burke1 414 | 13035,Butts1 415 | 13037,Calhoun4 416 | 13039,Camden1 417 | 13043,Candler1 418 | 13045,Carroll2 419 | 13047,Catoosa1 420 | 13049,Charlton1 421 | 13051,Chatham1 422 | 13053,Chattahoochee1 423 | 13055,Chattooga1 424 | 13057,Cherokee2 425 | 13059,Clarke2 426 | 13061,Clay4 427 | 13063,Clayton1 428 | 13065,Clinch1 429 | 13067,Cobb1 430 | 13069,Coffee2 431 | 13071,Colquitt1 432 | 13073,Columbia3 433 | 13075,Cook1 434 | 13077,Coweta1 435 | 13079,Crawford2 436 | 13081,Crisp1 437 | 13083,Dade2 438 | 13085,Dawson1 439 | 13087,Decatur1 440 | 13089,De Kalb2 441 | 13091,Dodge1 442 | 13093,Dooly1 443 | 13095,Dougherty1 444 | 13097,Douglas2 445 | 13099,Early1 446 | 13101,Echols1 447 | 13103,Effingham1 448 | 13105,Elbert2 449 | 13107,Emanuel1 450 | 13109,Evans1 451 | 13111,Fannin1 452 | 13113,Fayette2 453 | 13115,Floyd1 454 | 13117,Forsyth1 455 | 13119,Franklin4 456 | 13121,Fulton2 457 | 13123,Gilmer1 458 | 13125,Glascock1 459 | 13127,Glynn1 460 | 13129,Gordon1 461 | 13131,Grady1 462 | 13133,Greene3 463 | 13135,Gwinnett1 464 | 13137,Habersham1 465 | 13139,Hall1 466 | 13141,Hancock1 467 | 13143,Haralson1 468 | 13145,Harris1 469 | 13147,Hart1 470 | 13149,Heard1 471 | 13151,Henry2 472 | 13153,Houston2 473 | 13155,Irwin1 474 | 13157,Jackson5 475 | 13159,Jasper1 476 | 13161,Jeff Davis1 477 | 13163,Jefferson5 478 | 13165,Jenkins1 479 | 13167,Johnson2 480 | 13169,Jones1 481 | 13171,Lamar2 482 | 13173,Lanier1 483 | 13175,Laurens1 484 | 13177,Lee4 485 | 13179,Liberty2 486 | 13181,Lincoln3 487 | 13183,Long1 488 | 13185,Lowndes2 489 | 13187,Lumpkin1 490 | 13189,McDuffie1 491 | 13191,McIntosh1 492 | 13193,Macon2 493 | 13195,Madison4 494 | 13197,Marion4 495 | 13199,Meriwether1 496 | 13201,Miller2 497 | 13205,Mitchell1 498 | 13207,Monroe4 499 | 13209,Montgomery3 500 | 13211,Morgan3 501 | 13213,Murray1 502 | 13215,Muscogee1 503 | 13217,Newton2 504 | 13219,Oconee1 505 | 13221,Oglethorpe1 506 | 13223,Paulding1 507 | 13225,Peach1 508 | 13227,Pickens2 509 | 13229,Pierce1 510 | 13231,Pike3 511 | 13233,Polk3 512 | 13235,Pulaski2 513 | 13237,Putnam2 514 | 13239,Quitman1 515 | 13241,Rabun1 516 | 13243,Randolph3 517 | 13245,Richmond1 518 | 13247,Rockdale1 519 | 13249,Schley1 520 | 13251,Screven1 521 | 13253,Seminole2 522 | 13255,Spalding1 523 | 13257,Stephens1 524 | 13259,Stewart1 525 | 13261,Sumter3 526 | 13263,Talbot1 527 | 13265,Taliaferro1 528 | 13267,Tattnall1 529 | 13269,Taylor2 530 | 13271,Telfair1 531 | 13273,Terrell1 532 | 13275,Thomas1 533 | 13277,Tift1 534 | 13279,Toombs1 535 | 13281,Towns1 536 | 13283,Treutlen1 537 | 13285,Troup1 538 | 13287,Turner1 539 | 13289,Twiggs1 540 | 13291,Union3 541 | 13293,Upson1 542 | 13295,Walker2 543 | 13297,Walton2 544 | 13299,Ware1 545 | 13301,Warren1 546 | 13303,Washington5 547 | 13305,Wayne1 548 | 13307,Webster1 549 | 13309,Wheeler1 550 | 13311,White2 551 | 13313,Whitfield1 552 | 13315,Wilcox2 553 | 13317,Wilkes1 554 | 13319,Wilkinson1 555 | 13321,Worth1 556 | 15000,Hawaii1 557 | 15001,Hawaii2 558 | 15003,Honolulu1 559 | 15005,Kalawao1 560 | 15007,Kauai1 561 | 15009,Maui1 562 | 16000,Idaho1 563 | 16001,Ada1 564 | 16003,Adams2 565 | 16005,Bannock1 566 | 16007,Bear Lake1 567 | 16009,Benewah1 568 | 16011,Bingham1 569 | 16013,Blaine1 570 | 16015,Boise1 571 | 16017,Bonner1 572 | 16019,Bonneville1 573 | 16021,Boundary1 574 | 16023,Butte2 575 | 16025,Camas1 576 | 16027,Canyon1 577 | 16029,Caribou1 578 | 16031,Cassia1 579 | 16033,Clark2 580 | 16035,Clearwater1 581 | 16037,Custer2 582 | 16039,Elmore2 583 | 16041,Franklin5 584 | 16043,Fremont2 585 | 16045,Gem1 586 | 16047,Gooding1 587 | 16049,Idaho2 588 | 16051,Jefferson6 589 | 16053,Jerome1 590 | 16055,Kootenai1 591 | 16057,Latah1 592 | 16059,Lemhi1 593 | 16061,Lewis1 594 | 16063,Lincoln4 595 | 16065,Madison5 596 | 16067,Minidoka1 597 | 16069,Nez Perce1 598 | 16071,Oneida1 599 | 16073,Owyhee1 600 | 16075,Payette1 601 | 16077,Power1 602 | 16079,Shoshone1 603 | 16081,Teton1 604 | 16083,Twin Falls1 605 | 16085,Valley1 606 | 16087,Washington6 607 | 17000,Illinois1 608 | 17001,Adams3 609 | 17003,Alexander1 610 | 17005,Bond1 611 | 17007,Boone2 612 | 17009,Brown1 613 | 17011,Bureau1 614 | 17013,Calhoun5 615 | 17015,Carroll3 616 | 17017,Cass1 617 | 17019,Champaign1 618 | 17021,Christian1 619 | 17023,Clark3 620 | 17025,Clay5 621 | 17027,Clinton1 622 | 17029,Coles1 623 | 17031,Cook2 624 | 17033,Crawford3 625 | 17035,Cumberland1 626 | 17037,DeKalb1 627 | 17039,De Witt1 628 | 17041,Douglas3 629 | 17043,DuPage1 630 | 17045,Edgar1 631 | 17047,Edwards1 632 | 17049,Effingham2 633 | 17051,Fayette3 634 | 17053,Ford1 635 | 17055,Franklin6 636 | 17057,Fulton3 637 | 17059,Gallatin1 638 | 17061,Greene4 639 | 17063,Grundy1 640 | 17065,Hamilton2 641 | 17067,Hancock2 642 | 17069,Hardin1 643 | 17071,Henderson1 644 | 17073,Henry3 645 | 17075,Iroquois1 646 | 17077,Jackson6 647 | 17079,Jasper2 648 | 17081,Jefferson7 649 | 17083,Jersey1 650 | 17085,Jo Daviess1 651 | 17087,Johnson3 652 | 17089,Kane1 653 | 17091,Kankakee1 654 | 17093,Kendall1 655 | 17095,Knox1 656 | 17097,Lake4 657 | 17099,La Salle1 658 | 17101,Lawrence3 659 | 17103,Lee5 660 | 17105,Livingston1 661 | 17107,Logan3 662 | 17109,McDonough1 663 | 17111,McHenry1 664 | 17113,McLean1 665 | 17115,Macon3 666 | 17117,Macoupin1 667 | 17119,Madison6 668 | 17121,Marion5 669 | 17123,Marshall2 670 | 17125,Mason1 671 | 17127,Massac1 672 | 17129,Menard1 673 | 17131,Mercer1 674 | 17133,Monroe5 675 | 17135,Montgomery4 676 | 17137,Morgan4 677 | 17139,Moultrie1 678 | 17141,Ogle1 679 | 17143,Peoria1 680 | 17145,Perry3 681 | 17147,Piatt1 682 | 17149,Pike4 683 | 17151,Pope2 684 | 17153,Pulaski3 685 | 17155,Putnam3 686 | 17157,Randolph4 687 | 17159,Richland1 688 | 17161,Rock Island1 689 | 17163,St. Clair2 690 | 17165,Saline2 691 | 17167,Sangamon1 692 | 17169,Schuyler1 693 | 17171,Scott2 694 | 17173,Shelby2 695 | 17175,Stark1 696 | 17177,Stephenson1 697 | 17179,Tazewell1 698 | 17181,Union4 699 | 17183,Vermilion1 700 | 17185,Wabash1 701 | 17187,Warren2 702 | 17189,Washington7 703 | 17191,Wayne2 704 | 17193,White3 705 | 17195,Whiteside1 706 | 17197,Will1 707 | 17199,Williamson1 708 | 17201,Winnebago1 709 | 17203,Woodford1 710 | 18000,Indiana1 711 | 18001,Adams4 712 | 18003,Allen1 713 | 18005,Bartholomew1 714 | 18007,Benton2 715 | 18009,Blackford1 716 | 18011,Boone3 717 | 18013,Brown2 718 | 18015,Carroll4 719 | 18017,Cass2 720 | 18019,Clark4 721 | 18021,Clay6 722 | 18023,Clinton2 723 | 18025,Crawford4 724 | 18027,Daviess1 725 | 18029,Dearborn1 726 | 18031,Decatur2 727 | 18033,De Kalb3 728 | 18035,Delaware2 729 | 18037,Dubois1 730 | 18039,Elkhart1 731 | 18041,Fayette4 732 | 18043,Floyd2 733 | 18045,Fountain1 734 | 18047,Franklin7 735 | 18049,Fulton4 736 | 18051,Gibson1 737 | 18053,Grant2 738 | 18055,Greene5 739 | 18057,Hamilton3 740 | 18059,Hancock3 741 | 18061,Harrison1 742 | 18063,Hendricks1 743 | 18065,Henry4 744 | 18067,Howard2 745 | 18069,Huntington1 746 | 18071,Jackson7 747 | 18073,Jasper3 748 | 18075,Jay1 749 | 18077,Jefferson8 750 | 18079,Jennings1 751 | 18081,Johnson4 752 | 18083,Knox2 753 | 18085,Kosciusko1 754 | 18087,Lagrange1 755 | 18089,Lake5 756 | 18091,La Porte1 757 | 18093,Lawrence4 758 | 18095,Madison7 759 | 18097,Marion6 760 | 18099,Marshall3 761 | 18101,Martin2 762 | 18103,Miami1 763 | 18105,Monroe6 764 | 18107,Montgomery5 765 | 18109,Morgan5 766 | 18111,Newton3 767 | 18113,Noble1 768 | 18115,Ohio1 769 | 18117,Orange3 770 | 18119,Owen1 771 | 18121,Parke1 772 | 18123,Perry4 773 | 18125,Pike5 774 | 18127,Porter1 775 | 18129,Posey1 776 | 18131,Pulaski4 777 | 18133,Putnam4 778 | 18135,Randolph5 779 | 18137,Ripley1 780 | 18139,Rush1 781 | 18141,St. Joseph1 782 | 18143,Scott3 783 | 18145,Shelby3 784 | 18147,Spencer1 785 | 18149,Starke1 786 | 18151,Steuben1 787 | 18153,Sullivan1 788 | 18155,Switzerland1 789 | 18157,Tippecanoe1 790 | 18159,Tipton1 791 | 18161,Union5 792 | 18163,Vanderburgh1 793 | 18165,Vermillion1 794 | 18167,Vigo1 795 | 18169,Wabash2 796 | 18171,Warren3 797 | 18173,Warrick1 798 | 18175,Washington8 799 | 18177,Wayne3 800 | 18179,Wells1 801 | 18181,White4 802 | 18183,Whitley1 803 | 19000,Iowa1 804 | 19001,Adair1 805 | 19003,Adams5 806 | 19005,Allamakee1 807 | 19007,Appanoose1 808 | 19009,Audubon1 809 | 19011,Benton3 810 | 19013,Black Hawk1 811 | 19015,Boone4 812 | 19017,Bremer1 813 | 19019,Buchanan1 814 | 19021,Buena Vista1 815 | 19023,Butler2 816 | 19025,Calhoun6 817 | 19027,Carroll5 818 | 19029,Cass3 819 | 19031,Cedar1 820 | 19033,Cerro Gordo1 821 | 19035,Cherokee3 822 | 19037,Chickasaw1 823 | 19039,Clarke3 824 | 19041,Clay7 825 | 19043,Clayton2 826 | 19045,Clinton3 827 | 19047,Crawford5 828 | 19049,Dallas3 829 | 19051,Davis1 830 | 19053,Decatur3 831 | 19055,Delaware3 832 | 19057,Des Moines1 833 | 19059,Dickinson1 834 | 19061,Dubuque1 835 | 19063,Emmet1 836 | 19065,Fayette5 837 | 19067,Floyd3 838 | 19069,Franklin8 839 | 19071,Fremont3 840 | 19073,Greene6 841 | 19075,Grundy2 842 | 19077,Guthrie1 843 | 19079,Hamilton4 844 | 19081,Hancock4 845 | 19083,Hardin2 846 | 19085,Harrison2 847 | 19087,Henry5 848 | 19089,Howard3 849 | 19091,Humboldt2 850 | 19093,Ida1 851 | 19095,Iowa2 852 | 19097,Jackson8 853 | 19099,Jasper4 854 | 19101,Jefferson9 855 | 19103,Johnson5 856 | 19105,Jones2 857 | 19107,Keokuk1 858 | 19109,Kossuth1 859 | 19111,Lee6 860 | 19113,Linn1 861 | 19115,Louisa1 862 | 19117,Lucas1 863 | 19119,Lyon1 864 | 19121,Madison8 865 | 19123,Mahaska1 866 | 19125,Marion7 867 | 19127,Marshall4 868 | 19129,Mills1 869 | 19131,Mitchell2 870 | 19133,Monona1 871 | 19135,Monroe7 872 | 19137,Montgomery6 873 | 19139,Muscatine1 874 | 19141,O'Brien1 875 | 19143,Osceola2 876 | 19145,Page1 877 | 19147,Palo Alto1 878 | 19149,Plymouth1 879 | 19151,Pocahontas1 880 | 19153,Polk4 881 | 19155,Pottawattamie1 882 | 19157,Poweshiek1 883 | 19159,Ringgold1 884 | 19161,Sac1 885 | 19163,Scott4 886 | 19165,Shelby4 887 | 19167,Sioux1 888 | 19169,Story1 889 | 19171,Tama1 890 | 19173,Taylor3 891 | 19175,Union6 892 | 19177,Van Buren2 893 | 19179,Wapello1 894 | 19181,Warren4 895 | 19183,Washington9 896 | 19185,Wayne4 897 | 19187,Webster2 898 | 19189,Winnebago2 899 | 19191,Winneshiek1 900 | 19193,Woodbury1 901 | 19195,Worth2 902 | 19197,Wright1 903 | 20000,Kansas1 904 | 20001,Allen2 905 | 20003,Anderson1 906 | 20005,Atchison1 907 | 20007,Barber1 908 | 20009,Barton1 909 | 20011,Bourbon1 910 | 20013,Brown3 911 | 20015,Butler3 912 | 20017,Chase1 913 | 20019,Chautauqua1 914 | 20021,Cherokee4 915 | 20023,Cheyenne2 916 | 20025,Clark5 917 | 20027,Clay8 918 | 20029,Cloud1 919 | 20031,Coffey1 920 | 20033,Comanche1 921 | 20035,Cowley1 922 | 20037,Crawford6 923 | 20039,Decatur4 924 | 20041,Dickinson2 925 | 20043,Doniphan1 926 | 20045,Douglas4 927 | 20047,Edwards2 928 | 20049,Elk1 929 | 20051,Ellis1 930 | 20053,Ellsworth1 931 | 20055,Finney1 932 | 20057,Ford2 933 | 20059,Franklin9 934 | 20061,Geary1 935 | 20063,Gove1 936 | 20065,Graham2 937 | 20067,Grant3 938 | 20069,Gray1 939 | 20071,Greeley1 940 | 20073,Greenwood1 941 | 20075,Hamilton5 942 | 20077,Harper1 943 | 20079,Harvey1 944 | 20081,Haskell1 945 | 20083,Hodgeman1 946 | 20085,Jackson9 947 | 20087,Jefferson10 948 | 20089,Jewell1 949 | 20091,Johnson6 950 | 20093,Kearny1 951 | 20095,Kingman1 952 | 20097,Kiowa2 953 | 20099,Labette1 954 | 20101,Lane1 955 | 20103,Leavenworth1 956 | 20105,Lincoln5 957 | 20107,Linn2 958 | 20109,Logan4 959 | 20111,Lyon2 960 | 20113,McPherson1 961 | 20115,Marion8 962 | 20117,Marshall5 963 | 20119,Meade1 964 | 20121,Miami2 965 | 20123,Mitchell3 966 | 20125,Montgomery7 967 | 20127,Morris1 968 | 20129,Morton1 969 | 20131,Nemaha1 970 | 20133,Neosho1 971 | 20135,Ness1 972 | 20137,Norton1 973 | 20139,Osage1 974 | 20141,Osborne1 975 | 20143,Ottawa1 976 | 20145,Pawnee1 977 | 20147,Phillips3 978 | 20149,Pottawatomie1 979 | 20151,Pratt1 980 | 20153,Rawlins1 981 | 20155,Reno1 982 | 20157,Republic1 983 | 20159,Rice1 984 | 20161,Riley1 985 | 20163,Rooks1 986 | 20165,Rush2 987 | 20167,Russell2 988 | 20169,Saline3 989 | 20171,Scott5 990 | 20173,Sedgwick2 991 | 20175,Seward1 992 | 20177,Shawnee1 993 | 20179,Sheridan1 994 | 20181,Sherman1 995 | 20183,Smith1 996 | 20185,Stafford1 997 | 20187,Stanton1 998 | 20189,Stevens1 999 | 20191,Sumner1 1000 | 20193,Thomas2 1001 | 20195,Trego1 1002 | 20197,Wabaunsee1 1003 | 20199,Wallace1 1004 | 20201,Washington10 1005 | 20203,Wichita1 1006 | 20205,Wilson1 1007 | 20207,Woodson1 1008 | 20209,Wyandotte1 1009 | 21000,Kentucky1 1010 | 21001,Adair2 1011 | 21003,Allen3 1012 | 21005,Anderson2 1013 | 21007,Ballard1 1014 | 21009,Barren1 1015 | 21011,Bath1 1016 | 21013,Bell1 1017 | 21015,Boone5 1018 | 21017,Bourbon2 1019 | 21019,Boyd1 1020 | 21021,Boyle1 1021 | 21023,Bracken1 1022 | 21025,Breathitt1 1023 | 21027,Breckinridge1 1024 | 21029,Bullitt1 1025 | 21031,Butler4 1026 | 21033,Caldwell1 1027 | 21035,Calloway1 1028 | 21037,Campbell1 1029 | 21039,Carlisle1 1030 | 21041,Carroll6 1031 | 21043,Carter1 1032 | 21045,Casey1 1033 | 21047,Christian2 1034 | 21049,Clark6 1035 | 21051,Clay9 1036 | 21053,Clinton4 1037 | 21055,Crittenden2 1038 | 21057,Cumberland2 1039 | 21059,Daviess2 1040 | 21061,Edmonson1 1041 | 21063,Elliott1 1042 | 21065,Estill1 1043 | 21067,Fayette6 1044 | 21069,Fleming1 1045 | 21071,Floyd4 1046 | 21073,Franklin10 1047 | 21075,Fulton5 1048 | 21077,Gallatin2 1049 | 21079,Garrard1 1050 | 21081,Grant4 1051 | 21083,Graves1 1052 | 21085,Grayson1 1053 | 21087,Green1 1054 | 21089,Greenup1 1055 | 21091,Hancock5 1056 | 21093,Hardin3 1057 | 21095,Harlan1 1058 | 21097,Harrison3 1059 | 21099,Hart2 1060 | 21101,Henderson2 1061 | 21103,Henry6 1062 | 21105,Hickman1 1063 | 21107,Hopkins1 1064 | 21109,Jackson10 1065 | 21111,Jefferson11 1066 | 21113,Jessamine1 1067 | 21115,Johnson7 1068 | 21117,Kenton1 1069 | 21119,Knott1 1070 | 21121,Knox3 1071 | 21123,Larue1 1072 | 21125,Laurel1 1073 | 21127,Lawrence5 1074 | 21129,Lee7 1075 | 21131,Leslie1 1076 | 21133,Letcher1 1077 | 21135,Lewis2 1078 | 21137,Lincoln6 1079 | 21139,Livingston2 1080 | 21141,Logan5 1081 | 21143,Lyon3 1082 | 21145,McCracken1 1083 | 21147,McCreary1 1084 | 21149,McLean2 1085 | 21151,Madison9 1086 | 21153,Magoffin1 1087 | 21155,Marion9 1088 | 21157,Marshall6 1089 | 21159,Martin3 1090 | 21161,Mason2 1091 | 21163,Meade2 1092 | 21165,Menifee1 1093 | 21167,Mercer2 1094 | 21169,Metcalfe1 1095 | 21171,Monroe8 1096 | 21173,Montgomery8 1097 | 21175,Morgan6 1098 | 21177,Muhlenberg1 1099 | 21179,Nelson1 1100 | 21181,Nicholas1 1101 | 21183,Ohio2 1102 | 21185,Oldham1 1103 | 21187,Owen2 1104 | 21189,Owsley1 1105 | 21191,Pendleton1 1106 | 21193,Perry5 1107 | 21195,Pike6 1108 | 21197,Powell1 1109 | 21199,Pulaski5 1110 | 21201,Robertson1 1111 | 21203,Rockcastle1 1112 | 21205,Rowan1 1113 | 21207,Russell3 1114 | 21209,Scott6 1115 | 21211,Shelby5 1116 | 21213,Simpson1 1117 | 21215,Spencer2 1118 | 21217,Taylor4 1119 | 21219,Todd1 1120 | 21221,Trigg1 1121 | 21223,Trimble1 1122 | 21225,Union7 1123 | 21227,Warren5 1124 | 21229,Washington11 1125 | 21231,Wayne5 1126 | 21233,Webster3 1127 | 21235,Whitley2 1128 | 21237,Wolfe1 1129 | 21239,Woodford2 1130 | 22000,Louisiana1 1131 | 22001,Acadia1 1132 | 22003,Allen4 1133 | 22005,Ascension1 1134 | 22007,Assumption1 1135 | 22009,Avoyelles1 1136 | 22011,Beauregard1 1137 | 22013,Bienville1 1138 | 22015,Bossier1 1139 | 22017,Caddo1 1140 | 22019,Calcasieu1 1141 | 22021,Caldwell2 1142 | 22023,Cameron1 1143 | 22025,Catahoula1 1144 | 22027,Claiborne1 1145 | 22029,Concordia1 1146 | 22031,De Soto2 1147 | 22033,East Baton Rouge1 1148 | 22035,East Carroll1 1149 | 22037,East Feliciana1 1150 | 22039,Evangeline1 1151 | 22041,Franklin11 1152 | 22043,Grant5 1153 | 22045,Iberia1 1154 | 22047,Iberville1 1155 | 22049,Jackson11 1156 | 22051,Jefferson12 1157 | 22053,Jefferson Davis1 1158 | 22055,Lafayette3 1159 | 22057,Lafourche1 1160 | 22059,La Salle2 1161 | 22061,Lincoln7 1162 | 22063,Livingston3 1163 | 22065,Madison10 1164 | 22067,Morehouse1 1165 | 22069,Natchitoches1 1166 | 22071,Orleans1 1167 | 22073,Ouachita2 1168 | 22075,Plaquemines1 1169 | 22077,Pointe Coupee1 1170 | 22079,Rapides1 1171 | 22081,Red River1 1172 | 22083,Richland2 1173 | 22085,Sabine1 1174 | 22087,St. Bernard1 1175 | 22089,St. Charles1 1176 | 22091,St. Helena1 1177 | 22093,St. James1 1178 | 22095,St. John the Baptist1 1179 | 22097,St. Landry1 1180 | 22099,St. Martin1 1181 | 22101,St. Mary1 1182 | 22103,St. Tammany1 1183 | 22105,Tangipahoa1 1184 | 22107,Tensas1 1185 | 22109,Terrebonne1 1186 | 22111,Union8 1187 | 22113,Vermilion2 1188 | 22115,Vernon1 1189 | 22117,Washington12 1190 | 22119,Webster4 1191 | 22121,West Baton Rouge1 1192 | 22123,West Carroll1 1193 | 22125,West Feliciana1 1194 | 22127,Winn1 1195 | 23000,Maine1 1196 | 23001,Androscoggin1 1197 | 23003,Aroostook1 1198 | 23005,Cumberland3 1199 | 23007,Franklin12 1200 | 23009,Hancock6 1201 | 23011,Kennebec1 1202 | 23013,Knox4 1203 | 23015,Lincoln8 1204 | 23017,Oxford1 1205 | 23019,Penobscot1 1206 | 23021,Piscataquis1 1207 | 23023,Sagadahoc1 1208 | 23025,Somerset1 1209 | 23027,Waldo1 1210 | 23029,Washington13 1211 | 23031,York1 1212 | 24000,Maryland1 1213 | 24001,Allegany1 1214 | 24003,Anne Arundel1 1215 | 24005,Baltimore1 1216 | 24009,Calvert1 1217 | 24011,Caroline1 1218 | 24013,Carroll7 1219 | 24015,Cecil1 1220 | 24017,Charles1 1221 | 24019,Dorchester1 1222 | 24021,Frederick1 1223 | 24023,Garrett1 1224 | 24025,Harford1 1225 | 24027,Howard4 1226 | 24029,Kent2 1227 | 24031,Montgomery9 1228 | 24033,Prince George's1 1229 | 24035,Queen Anne's1 1230 | 24037,St. Mary's1 1231 | 24039,Somerset2 1232 | 24041,Talbot2 1233 | 24043,Washington14 1234 | 24045,Wicomico1 1235 | 24047,Worcester1 1236 | 24510,Baltimore city1 1237 | 25000,Massachusetts1 1238 | 25001,Barnstable1 1239 | 25003,Berkshire1 1240 | 25005,Bristol1 1241 | 25007,Dukes1 1242 | 25009,Essex1 1243 | 25011,Franklin13 1244 | 25013,Hampden1 1245 | 25015,Hampshire1 1246 | 25017,Middlesex2 1247 | 25019,Nantucket1 1248 | 25021,Norfolk1 1249 | 25023,Plymouth2 1250 | 25025,Suffolk1 1251 | 25027,Worcester2 1252 | 26000,Michigan1 1253 | 26001,Alcona1 1254 | 26003,Alger1 1255 | 26005,Allegan1 1256 | 26007,Alpena1 1257 | 26009,Antrim1 1258 | 26011,Arenac1 1259 | 26013,Baraga1 1260 | 26015,Barry1 1261 | 26017,Bay2 1262 | 26019,Benzie1 1263 | 26021,Berrien2 1264 | 26023,Branch1 1265 | 26025,Calhoun7 1266 | 26027,Cass4 1267 | 26029,Charlevoix1 1268 | 26031,Cheboygan1 1269 | 26033,Chippewa1 1270 | 26035,Clare1 1271 | 26037,Clinton5 1272 | 26039,Crawford7 1273 | 26041,Delta2 1274 | 26043,Dickinson3 1275 | 26045,Eaton1 1276 | 26047,Emmet2 1277 | 26049,Genesee1 1278 | 26051,Gladwin1 1279 | 26053,Gogebic1 1280 | 26055,Grand Traverse1 1281 | 26057,Gratiot1 1282 | 26059,Hillsdale1 1283 | 26061,Houghton1 1284 | 26063,Huron1 1285 | 26065,Ingham1 1286 | 26067,Ionia1 1287 | 26069,Iosco1 1288 | 26071,Iron1 1289 | 26073,Isabella1 1290 | 26075,Jackson12 1291 | 26077,Kalamazoo1 1292 | 26079,Kalkaska1 1293 | 26081,Kent3 1294 | 26083,Keweenaw1 1295 | 26085,Lake6 1296 | 26087,Lapeer1 1297 | 26089,Leelanau1 1298 | 26091,Lenawee1 1299 | 26093,Livingston4 1300 | 26095,Luce1 1301 | 26097,Mackinac1 1302 | 26099,Macomb1 1303 | 26101,Manistee1 1304 | 26103,Marquette1 1305 | 26105,Mason3 1306 | 26107,Mecosta1 1307 | 26109,Menominee1 1308 | 26111,Midland1 1309 | 26113,Missaukee1 1310 | 26115,Monroe9 1311 | 26117,Montcalm1 1312 | 26119,Montmorency1 1313 | 26121,Muskegon1 1314 | 26123,Newaygo1 1315 | 26125,Oakland1 1316 | 26127,Oceana1 1317 | 26129,Ogemaw1 1318 | 26131,Ontonagon1 1319 | 26133,Osceola3 1320 | 26135,Oscoda1 1321 | 26137,Otsego1 1322 | 26139,Ottawa2 1323 | 26141,Presque Isle1 1324 | 26143,Roscommon1 1325 | 26145,Saginaw1 1326 | 26147,St. Clair3 1327 | 26149,St. Joseph2 1328 | 26151,Sanilac1 1329 | 26153,Schoolcraft1 1330 | 26155,Shiawassee1 1331 | 26157,Tuscola1 1332 | 26159,Van Buren3 1333 | 26161,Washtenaw1 1334 | 26163,Wayne6 1335 | 26165,Wexford1 1336 | 27000,Minnesota1 1337 | 27001,Aitkin1 1338 | 27003,Anoka1 1339 | 27005,Becker1 1340 | 27007,Beltrami1 1341 | 27009,Benton4 1342 | 27011,Big Stone1 1343 | 27013,Blue Earth1 1344 | 27015,Brown4 1345 | 27017,Carlton1 1346 | 27019,Carver1 1347 | 27021,Cass5 1348 | 27023,Chippewa2 1349 | 27025,Chisago1 1350 | 27027,Clay10 1351 | 27029,Clearwater2 1352 | 27031,Cook3 1353 | 27033,Cottonwood1 1354 | 27035,Crow Wing1 1355 | 27037,Dakota1 1356 | 27039,Dodge2 1357 | 27041,Douglas5 1358 | 27043,Faribault1 1359 | 27045,Fillmore1 1360 | 27047,Freeborn1 1361 | 27049,Goodhue1 1362 | 27051,Grant6 1363 | 27053,Hennepin1 1364 | 27055,Houston3 1365 | 27057,Hubbard1 1366 | 27059,Isanti1 1367 | 27061,Itasca1 1368 | 27063,Jackson13 1369 | 27065,Kanabec1 1370 | 27067,Kandiyohi1 1371 | 27069,Kittson1 1372 | 27071,Koochiching1 1373 | 27073,Lac qui Parle1 1374 | 27075,Lake7 1375 | 27077,Lake of the Woods1 1376 | 27079,Le Sueur1 1377 | 27081,Lincoln9 1378 | 27083,Lyon4 1379 | 27085,McLeod1 1380 | 27087,Mahnomen1 1381 | 27089,Marshall7 1382 | 27091,Martin4 1383 | 27093,Meeker1 1384 | 27095,Mille Lacs1 1385 | 27097,Morrison1 1386 | 27099,Mower1 1387 | 27101,Murray2 1388 | 27103,Nicollet1 1389 | 27105,Nobles1 1390 | 27107,Norman1 1391 | 27109,Olmsted1 1392 | 27111,Otter Tail1 1393 | 27113,Pennington1 1394 | 27115,Pine1 1395 | 27117,Pipestone1 1396 | 27119,Polk5 1397 | 27121,Pope3 1398 | 27123,Ramsey1 1399 | 27125,Red Lake1 1400 | 27127,Redwood1 1401 | 27129,Renville1 1402 | 27131,Rice2 1403 | 27133,Rock1 1404 | 27135,Roseau1 1405 | 27137,St. Louis1 1406 | 27139,Scott7 1407 | 27141,Sherburne1 1408 | 27143,Sibley1 1409 | 27145,Stearns1 1410 | 27147,Steele1 1411 | 27149,Stevens2 1412 | 27151,Swift1 1413 | 27153,Todd2 1414 | 27155,Traverse1 1415 | 27157,Wabasha1 1416 | 27159,Wadena1 1417 | 27161,Waseca1 1418 | 27163,Washington15 1419 | 27165,Watonwan1 1420 | 27167,Wilkin1 1421 | 27169,Winona1 1422 | 27171,Wright2 1423 | 27173,Yellow Medicine1 1424 | 28000,Mississippi2 1425 | 28001,Adams6 1426 | 28003,Alcorn1 1427 | 28005,Amite1 1428 | 28007,Attala1 1429 | 28009,Benton5 1430 | 28011,Bolivar1 1431 | 28013,Calhoun8 1432 | 28015,Carroll8 1433 | 28017,Chickasaw2 1434 | 28019,Choctaw2 1435 | 28021,Claiborne2 1436 | 28023,Clarke4 1437 | 28025,Clay11 1438 | 28027,Coahoma1 1439 | 28029,Copiah1 1440 | 28031,Covington2 1441 | 28033,DeSoto1 1442 | 28035,Forrest1 1443 | 28037,Franklin14 1444 | 28039,George1 1445 | 28041,Greene7 1446 | 28043,Grenada1 1447 | 28045,Hancock7 1448 | 28047,Harrison4 1449 | 28049,Hinds1 1450 | 28051,Holmes2 1451 | 28053,Humphreys1 1452 | 28055,Issaquena1 1453 | 28057,Itawamba1 1454 | 28059,Jackson14 1455 | 28061,Jasper5 1456 | 28063,Jefferson13 1457 | 28065,Jefferson Davis2 1458 | 28067,Jones3 1459 | 28069,Kemper1 1460 | 28071,Lafayette4 1461 | 28073,Lamar3 1462 | 28075,Lauderdale2 1463 | 28077,Lawrence6 1464 | 28079,Leake1 1465 | 28081,Lee8 1466 | 28083,Leflore1 1467 | 28085,Lincoln10 1468 | 28087,Lowndes3 1469 | 28089,Madison11 1470 | 28091,Marion10 1471 | 28093,Marshall8 1472 | 28095,Monroe10 1473 | 28097,Montgomery10 1474 | 28099,Neshoba1 1475 | 28101,Newton4 1476 | 28103,Noxubee1 1477 | 28105,Oktibbeha1 1478 | 28107,Panola1 1479 | 28109,Pearl River1 1480 | 28111,Perry6 1481 | 28113,Pike7 1482 | 28115,Pontotoc1 1483 | 28117,Prentiss1 1484 | 28119,Quitman2 1485 | 28121,Rankin1 1486 | 28123,Scott8 1487 | 28125,Sharkey1 1488 | 28127,Simpson2 1489 | 28129,Smith2 1490 | 28131,Stone2 1491 | 28133,Sunflower1 1492 | 28135,Tallahatchie1 1493 | 28137,Tate1 1494 | 28139,Tippah1 1495 | 28141,Tishomingo1 1496 | 28143,Tunica1 1497 | 28145,Union9 1498 | 28147,Walthall1 1499 | 28149,Warren6 1500 | 28151,Washington16 1501 | 28153,Wayne7 1502 | 28155,Webster5 1503 | 28157,Wilkinson2 1504 | 28159,Winston2 1505 | 28161,Yalobusha1 1506 | 28163,Yazoo1 1507 | 29000,Missouri1 1508 | 29001,Adair3 1509 | 29003,Andrew1 1510 | 29005,Atchison2 1511 | 29007,Audrain1 1512 | 29009,Barry2 1513 | 29011,Barton2 1514 | 29013,Bates1 1515 | 29015,Benton6 1516 | 29017,Bollinger1 1517 | 29019,Boone6 1518 | 29021,Buchanan2 1519 | 29023,Butler5 1520 | 29025,Caldwell3 1521 | 29027,Callaway1 1522 | 29029,Camden2 1523 | 29031,Cape Girardeau1 1524 | 29033,Carroll9 1525 | 29035,Carter2 1526 | 29037,Cass6 1527 | 29039,Cedar2 1528 | 29041,Chariton1 1529 | 29043,Christian3 1530 | 29045,Clark7 1531 | 29047,Clay12 1532 | 29049,Clinton6 1533 | 29051,Cole1 1534 | 29053,Cooper1 1535 | 29055,Crawford8 1536 | 29057,Dade3 1537 | 29059,Dallas4 1538 | 29061,Daviess3 1539 | 29063,De Kalb4 1540 | 29065,Dent1 1541 | 29067,Douglas6 1542 | 29069,Dunklin1 1543 | 29071,Franklin15 1544 | 29073,Gasconade1 1545 | 29075,Gentry1 1546 | 29077,Greene8 1547 | 29079,Grundy3 1548 | 29081,Harrison5 1549 | 29083,Henry7 1550 | 29085,Hickory1 1551 | 29087,Holt1 1552 | 29089,Howard5 1553 | 29091,Howell1 1554 | 29093,Iron2 1555 | 29095,Jackson15 1556 | 29097,Jasper6 1557 | 29099,Jefferson14 1558 | 29101,Johnson8 1559 | 29103,Knox5 1560 | 29105,Laclede1 1561 | 29107,Lafayette5 1562 | 29109,Lawrence7 1563 | 29111,Lewis3 1564 | 29113,Lincoln11 1565 | 29115,Linn3 1566 | 29117,Livingston5 1567 | 29119,McDonald1 1568 | 29121,Macon4 1569 | 29123,Madison12 1570 | 29125,Maries1 1571 | 29127,Marion11 1572 | 29129,Mercer3 1573 | 29131,Miller3 1574 | 29133,Mississippi3 1575 | 29135,Moniteau1 1576 | 29137,Monroe11 1577 | 29139,Montgomery11 1578 | 29141,Morgan7 1579 | 29143,New Madrid1 1580 | 29145,Newton5 1581 | 29147,Nodaway1 1582 | 29149,Oregon1 1583 | 29151,Osage2 1584 | 29153,Ozark1 1585 | 29155,Pemiscot1 1586 | 29157,Perry7 1587 | 29159,Pettis1 1588 | 29161,Phelps1 1589 | 29163,Pike8 1590 | 29165,Platte1 1591 | 29167,Polk6 1592 | 29169,Pulaski6 1593 | 29171,Putnam5 1594 | 29173,Ralls1 1595 | 29175,Randolph6 1596 | 29177,Ray1 1597 | 29179,Reynolds1 1598 | 29181,Ripley2 1599 | 29183,St. Charles2 1600 | 29185,St. Clair4 1601 | 29186,Ste. Genevieve1 1602 | 29187,St. Francois1 1603 | 29189,St. Louis2 1604 | 29195,Saline4 1605 | 29197,Schuyler2 1606 | 29199,Scotland1 1607 | 29201,Scott9 1608 | 29203,Shannon1 1609 | 29205,Shelby6 1610 | 29207,Stoddard1 1611 | 29209,Stone3 1612 | 29211,Sullivan2 1613 | 29213,Taney1 1614 | 29215,Texas1 1615 | 29217,Vernon2 1616 | 29219,Warren7 1617 | 29221,Washington17 1618 | 29223,Wayne8 1619 | 29225,Webster6 1620 | 29227,Worth3 1621 | 29229,Wright3 1622 | 29510,St. Louis city1 1623 | 30000,Montana1 1624 | 30001,Beaverhead1 1625 | 30003,Big Horn1 1626 | 30005,Blaine2 1627 | 30007,Broadwater1 1628 | 30009,Carbon1 1629 | 30011,Carter3 1630 | 30013,Cascade1 1631 | 30015,Chouteau1 1632 | 30017,Custer3 1633 | 30019,Daniels1 1634 | 30021,Dawson2 1635 | 30023,Deer Lodge1 1636 | 30025,Fallon1 1637 | 30027,Fergus1 1638 | 30029,Flathead1 1639 | 30031,Gallatin3 1640 | 30033,Garfield2 1641 | 30035,Glacier1 1642 | 30037,Golden Valley1 1643 | 30039,Granite1 1644 | 30041,Hill1 1645 | 30043,Jefferson15 1646 | 30045,Judith Basin1 1647 | 30047,Lake8 1648 | 30049,Lewis and Clark1 1649 | 30051,Liberty3 1650 | 30053,Lincoln12 1651 | 30055,McCone1 1652 | 30057,Madison13 1653 | 30059,Meagher1 1654 | 30061,Mineral2 1655 | 30063,Missoula1 1656 | 30065,Musselshell1 1657 | 30067,Park2 1658 | 30069,Petroleum1 1659 | 30071,Phillips4 1660 | 30073,Pondera1 1661 | 30075,Powder River1 1662 | 30077,Powell2 1663 | 30079,Prairie2 1664 | 30081,Ravalli1 1665 | 30083,Richland3 1666 | 30085,Roosevelt1 1667 | 30087,Rosebud1 1668 | 30089,Sanders1 1669 | 30091,Sheridan2 1670 | 30093,Silver Bow1 1671 | 30095,Stillwater1 1672 | 30097,Sweet Grass1 1673 | 30099,Teton2 1674 | 30101,Toole1 1675 | 30103,Treasure1 1676 | 30105,Valley2 1677 | 30107,Wheatland1 1678 | 30109,Wibaux1 1679 | 30111,Yellowstone1 1680 | 30113,Yellowstone National Park1 1681 | 31000,Nebraska1 1682 | 31001,Adams7 1683 | 31003,Antelope1 1684 | 31005,Arthur1 1685 | 31007,Banner1 1686 | 31009,Blaine3 1687 | 31011,Boone7 1688 | 31013,Box Butte1 1689 | 31015,Boyd2 1690 | 31017,Brown5 1691 | 31019,Buffalo1 1692 | 31021,Burt1 1693 | 31023,Butler6 1694 | 31025,Cass7 1695 | 31027,Cedar3 1696 | 31029,Chase2 1697 | 31031,Cherry1 1698 | 31033,Cheyenne3 1699 | 31035,Clay13 1700 | 31037,Colfax1 1701 | 31039,Cuming1 1702 | 31041,Custer4 1703 | 31043,Dakota2 1704 | 31045,Dawes1 1705 | 31047,Dawson3 1706 | 31049,Deuel1 1707 | 31051,Dixon1 1708 | 31053,Dodge3 1709 | 31055,Douglas7 1710 | 31057,Dundy1 1711 | 31059,Fillmore2 1712 | 31061,Franklin16 1713 | 31063,Frontier1 1714 | 31065,Furnas1 1715 | 31067,Gage1 1716 | 31069,Garden1 1717 | 31071,Garfield3 1718 | 31073,Gosper1 1719 | 31075,Grant7 1720 | 31077,Greeley2 1721 | 31079,Hall2 1722 | 31081,Hamilton6 1723 | 31083,Harlan2 1724 | 31085,Hayes1 1725 | 31087,Hitchcock1 1726 | 31089,Holt2 1727 | 31091,Hooker1 1728 | 31093,Howard6 1729 | 31095,Jefferson16 1730 | 31097,Johnson9 1731 | 31099,Kearney1 1732 | 31101,Keith1 1733 | 31103,Keya Paha1 1734 | 31105,Kimball1 1735 | 31107,Knox6 1736 | 31109,Lancaster1 1737 | 31111,Lincoln13 1738 | 31113,Logan6 1739 | 31115,Loup1 1740 | 31117,McPherson2 1741 | 31119,Madison14 1742 | 31121,Merrick1 1743 | 31123,Morrill1 1744 | 31125,Nance1 1745 | 31127,Nemaha2 1746 | 31129,Nuckolls1 1747 | 31131,Otoe1 1748 | 31133,Pawnee2 1749 | 31135,Perkins1 1750 | 31137,Phelps2 1751 | 31139,Pierce2 1752 | 31141,Platte2 1753 | 31143,Polk7 1754 | 31145,Red Willow1 1755 | 31147,Richardson1 1756 | 31149,Rock2 1757 | 31151,Saline5 1758 | 31153,Sarpy1 1759 | 31155,Saunders1 1760 | 31157,Scotts Bluff1 1761 | 31159,Seward2 1762 | 31161,Sheridan3 1763 | 31163,Sherman2 1764 | 31165,Sioux2 1765 | 31167,Stanton2 1766 | 31169,Thayer1 1767 | 31171,Thomas3 1768 | 31173,Thurston1 1769 | 31175,Valley3 1770 | 31177,Washington18 1771 | 31179,Wayne9 1772 | 31181,Webster7 1773 | 31183,Wheeler2 1774 | 31185,York2 1775 | 32000,Nevada3 1776 | 32001,Churchill1 1777 | 32003,Clark8 1778 | 32005,Douglas8 1779 | 32007,Elko1 1780 | 32009,Esmeralda1 1781 | 32011,Eureka1 1782 | 32013,Humboldt3 1783 | 32015,Lander1 1784 | 32017,Lincoln14 1785 | 32019,Lyon5 1786 | 32021,Mineral3 1787 | 32023,Nye1 1788 | 32027,Pershing1 1789 | 32029,Storey1 1790 | 32031,Washoe1 1791 | 32033,White Pine1 1792 | 32510,Carson City1 1793 | 33000,New Hampshire1 1794 | 33001,Belknap1 1795 | 33003,Carroll10 1796 | 33005,Cheshire1 1797 | 33007,Coos1 1798 | 33009,Grafton1 1799 | 33011,Hillsborough2 1800 | 33013,Merrimack1 1801 | 33015,Rockingham1 1802 | 33017,Strafford1 1803 | 33019,Sullivan3 1804 | 34000,New Jersey1 1805 | 34001,Atlantic1 1806 | 34003,Bergen1 1807 | 34005,Burlington1 1808 | 34007,Camden3 1809 | 34009,Cape May1 1810 | 34011,Cumberland4 1811 | 34013,Essex2 1812 | 34015,Gloucester1 1813 | 34017,Hudson1 1814 | 34019,Hunterdon1 1815 | 34021,Mercer4 1816 | 34023,Middlesex3 1817 | 34025,Monmouth1 1818 | 34027,Morris2 1819 | 34029,Ocean1 1820 | 34031,Passaic1 1821 | 34033,Salem1 1822 | 34035,Somerset3 1823 | 34037,Sussex2 1824 | 34039,Union10 1825 | 34041,Warren8 1826 | 35000,New Mexico1 1827 | 35001,Bernalillo1 1828 | 35003,Catron1 1829 | 35005,Chaves1 1830 | 35006,Cibola1 1831 | 35007,Colfax2 1832 | 35009,Curry1 1833 | 35011,De Baca1 1834 | 35013,Dona Ana1 1835 | 35015,Eddy1 1836 | 35017,Grant8 1837 | 35019,Guadalupe1 1838 | 35021,Harding1 1839 | 35023,Hidalgo1 1840 | 35025,Lea1 1841 | 35027,Lincoln15 1842 | 35028,Los Alamos1 1843 | 35029,Luna1 1844 | 35031,McKinley1 1845 | 35033,Mora1 1846 | 35035,Otero2 1847 | 35037,Quay1 1848 | 35039,Rio Arriba1 1849 | 35041,Roosevelt2 1850 | 35043,Sandoval1 1851 | 35045,San Juan2 1852 | 35047,San Miguel2 1853 | 35049,Santa Fe1 1854 | 35051,Sierra2 1855 | 35053,Socorro1 1856 | 35055,Taos1 1857 | 35057,Torrance1 1858 | 35059,Union11 1859 | 35061,Valencia1 1860 | 36000,New York1 1861 | 36001,Albany1 1862 | 36003,Allegany2 1863 | 36005,Bronx1 1864 | 36007,Broome1 1865 | 36009,Cattaraugus1 1866 | 36011,Cayuga1 1867 | 36013,Chautauqua2 1868 | 36015,Chemung1 1869 | 36017,Chenango1 1870 | 36019,Clinton7 1871 | 36021,Columbia4 1872 | 36023,Cortland1 1873 | 36025,Delaware4 1874 | 36027,Dutchess1 1875 | 36029,Erie1 1876 | 36031,Essex3 1877 | 36033,Franklin17 1878 | 36035,Fulton6 1879 | 36037,Genesee2 1880 | 36039,Greene9 1881 | 36041,Hamilton7 1882 | 36043,Herkimer1 1883 | 36045,Jefferson17 1884 | 36047,Kings2 1885 | 36049,Lewis4 1886 | 36051,Livingston6 1887 | 36053,Madison15 1888 | 36055,Monroe12 1889 | 36057,Montgomery12 1890 | 36059,Nassau2 1891 | 36061,New York2 1892 | 36063,Niagara1 1893 | 36065,Oneida2 1894 | 36067,Onondaga1 1895 | 36069,Ontario1 1896 | 36071,Orange4 1897 | 36073,Orleans2 1898 | 36075,Oswego1 1899 | 36077,Otsego2 1900 | 36079,Putnam6 1901 | 36081,Queens1 1902 | 36083,Rensselaer1 1903 | 36085,Richmond2 1904 | 36087,Rockland1 1905 | 36089,St. Lawrence1 1906 | 36091,Saratoga1 1907 | 36093,Schenectady1 1908 | 36095,Schoharie1 1909 | 36097,Schuyler3 1910 | 36099,Seneca1 1911 | 36101,Steuben2 1912 | 36103,Suffolk2 1913 | 36105,Sullivan4 1914 | 36107,Tioga1 1915 | 36109,Tompkins1 1916 | 36111,Ulster1 1917 | 36113,Warren9 1918 | 36115,Washington19 1919 | 36117,Wayne10 1920 | 36119,Westchester1 1921 | 36121,Wyoming1 1922 | 36123,Yates1 1923 | 37000,North Carolina1 1924 | 37001,Alamance1 1925 | 37003,Alexander2 1926 | 37005,Alleghany1 1927 | 37007,Anson1 1928 | 37009,Ashe1 1929 | 37011,Avery1 1930 | 37013,Beaufort1 1931 | 37015,Bertie1 1932 | 37017,Bladen1 1933 | 37019,Brunswick1 1934 | 37021,Buncombe1 1935 | 37023,Burke2 1936 | 37025,Cabarrus1 1937 | 37027,Caldwell4 1938 | 37029,Camden4 1939 | 37031,Carteret1 1940 | 37033,Caswell1 1941 | 37035,Catawba1 1942 | 37037,Chatham2 1943 | 37039,Cherokee5 1944 | 37041,Chowan1 1945 | 37043,Clay14 1946 | 37045,Cleveland2 1947 | 37047,Columbus1 1948 | 37049,Craven1 1949 | 37051,Cumberland5 1950 | 37053,Currituck1 1951 | 37055,Dare1 1952 | 37057,Davidson1 1953 | 37059,Davie1 1954 | 37061,Duplin1 1955 | 37063,Durham1 1956 | 37065,Edgecombe1 1957 | 37067,Forsyth2 1958 | 37069,Franklin18 1959 | 37071,Gaston1 1960 | 37073,Gates1 1961 | 37075,Graham3 1962 | 37077,Granville1 1963 | 37079,Greene10 1964 | 37081,Guilford1 1965 | 37083,Halifax1 1966 | 37085,Harnett1 1967 | 37087,Haywood1 1968 | 37089,Henderson3 1969 | 37091,Hertford1 1970 | 37093,Hoke1 1971 | 37095,Hyde1 1972 | 37097,Iredell1 1973 | 37099,Jackson16 1974 | 37101,Johnston1 1975 | 37103,Jones4 1976 | 37105,Lee9 1977 | 37107,Lenoir1 1978 | 37109,Lincoln16 1979 | 37111,McDowell1 1980 | 37113,Macon5 1981 | 37115,Madison16 1982 | 37117,Martin5 1983 | 37119,Mecklenburg1 1984 | 37121,Mitchell4 1985 | 37123,Montgomery13 1986 | 37125,Moore1 1987 | 37127,Nash1 1988 | 37129,New Hanover1 1989 | 37131,Northampton1 1990 | 37133,Onslow1 1991 | 37135,Orange5 1992 | 37137,Pamlico1 1993 | 37139,Pasquotank1 1994 | 37141,Pender1 1995 | 37143,Perquimans1 1996 | 37145,Person1 1997 | 37147,Pitt1 1998 | 37149,Polk8 1999 | 37151,Randolph7 2000 | 37153,Richmond3 2001 | 37155,Robeson1 2002 | 37157,Rockingham2 2003 | 37159,Rowan2 2004 | 37161,Rutherford1 2005 | 37163,Sampson1 2006 | 37165,Scotland2 2007 | 37167,Stanly1 2008 | 37169,Stokes1 2009 | 37171,Surry1 2010 | 37173,Swain1 2011 | 37175,Transylvania1 2012 | 37177,Tyrrell1 2013 | 37179,Union12 2014 | 37181,Vance1 2015 | 37183,Wake1 2016 | 37185,Warren10 2017 | 37187,Washington20 2018 | 37189,Watauga1 2019 | 37191,Wayne11 2020 | 37193,Wilkes2 2021 | 37195,Wilson2 2022 | 37197,Yadkin1 2023 | 37199,Yancey1 2024 | 38000,North Dakota1 2025 | 38001,Adams8 2026 | 38003,Barnes1 2027 | 38005,Benson1 2028 | 38007,Billings1 2029 | 38009,Bottineau1 2030 | 38011,Bowman1 2031 | 38013,Burke3 2032 | 38015,Burleigh1 2033 | 38017,Cass8 2034 | 38019,Cavalier1 2035 | 38021,Dickey1 2036 | 38023,Divide1 2037 | 38025,Dunn1 2038 | 38027,Eddy2 2039 | 38029,Emmons1 2040 | 38031,Foster1 2041 | 38033,Golden Valley2 2042 | 38035,Grand Forks1 2043 | 38037,Grant9 2044 | 38039,Griggs1 2045 | 38041,Hettinger1 2046 | 38043,Kidder1 2047 | 38045,La Moure1 2048 | 38047,Logan7 2049 | 38049,McHenry2 2050 | 38051,McIntosh2 2051 | 38053,McKenzie1 2052 | 38055,McLean3 2053 | 38057,Mercer5 2054 | 38059,Morton2 2055 | 38061,Mountrail1 2056 | 38063,Nelson2 2057 | 38065,Oliver1 2058 | 38067,Pembina1 2059 | 38069,Pierce3 2060 | 38071,Ramsey2 2061 | 38073,Ransom1 2062 | 38075,Renville2 2063 | 38077,Richland4 2064 | 38079,Rolette1 2065 | 38081,Sargent1 2066 | 38083,Sheridan4 2067 | 38085,Sioux3 2068 | 38087,Slope1 2069 | 38089,Stark2 2070 | 38091,Steele2 2071 | 38093,Stutsman1 2072 | 38095,Towner1 2073 | 38097,Traill1 2074 | 38099,Walsh1 2075 | 38101,Ward1 2076 | 38103,Wells2 2077 | 38105,Williams1 2078 | 39000,Ohio3 2079 | 39001,Adams9 2080 | 39003,Allen5 2081 | 39005,Ashland1 2082 | 39007,Ashtabula1 2083 | 39009,Athens1 2084 | 39011,Auglaize1 2085 | 39013,Belmont1 2086 | 39015,Brown6 2087 | 39017,Butler7 2088 | 39019,Carroll11 2089 | 39021,Champaign2 2090 | 39023,Clark9 2091 | 39025,Clermont1 2092 | 39027,Clinton8 2093 | 39029,Columbiana1 2094 | 39031,Coshocton1 2095 | 39033,Crawford9 2096 | 39035,Cuyahoga1 2097 | 39037,Darke1 2098 | 39039,Defiance1 2099 | 39041,Delaware5 2100 | 39043,Erie2 2101 | 39045,Fairfield2 2102 | 39047,Fayette7 2103 | 39049,Franklin19 2104 | 39051,Fulton7 2105 | 39053,Gallia1 2106 | 39055,Geauga1 2107 | 39057,Greene11 2108 | 39059,Guernsey1 2109 | 39061,Hamilton8 2110 | 39063,Hancock8 2111 | 39065,Hardin4 2112 | 39067,Harrison6 2113 | 39069,Henry8 2114 | 39071,Highland1 2115 | 39073,Hocking1 2116 | 39075,Holmes3 2117 | 39077,Huron2 2118 | 39079,Jackson17 2119 | 39081,Jefferson18 2120 | 39083,Knox7 2121 | 39085,Lake9 2122 | 39087,Lawrence8 2123 | 39089,Licking1 2124 | 39091,Logan8 2125 | 39093,Lorain1 2126 | 39095,Lucas2 2127 | 39097,Madison17 2128 | 39099,Mahoning1 2129 | 39101,Marion12 2130 | 39103,Medina1 2131 | 39105,Meigs1 2132 | 39107,Mercer6 2133 | 39109,Miami3 2134 | 39111,Monroe13 2135 | 39113,Montgomery14 2136 | 39115,Morgan8 2137 | 39117,Morrow1 2138 | 39119,Muskingum1 2139 | 39121,Noble2 2140 | 39123,Ottawa3 2141 | 39125,Paulding2 2142 | 39127,Perry8 2143 | 39129,Pickaway1 2144 | 39131,Pike9 2145 | 39133,Portage1 2146 | 39135,Preble1 2147 | 39137,Putnam7 2148 | 39139,Richland5 2149 | 39141,Ross1 2150 | 39143,Sandusky1 2151 | 39145,Scioto1 2152 | 39147,Seneca2 2153 | 39149,Shelby7 2154 | 39151,Stark3 2155 | 39153,Summit2 2156 | 39155,Trumbull1 2157 | 39157,Tuscarawas1 2158 | 39159,Union13 2159 | 39161,Van Wert1 2160 | 39163,Vinton1 2161 | 39165,Warren11 2162 | 39167,Washington21 2163 | 39169,Wayne12 2164 | 39171,Williams2 2165 | 39173,Wood1 2166 | 39175,Wyandot1 2167 | 40000,Oklahoma1 2168 | 40001,Adair4 2169 | 40003,Alfalfa1 2170 | 40005,Atoka1 2171 | 40007,Beaver1 2172 | 40009,Beckham1 2173 | 40011,Blaine4 2174 | 40013,Bryan2 2175 | 40015,Caddo2 2176 | 40017,Canadian1 2177 | 40019,Carter4 2178 | 40021,Cherokee6 2179 | 40023,Choctaw3 2180 | 40025,Cimarron1 2181 | 40027,Cleveland3 2182 | 40029,Coal1 2183 | 40031,Comanche2 2184 | 40033,Cotton1 2185 | 40035,Craig1 2186 | 40037,Creek1 2187 | 40039,Custer5 2188 | 40041,Delaware6 2189 | 40043,Dewey1 2190 | 40045,Ellis2 2191 | 40047,Garfield4 2192 | 40049,Garvin1 2193 | 40051,Grady2 2194 | 40053,Grant10 2195 | 40055,Greer1 2196 | 40057,Harmon1 2197 | 40059,Harper2 2198 | 40061,Haskell2 2199 | 40063,Hughes1 2200 | 40065,Jackson18 2201 | 40067,Jefferson19 2202 | 40069,Johnston2 2203 | 40071,Kay1 2204 | 40073,Kingfisher1 2205 | 40075,Kiowa3 2206 | 40077,Latimer1 2207 | 40079,Le Flore1 2208 | 40081,Lincoln17 2209 | 40083,Logan9 2210 | 40085,Love1 2211 | 40087,McClain1 2212 | 40089,McCurtain1 2213 | 40091,McIntosh3 2214 | 40093,Major1 2215 | 40095,Marshall9 2216 | 40097,Mayes1 2217 | 40099,Murray3 2218 | 40101,Muskogee1 2219 | 40103,Noble3 2220 | 40105,Nowata1 2221 | 40107,Okfuskee1 2222 | 40109,Oklahoma2 2223 | 40111,Okmulgee1 2224 | 40113,Osage3 2225 | 40115,Ottawa4 2226 | 40117,Pawnee3 2227 | 40119,Payne1 2228 | 40121,Pittsburg1 2229 | 40123,Pontotoc2 2230 | 40125,Pottawatomie2 2231 | 40127,Pushmataha1 2232 | 40129,Roger Mills1 2233 | 40131,Rogers1 2234 | 40133,Seminole3 2235 | 40135,Sequoyah1 2236 | 40137,Stephens2 2237 | 40139,Texas2 2238 | 40141,Tillman1 2239 | 40143,Tulsa1 2240 | 40145,Wagoner1 2241 | 40147,Washington22 2242 | 40149,Washita1 2243 | 40151,Woods1 2244 | 40153,Woodward1 2245 | 41000,Oregon2 2246 | 41001,Baker3 2247 | 41003,Benton7 2248 | 41005,Clackamas1 2249 | 41007,Clatsop1 2250 | 41009,Columbia5 2251 | 41011,Coos2 2252 | 41013,Crook1 2253 | 41015,Curry2 2254 | 41017,Deschutes1 2255 | 41019,Douglas9 2256 | 41021,Gilliam1 2257 | 41023,Grant11 2258 | 41025,Harney1 2259 | 41027,Hood River1 2260 | 41029,Jackson19 2261 | 41031,Jefferson20 2262 | 41033,Josephine1 2263 | 41035,Klamath1 2264 | 41037,Lake10 2265 | 41039,Lane2 2266 | 41041,Lincoln18 2267 | 41043,Linn4 2268 | 41045,Malheur1 2269 | 41047,Marion13 2270 | 41049,Morrow2 2271 | 41051,Multnomah1 2272 | 41053,Polk9 2273 | 41055,Sherman3 2274 | 41057,Tillamook1 2275 | 41059,Umatilla1 2276 | 41061,Union14 2277 | 41063,Wallowa1 2278 | 41065,Wasco1 2279 | 41067,Washington23 2280 | 41069,Wheeler3 2281 | 41071,Yamhill1 2282 | 42000,Pennsylvania1 2283 | 42001,Adams10 2284 | 42003,Allegheny1 2285 | 42005,Armstrong1 2286 | 42007,Beaver2 2287 | 42009,Bedford1 2288 | 42011,Berks1 2289 | 42013,Blair1 2290 | 42015,Bradford2 2291 | 42017,Bucks1 2292 | 42019,Butler8 2293 | 42021,Cambria1 2294 | 42023,Cameron2 2295 | 42025,Carbon2 2296 | 42027,Centre1 2297 | 42029,Chester1 2298 | 42031,Clarion1 2299 | 42033,Clearfield1 2300 | 42035,Clinton9 2301 | 42037,Columbia6 2302 | 42039,Crawford10 2303 | 42041,Cumberland6 2304 | 42043,Dauphin1 2305 | 42045,Delaware7 2306 | 42047,Elk2 2307 | 42049,Erie3 2308 | 42051,Fayette8 2309 | 42053,Forest1 2310 | 42055,Franklin20 2311 | 42057,Fulton8 2312 | 42059,Greene12 2313 | 42061,Huntingdon1 2314 | 42063,Indiana2 2315 | 42065,Jefferson21 2316 | 42067,Juniata1 2317 | 42069,Lackawanna1 2318 | 42071,Lancaster2 2319 | 42073,Lawrence9 2320 | 42075,Lebanon1 2321 | 42077,Lehigh1 2322 | 42079,Luzerne1 2323 | 42081,Lycoming1 2324 | 42083,McKean1 2325 | 42085,Mercer7 2326 | 42087,Mifflin1 2327 | 42089,Monroe14 2328 | 42091,Montgomery15 2329 | 42093,Montour1 2330 | 42095,Northampton2 2331 | 42097,Northumberland1 2332 | 42099,Perry9 2333 | 42101,Philadelphia1 2334 | 42103,Pike10 2335 | 42105,Potter1 2336 | 42107,Schuylkill1 2337 | 42109,Snyder1 2338 | 42111,Somerset4 2339 | 42113,Sullivan5 2340 | 42115,Susquehanna1 2341 | 42117,Tioga2 2342 | 42119,Union15 2343 | 42121,Venango1 2344 | 42123,Warren12 2345 | 42125,Washington24 2346 | 42127,Wayne13 2347 | 42129,Westmoreland1 2348 | 42131,Wyoming2 2349 | 42133,York3 2350 | 44000,Rhode Island1 2351 | 44001,Bristol2 2352 | 44003,Kent4 2353 | 44005,Newport1 2354 | 44007,Providence1 2355 | 44009,Washington25 2356 | 45000,South Carolina1 2357 | 45001,Abbeville1 2358 | 45003,Aiken1 2359 | 45005,Allendale1 2360 | 45007,Anderson3 2361 | 45009,Bamberg1 2362 | 45011,Barnwell1 2363 | 45013,Beaufort2 2364 | 45015,Berkeley1 2365 | 45017,Calhoun9 2366 | 45019,Charleston1 2367 | 45021,Cherokee7 2368 | 45023,Chester2 2369 | 45025,Chesterfield1 2370 | 45027,Clarendon1 2371 | 45029,Colleton1 2372 | 45031,Darlington1 2373 | 45033,Dillon1 2374 | 45035,Dorchester2 2375 | 45037,Edgefield1 2376 | 45039,Fairfield3 2377 | 45041,Florence1 2378 | 45043,Georgetown1 2379 | 45045,Greenville1 2380 | 45047,Greenwood2 2381 | 45049,Hampton1 2382 | 45051,Horry1 2383 | 45053,Jasper7 2384 | 45055,Kershaw1 2385 | 45057,Lancaster3 2386 | 45059,Laurens2 2387 | 45061,Lee10 2388 | 45063,Lexington1 2389 | 45065,McCormick1 2390 | 45067,Marion14 2391 | 45069,Marlboro1 2392 | 45071,Newberry1 2393 | 45073,Oconee2 2394 | 45075,Orangeburg1 2395 | 45077,Pickens3 2396 | 45079,Richland6 2397 | 45081,Saluda1 2398 | 45083,Spartanburg1 2399 | 45085,Sumter4 2400 | 45087,Union16 2401 | 45089,Williamsburg1 2402 | 45091,York4 2403 | 46000,South Dakota1 2404 | 46003,Aurora1 2405 | 46005,Beadle1 2406 | 46007,Bennett1 2407 | 46009,Bon Homme1 2408 | 46011,Brookings1 2409 | 46013,Brown7 2410 | 46015,Brule1 2411 | 46017,Buffalo2 2412 | 46019,Butte3 2413 | 46021,Campbell2 2414 | 46023,Charles Mix1 2415 | 46025,Clark10 2416 | 46027,Clay15 2417 | 46029,Codington1 2418 | 46031,Corson1 2419 | 46033,Custer6 2420 | 46035,Davison1 2421 | 46037,Day1 2422 | 46039,Deuel2 2423 | 46041,Dewey2 2424 | 46043,Douglas10 2425 | 46045,Edmunds1 2426 | 46047,Fall River1 2427 | 46049,Faulk1 2428 | 46051,Grant12 2429 | 46053,Gregory1 2430 | 46055,Haakon1 2431 | 46057,Hamlin1 2432 | 46059,Hand1 2433 | 46061,Hanson1 2434 | 46063,Harding2 2435 | 46065,Hughes2 2436 | 46067,Hutchinson1 2437 | 46069,Hyde2 2438 | 46071,Jackson20 2439 | 46073,Jerauld1 2440 | 46075,Jones5 2441 | 46077,Kingsbury1 2442 | 46079,Lake11 2443 | 46081,Lawrence10 2444 | 46083,Lincoln19 2445 | 46085,Lyman1 2446 | 46087,McCook1 2447 | 46089,McPherson3 2448 | 46091,Marshall10 2449 | 46093,Meade3 2450 | 46095,Mellette1 2451 | 46097,Miner1 2452 | 46099,Minnehaha1 2453 | 46101,Moody1 2454 | 46103,Pennington2 2455 | 46105,Perkins2 2456 | 46107,Potter2 2457 | 46109,Roberts1 2458 | 46111,Sanborn1 2459 | 46113,Shannon2 2460 | 46115,Spink1 2461 | 46117,Stanley1 2462 | 46119,Sully1 2463 | 46121,Todd3 2464 | 46123,Tripp1 2465 | 46125,Turner2 2466 | 46127,Union17 2467 | 46129,Walworth1 2468 | 46135,Yankton1 2469 | 46137,Ziebach1 2470 | 47000,Tennessee1 2471 | 47001,Anderson4 2472 | 47003,Bedford2 2473 | 47005,Benton8 2474 | 47007,Bledsoe1 2475 | 47009,Blount2 2476 | 47011,Bradley2 2477 | 47013,Campbell3 2478 | 47015,Cannon1 2479 | 47017,Carroll12 2480 | 47019,Carter5 2481 | 47021,Cheatham1 2482 | 47023,Chester3 2483 | 47025,Claiborne3 2484 | 47027,Clay16 2485 | 47029,Cocke1 2486 | 47031,Coffee3 2487 | 47033,Crockett1 2488 | 47035,Cumberland7 2489 | 47037,Davidson2 2490 | 47039,Decatur5 2491 | 47041,DeKalb2 2492 | 47043,Dickson1 2493 | 47045,Dyer1 2494 | 47047,Fayette9 2495 | 47049,Fentress1 2496 | 47051,Franklin21 2497 | 47053,Gibson2 2498 | 47055,Giles1 2499 | 47057,Grainger1 2500 | 47059,Greene13 2501 | 47061,Grundy4 2502 | 47063,Hamblen1 2503 | 47065,Hamilton9 2504 | 47067,Hancock9 2505 | 47069,Hardeman1 2506 | 47071,Hardin5 2507 | 47073,Hawkins1 2508 | 47075,Haywood2 2509 | 47077,Henderson4 2510 | 47079,Henry9 2511 | 47081,Hickman2 2512 | 47083,Houston4 2513 | 47085,Humphreys2 2514 | 47087,Jackson21 2515 | 47089,Jefferson22 2516 | 47091,Johnson10 2517 | 47093,Knox8 2518 | 47095,Lake12 2519 | 47097,Lauderdale3 2520 | 47099,Lawrence11 2521 | 47101,Lewis5 2522 | 47103,Lincoln20 2523 | 47105,Loudon1 2524 | 47107,McMinn1 2525 | 47109,McNairy1 2526 | 47111,Macon6 2527 | 47113,Madison18 2528 | 47115,Marion15 2529 | 47117,Marshall11 2530 | 47119,Maury1 2531 | 47121,Meigs2 2532 | 47123,Monroe15 2533 | 47125,Montgomery16 2534 | 47127,Moore2 2535 | 47129,Morgan9 2536 | 47131,Obion1 2537 | 47133,Overton1 2538 | 47135,Perry10 2539 | 47137,Pickett1 2540 | 47139,Polk10 2541 | 47141,Putnam8 2542 | 47143,Rhea1 2543 | 47145,Roane1 2544 | 47147,Robertson2 2545 | 47149,Rutherford2 2546 | 47151,Scott10 2547 | 47153,Sequatchie1 2548 | 47155,Sevier2 2549 | 47157,Shelby8 2550 | 47159,Smith3 2551 | 47161,Stewart2 2552 | 47163,Sullivan6 2553 | 47165,Sumner2 2554 | 47167,Tipton2 2555 | 47169,Trousdale1 2556 | 47171,Unicoi1 2557 | 47173,Union18 2558 | 47175,Van Buren4 2559 | 47177,Warren13 2560 | 47179,Washington26 2561 | 47181,Wayne14 2562 | 47183,Weakley1 2563 | 47185,White5 2564 | 47187,Williamson2 2565 | 47189,Wilson3 2566 | 48000,Texas3 2567 | 48001,Anderson5 2568 | 48003,Andrews1 2569 | 48005,Angelina1 2570 | 48007,Aransas1 2571 | 48009,Archer1 2572 | 48011,Armstrong2 2573 | 48013,Atascosa1 2574 | 48015,Austin1 2575 | 48017,Bailey1 2576 | 48019,Bandera1 2577 | 48021,Bastrop1 2578 | 48023,Baylor1 2579 | 48025,Bee1 2580 | 48027,Bell2 2581 | 48029,Bexar1 2582 | 48031,Blanco1 2583 | 48033,Borden1 2584 | 48035,Bosque1 2585 | 48037,Bowie1 2586 | 48039,Brazoria1 2587 | 48041,Brazos1 2588 | 48043,Brewster1 2589 | 48045,Briscoe1 2590 | 48047,Brooks2 2591 | 48049,Brown8 2592 | 48051,Burleson1 2593 | 48053,Burnet1 2594 | 48055,Caldwell5 2595 | 48057,Calhoun10 2596 | 48059,Callahan1 2597 | 48061,Cameron3 2598 | 48063,Camp1 2599 | 48065,Carson1 2600 | 48067,Cass9 2601 | 48069,Castro1 2602 | 48071,Chambers2 2603 | 48073,Cherokee8 2604 | 48075,Childress1 2605 | 48077,Clay17 2606 | 48079,Cochran1 2607 | 48081,Coke1 2608 | 48083,Coleman1 2609 | 48085,Collin1 2610 | 48087,Collingsworth1 2611 | 48089,Colorado2 2612 | 48091,Comal1 2613 | 48093,Comanche3 2614 | 48095,Concho1 2615 | 48097,Cooke1 2616 | 48099,Coryell1 2617 | 48101,Cottle1 2618 | 48103,Crane1 2619 | 48105,Crockett2 2620 | 48107,Crosby1 2621 | 48109,Culberson1 2622 | 48111,Dallam1 2623 | 48113,Dallas5 2624 | 48115,Dawson4 2625 | 48117,Deaf Smith1 2626 | 48119,Delta3 2627 | 48121,Denton1 2628 | 48123,De Witt2 2629 | 48125,Dickens1 2630 | 48127,Dimmit1 2631 | 48129,Donley1 2632 | 48131,Duval2 2633 | 48133,Eastland1 2634 | 48135,Ector1 2635 | 48137,Edwards3 2636 | 48139,Ellis3 2637 | 48141,El Paso2 2638 | 48143,Erath1 2639 | 48145,Falls1 2640 | 48147,Fannin2 2641 | 48149,Fayette10 2642 | 48151,Fisher1 2643 | 48153,Floyd5 2644 | 48155,Foard1 2645 | 48157,Fort Bend1 2646 | 48159,Franklin22 2647 | 48161,Freestone1 2648 | 48163,Frio1 2649 | 48165,Gaines1 2650 | 48167,Galveston1 2651 | 48169,Garza1 2652 | 48171,Gillespie1 2653 | 48173,Glasscock1 2654 | 48175,Goliad1 2655 | 48177,Gonzales1 2656 | 48179,Gray2 2657 | 48181,Grayson2 2658 | 48183,Gregg1 2659 | 48185,Grimes1 2660 | 48187,Guadalupe2 2661 | 48189,Hale2 2662 | 48191,Hall3 2663 | 48193,Hamilton10 2664 | 48195,Hansford1 2665 | 48197,Hardeman2 2666 | 48199,Hardin6 2667 | 48201,Harris2 2668 | 48203,Harrison7 2669 | 48205,Hartley1 2670 | 48207,Haskell3 2671 | 48209,Hays1 2672 | 48211,Hemphill1 2673 | 48213,Henderson5 2674 | 48215,Hidalgo2 2675 | 48217,Hill2 2676 | 48219,Hockley1 2677 | 48221,Hood1 2678 | 48223,Hopkins2 2679 | 48225,Houston5 2680 | 48227,Howard7 2681 | 48229,Hudspeth1 2682 | 48231,Hunt1 2683 | 48233,Hutchinson2 2684 | 48235,Irion1 2685 | 48237,Jack1 2686 | 48239,Jackson22 2687 | 48241,Jasper8 2688 | 48243,Jeff Davis2 2689 | 48245,Jefferson23 2690 | 48247,Jim Hogg1 2691 | 48249,Jim Wells1 2692 | 48251,Johnson11 2693 | 48253,Jones6 2694 | 48255,Karnes1 2695 | 48257,Kaufman1 2696 | 48259,Kendall2 2697 | 48261,Kenedy1 2698 | 48263,Kent5 2699 | 48265,Kerr1 2700 | 48267,Kimble1 2701 | 48269,King1 2702 | 48271,Kinney1 2703 | 48273,Kleberg1 2704 | 48275,Knox9 2705 | 48277,Lamar4 2706 | 48279,Lamb1 2707 | 48281,Lampasas1 2708 | 48283,La Salle3 2709 | 48285,Lavaca1 2710 | 48287,Lee11 2711 | 48289,Leon2 2712 | 48291,Liberty4 2713 | 48293,Limestone2 2714 | 48295,Lipscomb1 2715 | 48297,Live Oak1 2716 | 48299,Llano1 2717 | 48301,Loving1 2718 | 48303,Lubbock1 2719 | 48305,Lynn1 2720 | 48307,McCulloch1 2721 | 48309,McLennan1 2722 | 48311,McMullen1 2723 | 48313,Madison19 2724 | 48315,Marion16 2725 | 48317,Martin6 2726 | 48319,Mason4 2727 | 48321,Matagorda1 2728 | 48323,Maverick1 2729 | 48325,Medina2 2730 | 48327,Menard2 2731 | 48329,Midland2 2732 | 48331,Milam1 2733 | 48333,Mills2 2734 | 48335,Mitchell5 2735 | 48337,Montague1 2736 | 48339,Montgomery17 2737 | 48341,Moore3 2738 | 48343,Morris3 2739 | 48345,Motley1 2740 | 48347,Nacogdoches1 2741 | 48349,Navarro1 2742 | 48351,Newton6 2743 | 48353,Nolan1 2744 | 48355,Nueces1 2745 | 48357,Ochiltree1 2746 | 48359,Oldham2 2747 | 48361,Orange6 2748 | 48363,Palo Pinto1 2749 | 48365,Panola2 2750 | 48367,Parker1 2751 | 48369,Parmer1 2752 | 48371,Pecos1 2753 | 48373,Polk11 2754 | 48375,Potter3 2755 | 48377,Presidio1 2756 | 48379,Rains1 2757 | 48381,Randall1 2758 | 48383,Reagan1 2759 | 48385,Real1 2760 | 48387,Red River2 2761 | 48389,Reeves1 2762 | 48391,Refugio1 2763 | 48393,Roberts2 2764 | 48395,Robertson3 2765 | 48397,Rockwall1 2766 | 48399,Runnels1 2767 | 48401,Rusk1 2768 | 48403,Sabine2 2769 | 48405,San Augustine1 2770 | 48407,San Jacinto1 2771 | 48409,San Patricio1 2772 | 48411,San Saba1 2773 | 48413,Schleicher1 2774 | 48415,Scurry1 2775 | 48417,Shackelford1 2776 | 48419,Shelby9 2777 | 48421,Sherman4 2778 | 48423,Smith4 2779 | 48425,Somervell1 2780 | 48427,Starr1 2781 | 48429,Stephens3 2782 | 48431,Sterling1 2783 | 48433,Stonewall1 2784 | 48435,Sutton1 2785 | 48437,Swisher1 2786 | 48439,Tarrant1 2787 | 48441,Taylor5 2788 | 48443,Terrell2 2789 | 48445,Terry1 2790 | 48447,Throckmorton1 2791 | 48449,Titus1 2792 | 48451,Tom Green1 2793 | 48453,Travis1 2794 | 48455,Trinity2 2795 | 48457,Tyler1 2796 | 48459,Upshur1 2797 | 48461,Upton1 2798 | 48463,Uvalde1 2799 | 48465,Val Verde1 2800 | 48467,Van Zandt1 2801 | 48469,Victoria1 2802 | 48471,Walker3 2803 | 48473,Waller1 2804 | 48475,Ward2 2805 | 48477,Washington27 2806 | 48479,Webb1 2807 | 48481,Wharton1 2808 | 48483,Wheeler4 2809 | 48485,Wichita2 2810 | 48487,Wilbarger1 2811 | 48489,Willacy1 2812 | 48491,Williamson3 2813 | 48493,Wilson4 2814 | 48495,Winkler1 2815 | 48497,Wise1 2816 | 48499,Wood2 2817 | 48501,Yoakum1 2818 | 48503,Young1 2819 | 48505,Zapata1 2820 | 48507,Zavala1 2821 | 49000,Utah1 2822 | 49001,Beaver3 2823 | 49003,Box Elder1 2824 | 49005,Cache1 2825 | 49007,Carbon3 2826 | 49009,Daggett1 2827 | 49011,Davis2 2828 | 49013,Duchesne1 2829 | 49015,Emery1 2830 | 49017,Garfield5 2831 | 49019,Grand2 2832 | 49021,Iron3 2833 | 49023,Juab1 2834 | 49025,Kane2 2835 | 49027,Millard1 2836 | 49029,Morgan10 2837 | 49031,Piute1 2838 | 49033,Rich1 2839 | 49035,Salt Lake1 2840 | 49037,San Juan3 2841 | 49039,Sanpete1 2842 | 49041,Sevier3 2843 | 49043,Summit3 2844 | 49045,Tooele1 2845 | 49047,Uintah1 2846 | 49049,Utah2 2847 | 49051,Wasatch1 2848 | 49053,Washington28 2849 | 49055,Wayne15 2850 | 49057,Weber1 2851 | 50000,Vermont1 2852 | 50001,Addison1 2853 | 50003,Bennington1 2854 | 50005,Caledonia1 2855 | 50007,Chittenden1 2856 | 50009,Essex4 2857 | 50011,Franklin23 2858 | 50013,Grand Isle1 2859 | 50015,Lamoille1 2860 | 50017,Orange7 2861 | 50019,Orleans3 2862 | 50021,Rutland1 2863 | 50023,Washington29 2864 | 50025,Windham2 2865 | 50027,Windsor1 2866 | 51000,Virginia1 2867 | 51001,Accomack1 2868 | 51003,Albemarle1 2869 | 51005,Alleghany2 2870 | 51007,Amelia1 2871 | 51009,Amherst1 2872 | 51011,Appomattox1 2873 | 51013,Arlington1 2874 | 51015,Augusta1 2875 | 51017,Bath2 2876 | 51019,Bedford3 2877 | 51021,Bland1 2878 | 51023,Botetourt1 2879 | 51025,Brunswick2 2880 | 51027,Buchanan3 2881 | 51029,Buckingham1 2882 | 51031,Campbell4 2883 | 51033,Caroline2 2884 | 51035,Carroll13 2885 | 51036,Charles City1 2886 | 51037,Charlotte2 2887 | 51041,Chesterfield2 2888 | 51043,Clarke5 2889 | 51045,Craig2 2890 | 51047,Culpeper1 2891 | 51049,Cumberland8 2892 | 51051,Dickenson1 2893 | 51053,Dinwiddie1 2894 | 51057,Essex5 2895 | 51059,Fairfax1 2896 | 51061,Fauquier1 2897 | 51063,Floyd6 2898 | 51065,Fluvanna1 2899 | 51067,Franklin24 2900 | 51069,Frederick2 2901 | 51071,Giles2 2902 | 51073,Gloucester2 2903 | 51075,Goochland1 2904 | 51077,Grayson3 2905 | 51079,Greene14 2906 | 51081,Greensville1 2907 | 51083,Halifax2 2908 | 51085,Hanover1 2909 | 51087,Henrico1 2910 | 51089,Henry10 2911 | 51091,Highland2 2912 | 51093,Isle of Wight1 2913 | 51095,James City1 2914 | 51097,King and Queen1 2915 | 51099,King George1 2916 | 51101,King William1 2917 | 51103,Lancaster4 2918 | 51105,Lee12 2919 | 51107,Loudoun1 2920 | 51109,Louisa2 2921 | 51111,Lunenburg1 2922 | 51113,Madison20 2923 | 51115,Mathews1 2924 | 51117,Mecklenburg2 2925 | 51119,Middlesex4 2926 | 51121,Montgomery18 2927 | 51125,Nelson3 2928 | 51127,New Kent1 2929 | 51131,Northampton3 2930 | 51133,Northumberland2 2931 | 51135,Nottoway1 2932 | 51137,Orange8 2933 | 51139,Page2 2934 | 51141,Patrick1 2935 | 51143,Pittsylvania1 2936 | 51145,Powhatan1 2937 | 51147,Prince Edward1 2938 | 51149,Prince George1 2939 | 51153,Prince William1 2940 | 51155,Pulaski7 2941 | 51157,Rappahannock1 2942 | 51159,Richmond4 2943 | 51161,Roanoke1 2944 | 51163,Rockbridge1 2945 | 51165,Rockingham3 2946 | 51167,Russell4 2947 | 51169,Scott11 2948 | 51171,Shenandoah1 2949 | 51173,Smyth1 2950 | 51175,Southampton1 2951 | 51177,Spotsylvania1 2952 | 51179,Stafford2 2953 | 51181,Surry2 2954 | 51183,Sussex3 2955 | 51185,Tazewell2 2956 | 51187,Warren14 2957 | 51191,Washington30 2958 | 51193,Westmoreland2 2959 | 51195,Wise2 2960 | 51197,Wythe1 2961 | 51199,York5 2962 | 51510,Alexandria1 2963 | 51515,Bedford4 2964 | 51520,Bristol3 2965 | 51530,Buena Vista2 2966 | 51540,Charlottesville1 2967 | 51550,Chesapeake1 2968 | 51560,Clifton Forge1 2969 | 51570,Colonial Heights1 2970 | 51580,Covington3 2971 | 51590,Danville1 2972 | 51595,Emporia1 2973 | 51600,Fairfax2 2974 | 51610,Falls Church1 2975 | 51620,Franklin25 2976 | 51630,Fredericksburg1 2977 | 51640,Galax1 2978 | 51650,Hampton2 2979 | 51660,Harrisonburg1 2980 | 51670,Hopewell1 2981 | 51678,Lexington2 2982 | 51680,Lynchburg1 2983 | 51683,Manassas1 2984 | 51685,Manassas Park1 2985 | 51690,Martinsville1 2986 | 51700,Newport News1 2987 | 51710,Norfolk2 2988 | 51720,Norton2 2989 | 51730,Petersburg1 2990 | 51735,Poquoson1 2991 | 51740,Portsmouth1 2992 | 51750,Radford1 2993 | 51760,Richmond5 2994 | 51770,Roanoke2 2995 | 51775,Salem2 2996 | 51780,South Boston1 2997 | 51790,Staunton1 2998 | 51800,Suffolk3 2999 | 51810,Virginia Beach1 3000 | 51820,Waynesboro1 3001 | 51830,Williamsburg2 3002 | 51840,Winchester1 3003 | 53000,Washington31 3004 | 53001,Adams11 3005 | 53003,Asotin1 3006 | 53005,Benton9 3007 | 53007,Chelan1 3008 | 53009,Clallam1 3009 | 53011,Clark11 3010 | 53013,Columbia7 3011 | 53015,Cowlitz1 3012 | 53017,Douglas11 3013 | 53019,Ferry1 3014 | 53021,Franklin26 3015 | 53023,Garfield6 3016 | 53025,Grant13 3017 | 53027,Grays Harbor1 3018 | 53029,Island1 3019 | 53031,Jefferson24 3020 | 53033,King2 3021 | 53035,Kitsap1 3022 | 53037,Kittitas1 3023 | 53039,Klickitat1 3024 | 53041,Lewis6 3025 | 53043,Lincoln21 3026 | 53045,Mason5 3027 | 53047,Okanogan1 3028 | 53049,Pacific1 3029 | 53051,Pend Oreille1 3030 | 53053,Pierce4 3031 | 53055,San Juan4 3032 | 53057,Skagit1 3033 | 53059,Skamania1 3034 | 53061,Snohomish1 3035 | 53063,Spokane1 3036 | 53065,Stevens3 3037 | 53067,Thurston2 3038 | 53069,Wahkiakum1 3039 | 53071,Walla Walla1 3040 | 53073,Whatcom1 3041 | 53075,Whitman1 3042 | 53077,Yakima1 3043 | 54000,West Virginia1 3044 | 54001,Barbour2 3045 | 54003,Berkeley2 3046 | 54005,Boone8 3047 | 54007,Braxton1 3048 | 54009,Brooke1 3049 | 54011,Cabell1 3050 | 54013,Calhoun11 3051 | 54015,Clay18 3052 | 54017,Doddridge1 3053 | 54019,Fayette11 3054 | 54021,Gilmer2 3055 | 54023,Grant14 3056 | 54025,Greenbrier1 3057 | 54027,Hampshire2 3058 | 54029,Hancock10 3059 | 54031,Hardy1 3060 | 54033,Harrison8 3061 | 54035,Jackson23 3062 | 54037,Jefferson25 3063 | 54039,Kanawha1 3064 | 54041,Lewis7 3065 | 54043,Lincoln22 3066 | 54045,Logan10 3067 | 54047,McDowell2 3068 | 54049,Marion17 3069 | 54051,Marshall12 3070 | 54053,Mason6 3071 | 54055,Mercer8 3072 | 54057,Mineral4 3073 | 54059,Mingo1 3074 | 54061,Monongalia1 3075 | 54063,Monroe16 3076 | 54065,Morgan11 3077 | 54067,Nicholas2 3078 | 54069,Ohio4 3079 | 54071,Pendleton2 3080 | 54073,Pleasants1 3081 | 54075,Pocahontas2 3082 | 54077,Preston1 3083 | 54079,Putnam9 3084 | 54081,Raleigh1 3085 | 54083,Randolph8 3086 | 54085,Ritchie1 3087 | 54087,Roane2 3088 | 54089,Summers1 3089 | 54091,Taylor6 3090 | 54093,Tucker1 3091 | 54095,Tyler2 3092 | 54097,Upshur2 3093 | 54099,Wayne16 3094 | 54101,Webster8 3095 | 54103,Wetzel1 3096 | 54105,Wirt1 3097 | 54107,Wood3 3098 | 54109,Wyoming3 3099 | 55000,Wisconsin1 3100 | 55001,Adams12 3101 | 55003,Ashland2 3102 | 55005,Barron1 3103 | 55007,Bayfield1 3104 | 55009,Brown9 3105 | 55011,Buffalo3 3106 | 55013,Burnett1 3107 | 55015,Calumet1 3108 | 55017,Chippewa3 3109 | 55019,Clark12 3110 | 55021,Columbia8 3111 | 55023,Crawford11 3112 | 55025,Dane1 3113 | 55027,Dodge4 3114 | 55029,Door1 3115 | 55031,Douglas12 3116 | 55033,Dunn2 3117 | 55035,Eau Claire1 3118 | 55037,Florence2 3119 | 55039,Fond du Lac1 3120 | 55041,Forest2 3121 | 55043,Grant15 3122 | 55045,Green2 3123 | 55047,Green Lake1 3124 | 55049,Iowa3 3125 | 55051,Iron4 3126 | 55053,Jackson24 3127 | 55055,Jefferson26 3128 | 55057,Juneau2 3129 | 55059,Kenosha1 3130 | 55061,Kewaunee1 3131 | 55063,La Crosse1 3132 | 55065,Lafayette6 3133 | 55067,Langlade1 3134 | 55069,Lincoln23 3135 | 55071,Manitowoc1 3136 | 55073,Marathon1 3137 | 55075,Marinette1 3138 | 55077,Marquette2 3139 | 55078,Menominee2 3140 | 55079,Milwaukee1 3141 | 55081,Monroe17 3142 | 55083,Oconto1 3143 | 55085,Oneida3 3144 | 55087,Outagamie1 3145 | 55089,Ozaukee1 3146 | 55091,Pepin1 3147 | 55093,Pierce5 3148 | 55095,Polk12 3149 | 55097,Portage2 3150 | 55099,Price1 3151 | 55101,Racine1 3152 | 55103,Richland7 3153 | 55105,Rock3 3154 | 55107,Rusk2 3155 | 55109,St. Croix1 3156 | 55111,Sauk1 3157 | 55113,Sawyer1 3158 | 55115,Shawano1 3159 | 55117,Sheboygan1 3160 | 55119,Taylor7 3161 | 55121,Trempealeau1 3162 | 55123,Vernon3 3163 | 55125,Vilas1 3164 | 55127,Walworth2 3165 | 55129,Washburn1 3166 | 55131,Washington32 3167 | 55133,Waukesha1 3168 | 55135,Waupaca1 3169 | 55137,Waushara1 3170 | 55139,Winnebago3 3171 | 55141,Wood4 3172 | 56000,Wyoming4 3173 | 56001,Albany2 3174 | 56003,Big Horn2 3175 | 56005,Campbell5 3176 | 56007,Carbon4 3177 | 56009,Converse1 3178 | 56011,Crook2 3179 | 56013,Fremont4 3180 | 56015,Goshen1 3181 | 56017,Hot Springs1 3182 | 56019,Johnson12 3183 | 56021,Laramie1 3184 | 56023,Lincoln24 3185 | 56025,Natrona1 3186 | 56027,Niobrara1 3187 | 56029,Park3 3188 | 56031,Platte3 3189 | 56033,Sheridan5 3190 | 56035,Sublette1 3191 | 56037,Sweetwater1 3192 | 56039,Teton3 3193 | 56041,Uinta1 3194 | 56043,Washakie1 3195 | 56045,Weston1 3196 | 60000,America Somoa1 3197 | 60010,Eastern1 3198 | 60020,Manu'a1 3199 | 60030,Rose Island1 3200 | 60040,Swains Island1 3201 | 60050,Western1 3202 | 64000,Federated States of Micronesia1 3203 | 64002,Chuuk1 3204 | 64005,Kosrae1 3205 | 64040,Pohnpeit1 3206 | 64060,Yap1 3207 | 66000,Guam1 3208 | 66010,Guam2 3209 | 68000,Marshall Islands1 3210 | 68007,Ailinginae1 3211 | 68010,Ailinglaplap1 3212 | 68030,Ailuk1 3213 | 68040,Arno1 3214 | 68050,Aur1 3215 | 68060,Bikar1 3216 | 68070,Bikini1 3217 | 68073,Bokak1 3218 | 68080,Ebon1 3219 | 68090,Enewetak1 3220 | 68100,Erikub1 3221 | 68110,Jabat1 3222 | 68120,Jaluit1 3223 | 68130,Jemo1 3224 | 68140,Kili1 3225 | 68150,Kwajalein1 3226 | 68160,Lae1 3227 | 68170,Lib1 3228 | 68180,Likiep1 3229 | 68190,Majuro1 3230 | 68300,Maloelap1 3231 | 68310,Mejit1 3232 | 68320,Mili1 3233 | 68330,Namorik1 3234 | 68340,Namu1 3235 | 68350,Rongelap1 3236 | 68360,Rongrik1 3237 | 68385,Toke1 3238 | 68390,Ujae1 3239 | 68400,Ujelang1 3240 | 68410,Utrik1 3241 | 68420,Wotho1 3242 | 68430,Wotle1 3243 | 69000,Northern Mariana Islands1 3244 | 69085,Northern Islands1 3245 | 69100,Rota1 3246 | 69110,Saipan1 3247 | 69120,Tinian1 3248 | 70000,Palau1 3249 | 70002,Aimeliik1 3250 | 70004,Airai1 3251 | 70212,Melekeok1 3252 | 70214,Ngaraard1 3253 | 70227,Ngernmlengui1 3254 | 70228,Ngiwal1 3255 | 72000,Puerto Rico1 3256 | 72001,Adjuntas1 3257 | 72003,Aguada1 3258 | 72005,Aguadilla1 3259 | 72007,Aguas Buenas1 3260 | 72009,Aibonito1 3261 | 72011,Anasco1 3262 | 72013,Arecibo1 3263 | 72015,Arroyo1 3264 | 72017,Barceloneta1 3265 | 72019,Barranquitas1 3266 | 72021,Bayamo'n1 3267 | 72023,Cabo Rojo1 3268 | 72025,Caguas1 3269 | 72027,Camuy1 3270 | 72029,Canovanas1 3271 | 72031,Carolina1 3272 | 72033,Catano1 3273 | 72035,Cayey1 3274 | 72037,Ceiba1 3275 | 72041,Cidra1 3276 | 72043,Coamo1 3277 | 72045,Comerio1 3278 | 72047,Corozal1 3279 | 72049,Culebra1 3280 | 72051,Dorado1 3281 | 72053,Fajardo1 3282 | 72054,Florida2 3283 | 72055,Guanica1 3284 | 72057,Guayama1 3285 | 72059,Guayanilla1 3286 | 72061,Guaynabo1 3287 | 72063,Gurabo1 3288 | 72065,Hatillo1 3289 | 72067,Hormigueros1 3290 | 72069,Humacao1 3291 | 72071,Isabela1 3292 | 72073,Jayuya1 3293 | 72075,Juana Diaz1 3294 | 72077,Juncos1 3295 | 72079,Lajas1 3296 | 72081,Lares1 3297 | 72083,Las Marias1 3298 | 72085,Las Piedras1 3299 | 72087,Loiza1 3300 | 72089,Luquillo1 3301 | 72091,Manati1 3302 | 72093,Maricao1 3303 | 72097,Mayaguez1 3304 | 72099,Moca1 3305 | 72101,Morovis1 3306 | 72103,Naguabo1 3307 | 72105,Naranjito1 3308 | 72107,Orocovis1 3309 | 72109,Patillas1 3310 | 72111,Penuelas1 3311 | 72113,Ponce1 3312 | 72115,Quebradillas1 3313 | 72117,Rincon1 3314 | 72119,Rio Grande2 3315 | 72121,Sabana Grande1 3316 | 72123,Salinas1 3317 | 72125,San German1 3318 | 72127,San Juan5 3319 | 72129,San Lorenzo1 3320 | 72131,San Sebastian1 3321 | 72133,Santa Isabel1 3322 | 72135,Toa Alta1 3323 | 72137,Toa Baja1 3324 | 72139,Trujillo Alto1 3325 | 72141,Utuado1 3326 | 72143,Vega Alta1 3327 | 72145,Vega Baja1 3328 | 72147,Vieques1 3329 | 72149,Villalba1 3330 | 72151,Yabucoa1 3331 | 72153,Yauco1 3332 | 74000,U.S. Minor Outlying Islands1 3333 | 74050,Baker Island1 3334 | 74100,Howland Island1 3335 | 74150,Jarvis Island1 3336 | 74200,Johnston Island1 3337 | 74250,Kingman Reef1 3338 | 74300,Midway Islands1 3339 | 74350,Navassa Island1 3340 | 74400,Palmyra Atoll1 3341 | 74450,Wake Island1 3342 | 78000,Virgin Islands of the United States1 3343 | 78010,Angaur1 3344 | 78010,St. Croix2 3345 | 78020,St. John1 3346 | 78030,St. Thomas1 3347 | 78050,Hatoboheit1 3348 | 78100,Kayangel1 3349 | 78150,Koror1 3350 | 78218,Ngarchelong1 3351 | 78222,Ngardmau1 3352 | 78224,Ngatpang1 3353 | 78226,Ngchesar1 3354 | 78350,Peleliu1 3355 | 78370,Sonsorol1 3356 | -------------------------------------------------------------------------------- /public/data/us-state-names.tsv: -------------------------------------------------------------------------------- 1 | id code name 2 | 1 AL Alabama 3 | 2 AK Alaska 4 | 4 AZ Arizona 5 | 5 AR Arkansas 6 | 6 CA California 7 | 8 CO Colorado 8 | 9 CT Connecticut 9 | 10 DE Delaware 10 | 11 DC District of Columbia 11 | 12 FL Florida 12 | 13 GA Georgia 13 | 15 HI Hawaii 14 | 16 ID Idaho 15 | 17 IL Illinois 16 | 18 IN Indiana 17 | 19 IA Iowa 18 | 20 KS Kansas 19 | 21 KY Kentucky 20 | 22 LA Louisiana 21 | 23 ME Maine 22 | 24 MD Maryland 23 | 25 MA Massachusetts 24 | 26 MI Michigan 25 | 27 MN Minnesota 26 | 28 MS Mississippi 27 | 29 MO Missouri 28 | 30 MT Montana 29 | 31 NE Nebraska 30 | 32 NV Nevada 31 | 33 NH New Hampshire 32 | 34 NJ New Jersey 33 | 35 NM New Mexico 34 | 36 NY New York 35 | 37 NC North Carolina 36 | 38 ND North Dakota 37 | 39 OH Ohio 38 | 40 OK Oklahoma 39 | 41 OR Oregon 40 | 42 PA Pennsylvania 41 | 44 RI Rhode Island 42 | 45 SC South Carolina 43 | 46 SD South Dakota 44 | 47 TN Tennessee 45 | 48 TX Texas 46 | 49 UT Utah 47 | 50 VT Vermont 48 | 51 VA Virginia 49 | 53 WA Washington 50 | 54 WV West Virginia 51 | 55 WI Wisconsin 52 | 56 WY Wyoming 53 | 60 AS America Samoa 54 | 64 FM Federated States of Micronesia 55 | 66 GU Guam 56 | 68 MH Marshall Islands 57 | 69 MP Northern Mariana Islands 58 | 70 PW Palau 59 | 72 PR Puerto Rico 60 | 74 UM U.S. Minor Outlying Islands 61 | 78 VI Virgin Islands of the United States 62 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swizec/react-d3js-step-by-step/c3d184961b6fcd01bfa5dfeed898f984b103eee8/public/favicon.ico -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 16 | How much does an H1B in tech pay? 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
41 |

The average H1B in tech pays $86,164/year

42 | 43 |

Since 2012 the US tech industry has sponsored 176,075 H1B work visas. Most of them paid $60,660 to $111,668 per year (1 standard deviation). The best city for an H1B is Kirkland, WA with an average individual salary $39,465 above local household median. Median household salary is a good proxy for cost of living in an area.

44 | 45 |
46 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /public/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swizec/react-d3js-step-by-step/c3d184961b6fcd01bfa5dfeed898f984b103eee8/public/thumbnail.png -------------------------------------------------------------------------------- /src/App.css: -------------------------------------------------------------------------------- 1 | 2 | .histogram .bar rect { 3 | fill: steelblue; 4 | shape-rendering: crispEdges; 5 | } 6 | 7 | .histogram .bar text { 8 | fill: #fff; 9 | font: 12px sans-serif; 10 | } 11 | 12 | button { 13 | margin-right: .5em; 14 | margin-bottom: .3em !important; 15 | } 16 | 17 | .row { 18 | margin-top: 1em; 19 | } 20 | 21 | .mean text { 22 | font: 11px sans-serif; 23 | fill: grey; 24 | } 25 | 26 | .mean path { 27 | stroke-dasharray: 3; 28 | stroke: grey; 29 | stroke-width: 1px; 30 | } 31 | -------------------------------------------------------------------------------- /src/App.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import * as d3 from 'd3'; 3 | import _ from 'lodash'; 4 | 5 | import './App.css'; 6 | 7 | import Preloader from './components/Preloader'; 8 | import { loadAllData } from './DataHandling'; 9 | 10 | import CountyMap from './components/CountyMap'; 11 | import Histogram from './components/Histogram'; 12 | import { Title, Description, GraphDescription } from './components/Meta'; 13 | import MedianLine from './components/MedianLine'; 14 | 15 | import Controls from './components/Controls'; 16 | 17 | class App extends Component { 18 | state = { 19 | techSalaries: [], 20 | countyNames: [], 21 | medianIncomes: [], 22 | salariesFilter: () => true, 23 | filteredBy: { 24 | USstate: '*', 25 | year: '*', 26 | jobTitle: '*' 27 | } 28 | } 29 | 30 | componentWillMount() { 31 | loadAllData(data => this.setState(data)); 32 | } 33 | 34 | countyValue(county, techSalariesMap) { 35 | const medianHousehold = this.state.medianIncomes[county.id], 36 | salaries = techSalariesMap[county.name]; 37 | 38 | if (!medianHousehold || !salaries) { 39 | return null; 40 | } 41 | 42 | const median = d3.median(salaries, d => d.base_salary); 43 | 44 | return { 45 | countyID: county.id, 46 | value: median - medianHousehold.medianIncome 47 | }; 48 | } 49 | 50 | updateDataFilter(filter, filteredBy) { 51 | this.setState({ 52 | salariesFilter: filter, 53 | filteredBy: filteredBy 54 | }); 55 | } 56 | 57 | shouldComponentUpdate(nextProps, nextState) { 58 | const { techSalaries, filteredBy } = this.state; 59 | 60 | const changedSalaries = (techSalaries && techSalaries.length) !== (nextState.techSalaries && nextState.techSalaries.length); 61 | 62 | const changedFilters = Object.keys(filteredBy) 63 | .some( 64 | k => filteredBy[k] !== nextState.filteredBy[k] 65 | ); 66 | 67 | return changedSalaries || changedFilters; 68 | } 69 | 70 | render() { 71 | if (this.state.techSalaries.length < 1) { 72 | return ( 73 | 74 | ); 75 | } 76 | 77 | const filteredSalaries = this.state.techSalaries.filter(this.state.salariesFilter), 78 | filteredSalariesMap = _.groupBy(filteredSalaries, 'countyID'), 79 | countyValues = this.state.countyNames.map( 80 | county => this.countyValue(county, filteredSalariesMap) 81 | ).filter(d => !_.isNull(d)); 82 | 83 | let zoom = null, 84 | medianHousehold = this.state.medianIncomesByUSState['US'][0].medianIncome; 85 | 86 | if (this.state.filteredBy.USstate !== '*') { 87 | zoom = this.state.filteredBy.USstate; 88 | medianHousehold = d3.mean(this.state.medianIncomesByUSState[zoom], 89 | d => d.medianIncome); 90 | } 91 | 92 | return ( 93 |
94 | 95 | <Description data={filteredSalaries} 96 | allData={this.state.techSalaries} 97 | medianIncomesByCounty={this.state.medianIncomesByCounty} 98 | filteredBy={this.state.filteredBy} /> 99 | 100 | <GraphDescription data={filteredSalaries} 101 | filteredBy={this.state.filteredBy} /> 102 | 103 | <svg width="1100" height="500"> 104 | <CountyMap usTopoJson={this.state.usTopoJson} 105 | USstateNames={this.state.USstateNames} 106 | values={countyValues} 107 | x={0} 108 | y={0} 109 | width={500} 110 | height={500} 111 | zoom={zoom} /> 112 | 113 | <rect x="500" y="0" 114 | width="600" 115 | height="500" 116 | style={{fill: 'white'}} /> 117 | 118 | <Histogram bins={10} 119 | width={500} 120 | height={500} 121 | x="500" 122 | y="10" 123 | data={filteredSalaries} 124 | axisMargin={83} 125 | bottomMargin={5} 126 | value={d => d.base_salary} /> 127 | 128 | <MedianLine data={filteredSalaries} 129 | x={500} 130 | y={10} 131 | width={600} 132 | height={500} 133 | bottomMargin={5} 134 | median={medianHousehold} 135 | value={d => d.base_salary} /> 136 | </svg> 137 | 138 | <Controls data={this.state.techSalaries} 139 | updateDataFilter={this.updateDataFilter.bind(this)} /> 140 | 141 | <small>Sources: 2014 US census data for median household incomes, <a href="http://h1bdata.info/">h1bdata.info</a> for tech salaries (filtered by "software")</small> 142 | </div> 143 | ); 144 | } 145 | } 146 | 147 | export default App; 148 | -------------------------------------------------------------------------------- /src/App.test.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import App from './App'; 4 | 5 | it('renders without crashing', () => { 6 | const div = document.createElement('div'); 7 | ReactDOM.render(<App />, div); 8 | }); 9 | -------------------------------------------------------------------------------- /src/DataHandling.js: -------------------------------------------------------------------------------- 1 | 2 | import * as d3 from 'd3'; 3 | import _ from 'lodash'; 4 | 5 | const cleanIncomes = (d) => ({ 6 | countyName: d['Name'], 7 | USstate: d['State'], 8 | medianIncome: Number(d['Median Household Income']), 9 | lowerBound: Number(d['90% CI Lower Bound']), 10 | upperBound: Number(d['90% CI Upper Bound']) 11 | }); 12 | 13 | const dateParse = d3.timeParse("%m/%d/%Y"); 14 | 15 | const cleanSalary = (d) => { 16 | if (!d['base salary'] || Number(d['base salary']) > 300000) { 17 | return null; 18 | } 19 | 20 | return {employer: d.employer, 21 | submit_date: dateParse(d['submit date']), 22 | start_date: dateParse(d['start date']), 23 | case_status: d['case status'], 24 | job_title: d['job title'], 25 | clean_job_title: d['job title'], 26 | base_salary: Number(d['base salary']), 27 | city: d['city'], 28 | USstate: d['state'], 29 | county: d['county'], 30 | countyID: d['countyID'] 31 | }; 32 | } 33 | 34 | const cleanUSStateName = (d) => ({ 35 | code: d.code, 36 | id: Number(d.id), 37 | name: d.name 38 | }); 39 | 40 | export const loadAllData = (callback = _.noop) => { 41 | d3.queue() 42 | .defer(d3.json, 'data/us.json') 43 | .defer(d3.csv, 'data/us-county-names-normalized.csv') 44 | .defer(d3.csv, 'data/county-median-incomes.csv', cleanIncomes) 45 | .defer(d3.csv, 'data/h1bs-2012-2016.csv', cleanSalary) 46 | .defer(d3.tsv, 'data/us-state-names.tsv', cleanUSStateName) 47 | .await((error, us, countyNames, medianIncomes, techSalaries, USstateNames) => { 48 | countyNames = countyNames.map(({ id, name }) => ({id: Number(id), 49 | name: name})); 50 | 51 | let medianIncomesMap = {}; 52 | 53 | medianIncomes.filter(d => _.find(countyNames, 54 | {name: d['countyName']})) 55 | .forEach((d) => { 56 | d['countyID'] = _.find(countyNames, 57 | {name: d['countyName']}).id; 58 | medianIncomesMap[d.countyID] = d; 59 | }); 60 | 61 | techSalaries = techSalaries.filter(d => !_.isNull(d)); 62 | 63 | callback({ 64 | usTopoJson: us, 65 | countyNames: countyNames, 66 | medianIncomes: medianIncomesMap, 67 | medianIncomesByCounty: _.groupBy(medianIncomes, 'countyName'), 68 | medianIncomesByUSState: _.groupBy(medianIncomes, 'USstate'), 69 | techSalaries: techSalaries, 70 | USstateNames: USstateNames 71 | }); 72 | }); 73 | }; 74 | -------------------------------------------------------------------------------- /src/assets/preloading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Swizec/react-d3js-step-by-step/c3d184961b6fcd01bfa5dfeed898f984b103eee8/src/assets/preloading.png -------------------------------------------------------------------------------- /src/components/Controls/ControlRow.js: -------------------------------------------------------------------------------- 1 | 2 | import React, { Component } from 'react'; 3 | import _ from 'lodash'; 4 | 5 | import Toggle from './Toggle'; 6 | 7 | class ControlRow extends Component { 8 | makePick(picked, newState) { 9 | let toggleValues = this.state.toggleValues; 10 | 11 | toggleValues = _.mapValues(toggleValues, 12 | (value, key) => newState && key == picked); // eslint-disable-line 13 | 14 | // if newState is false, we want to reset 15 | this.props.updateDataFilter(picked, !newState); 16 | 17 | this.setState({toggleValues: toggleValues}); 18 | } 19 | 20 | componentWillMount() { 21 | let toggles = this.props.toggleNames, 22 | toggleValues = _.zipObject(toggles, 23 | toggles.map((name) => name === this.props.picked)); 24 | 25 | this.setState({toggleValues: toggleValues}); 26 | } 27 | 28 | componentWillReceiveProps(nextProps) { 29 | if (this.props.picked !== nextProps.picked) { 30 | this.makePick(nextProps.picked, true); 31 | } 32 | } 33 | 34 | _addToggle(name) { 35 | let key = `toggle-${name}`, 36 | label = name; 37 | 38 | if (this.props.capitalize) { 39 | label = label.toUpperCase(); 40 | } 41 | 42 | return ( 43 | <Toggle label={label} 44 | name={name} 45 | key={key} 46 | value={this.state.toggleValues[name]} 47 | onClick={this.makePick.bind(this)} /> 48 | ); 49 | } 50 | 51 | render() { 52 | return ( 53 | <div className="row"> 54 | <div className="col-md-12"> 55 | {this.props.toggleNames 56 | .map(name => this._addToggle(name))} 57 | </div> 58 | </div> 59 | ); 60 | } 61 | } 62 | 63 | export default ControlRow; 64 | -------------------------------------------------------------------------------- /src/components/Controls/Toggle.js: -------------------------------------------------------------------------------- 1 | 2 | import React, { Component } from 'react'; 3 | 4 | class Toggle extends Component { 5 | handleClick(event) { 6 | this.props.onClick(this.props.name, !this.props.value); 7 | } 8 | 9 | render() { 10 | let className = "btn btn-default"; 11 | 12 | if (this.props.value) { 13 | className += " btn-primary"; 14 | } 15 | 16 | return ( 17 | <button className={className} onClick={this.handleClick.bind(this)}> 18 | {this.props.label} 19 | </button> 20 | ); 21 | } 22 | } 23 | 24 | export default Toggle; 25 | -------------------------------------------------------------------------------- /src/components/Controls/index.js: -------------------------------------------------------------------------------- 1 | 2 | import React, { Component } from 'react'; 3 | import _ from 'lodash'; 4 | 5 | import ControlRow from './ControlRow'; 6 | 7 | class Controls extends Component { 8 | state = { 9 | yearFilter: () => true, 10 | jobTitleFilter: () => true, 11 | USstateFilter: () => true, 12 | year: '*', 13 | USstate: '*', 14 | jobTitle: '*' 15 | }; 16 | 17 | componentDidMount() { 18 | let [year, USstate, jobTitle] = window.location.hash.replace('#', '').split("-"); 19 | 20 | if (year !== '*' && year) { 21 | this.updateYearFilter(Number(year)); 22 | } 23 | if (USstate !== '*' && USstate) { 24 | this.updateUSstateFilter(USstate); 25 | } 26 | if (jobTitle !== '*' && jobTitle) { 27 | this.updateJobTitleFilter(jobTitle); 28 | } 29 | } 30 | 31 | updateYearFilter(year, reset) { 32 | let filter = (d) => d.submit_date.getFullYear() === year; 33 | 34 | if (reset || !year) { 35 | filter = () => true; 36 | year = '*'; 37 | } 38 | 39 | this.setState({yearFilter: filter, 40 | year: year}); 41 | } 42 | 43 | updateJobTitleFilter(title, reset) { 44 | let filter = (d) => d.clean_job_title === title; 45 | 46 | if (reset || !title) { 47 | filter = () => true; 48 | title = '*'; 49 | } 50 | 51 | this.setState({jobTitleFilter: filter, 52 | jobTitle: title}); 53 | } 54 | 55 | updateUSstateFilter(USstate, reset) { 56 | let filter = (d) => d.USstate === USstate; 57 | 58 | if (reset || !USstate) { 59 | filter = () => true; 60 | USstate = '*'; 61 | } 62 | 63 | this.setState({USstateFilter: filter, 64 | USstate: USstate}); 65 | } 66 | 67 | componentDidUpdate() { 68 | window.location.hash = [this.state.year || '*', 69 | this.state.USstate || '*', 70 | this.state.jobTitle || '*'].join("-"); 71 | 72 | this.reportUpdateUpTheChain(); 73 | } 74 | 75 | reportUpdateUpTheChain() { 76 | this.props.updateDataFilter( 77 | ((filters) => { 78 | return (d) => filters.yearFilter(d) 79 | && filters.jobTitleFilter(d) 80 | && filters.USstateFilter(d); 81 | })(this.state), 82 | {USstate: this.state.USstate, 83 | year: this.state.year, 84 | jobTitle: this.state.jobTitle} 85 | ); 86 | } 87 | 88 | shouldComponentUpdate(nextProps, nextState) { 89 | return !_.isEqual(this.state, nextState); 90 | } 91 | 92 | render() { 93 | const data = this.props.data; 94 | 95 | const years = new Set(data.map(d => d.submit_date.getFullYear())), 96 | jobTitles = new Set(data.map(d => d.clean_job_title)), 97 | USstates = new Set(data.map(d => d.USstate)); 98 | 99 | return ( 100 | <div> 101 | <ControlRow data={data} 102 | toggleNames={Array.from(years.values())} 103 | picked={this.state.year} 104 | updateDataFilter={this.updateYearFilter.bind(this)} /> 105 | 106 | <ControlRow data={data} 107 | toggleNames={Array.from(jobTitles.values())} 108 | picked={this.state.jobTitle} 109 | updateDataFilter={this.updateJobTitleFilter.bind(this)} /> 110 | 111 | <ControlRow data={data} 112 | toggleNames={Array.from(USstates.values())} 113 | picked={this.state.USstate} 114 | updateDataFilter={this.updateUSstateFilter.bind(this)} 115 | capitalize="true" /> 116 | </div> 117 | ) 118 | } 119 | } 120 | 121 | export default Controls; 122 | -------------------------------------------------------------------------------- /src/components/CountyMap/County.js: -------------------------------------------------------------------------------- 1 | 2 | import React, { Component } from 'react'; 3 | import _ from 'lodash'; 4 | 5 | const ChoroplethColors = _.reverse([ 6 | 'rgb(247,251,255)', 7 | 'rgb(222,235,247)', 8 | 'rgb(198,219,239)', 9 | 'rgb(158,202,225)', 10 | 'rgb(107,174,214)', 11 | 'rgb(66,146,198)', 12 | 'rgb(33,113,181)', 13 | 'rgb(8,81,156)', 14 | 'rgb(8,48,107)' 15 | ]); 16 | 17 | const BlankColor = 'rgb(240,240,240)' 18 | 19 | // Combine array of colors and quantize scale to pick fill color 20 | // Return a <path> element 21 | class County extends Component { 22 | shouldComponentUpdate(nextProps, nextState) { 23 | const { zoom, value } = this.props; 24 | 25 | return zoom !== nextProps.zoom 26 | || value !== nextProps.value; 27 | } 28 | 29 | render() { 30 | const { value, geoPath, feature, quantize } = this.props; 31 | 32 | let color = BlankColor; 33 | 34 | if (value) { 35 | color = ChoroplethColors[quantize(value)]; 36 | } 37 | 38 | return ( 39 | <path d={geoPath(feature)} style={{fill: color}} title={feature.id} /> 40 | ); 41 | } 42 | } 43 | 44 | export default County; 45 | -------------------------------------------------------------------------------- /src/components/CountyMap/CountyMap.js: -------------------------------------------------------------------------------- 1 | 2 | import React, { Component } from 'react'; 3 | import * as d3 from 'd3'; 4 | import * as topojson from 'topojson'; 5 | import _ from 'lodash'; 6 | 7 | 8 | import County from './County'; 9 | 10 | 11 | class CountyMap extends Component { 12 | // Setup default D3 objects 13 | // projection - defines our geo projection, how the map looks 14 | // geoPath - calculates d attribute of <path> so it looks like a map 15 | // quantize - threshold scale with 9 buckets 16 | constructor(props) { 17 | super(props); 18 | 19 | this.projection = d3.geoAlbersUsa() 20 | .scale(1280); 21 | this.geoPath = d3.geoPath() 22 | .projection(this.projection); 23 | this.quantize = d3.scaleQuantize() 24 | .range(d3.range(9)); 25 | 26 | this.updateD3(props); 27 | } 28 | 29 | // update D3 objects when props update 30 | componentWillReceiveProps(newProps) { 31 | this.updateD3(newProps); 32 | } 33 | 34 | // Re-center the geo projection 35 | // Update domain of quantize scale 36 | updateD3(props) { 37 | this.projection 38 | .translate([props.width / 2, props.height / 2]) 39 | .scale(props.width*1.3); 40 | 41 | if (props.zoom && props.usTopoJson) { 42 | const us = props.usTopoJson, 43 | statePaths = topojson.feature(us, us.objects.states).features, 44 | id = _.find(props.USstateNames, {code: props.zoom}).id; 45 | 46 | this.projection.scale(props.width*4.5); 47 | 48 | const centroid = this.geoPath.centroid(_.find(statePaths, {id: id})), 49 | translate = this.projection.translate(); 50 | 51 | this.projection.translate([ 52 | translate[0] - centroid[0] + props.width / 2, 53 | translate[1] - centroid[1] + props.height / 2 54 | ]); 55 | } 56 | 57 | if (props.values) { 58 | this.quantize.domain([d3.quantile(props.values, 0.15, d => d.value), 59 | d3.quantile(props.values, 0.85, d => d.value)]); 60 | } 61 | } 62 | 63 | // If no data, do nothing (we might mount before data loads into props) 64 | render() { 65 | if (!this.props.usTopoJson) { 66 | return null; 67 | }else{ 68 | // Translate topojson data into geojson data for drawing 69 | // Prepare a mesh for states and a list of features for counties 70 | const us = this.props.usTopoJson, 71 | statesMesh = topojson.mesh(us, us.objects.states, (a, b) => a !== b), 72 | counties = topojson.feature(us, us.objects.counties).features; 73 | 74 | const countyValueMap = _.fromPairs(this.props.values 75 | .map(d => [d.countyID, d.value])); 76 | 77 | // Loop through counties and draw <County> components 78 | // Add a single <path> for state borders 79 | return ( 80 | <g transform={`translate(${this.props.x}, ${this.props.y})`}> 81 | {counties.map((feature) => ( 82 | <County geoPath={this.geoPath} 83 | feature={feature} 84 | zoom={this.props.zoom} 85 | key={feature.id} 86 | quantize={this.quantize} 87 | value={countyValueMap[feature.id]} /> 88 | ))} 89 | 90 | <path d={this.geoPath(statesMesh)} style={{fill: 'none', 91 | stroke: '#fff', 92 | strokeLinejoin: 'round'}} /> 93 | </g> 94 | ); 95 | } 96 | } 97 | } 98 | 99 | export default CountyMap; 100 | -------------------------------------------------------------------------------- /src/components/CountyMap/index.js: -------------------------------------------------------------------------------- 1 | 2 | export { default } from './CountyMap'; 3 | -------------------------------------------------------------------------------- /src/components/D3blackbox.js: -------------------------------------------------------------------------------- 1 | 2 | import React, { Component } from 'react'; 3 | 4 | export default function D3blackbox(D3render) { 5 | return class Blackbox extends React.Component { 6 | componentDidMount() { D3render.call(this); } 7 | componentDidUpdate() { D3render.call(this) } 8 | 9 | render() { 10 | const { x, y } = this.props; 11 | return <g transform={`translate(${x}, ${y})`} ref="anchor" />; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/components/Histogram/Axis.js: -------------------------------------------------------------------------------- 1 | 2 | import React, { Component } from 'react'; 3 | import * as d3 from 'd3'; 4 | import D3blackbox from '../D3blackbox'; 5 | 6 | const Axis = D3blackbox(function () { 7 | const axis = d3.axisLeft() 8 | .tickFormat(d => `${d3.format(".2s")(d)}`) 9 | .scale(this.props.scale) 10 | .ticks(this.props.data.length); 11 | 12 | d3.select(this.refs.anchor) 13 | .call(axis); 14 | }) 15 | 16 | export default Axis; 17 | -------------------------------------------------------------------------------- /src/components/Histogram/Histogram.js: -------------------------------------------------------------------------------- 1 | 2 | import React, { Component } from 'react'; 3 | import * as d3 from 'd3'; 4 | 5 | import Axis from './Axis'; 6 | 7 | const HistogramBar = ({ percent, x, y, width, height }) => { 8 | let translate = `translate(${x}, ${y})`, 9 | label = percent.toFixed(0)+'%'; 10 | 11 | if (percent < 1) { 12 | label = percent.toFixed(2)+"%"; 13 | } 14 | 15 | if (width < 20) { 16 | label = label.replace("%", ""); 17 | } 18 | 19 | if (width < 10) { 20 | label = ""; 21 | } 22 | 23 | return ( 24 | <g transform={translate} className="bar"> 25 | <rect width={width} 26 | height={height-2} 27 | transform="translate(0, 1)"> 28 | </rect> 29 | <text textAnchor="end" 30 | x={width-5} 31 | y={height/2+3}> 32 | {label} 33 | </text> 34 | </g> 35 | ); 36 | } 37 | 38 | class Histogram extends Component { 39 | constructor(props) { 40 | super(); 41 | 42 | this.histogram = d3.histogram(); 43 | this.widthScale = d3.scaleLinear(); 44 | this.yScale = d3.scaleLinear(); 45 | 46 | this.updateD3(props); 47 | } 48 | 49 | componentWillReceiveProps(newProps) { 50 | this.updateD3(newProps); 51 | } 52 | 53 | updateD3(props) { 54 | this.histogram 55 | .thresholds(props.bins) 56 | .value(props.value); 57 | 58 | const bars = this.histogram(props.data), 59 | counts = bars.map((d) => d.length); 60 | 61 | this.widthScale 62 | .domain([d3.min(counts), d3.max(counts)]) 63 | .range([0, props.width-props.axisMargin]); 64 | 65 | this.yScale 66 | .domain([0, d3.max(bars, (d) => d.x1)]) 67 | .range([0, props.height-props.y-props.bottomMargin]); 68 | } 69 | 70 | makeBar(bar) { 71 | let percent = bar.length/this.props.data.length*100; 72 | 73 | let props = {percent: percent, 74 | x: this.props.axisMargin, 75 | y: this.yScale(bar.x0), 76 | width: this.widthScale(bar.length), 77 | height: this.yScale(bar.x1 - bar.x0), 78 | key: "histogram-bar-"+bar.x0} 79 | 80 | return ( 81 | <HistogramBar {...props} /> 82 | ); 83 | } 84 | 85 | render() { 86 | const translate = `translate(${this.props.x}, ${this.props.y})`, 87 | bars = this.histogram(this.props.data); 88 | 89 | return ( 90 | <g className="histogram" transform={translate}> 91 | <g className="bars"> 92 | {bars.map(this.makeBar.bind(this))} 93 | </g> 94 | <Axis x={this.props.axisMargin-3} y={0} data={bars} scale={this.yScale} /> 95 | </g> 96 | ); 97 | } 98 | } 99 | 100 | 101 | export default Histogram; 102 | -------------------------------------------------------------------------------- /src/components/Histogram/index.js: -------------------------------------------------------------------------------- 1 | 2 | import Histogram from './Histogram'; 3 | 4 | export default Histogram; 5 | -------------------------------------------------------------------------------- /src/components/MedianLine.js: -------------------------------------------------------------------------------- 1 | 2 | import React, { Component } from 'react'; 3 | import * as d3 from 'd3'; 4 | 5 | class MedianLine extends Component { 6 | componentWillMount() { 7 | this.yScale = d3.scaleLinear(); 8 | 9 | this.updateD3(this.props); 10 | } 11 | 12 | componentWillReceiveProps(newProps) { 13 | this.updateD3(newProps); 14 | } 15 | 16 | updateD3(props) { 17 | this.yScale 18 | .domain([0, 19 | d3.max(props.data, props.value)]) 20 | .range([0, props.height-props.y-props.bottomMargin]); 21 | } 22 | 23 | render() { 24 | const median = this.props.median || d3.median(this.props.data, this.props.value), 25 | line = d3.line()([[0, 5], 26 | [this.props.width, 5]]); 27 | 28 | const translate = `translate(${this.props.x}, ${this.yScale(median)})`, 29 | medianLabel = `Median Household: $${this.yScale.tickFormat()(median)}`; 30 | 31 | return ( 32 | <g className="mean" transform={translate}> 33 | <text x={this.props.width-5} y="0" textAnchor="end"> 34 | {medianLabel} 35 | </text> 36 | <path d={line}></path> 37 | </g> 38 | ); 39 | } 40 | } 41 | 42 | export default MedianLine; 43 | -------------------------------------------------------------------------------- /src/components/Meta/Description.js: -------------------------------------------------------------------------------- 1 | 2 | import React, { Component } from 'react'; 3 | import { scaleLinear } from 'd3-scale'; 4 | import { mean as d3mean, extent as d3extent, deviation as d3deviation } from 'd3-array'; 5 | import _ from 'lodash'; 6 | import S from 'string'; 7 | 8 | import USStatesMap from './USStatesMap'; 9 | 10 | 11 | class Description extends Component { 12 | allDataForYear(year, data = this.props.allData) { 13 | return data.filter(d => d.submit_date.getFullYear() === year); 14 | } 15 | 16 | allDataForJobTitle(jobTitle, data = this.props.allData) { 17 | return data.filter(d => d.clean_job_title === jobTitle); 18 | } 19 | 20 | allDataForUSstate(USstate, data = this.props.allData) { 21 | return data.filter(d => d.USstate === USstate); 22 | } 23 | 24 | get yearsFragment() { 25 | const year = this.props.filteredBy.year; 26 | 27 | return year === '*' ? "" : `In ${year}`; 28 | } 29 | 30 | get USstateFragment() { 31 | const USstate = this.props.filteredBy.USstate; 32 | 33 | return USstate === '*' ? "" : USStatesMap[USstate.toUpperCase()]; 34 | } 35 | 36 | get previousYearFragment() { 37 | const year = this.props.filteredBy.year; 38 | 39 | let fragment; 40 | 41 | if (year === '*') { 42 | fragment = ""; 43 | }else if (year === 2012) { 44 | fragment = ""; 45 | }else{ 46 | const { USstate, jobTitle } = this.props.filteredBy; 47 | let lastYear = this.allDataForYear(year-1); 48 | 49 | 50 | if (jobTitle !== '*') { 51 | lastYear = this.allDataForJobTitle(jobTitle, lastYear); 52 | } 53 | 54 | if (USstate !== '*') { 55 | lastYear = this.allDataForUSstate(USstate, lastYear); 56 | } 57 | 58 | if (this.props.data.length/lastYear.length > 2) { 59 | fragment = ", "+(this.props.data.length/lastYear.length).toFixed()+" times more than the year before"; 60 | }else{ 61 | const percent = ((1-lastYear.length/this.props.data.length)*100).toFixed(); 62 | 63 | fragment = ", "+Math.abs(percent)+"% "+(percent > 0 ? "more" : "less")+" than the year before"; 64 | } 65 | } 66 | 67 | return fragment; 68 | } 69 | 70 | get jobTitleFragment() { 71 | const jobTitle = this.props.filteredBy.jobTitle; 72 | let fragment; 73 | 74 | if (jobTitle === '*') { 75 | fragment = "H1B work visas"; 76 | }else{ 77 | if (jobTitle === "other") { 78 | fragment = "H1B work visas"; 79 | }else{ 80 | fragment = `H1B work visas for software ${jobTitle}s`; 81 | } 82 | } 83 | 84 | return fragment; 85 | } 86 | 87 | get countyFragment() { 88 | const byCounty = _.groupBy(this.props.data, 'countyID'), 89 | medians = this.props.medianIncomesByCounty; 90 | 91 | let ordered = _.sortBy( 92 | _.keys(byCounty) 93 | .map(county => byCounty[county]) 94 | .filter(d => d.length/this.props.data.length > 0.01), 95 | items => d3mean(items, 96 | d => d.base_salary) - medians[items[0].countyID][0].medianIncome); 97 | 98 | let best = ordered[ordered.length-1], 99 | countyMedian = medians[best[0].countyID][0].medianIncome; 100 | 101 | const byCity = _.groupBy(best, 'city'); 102 | 103 | ordered = _.sortBy(_.keys(byCity) 104 | .map(city => byCity[city]) 105 | .filter(d => d.length/best.length > 0.01), 106 | items => d3mean(items, d => d.base_salary) - countyMedian); 107 | 108 | best = ordered[ordered.length-1]; 109 | 110 | const city = S(best[0].city).titleCase().s + `, ${best[0].USstate}`, 111 | mean = d3mean(best, d => d.base_salary); 112 | 113 | const jobFragment = this.jobTitleFragment 114 | .replace("H1B work visas for", "") 115 | .replace("H1B work visas", ""); 116 | 117 | return ( 118 | <span> 119 | The best city {jobFragment.length ? `for ${jobFragment} on an H1B` : 'for an H1B'} {this.yearFragment ? "was" : "is"} <b>{city}</b> with an average salary ${this.format(mean - countyMedian)} above the local household median. Median household income is a good proxy for cost of living in an area. <a href="https://en.wikipedia.org/wiki/Household_income">[1]</a>. 120 | </span> 121 | ); 122 | } 123 | 124 | get format() { 125 | return scaleLinear() 126 | .domain(d3extent(this.props.data, d => d.base_salary)) 127 | .tickFormat(); 128 | } 129 | 130 | render() { 131 | const format = this.format, 132 | mean = d3mean(this.props.data, d => d.base_salary), 133 | deviation = d3deviation(this.props.data, d => d.base_salary); 134 | 135 | return ( 136 | <p className="lead"> 137 | {this.yearsFragment ? this.yearsFragment : "Since 2012"} the {this.UStateFragment} tech industry {this.yearsFragment ? "sponsored" : "has sponsored"} <b>{format(this.props.data.length)} {this.jobTitleFragment}</b>{this.previousYearFragment}. Most of them paid <b>${format(mean-deviation)} to ${format(mean+deviation)}</b> per year. {this.countyFragment} 138 | </p> 139 | ); 140 | } 141 | } 142 | 143 | export default Description; 144 | -------------------------------------------------------------------------------- /src/components/Meta/GraphDescription.js: -------------------------------------------------------------------------------- 1 | 2 | import React, { Component } from 'react'; 3 | 4 | class GraphDescription extends Component { 5 | get jobTitleFragment() { 6 | const { jobTitle } = this.props.filteredBy; 7 | let title; 8 | 9 | if (jobTitle === '*') { 10 | title = 'in tech'; 11 | }else{ 12 | if (jobTitle === "other") { 13 | title = "in tech"; 14 | }else{ 15 | title = `a Software ${jobTitle}`; 16 | } 17 | } 18 | 19 | return title; 20 | } 21 | 22 | render() { 23 | return ( 24 | <div> 25 | <div className="col-md-6 text-center"> 26 | <h3>Best places to be {this.jobTitleFragment}</h3> 27 | <small>Darker color means bigger difference between median household salary<br/>and individual tech salary. Gray means lack of tech salary data.</small> 28 | </div> 29 | <div className="col-md-6 text-center"> 30 | <h3>Salary distribution</h3> 31 | <small>Histogram shows tech salary distribution compared to median household income, which is a good proxy for cost of living.</small> 32 | </div> 33 | </div> 34 | ) 35 | } 36 | } 37 | 38 | export default GraphDescription; 39 | -------------------------------------------------------------------------------- /src/components/Meta/Title.js: -------------------------------------------------------------------------------- 1 | 2 | import React, { Component } from 'react'; 3 | import { scaleLinear } from 'd3-scale'; 4 | import { mean as d3mean, extent as d3extent } from 'd3-array'; 5 | 6 | import USStatesMap from './USStatesMap'; 7 | 8 | class Title extends Component { 9 | get yearsFragment() { 10 | const year = this.props.filteredBy.year; 11 | 12 | return year === '*' ? "" : `in ${year}`; 13 | } 14 | 15 | get USstateFragment() { 16 | const USstate = this.props.filteredBy.USstate; 17 | 18 | return USstate === '*' ? "" : USStatesMap[USstate.toUpperCase()]; 19 | } 20 | 21 | get jobTitleFragment() { 22 | const { jobTitle, year } = this.props.filteredBy; 23 | let title = ""; 24 | 25 | if (jobTitle === '*') { 26 | if (year === '*') { 27 | title = "The average H1B in tech pays"; 28 | }else{ 29 | title = "The average tech H1B paid"; 30 | } 31 | }else{ 32 | if (jobTitle === '*') { 33 | title = "H1Bs in tech pay"; 34 | }else{ 35 | title = `Software ${jobTitle}s on an H1B`; 36 | 37 | if (year === '*') { 38 | title += " make"; 39 | }else{ 40 | title += " made"; 41 | } 42 | } 43 | } 44 | 45 | return title; 46 | } 47 | 48 | get format() { 49 | return scaleLinear() 50 | .domain(d3extent(this.props.data, d => d.base_salary)) 51 | .tickFormat(); 52 | } 53 | 54 | render() { 55 | const mean = this.format(d3mean(this.props.data, d => d.base_salary)); 56 | 57 | let title; 58 | 59 | if (this.yearsFragment && this.USstateFragment) { 60 | title = ( 61 | <h2> 62 | In {this.USstateFragment}, {this.jobTitleFragment} ${mean}/year {this.yearsFragment} 63 | </h2> 64 | ); 65 | }else{ 66 | title = ( 67 | <h2> 68 | {this.jobTitleFragment} ${mean}/year {this.USstateFragment ? `in ${this.stateFragment}` : ''} {this.yearsFragment} 69 | </h2> 70 | ); 71 | } 72 | 73 | return title; 74 | } 75 | } 76 | 77 | export default Title; 78 | -------------------------------------------------------------------------------- /src/components/Meta/USStatesMap.js: -------------------------------------------------------------------------------- 1 | 2 | export default { 3 | "AL": "Alabama", 4 | "AK": "Alaska", 5 | "AS": "American Samoa", 6 | "AZ": "Arizona", 7 | "AR": "Arkansas", 8 | "CA": "California", 9 | "CO": "Colorado", 10 | "CT": "Connecticut", 11 | "DE": "Delaware", 12 | "DC": "District Of Columbia", 13 | "FM": "Federated States Of Micronesia", 14 | "FL": "Florida", 15 | "GA": "Georgia", 16 | "GU": "Guam", 17 | "HI": "Hawaii", 18 | "ID": "Idaho", 19 | "IL": "Illinois", 20 | "IN": "Indiana", 21 | "IA": "Iowa", 22 | "KS": "Kansas", 23 | "KY": "Kentucky", 24 | "LA": "Louisiana", 25 | "ME": "Maine", 26 | "MH": "Marshall Islands", 27 | "MD": "Maryland", 28 | "MA": "Massachusetts", 29 | "MI": "Michigan", 30 | "MN": "Minnesota", 31 | "MS": "Mississippi", 32 | "MO": "Missouri", 33 | "MT": "Montana", 34 | "NE": "Nebraska", 35 | "NV": "Nevada", 36 | "NH": "New Hampshire", 37 | "NJ": "New Jersey", 38 | "NM": "New Mexico", 39 | "NY": "New York", 40 | "NC": "North Carolina", 41 | "ND": "North Dakota", 42 | "MP": "Northern Mariana Islands", 43 | "OH": "Ohio", 44 | "OK": "Oklahoma", 45 | "OR": "Oregon", 46 | "PW": "Palau", 47 | "PA": "Pennsylvania", 48 | "PR": "Puerto Rico", 49 | "RI": "Rhode Island", 50 | "SC": "South Carolina", 51 | "SD": "South Dakota", 52 | "TN": "Tennessee", 53 | "TX": "Texas", 54 | "UT": "Utah", 55 | "VT": "Vermont", 56 | "VI": "Virgin Islands", 57 | "VA": "Virginia", 58 | "WA": "Washington", 59 | "WV": "West Virginia", 60 | "WI": "Wisconsin", 61 | "WY": "Wyoming" 62 | }; 63 | -------------------------------------------------------------------------------- /src/components/Meta/index.js: -------------------------------------------------------------------------------- 1 | 2 | export { default as Title } from './Title'; 3 | export { default as Description } from './Description'; 4 | export { default as GraphDescription } from './GraphDescription'; 5 | -------------------------------------------------------------------------------- /src/components/Preloader.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import PreloaderImg from '../assets/preloading.png'; 4 | 5 | const Preloader = () => ( 6 | <div className="App container"> 7 | <h1>The average H1B in tech pays $86,164/year</h1> 8 | <p className="lead">Since 2012 the US tech industry has sponsored 176,075 H1B work visas. Most of them paid <b>$60,660 to $111,668</b> per year (1 standard deviation). <span>The best city for an H1B is <b>Kirkland, WA</b> with an average individual salary <b>$39,465 above local household median</b>. Median household salary is a good proxy for cost of living in an area.</span></p> 9 | <img src={PreloaderImg} style={{width: '100%'}} role="presentation" /> 10 | <h2 className="text-center">Loading data ...</h2> 11 | </div> 12 | ); 13 | 14 | export default Preloader; 15 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | padding: 0; 4 | font-family: sans-serif; 5 | } 6 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import App from './App'; 4 | import 'bootstrap/dist/css/bootstrap.css'; 5 | import 'bootstrap/dist/css/bootstrap-theme.css'; 6 | 7 | ReactDOM.render( 8 | <App />, 9 | document.getElementById('root') 10 | ); 11 | -------------------------------------------------------------------------------- /src/logo.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"> 2 | <g fill="#61DAFB"> 3 | <path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/> 4 | <circle cx="420.9" cy="296.5" r="45.7"/> 5 | <path d="M520.5 78.1z"/> 6 | </g> 7 | </svg> 8 | --------------------------------------------------------------------------------