Guest User

Untitled

a guest
Nov 6th, 2020
520
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.03 KB | None | 0 0
  1. import itertools
  2. import matplotlib.pyplot as plt
  3. import pandas as pd
  4. import pprint
  5. import requests
  6.  
  7. presidential_json = requests.get('https://static01.nyt.com/elections-assets/2020/data/api/2020-11-03/national-map-page/national/president.json').json()
  8. senate_json = requests.get('https://static01.nyt.com/elections-assets/2020/data/api/2020-11-03/national-map-page/national/senate.json').json()
  9.  
  10. def collapse_results_by_party(results_by_candidate, candidates):
  11. results_by_party = {}
  12. for candidate, count in results_by_candidate.iteritems():
  13. party = candidates[candidate]['party']
  14. results_by_party[party] = results_by_party.get(party, 0) + count
  15.  
  16. return results_by_party
  17.  
  18. def race_json_to_party_county_results(race_json):
  19. county_results = []
  20. for r in race_json['data']['races']:
  21. for candidate in r['candidates']:
  22. if candidate['party_id'] == 'republican':
  23. candidate['party'] = 'rep'
  24. elif candidate['party_id'] == 'democrat':
  25. candidate['party'] = 'dem'
  26. else:
  27. candidate['party'] = 'trd'
  28. candidates = { candidate['candidate_key']: candidate for candidate in r['candidates'] }
  29.  
  30. for c in r['counties']:
  31. c['state'] = r['state_name']
  32. if c['name'] == 'Baca':
  33. pprint.pprint(c)
  34. results = collapse_results_by_party(c['results'], candidates)
  35. absentee_results = collapse_results_by_party(c['results_absentee'], candidates)
  36. for party in ['rep', 'dem', 'trd']:
  37. c['had_{}'.format(party)] = party in results
  38. print c['had_{}'.format(party)]
  39. c['results_{}'.format(party)] = results.get(party, 0)
  40. c['absentee_results_{}'.format(party)] = absentee_results.get(party, 0)
  41.  
  42. c.pop('results_absentee')
  43. c.pop('results')
  44. county_results.append(c)
  45. return county_results
  46.  
  47. pres_county_results = race_json_to_party_county_results(presidential_json)
  48. senate_county_results = race_json_to_party_county_results(senate_json)
  49.  
  50. pres_results_df = pd.DataFrame.from_records(pres_county_results)
  51. pres_results_df['rep_share'] = pres_results_df['results_rep'] / pres_results_df['votes']
  52. pres_results_df['dem_share'] = pres_results_df['results_dem'] / pres_results_df['votes']
  53. pres_results_df['trd_share'] = pres_results_df['results_trd'] / pres_results_df['votes']
  54. #pres_results_df.set_index('name', inplace=True)
  55.  
  56. senate_results_df = pd.DataFrame.from_records(senate_county_results)
  57. senate_results_df['rep_share'] = senate_results_df['results_rep'] / senate_results_df['votes']
  58. senate_results_df['dem_share'] = senate_results_df['results_dem'] / senate_results_df['votes']
  59. senate_results_df['trd_share'] = senate_results_df['results_trd'] / senate_results_df['votes']
  60.  
  61. joint_results_df = pres_results_df.merge(senate_results_df, on=['name', 'state'], suffixes=['_pres', '_sen']).reset_index()
  62.  
  63. joint_results_df.to_csv('data/joint_results.csv', encoding='utf-8')
Add Comment
Please, Sign In to add comment