Politics

Show Only ...
Maps - Photos - Videos

A look at how Democrats voted in recent primaries based on the Congressional Districts set forth by the special master

A look at how Democrats voted in recent primaries based on the Congressional Districts set forth by the special master.

2016 Presidential Primary

Congressional District Clinton Sanders Primary Votes Clinton Primary Sanders Primary
1 25,371 22,870 48,254 52.6 47.4
2 30,119 22,017 52,165 57.7 42.2
3 37,393 24,607 62,555 59.8 39.3
4 45,528 26,556 72,636 62.7 36.6
5 57,518 24,006 82,385 69.8 29.1
6 35,116 24,643 60,391 58.1 40.8
7 40,861 38,296 79,803 51.2 48.0
8 50,430 25,750 77,225 65.3 33.3
9 58,049 34,764 93,980 61.8 37.0
10 73,119 49,223 123,436 59.2 39.9
11 26,940 25,118 52,806 51.0 47.6
12 94,720 39,374 135,111 70.1 29.1
13 74,856 43,669 119,811 62.5 36.4
14 46,486 27,755 74,937 62.0 37.0
15 55,863 24,051 80,778 69.2 29.8
16 59,293 26,589 86,259 68.7 30.8
17 44,163 28,773 70,929 62.3 40.6
18 28,058 31,003 37,758 74.3 82.1
19 29,569 42,305 72,303 40.9 58.5
20 36,053 41,527 78,126 46.1 53.2
21 19,371 31,850 51,568 37.6 61.8
22 30,438 29,494 60,439 50.4 48.8
23 27,424 33,267 61,357 44.7 54.2
24 21,028 24,802 37,664 55.8 65.9
25 39,636 36,885 76,913 51.5 48.0
26 45,182 40,935 86,765 52.1 47.2

2018 Gubernatorial Primary

Congressional District Nixon Votes Cuomo Votes Primary Voters Nixon Percent Cuomo Percent
1 9,612 24,837 39,074 24.6 63.6
2 8,600 28,197 36,768 23.4 76.7
3 11,034 32,092 43,853 25.2 73.2
4 9,843 39,412 50,062 19.7 78.7
5 11,014 63,099 74,865 14.7 84.3
6 15,697 35,233 51,890 30.3 67.9
7 35,405 38,493 74,943 47.2 51.4
8 14,035 58,824 74,115 18.9 79.4
9 31,839 63,058 96,527 33.0 65.3
10 59,859 52,835 115,819 51.7 45.6
11 14,629 30,012 45,596 32.1 65.8
12 47,472 63,419 112,452 42.2 56.4
13 35,166 69,194 106,012 33.2 65.3
14 17,560 50,197 68,866 25.5 72.9
15 12,563 56,514 70,111 17.9 80.6
16 16,885 53,164 70,822 23.8 75.1
17 18,861 39,368 59,646 31.6 66.0
18 19,799 28,763 49,318 40.1 58.3
19 24,834 26,213 51,755 48.0 50.6
20 25,597 24,366 52,330 48.9 46.6
21 13,921 14,104 28,476 48.9 49.5
22 15,785 20,801 37,163 42.5 56.0
23 16,011 24,403 41,490 38.6 58.8
24 12,247 14,770 27,330 44.8 54.0
25 18,519 29,005 48,223 38.4 60.1
26 20,244 40,656 62,063 32.6 65.5

 

The new NY 20

I was looking through election data this evening and discovered that the new court drawn NY 20 Congressional District is very friendly to Bernie Sanders style socialists, even more so than the old district. Should lead to some very interesting primaries.

Special Master ADP

Special Master State Senate Districts with 2018 ADP

The 2018 ADP shown in the lower right is calculated by 2018 Gov, US Senate, Attorney General, Comptroller, Congress (where D&R candidates), NY Senate (where D&R) and NY Assembly (where D&R).Β 

Special Master Congressional Districts with 2018 ADP

The 2018 ADP shown in the lower right is calculated by 2018 Gov, US Senate, Attorney General, Comptroller, Congress (where D&R candidates), NY Senate (where D&R) and NY Assembly (where D&R).

30 Zip Codes with the Fewest People Per Square Mile πŸ“¨

30 Zip Codes with the Fewest People Per Square Mile πŸ“¨

1HamiltonHoffmeister 13353
2HamiltonPiseco 12139
3St. LawrenceChildwold 12922
4HamiltonLong Lake 12847
5EssexNorth Hudson 12855
6HamiltonRaquette Lake 13436
7HerkimerEagle Bay 13331
8UlsterClaryville 12725
9HamiltonInlet 13360
10St. LawrenceCranberry Lake 12927
11HamiltonBlue Mountain Lake 12812
12HamiltonLake Pleasant 12108
13St. LawrenceSouth Colton 13687
14EssexNewcomb 12852
15WarrenNorth River 12856
16EssexSaint Huberts 12943
17EssexMinerva 12851
18GreeneWest Kill 12492
19HerkimerOld Forge 13420
20OswegoRedfield 13437
21HamiltonIndian Lake 12842
22FranklinOwls Head 12969
23EssexNew Russia 12964
24OneidaForestport 13338
25HamiltonWells 12190
26FranklinSaint Regis Falls 12980
27St. LawrenceParishville 13672
28LewisGlenfield 13312
29St. LawrenceOswegatchie 13670
30St. LawrenceDegrasse 13684

