[raw shortcodes=1]

On Wednesday, November 8, Jacob Frey was declared the winner of the Minneapolis mayoral election. He’d led on election night, capturing around a quarter of Minneapolis voters’ first choice selections, and after five rounds of ranked-choice voting tabulation he edged out second-place finisher Raymond Dehn.

None of this is news to someone who’s been paying attention to Minneapolis politics. But on Friday last week, city staff posted a spreadsheet containing the actual rankings for mayor of the 105,928 ballots cast in the election. (There were only 104,522 votes in the election for mayor because 1,406 ballots had no valid votes for mayor as first, second or third choices.) Of course, nothing in this data changes anything about the outcome of the election, but it can give us a little more insight into the preferences of Minneapolis voters than is possible either from the election night results or the RCV tabulation results released by the city.

First choices

At the end of ranked-choice tabulation, Jacob Frey was declared the winner with 46,716 votes — 44.7 percent of all the valid votes for mayor. 26,116 of those votes listed Frey as their first choice, 15,188 as a second choice and 5,412 as a third choice. (In cases where no valid first choice was marked, either because the ballot was left blank or the voter marked multiple selections, a valid vote in the second choice position was counted as a first choice, and likewise from third to second.)

Rank of votes for Jacob Frey

Here are the first choices of all the voters whose ballots were eventually counted for Frey:

First choice of ballots that eventually counted for Jacob Frey

[cms_ad:x104]

The biggest contributors of second- and third-choice votes to Frey were supporters of Tom Hoch. Hoch received 20,125 first-choice rankings. About half of those voters, 10,049, listed Frey as a second or third choice.

Hoch voters were not so enthusiastic about second place finisher Dehn:

First choice of ballots that eventually counted for Raymond Dehn

Dehn received just 3,265 second- and third-choice rankings from Hoch voters. Instead, his biggest source of second- and third-choice voters was voters whose first choice was Nekima Levy-Pounds. Dehn was ranked second or third by 7,042 of these 15,716 voters. Overall, Dehn had 34,971 votes at the end of ranked-choice tabulation — 33.5 percent of the vote. Those votes consisted of 18,101 first choices, 11,970 second choices, and 4,900 as a third choices.

Rank of votes for Raymond Dehn

Support for Frey and Dehn from people whose first choice was to retain incumbent mayor Betsy Hodges was pretty evenly split: 5,765 Hodges voters’ second- or third- choices counted for Frey; 5,937 for Dehn. But the biggest group of ballots that listed Hodges as their first preference ended up in the “Exhausted” pile — meaning they did not list Frey or Dehn as a second- or third- choice. The first-choice preferences of all 22,835 exhausted ballots:

First choice of ‘exhausted’ ballots

What if, contrary to the rules for tabulating ranked-choice voting, Dehn were eliminated and votes that were allocated to him were reallocated according to their second- or third- choices? Or, put another way, how many Dehn voters also ranked Frey among their choices, only lower? Counting those votes would’ve given Frey a boost of 8,053 votes, bringing his total to 54,769, or 52.4 percent of the total.

Where the votes came from

In addition to listing the first, second and third choices for all the ballots counted in the mayoral election, the data from Minneapolis also includes the ward and precinct of each of these votes. MinnPost previously mapped the first-choice votes for Minneapolis mayoral candidates based on election night data from the Secretary of State, but the data from the city allows us to look at all the votes that counted for the top candidates, not just first choices. Here’s Frey:

Portion of votes for Jacob Frey by ward

Frey won the most votes from the high-turnout 13th Ward in Southwest Minneapolis, but also received strong support from south Minneapolis’ Wards 11 and 12, Ward 7 covering the Kenwood, Lowry Hill and Bryn Mawr neighborhoods, and Ward 3, which Frey currently represents on the council.

Dehn’s support was much more concentrated on Minneapolis’ east side. His best ward was Ward 12 in the far southeast of the city. (Note the differing scale for this map.)

Portion of votes for Raymond Dehn by ward

Finally, the exhausted ballots. While the raw number of exhausted ballots is pretty similar across wards, low turnout in North Minneapolis’ Ward 4 and Ward 5 meant that exhausted ballots represent a higher percentage of all the ballots cast in those wards than in others in the city.

Portion of exhausted ballots by ward

MP.highcharts.makeChart(‘.chart-firstchoices-jacobfrey’, $.extend(true, {}, MP.highcharts.barOptions,{

xAxis: {

categories: [‘Jacob Frey’, ‘Tom Hoch’, ‘Betsy Hodges’, ‘Nekima Levy-Pounds’, ‘Other’]

},

legend: { enabled: false },

yAxis: {title: {text: “Votes”}},

tooltip: {

formatter: function() { return MP.formatters.number(this.y,0) + ” ballots”}

},

series: [{

name: “votes”,

color: “#0793AB”,

data: [26116, 10049, 5765, 3858, 928]

}]

}));

MP.highcharts.makeChart(‘.chart-firstchoices-raymonddehn’, $.extend(true, {}, MP.highcharts.barOptions,{

xAxis: {

categories: [‘Raymond Dehn’, ‘Nekima Levy-Pounds’, ‘Betsy Hodges’, ‘Tom Hoch’, ‘Other’]

},

legend: { enabled: false },

yAxis: {title: {text: “Votes”}},

tooltip: {

formatter: function() { return MP.formatters.number(this.y,0) + ” votes”}

},

series: [{

name: “votes”,

color: “#FF6633”,

data: [18101, 7042, 5937, 3265, 626]

}]

}));

MP.highcharts.makeChart(‘.chart-firstchoices-exhausted’, $.extend(true, {}, MP.highcharts.barOptions,{

xAxis: {

categories: [‘Betsy Hodges’, ‘Tom Hoch’, ‘Nekima Levy-Pounds’, ‘Other’]

},

legend: { enabled: false },

yAxis: {title: {text: “Ballots”}},

tooltip: {

formatter: function() { return MP.formatters.number(this.y,0) + ” ballots”}

},

series: [{

name: “votes”,

color: “#7A7A7A”,

data: [7213, 6811, 4816, 3995]

}]

}));

MP.highcharts.makeChart(‘.chart-voteranks-jacobfrey’, $.extend(true, {}, MP.highcharts.barOptions,{

xAxis: {

categories: [“First”, “Second”, “Third”]

},

tooltip: {

formatter: function() { return MP.formatters.number(this.y,0) + ” votes”}

},

legend: { enabled: false },

yAxis: {title: {text: “Votes”}},

series: [{

name: “votes”,

color: “#0793AB”,

data: [26116, 15188, 5412]

}]

}));

MP.highcharts.makeChart(‘.chart-voteranks-raymonddehn’, $.extend(true, {}, MP.highcharts.barOptions,{

xAxis: {

categories: [“First”, “Second”, “Third”]

},

tooltip: {

formatter: function() { return MP.formatters.number(this.y,0) + ” votes”}

},

legend: { enabled: false },

yAxis: {title: {text: “Votes”}},

series: [{

name: “votes”,

color: “#FF6633”,

data: [18101, 11970, 4900]

}]

}));

var votesjacobfrey = {“ward1”: 43.5, “ward10”: 38.0, “ward11”: 52.6, “ward12”: 44.5, “ward13”: 61.3, “ward2”: 33.6, “ward3”: 50.8, “ward4”: 38.0, “ward5”: 29.6, “ward6”: 45.8, “ward7”: 52.2, “ward8”: 36.4, “ward9”: 27.0};

var votesjacobfreyraw = {“ward8”: 3004, “ward7”: 4818, “ward2”: 2355, “ward13”: 7183, “ward4”: 2010, “ward6”: 3050, “ward9”: 1491, “ward3”: 4989, “ward10”: 2994, “ward5”: 1227, “ward1”: 3832, “ward11”: 5028, “ward12”: 4735};

$(function(){

$(‘#map-jacobfrey’).vectorMap({

map: ‘minneapolis-wards’,

backgroundColor: ‘#ffffff’,

zoomOnScroll: false,

regionLabelStyle: {

initial: {

fill: ‘#404040’

}

},

labels: {

regions: {

render: function(code){

return “W-” + code.split(“ward”)[1];

},

offsets: function(code){

return {

‘ward2’: [20,0],

‘ward6’: [0,-20],

‘ward7’: [-100, 10],

‘ward10’: [40, -50],

‘ward12’: [0, -50]

}[code];

}

}

},

series: {

regions: [{

values: votesjacobfrey,

scale: [‘#ffffff’, ‘#0793AB’],

normalizeFunction: ‘linear’,

min: 0,

//max: 8000,

legend: {

title: “Percent of votes”,

vertical: true,

labelRender: function(v) {

return MP.formatters.number(v,0);

}

},

}]

},

onRegionTipShow: function(e, el, code){

el.html(“” + el.html() + “: ” + MP.formatters.number(votesjacobfrey[code],1) + “%
(” + MP.formatters.number(votesjacobfreyraw[code],0) + ” votes)”);

}

});

});

