Advertisement
Guest User

Untitled

a guest
Nov 9th, 2020
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.63 KB | None | 0 0
  1. import pandas as pd
  2. import pprint
  3. import requests
  4. import os
  5.  
  6. def collapse_results_by_party(results_by_candidate, candidates):
  7.     results_by_party = {}
  8.     for candidate, count in results_by_candidate.items():
  9.         party = candidates[candidate]['party']
  10.         results_by_party[party] = results_by_party.get(party, 0) + count
  11.  
  12.     return results_by_party
  13.  
  14. states = [
  15.  'Alaska', 'Alabama', 'Arkansas', 'Arizona', 'California', 'Colorado',
  16.  'Connecticut', 'Delaware', 'Florida', 'Georgia',
  17.  'Hawaii', 'Iowa', 'Idaho', 'Illinois', 'Indiana', 'Kansas', 'Kentucky',
  18.  'Louisiana', 'Massachusetts', 'Maryland', 'Maine', 'Michigan',
  19.  'Minnesota', 'Missouri', 'Mississippi', 'Montana', 'North Carolina',
  20.  'North Dakota', 'Nebraska', 'New Hampshire', 'New Jersey', 'New Mexico',
  21.  'Nevada', 'New York', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania',
  22.  'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas',
  23.  'Utah', 'Virginia', 'Vermont', 'Washington', 'Wisconsin',
  24.  'West Virginia', 'Wyoming',
  25. ]
  26.  
  27. all_results = {}
  28. for state in states:
  29.     print('Downloading {}'.format(state))
  30.     formatted_state = state.lower().replace(' ', '-')
  31.     state_results = requests.get('https://static01.nyt.com/elections-assets/2020/data/api/2020-11-03/race-page/{}/president.json'.format(formatted_state)).json()
  32.     all_results[formatted_state] = state_results
  33.  
  34. records = []
  35. for state, state_results in all_results.items():
  36.     race = state_results['data']['races'][0]
  37.  
  38.     for candidate in race['candidates']:
  39.         if candidate['party_id'] == 'republican':
  40.             candidate['party'] = 'rep'
  41.         elif candidate['party_id'] == 'democrat':
  42.             candidate['party'] = 'dem'
  43.         else:
  44.             candidate['party'] = 'trd'
  45.     candidates = { candidate['candidate_key']: candidate for candidate in race['candidates'] }
  46.  
  47.     for data_point in race['timeseries']:
  48.         data_point['state']             = state
  49.         data_point['expected_votes']    = race['tot_exp_vote']
  50.         data_point['trump2016']         = race['trump2016']
  51.         data_point['votes2012']         = race['votes2012']
  52.         data_point['votes2016']         = race['votes2016']
  53.  
  54.         vote_shares = collapse_results_by_party(data_point['vote_shares'], candidates)
  55.         for party in ['rep', 'dem', 'trd']:
  56.             data_point['vote_share_{}'.format(party)] = vote_shares.get(party, 0)
  57.  
  58.         data_point.pop('vote_shares')
  59.         records.append(data_point)
  60.  
  61.  
  62. if not os.path.exists('data'):
  63.     os.makedirs('data')
  64.  
  65. time_series_df = pd.DataFrame.from_records(records)
  66. time_series_df.to_csv('data/nyt_ts.csv', encoding='utf-8')
  67.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement