【Python】美国大选献金项目数据分析(concat(),lambda(),groupby(),pivot_table())

任务要求

  1. 读入美国总统选举政治献金数据文件,合并三个文件的数据

  2. 查看数据基本信息

  3. 缺失值处理,(填充 ‘NOT PROVIDE’)

  4. 通过给定字典,添加候选人对应党派信息
    parties = {
    ‘Bachmann, Michelle’: ‘Republican’,
    ‘Romney, Mitt’: ‘Republican’,
    ‘Obama, Barack’: ‘Democrat’,
    “Roemer, Charles E. ‘Buddy’ III”: ‘Republican’,
    ‘Pawlenty, Timothy’: ‘Republican’,
    ‘Johnson, Gary Earl’: ‘Republican’,
    ‘Paul, Ron’: ‘Republican’,
    ‘Santorum, Rick’: ‘Republican’,
    ‘Cain, Herman’: ‘Republican’,
    ‘Gingrich, Newt’: ‘Republican’,
    ‘McCotter, Thaddeus G’: ‘Republican’,
    ‘Huntsman, Jon’: ‘Republican’,
    ‘Perry, Rick’: ‘Republican’
    }

  5. 统计不同党派获得政治献金的捐献总额。

  6. 按照职业汇总政治献金的总额,输出献金总额最大的前5个职业,注意需要做职业类型的去重。给出字典:
    occupation = {‘INFORMATION REQUESTED PER BEST EFFORTS’:‘NOT PROVIDE’,
    ‘INFORMATION REQUESTED’:‘NOT PROVIDE’,
    ‘C.E.O.’:‘CEO’,
    ‘LAWYER’:‘ATTORNEY’,
    ‘SELF’:‘SELF-EMPLOYED’,
    'SELF EMPLOYED ':‘SELF-EMPLOYED’}

  7. 通过数据可视化展示,各候选人获得的赞助总金额,注意需要先去除政治献金额小于 “0” 的异常数据

  8. 分析前两名的候选人:不同职业对他两人的支持程度、不同公司的支持度和不同州的支持度。

附加题:政治献金的时间分析(最早时间,那天最多,那天最少?)

部分内容分享

1、读取数据

import numpy as np
import pandas as pd
#1.	读入美国总统选举政治献金数据文件,合并三个文件的数据
c1 = pd.read_csv('usa_elect/contb_01.csv')
c2 = pd.read_csv('usa_elect/contb_02.csv')
c3 = pd.read_csv('usa_elect/contb_03.csv')
c = pd.concat((c1,c2,c3))
#c = pd.concat([c1,c2,c3],axis = 0) #按列合并

2、查看基本信息

#2.	查看数据基本信息
print(c.head())   #列出前五个数据
print(c.info())   #查看每一列基本信息(可看出缺失值)
print(c.describe())   #表示数据信息(可看出异常值)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
3、缺失值处理

#3.	缺失值处理,(填充 ‘NOT PROVIDE’)
c.fillna('NOT PROVIDE',inplace = True)
print(c.info())   #通过info验证是否填充成功

在这里插入图片描述

4、添加党派信息

#4.	通过给定字典,添加候选人对应党派信息
parties = {
  'Bachmann, Michelle': 'Republican',
  'Romney, Mitt': 'Republican',
  'Obama, Barack': 'Democrat',
  "Roemer, Charles E. 'Buddy' III": 'Republican',
  'Pawlenty, Timothy': 'Republican',
  'Johnson, Gary Earl': 'Republican',
  'Paul, Ron': 'Republican',
  'Santorum, Rick': 'Republican',
  'Cain, Herman': 'Republican',
  'Gingrich, Newt': 'Republican',
  'McCotter, Thaddeus G': 'Republican',
  'Huntsman, Jon': 'Republican',
  'Perry, Rick': 'Republican'           
 }
#print(c.cand_nm.unique())
c['party'] =  c['cand_nm'].map(parties)
print(c.head())

在这里插入图片描述

5、统计捐款额度

#5.	统计不同党派获得政治献金的捐献总额。
print(c['party'].value_counts())  #捐献次数
print(c.groupby(['party'])['contb_receipt_amt'].sum()) #捐献金额