The Great Replacement

The Great Replacement

I’ve been thinking a lot about the theory of the Great Replacement that has been in the news a lot lately. The theory basically suggests that’s Democrats are encouraging a lot of immigrants, especially undocumented immigrants, to move in an effort to tilt elections in their favor. But immigrants are hardly a monolithic voting block – as they come from all over the world with different political cultures.

Immigrants often are incredibly hard working, as often they come from places where life is more difficult then the life in laid-back America. As such, many immigrants go into business, and many business people are conservative, if not right-wing reactionaries. Many immigrants are fleeing socialist countries and dictatorships, and the last thing they want is an overbearing government to greet them in America. Most immigrants, while retaining their unique cultures, also want to integrate as quickly as possible into American culture. By a generation, few immigrants are much different then generations who have lived here for many generations.

I have my doubts that Republican Party is in much danger of becoming a long-term minority party. Republicans control 28 governorship’s in America, including 23 states where Republicans control all branches of government. The Supreme Court has an increasingly conservative majority, adjudicating laws in ways that favor more restrictions on abortion and less restrictions on gun ownership. With people unhappy with inflation and the COVID, the Democrats who control the White House and Congress are likely to get to voted out. Congress may be fully in Republican hands come 2023. In a few years, things will likely pivot back and forth again.

If anything, politics is healthy in America. Parties are and remain very competitive. New voices are always good, as are new perspectives, but I don’t think we should fear drastic change, as our country is diverse, and power is spread out. Immigrants aren’t a unified group, and they add perspectives but do not detract from our values as Americans.

Here is the R script I am using for creating the maps and graphs of ADP for the State Senate and Congressional Districts

Here is the R script I am using for creating the maps and graphs of ADP for the State Senate and Congressional Districts. It should be interesting to see how it compares to the maps released by the special master. You can get the data here.

library(tidyverse)
library(tigris)
library(ggtext)
library(sf)

rm(list=ls())

# load latfor data, VTD level data is okay for larger districts
# although latfor also provides block level data which is better as
# those centroids should always be inside the district you are comparing
vt20 <- read_csv(‘2020vote_vtd.csv’)
vt20$GEOID <- as.character(vt20$GEOID)

# edADP – This code has to be as efficient as possible, as
# it can not be vectorized, due to the need to check to see
# if a race is competitive before including. We also don’t want
# to search for columns here, due to the CPU time cost over thousands
# of rows, each time searched.
edADP <- function(ed, demcols) {
 
  # making sure everything is numeric helps with speed
  ed <- ed %>% as.numeric
 
  # store a total of dems, rep, ballot votes
  dem <- 0; rep <- 0; ballot <- 0;
 
  # use democratic columns as an index for all other columns
  for (pos in demcols) {
    
    # if either Democratic or Republican line is 0, then that
    # multiplies out to zero as x * 0 = 0. Then negate and skip to next race
    if (!(ed[pos] *  ed[pos+1])) next;
    
    # to minimize costs, we just use row positions based on positition relative to
    # democratic rows
    dem <- dem + ed[pos]
    rep <- rep + ed[pos+1]   
    ballot <- ballot + ed[pos-1] – ed[pos+6]
  }
 
  # return the vote totals for all competitive races to bind to the main table
  return (c(‘dem’=dem, ‘rep’=rep, ‘ballot’=ballot))
}

dfADP <- function(df, yr=18) {
  # find position of dem cols before starting to minimize CPU costs when
  # doing the row-by-row math with apply
  demcols <- c()
 
  i <- 1
  for (dfcols in colnames(df)) {
    if (substr(dfcols, 1, 5) == str_c(‘DEM’,yr)) demcols <- append(demcols, i)
    i <- i+1
  }
 
  # Calculate ADP, row by row then bind to the dataframe
  return(cbind(df,df %>% apply(1, edADP, demcols) %>% t))
}

# calculate ADP from VT20 data
adp <- vt20 %>% dfADP(18)

# join the VTD data to voting districts
vtd <- voting_districts(‘ny’, cb=T) %>%
  inner_join(adp, by=c(‘GEOID20’=’GEOID’)) %>%
  st_transform(‘epsg:3857’)

# load the shapefile want to join the VTDs against
a22 <- read_sf(‘/home/andy/Documents/GIS.Data/2022-districts/Congress22.shp’) %>% st_transform(‘epsg:3857’)

name <- ‘Congress’

# for reasons of speed, convert VTDs to centroids, then join against
# the new districts
join <- vtd %>% st_centroid() %>%
  st_join(a22)

