Skip to content

Commit

Permalink
fixed closest margins table
Browse files Browse the repository at this point in the history
  • Loading branch information
wmentrekin committed Oct 27, 2020
1 parent 66d1dd4 commit 8ff30f4
Show file tree
Hide file tree
Showing 10 changed files with 32 additions and 215 deletions.
114 changes: 13 additions & 101 deletions Model.py
Original file line number Diff line number Diff line change
Expand Up @@ -416,15 +416,16 @@ def visualize(margins):
m_.plot(x1,y1,color=light_gray,linewidth=0.8)
m_.plot(x2,y2,color=light_gray,linewidth=0.8)

plt.savefig('map.png')
plt.savefig('results/map.png')

#Output CSV files with result data
def write_results():

#Create CSV for States with closest projected margins
closest_margins = []
closest_margins_fields = ['State', 'Projected Margin', 'Projected Winner']
closest_margins.append(closest_margins_fields)
closest_margins_rows = []
closest_margins_rows.append(closest_margins_fields)
for state in State.states:
row = []
if state.simulations['margin'] < 10:
Expand All @@ -435,113 +436,24 @@ def write_results():
closest_margins_rows = sorted(closest_margins_rows, key=lambda row: row[1])
for row in closest_margins_rows:
row[1] = str(row[1]) + '%'
for i in range(len(closest_margins_rows)):
closest_margins.append(closest_margins_rows[i])