在这里插入图片描述

6、lambda妙用

#6.	按照职业汇总政治献金的总额,输出献金总额最大的前5个职业,注意需要做职业类型的去重。给出字典
occupation = {'INFORMATION REQUESTED PER BEST EFFORTS':'NOT PROVIDE',
             'INFORMATION REQUESTED':'NOT PROVIDE',
              'C.E.O.':'CEO',
              'LAWYER':'ATTORNEY',
              'SELF':'SELF-EMPLOYED',
              'SELF EMPLOYED ':'SELF-EMPLOYED'}
c['contbr_occupation'] = c['contbr_occupation'].map(lambda i : occupation.get(i,i))
goupy = c.groupby(['contbr_occupation'])['contb_receipt_amt'].sum()
print(goupy.sort_values(ascending = False).head()) 

在这里插入图片描述

7、可视化赞助金额

#7.	通过数据可视化展示,各候选人获得的赞助总金额,注意需要先去除政治献金额小于 “0” 的异常数据
c2 = c[c['contb_receipt_amt'] > 0]
#print('原始数据:',c.shape,'   处理后数据:',c2.shape)
image = c2.groupby(['cand_nm' ])['contb_receipt_amt'].sum().sort_values(ascending = False)[:8]
image.plot(kind = 'bar')  #取前八名做图,直接绘制饼状图

在这里插入图片描述

8、对比Obama和Romney的支持情况

#8.	分析前两名的候选人:不同职业对他两人的支持程度、不同公司的支持度和不同州的支持度。
#第8题方法一:对两个候选人分别提取(此方法效率偏低,故中途作废)
Obama = c2[c2['cand_nm'] == 'Obama, Barack']
Romney = c2[c2['cand_nm'] == 'Romney, Mitt']
print(Obama.groupby(['contbr_occupation'])['contb_receipt_amt'].sum().sort_values(ascending = False).head())
print(Romney.groupby(['contbr_occupation'])['contb_receipt_amt'].sum().sort_values(ascending = False).head())

#第8题方法二:采用透视表获取数据
c3 = c2.query("cand_nm == 'Obama, Barack' or cand_nm == 'Romney, Mitt'")#选取含Obama、Romney的数据
print(c3.cand_nm.unique()) #查看数据是否提取成功
#(1)分析不同职业
pivot1 = c3.pivot_table('contb_receipt_amt',index='contbr_occupation',columns='cand_nm',aggfunc='sum',fill_value=0)
pivot1 = pivot1[pivot1.sum(axis = 1)>1000000]  #提取献金金额超过1million的群体进行分析
pivot1.plot(kind = 'bar')
#(2)分析不同公司
pivot2 = c3.pivot_table('contb_receipt_amt',index='contbr_employer',columns='cand_nm',aggfunc='sum',fill_value=0)
pivot2 = pivot2[pivot2.sum(axis = 1)>1000000]  #提取献金金额超过1million的群体进行分析
pivot2.plot(kind = 'bar')
#(3)分析不同State
pivot3 = c3.pivot_table('contb_receipt_amt',index='contbr_st',columns='cand_nm',aggfunc='sum',fill_value=0)
pivot3 = pivot3[pivot3.sum(axis = 1)>10000000]  #提取献金金额超过10million的洲进行分析
pivot3.plot(kind = 'bar')

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9、政治献金的时间分析

#附加题:政治献金的时间分析(最早时间,那天最多,那天最少?)
c2['contb_receipt_dt'] = pd.to_datetime(c2['contb_receipt_dt'])  #将str转datetime类型
print(c2.dtypes)  #观察数据类型变化
#最早时间
#print(c2['contb_receipt_dt'].describe())
print("政治献金最早的时间:",min(c2['contb_receipt_dt']))
#那天最多,那天最少(直接分组排个序最大值和最小值即为答案)
c2.groupby('contb_receipt_dt')['contb_receipt_amt'].sum().sort_values(ascending = False)

在这里插入图片描述

参考资料

2012美国大选献金项目数据分析(有史以来最全面)

千峰Python教程

关于Python中的lambda,这篇阅读量10万+的文章可能是你见过的最完整的讲解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值