# calculate the ADP by dividing democratic votes in all competitive races against
# democrats and republican. Add column for coloring
join %>% st_drop_geometry() %>% group_by(DISTRICT) %>%
  summarise(ADP = (sum(dem)/sum(dem+rep))*100,
            color=ifelse(ADP > 60, ‘Democratic (>60%)’,
                         ifelse(ADP > 50, ‘Lean Democratic (>50%)’,
                                ifelse(ADP > 40, ‘Lean Republican (>40%)’, ‘Republican (<40%)’)))
            ) %>% drop_na() %>%
  ggplot(aes(DISTRICT, ADP, fill=color)) + geom_col(alpha=0.8) +
  geom_hline(yintercept = 50) +
  scale_fill_manual(values=c(‘blue’,’LightSkyBlue’,’Pink’,’Red’)) +
  scale_x_continuous(breaks=seq(1,64,1)) +
  scale_y_continuous(limits = c(0,100), breaks=seq(0,100,10)) +
  theme_minimal() +
  coord_cartesian(expand=F) +
  labs(
    title = str_c(‘<span style=”color: red;”>2018 Average</span> <span style=”color: blue;”>Democratic Performance</span> – ‘,name,’ \’22’),
    y = “2018 ADP (All races with Dem. and Rep. candidates)”,
    x = “”,
    caption=’Data Source: LATFOR VTDs’,
    tag=paste(‘Andy Arthur,’, format(Sys.Date(), format=”%-m/%-d/%y”)),
    fill = “”) +
  theme(
    text=element_text(family=’Open Sans’,size=14),
    plot.title=element_textbox( hjust=0.5, face=’bold’,size=34),
    axis.text = element_text(size=12),
    plot.background = element_rect(fill = “white”, color=”white”),
    plot.tag=element_text(size=10,hjust=0, color=’#555555′),
    plot.caption=element_text(size=10, color=’#555555′),
    plot.margin = unit(c(1,1,1,1), ‘lines’),
    plot.tag.position = c(0.0,0.01),
    legend.key.width = unit(4,’cm’),
    legend.key.height = unit(0.2,’cm’),
    legend.position = ‘top’
  )

fn <- str_c(’22-‘,name,’-graph’)
ggsave(paste(‘/tmp/’,fn,’.jpg’,sep=”), width=1920, height=1200, units=’px’, dpi=120)
ggsave(paste(‘/tmp/’,fn,’.svg’,sep=”), width=1920, height=1200, units=’px’, dpi=130, device = grDevices::svg)

# calculate the ADP by dividing democratic votes in all competitive races against
# democrats and republican. Add column for coloring
join %>% st_drop_geometry() %>% group_by(DISTRICT) %>%
  summarise(ADP = (sum(dem)/sum(dem+rep))*100,
            color=ifelse(ADP > 60, ‘Democratic (>60%)’,
            ifelse(ADP > 50, ‘Lean Democratic (>50%)’,
            ifelse(ADP > 40, ‘Lean Republican (>40%)’, ‘Republican (<40%)’))))  %>%
  drop_na() %>%
  inner_join(a22, by=(‘DISTRICT’)) %>%
  ggplot(aes(geometry=geometry, fill=color)) + geom_sf(size=0.5) +
  scale_fill_manual(values=c(‘blue’,’LightSkyBlue’,’Pink’,’Red’)) +
  theme_void() +
  coord_sf(expand=F) +
  labs(
    title = str_c(‘<span style=”color: red;”>2018 Average</span> <span style=”color: blue;”>Democratic Performance</span> – ‘,name,’ \’22’),
    caption=’Data Source: LATFOR VTDs’,
    tag=paste(‘Andy Arthur,’, format(Sys.Date(), format=”%-m/%-d/%y”)),
    fill = “”) +
  theme(
    text=element_text(family=’Open Sans’,size=14),
    plot.title=element_textbox( hjust=0.5, face=’bold’,size=34, margin=unit(c(0,0,1,0),’pt’)),
    plot.background = element_rect(fill = “white”, color=”white”),
    plot.tag=element_text(size=10,hjust=0, color=’#555555′),
    plot.caption=element_text(size=10, color=’#555555′),
    plot.margin = unit(c(1,1,1,1), ‘lines’),
    plot.tag.position = c(0.0,0.01),
    legend.key.width = unit(4,’cm’),
    legend.key.height = unit(.6,’cm’),
    legend.position = ‘top’
  )

fn <- str_c(’22-‘,name,’-map’)
ggsave(paste(‘/tmp/’,fn,’.jpg’,sep=”), width=1920, height=1200, units=’px’, dpi=120)
ggsave(paste(‘/tmp/’,fn,’.svg’,sep=”), width=1920, height=1200, units=’px’, dpi=130, device = grDevices::svg)

While I probably should follow politics closer then I do, I find J

While I probably should follow politics closer then I do, I find J.D. Vance’s run for US Senate to be fascinating. I really liked his book, Hillbilly Elegy. He’s somebody who knows the mud and muck of life, not some privileged suburbanite brat who has had everything handed to them on a silver plater.

We might be of opposite political parties and largely differentiating ideology, I totally get where he is coming from and I think he would be good representative for his community.