Saturday, May 18, 2019

Pre-polling in 2019

We have had a substantial pre-poll turn-out at the 2019 election.


The cope snippet for this chart follows.

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt
import sys
sys.path.append( '../bin' )
plt.style.use('../bin/markgraph.mplstyle') 

# --- downloaded data files from the AEC
pp2010 = './Data/e2010-prepoll-stats-19-08.csv'
pp2013 = './Data/e2013-prepoll-stats-07-09.csv'
pp2016 = './Data/20160702_WEB_Prepoll_Report.csv'
pp2019 = './Data/20190518_WEB_Pre-poll_Report_FE2019.csv'

# --- build a comparative table from the AEC files
elections = ['2010-08-21', '2013-09-07', '2016-07-02', '2019-05-18']
years = [e[0:4] for e in elections]
files = [globals()[y] for y in ['pp' + x for x in years]]

for (y, f, e) in zip (years, files, elections):
    print(y)
    df = pd.read_csv(f)
    
    # - delete n initial columns - sum to daily totals - calculate index
    if y == '2010':
        n = 2
    elif y in ['2013', '2016']:
        n = 3
    elif y == '2019':
        n = 4
    s = df.drop(labels=df.columns[0:n], axis=1).sum()
    s.index = pd.to_datetime(arg=s.index.values, dayfirst=True)
    s.index = s.index - np.datetime64(e, 'D')
    
    # - build up the comparative table for each election
    if y == '2010':
        table = pd.DataFrame([s], index=[y]).T
    else:
        table = table.reindex(index=pd.Index.union(table.index, s.index))
        table[y] = s

# --- tidy up - present as cumsum - metric is millions - make index an int
table = (table / 1_000_000).fillna(0).cumsum()
table.index = (table.index.values / np.timedelta64(1, 'D')).astype(int) 

# --- plot the comparatve table
ax = table.plot()
ax.set_title('Cumulative Pre-Poll Numbers')
ax.set_xlabel('Days prior to the Election')
ax.set_ylabel('Millions pre-polled') 
fig = ax.figure
fig.set_size_inches(8, 4)
fig.tight_layout(pad=1)
fig.text(0.99, 0.0025, 'marktheballot.blogspot.com.au',
        ha='right', va='bottom', fontsize='x-small', 
        fontstyle='italic', color='#999999') 
fig.savefig('./Graphs/Pre-poll.png', dpi=125) 
plt.close()

2 comments:

  1. Mate after last night you are a genius.

    Well done

    ReplyDelete
    Replies
    1. A bit lucky too - the polling data had clearly been manipulated (probably smoothed or something) - so it was suspect - but I was as surprised as anyone at the scale of the polling failure.

      Delete