Guest User

Untitled

a guest
Nov 8th, 2020
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.45 KB | None | 0 0
  1. import pandas as pd
  2. import pprint
  3. import requests
  4.  
  5. state_codes = ['FL', 'MI', 'PA']
  6.  
  7. def collapse_results_by_party(results_by_candidate):
  8. candidates = {
  9. 'trumpd': 'rep',
  10. 'bidenj': 'dem'
  11. }
  12. results_by_party = {}
  13. for candidate, count in results_by_candidate.iteritems():
  14. party = candidates.get(candidate, 'trd')
  15. results_by_party[party] = results_by_party.get(candidate, 0) + (count or 0)
  16.  
  17. return results_by_party
  18.  
  19. def flatten_results_to_dict(d, key, results_by_candidate):
  20. results_by_party = collapse_results_by_party(results_by_candidate)
  21. for party in ['dem', 'rep', 'trd']:
  22. d['{}_{}'.format(key, party)] = results_by_party[party]
  23.  
  24. all_results = {}
  25. for state_code in state_codes:
  26. print 'Downloading {}'.format(state_code)
  27. state_result = requests.get('https://static01.nyt.com/elections-assets/2020/data/api/2020-11-03/precincts/{}GeneralConcatenator-latest.json'.format(state_code)).json()
  28. all_results[state_code] = state_result
  29.  
  30. print 'Processing precincts'
  31. precinct_records = []
  32. for state, state_result in all_results.iteritems():
  33. print 'Processing {}'.format(state)
  34. precinct_totals = None
  35. if state == 'FL' or state == 'PA':
  36. precinct_totals = state_result['precinct_totals']
  37. elif state == 'MI':
  38. precinct_totals = state_result['precincts']
  39.  
  40. for precinct_result in precinct_totals:
  41. flatten_results_to_dict(precinct_result, 'votes', precinct_result['results'])
  42. precinct_result['state'] = state
  43. precinct_result.pop('results')
  44. precinct_records.append(precinct_result)
  45.  
  46. print 'Processing precinct vote types'
  47. precinct_vote_type_records = []
  48. for state, state_result in all_results.iteritems():
  49. print 'Processing {}'.format(state)
  50. if state == 'MI':
  51. continue
  52.  
  53. precinct_vote_types = state_result['precinct_by_vote_type']
  54.  
  55. for precinct_vote_type in precinct_vote_types:
  56. flatten_results_to_dict(precinct_vote_type, 'votes', precinct_vote_type['results'])
  57. precinct_vote_type['state'] = state
  58. print precinct_vote_type
  59. precinct_vote_type.pop('results')
  60. precinct_vote_type_records.append(precinct_vote_type)
  61.  
  62. p_df = pd.DataFrame.from_records(precinct_records)
  63. pvt_df = pd.DataFrame.from_records(precinct_vote_type_records)
  64. p_df.to_csv('data/nyt_precinct.csv', encoding='utf-8')
  65. pvt_df.to_csv('data/nyt_precinct_vote_types.csv', encoding='utf-8')
Add Comment
Please, Sign In to add comment