#Create HTML Table
cols = ["<td>{0}</td>".format( "</td><td>".join(t)) for t in closest_margins_rows]
cols = ["<td>{0}</td>".format( "</td><td>".join(t)) for t in closest_margins]
rows = "<tr>{0}</tr>".format( "</tr>\n<tr>".join(cols))
display = open("tables/closest_margins.html", 'w')
display.write("""<HTML> <body>
file = open("tables/closest_margins.html", 'r+')
file.truncate(0)
file.close()
file = open("tables/closest_margins.html", 'w')
file.write("""<HTML> <body>
<h2>Closest Projected Margins of Victory</h2>
<table>
<table>
{0}
</table>
</body>
</HTML>""".format(rows))

with open('results/closest_margins.csv', 'w') as csv_file:
csv_writer = csv.writer(csv_file)
csv_writer.writerows(closest_margins_rows)

#Create CSV for most lopsided States
lopsided_fields = ['State', 'Projected Margin', 'Projected Winner']
lopsided_rows = []
for state in State.states:
row = []
if state.simulations['margin'] > 25:
row.append(state.name)
row.append(state.simulations['margin'])
row.append(state.simulations['winner'])
lopsided_rows.append(row)
lopsided_rows = sorted(lopsided_rows, key=lambda row: row[1], reverse=True)
for row in lopsided_rows:
row[1] = str(row[1]) + '%'

with open('results/lopsided.csv', 'w') as csv_file:
csv_writer = csv.writer(csv_file)
csv_writer.writerow(lopsided_fields)
csv_writer.writerows(lopsided_rows)

#Create CSV for States that are projected to flip from 2016
flips_fields = ['State', '2016 Winner', '2016 Margin', '2020 Projected Winner', '2020 Projected Margin']
flips_rows = []
for state in State.states:
row = []
d_16 = state.election16['D']
r_16 = state.election16['R']
winner_16 = 'Donald Trump' if r_16 > d_16 else 'Hillary Clinton'
winner_20 = state.simulations['winner']
if (winner_16 == 'Donald Trump' and winner_20 == 'Joe Biden') or (winner_16 == 'Hillary Clinton' and winner_20 == 'Donald Trump'):
row.append(state.name)
row.append(winner_16)
margin_16 = round(math.fabs(round(100 * d_16 / state.election16['Total'], 1) - round(100 * r_16 / state.election16['Total'], 1)), 2)
row.append(margin_16)
row.append(winner_20)
row.append(state.simulations['margin'])
flips_rows.append(row)
flips_rows = sorted(flips_rows, key=lambda row: row[4] + row[2])
for row in flips_rows:
row[2] = str(row[2]) + '%'
row[4] = str(row[4]) + '%'

with open('results/flips.csv', 'w') as csv_file:
csv_writer = csv.writer(csv_file)
csv_writer.writerow(flips_fields)
csv_writer.writerows(flips_rows)

#Create CSV for tossup States
tossups_fields = ['State', 'Trump Chance', 'Biden Chance']
tossups_rows = []
for state in State.states:
row = []
if 40 < state.simulations['win_pct_d'] < 60 and 40 < state.simulations['win_pct_r'] < 60:
row.append(state.name)
row.append(state.simulations['win_pct_r'])
row.append(state.simulations['win_pct_d'])
tossups_rows.append(row)
tossups_rows = sorted(tossups_rows, key=lambda row: math.fabs(row[2] - row[1]))
for row in tossups_rows:
row[1] = str(row[1]) + '%'
row[2] = str(row[2]) + '%'

with open('results/tossups.csv', 'w') as csv_file:
csv_writer = csv.writer(csv_file)
csv_writer.writerow(tossups_fields)
csv_writer.writerows(tossups_rows)

#Create CSV for full results
full_results_fields = ['State', 'Projected Winner', 'Trump Projected Vote', 'Biden Projected Vote', 'Projected Margin', 'Trump Chance', 'Biden Chance']
full_results_rows = []
for state in State.states:
row = []
row.append(state.name)
row.append(state.simulations['winner'])
row.append(state.simulations['vote_pct_r'])
row.append(state.simulations['vote_pct_d'])
row.append(state.simulations['margin'])
row.append(state.simulations['win_pct_r'])
row.append(state.simulations['win_pct_d'])
full_results_rows.append(row)
for row in full_results_rows:
row[2] = str(row[2]) + '%'
row[3] = str(row[3]) + '%'
row[4] = str(row[4]) + '%'
row[5] = str(row[5]) + '%'
row[6] = str(row[6]) + '%'

with open('results/full_results.csv', 'w') as csv_file:
csv_writer = csv.writer(csv_file)
csv_writer.writerow(full_results_fields)
csv_writer.writerows(full_results_rows)
file.close()

#Run Model
def model():
Expand Down
2 changes: 1 addition & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ <h2>PAGE STILL UNDER CONSTRUCTION</h2>

<div class="container">
<h2>Average Margin of Victory</h2>
<img src="map.png" alt="Average Margin of Victory" width="800" height="536">
<img src="results/map.png" alt="Average Margin of Victory" width="800" height="536">
</div>

<div w3-include-html="tables/closest_margins.html"></div>
Expand Down
Binary file removed map.png
Binary file not shown.
18 changes: 0 additions & 18 deletions results/closest_margins.csv

This file was deleted.

6 changes: 0 additions & 6 deletions results/flips.csv

This file was deleted.

52 changes: 0 additions & 52 deletions results/full_results.csv

This file was deleted.

15 changes: 0 additions & 15 deletions results/lopsided.csv

This file was deleted.

Binary file added results/map.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 0 additions & 5 deletions results/tossups.csv

This file was deleted.

35 changes: 18 additions & 17 deletions tables/closest_margins.html
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
<HTML> <body>
<h2>Closest Projected Margins of Victory</h2>
<table>
<tr><td>North Carolina</td><td>0.12%</td><td>Donald Trump</td></tr>
<tr><td>Arizona</td><td>0.6%</td><td>Joe Biden</td></tr>
<tr><td>Ohio</td><td>1.2%</td><td>Donald Trump</td></tr>
<tr><td>Georgia</td><td>1.23%</td><td>Donald Trump</td></tr>
<tr><td>Nevada</td><td>1.29%</td><td>Joe Biden</td></tr>
<tr><td>Florida</td><td>2.03%</td><td>Joe Biden</td></tr>
<tr><td>Wisconsin</td><td>2.49%</td><td>Joe Biden</td></tr>
<tr><td>Texas</td><td>3.48%</td><td>Donald Trump</td></tr>
<tr><td>Pennsylvania</td><td>4.05%</td><td>Joe Biden</td></tr>
<tr><td>Michigan</td><td>4.07%</td><td>Joe Biden</td></tr>
<tr><td>Iowa</td><td>4.43%</td><td>Donald Trump</td></tr>
<tr><td>Virginia</td><td>4.84%</td><td>Joe Biden</td></tr>
<tr><td>Minnesota</td><td>4.98%</td><td>Joe Biden</td></tr>
<tr><td>New Hampshire</td><td>5.43%</td><td>Joe Biden</td></tr>
<table>
<tr><td>State</td><td>Projected Margin</td><td>Projected Winner</td></tr>
<tr><td>North Carolina</td><td>0.38%</td><td>Donald Trump</td></tr>
<tr><td>Arizona</td><td>0.49%</td><td>Joe Biden</td></tr>
<tr><td>Nevada</td><td>1.25%</td><td>Joe Biden</td></tr>
<tr><td>Georgia</td><td>1.3%</td><td>Donald Trump</td></tr>
<tr><td>Ohio</td><td>1.41%</td><td>Donald Trump</td></tr>
<tr><td>Florida</td><td>2.08%</td><td>Joe Biden</td></tr>
<tr><td>Wisconsin</td><td>2.53%</td><td>Joe Biden</td></tr>
<tr><td>Texas</td><td>3.51%</td><td>Donald Trump</td></tr>
<tr><td>Michigan</td><td>3.97%</td><td>Joe Biden</td></tr>
<tr><td>Pennsylvania</td><td>4.06%</td><td>Joe Biden</td></tr>
<tr><td>Iowa</td><td>4.48%</td><td>Donald Trump</td></tr>
<tr><td>Virginia</td><td>4.83%</td><td>Joe Biden</td></tr>
<tr><td>Minnesota</td><td>4.95%</td><td>Joe Biden</td></tr>
<tr><td>New Hampshire</td><td>5.52%</td><td>Joe Biden</td></tr>
<tr><td>South Carolina</td><td>7.56%</td><td>Donald Trump</td></tr>
<tr><td>Alaska</td><td>8.15%</td><td>Donald Trump</td></tr>
<tr><td>Colorado</td><td>9.77%</td><td>Joe Biden</td></tr>
<tr><td>Alaska</td><td>8.07%</td><td>Donald Trump</td></tr>
<tr><td>Colorado</td><td>9.86%</td><td>Joe Biden</td></tr>
</table>
</body>
</HTML>

0 comments on commit 8ff30f4

Please sign in to comment.