var votesraymonddehn = {“ward1”: 35.0, “ward10”: 42.7, “ward11”: 26.1, “ward12”: 36.6, “ward13”: 21.6, “ward2”: 49.1, “ward3”: 31.7, “ward4”: 25.9, “ward5”: 29.4, “ward6”: 26.1, “ward7”: 27.3, “ward8”: 41.3, “ward9”: 50.8};

var votesraymonddehnraw = {“ward7”: 2522, “ward2”: 3436, “ward13”: 2533, “ward4”: 1369, “ward12”: 3894, “ward9”: 2801, “ward3”: 3111, “ward10”: 3370, “ward5”: 1218, “ward1”: 3086, “ward8”: 3407, “ward11”: 2490, “ward6”: 1734};

$(function(){

$(‘#map-raymonddehn’).vectorMap({

map: ‘minneapolis-wards’,

backgroundColor: ‘#ffffff’,

zoomOnScroll: false,

regionLabelStyle: {

initial: {

fill: ‘#404040’

}

},

labels: {

regions: {

render: function(code){

return “W-” + code.split(“ward”)[1];

},

offsets: function(code){

return {

‘ward2’: [20,0],

‘ward6’: [0,-20],

‘ward7’: [-100, 10],

‘ward10’: [40, -50],

‘ward12’: [0, -50]

}[code];

}

}

},

series: {

regions: [{

values: votesraymonddehn,

scale: [‘#ffffff’, ‘#FF6633’],

normalizeFunction: ‘linear’,

min: 0,

//max: 8000,

legend: {

title: “Percent of votes”,

vertical: true,

labelRender: function(v) {

return MP.formatters.number(v,0);

}

},

}]

},

onRegionTipShow: function(e, el, code){

el.html(“” + el.html() + “: ” + MP.formatters.number(votesraymonddehn[code],1) + “%
(” + MP.formatters.number(votesraymonddehnraw[code],0) + ” votes)”);

}

});

});

var votesexhausted = {“ward1”: 21.5, “ward10”: 19.3, “ward11”: 21.3, “ward12”: 18.9, “ward13”: 17.0, “ward2”: 17.3, “ward3”: 17.5, “ward4”: 36.2, “ward5”: 41.0, “ward6”: 28.1, “ward7”: 20.5, “ward8”: 22.4, “ward9”: 22.2};

var votesexhaustedraw = {“ward8”: 1848, “ward7”: 1889, “ward2”: 1213, “ward13”: 1997, “ward9”: 1223, “ward12”: 2009, “ward4”: 1915, “ward3”: 1722, “ward10”: 1521, “ward5”: 1701, “ward1”: 1894, “ward11”: 2034, “ward6”: 1869};

$(function(){

$(‘#map-exhausted’).vectorMap({

map: ‘minneapolis-wards’,

backgroundColor: ‘#ffffff’,

zoomOnScroll: false,

regionLabelStyle: {

initial: {

fill: ‘#404040’

}

},

labels: {

regions: {

render: function(code){

return “W-” + code.split(“ward”)[1];

},

offsets: function(code){

return {

‘ward2’: [20,0],

‘ward6’: [0,-20],

‘ward7’: [-100, 10],

‘ward10’: [40, -50],

‘ward12’: [0, -50]

}[code];

}

}

},

series: {

regions: [{

values: votesexhausted,

scale: [‘#ffffff’, ‘#7A7A7A’],

normalizeFunction: ‘linear’,

min: 0,

//max: 8000,

legend: {

title: “Percent of votes”,

vertical: true,

labelRender: function(v) {

return MP.formatters.number(v,0);

}

},

}]

},

onRegionTipShow: function(e, el, code){

el.html(“” + el.html() + “: ” + MP.formatters.number(votesexhausted[code],1) + “%
(” + MP.formatters.number(votesexhaustedraw[code],0) + ” votes)”);

}

});

});

}(jQuery));[/raw]

Join the Conversation

10 Comments

  1. A ballot that allows voters to rank their preferences for a greater number of candidates would have had different results, I think with the number of significant candidates that Minneapolis had this time around. No way to have a deeper look at the shallow implementation of ranked choice/single transferable voting in Minneapolis with their three choices versus the six in St. Paul.

    Still, a much fairer result could have been had with range voting, sometimes known as score voting where a voter would rank all the candidates they wish by assigning them a score across a range of numbers just as Olympic Games judges do for athletic performances with the highest average score (a candidate would have to have over 50% of voters score them to win in an election contest). No voting method comes close to range/score voting in accurately measuring the preference of the electorate.

  2. Ranked choice ballots

    It seems weird to me why there were so many spoiled ballots. It seems like the directions must not have been very good. This is very sad. They need to put a better explanation on the ballots and also they should be explaining the process to people when they are voting absentee which they could do because they look up to see if you are registered any way. This part of the process would have rendered more use able ballots. This really bothers me the number of people marking multiples in the wrong place. The blank ones are disturbing, too. I am sharing this post with Representative Raymond Dehn.

  3. I find it fascinating, that in wards Two, Three, and Thirteen, there were only about 17% exhausted ballots for mayor, versus higher numbers in all other wards. Obviously, most of us in those three wards are playing the ranked-choice game as instructed.

    It’s not hard to rank choices; the trick is in the counting and most voters aren’t involved with that.

    I disagree with Bill Kahn that there were more than three, maybe four, viable mayoral candidates this time around. We don’t need to go to six choices in rankings.

    But: Take a look at who voted ultimately (in any ranking) for Frey, versus those who voted (in any ranking) for Dehn : there’s a money divide there, and a palpable ideological difference in the one-two-three choice coalitions there. Now that’s revealing!

    Just one question: So Frey only got a grand total of some 45% of the ballots? (Bill Kahn assures me that that is “an effective majority,” but I count. . . 45%, which is a plurality of the votes).

    1. Plurality

      I’m not sure what an “effective majority” is, but when fewer than 50 percent of people who cast valid ballots for the winner, he or she does not have a majority. One of the selling points of RCV is the claim that it ensures majority winners. Unfortunately, that claim is false, as evidenced by two straight Minneapolis mayoral elections with non-majority winners.

      I guess you could argue that the exhausted ballots don’t count, and that Frey got a majority of the non-exhausted ballots. But when you have to disenfranchise people because they voted for the wrong people to get your “majority,” there’s a problem with the system.

    2. The word I used in the exchange I had with Ms. Sullivan elsewhere, was “functional,” not ‘practical’, I’m pretty sure. And there were likely plenty of folks who voted for neither Dehn nor Frey, and with only three choices, their ballots would be exhausted quite early, i.e., there is nothing wrong with instant runoff/single transferable voting in Minneapolis but the implementation.

      1. Majority

        You can call it practical or functional or whatever you want. But you can’t call it a majority, because it isn’t.

  4. “Only” 45%

    Yes, Constance, just under 45%. He got zero % of my Hodges/Dehn/Al Flowers card (Jacob’s fine. I’ll livw) but I would say that 45% is still impressive in a race that had passionate support for 4 others. Hodges was a little below 50% in a win that may have had a bigger field, but arguably less magnetic attraction. Memory fades. I know people had favorites, but nothing like this year’s counterbalance from the north and south sides, with folks who put heart and soul into Levy-Pounds and Ray Dehn. It looks like about 8% of people favored Levy-Pounds but would settle for Frey. I’m surprised it’s that many. If Dehn was their natural second choice, then there was a strong ABB (Anyone but Betsy) contingent that had Frey 3rd. I’m trying to picture a voter who had Levy-Pounds top and Frey elsewhere? A socially just SW Mpls. liberal who hearted Nekima but could not abide Betsy? Who would rate L-P first and skip Rey Dehn? Lastly, I am surprised Dehn did not get more support from “Northwest” Minneapolis. Isn’t that home turf? Keewaydin liked him. Camden, not so much? Maybe the votes were close to the edges of the percentile cuts and the graph is misleading. What was Betsy’s support in the high turnout areas? After Frey and Hoch, there wouldn’t seem to be much left.

    1. only 45%

      I think Jim Meyer has said just right. This was a race where the peple had choices, Whenthe fees go up and fewer are in te mix, a actual majority will emerge. I like RCV!

      In the caucus system a very small number of folks pick our candidates and the plurality to elect is much smaller.

Leave a comment