数据分析案例之米国选举捐款分析

数据分析案例之米国选举捐赠分析

需求

加载数据
  • import numpy as np
    import pandas as pd
    df = pd.read_csv('../data/usa_election.txt')
    
查看数据的基本信息
  • 输出df信息如下:
    • 在这里插入图片描述

    • 在这里插入图片描述

指定数据截取,将如下字段的数据进行提取,其他数据舍弃
  • cand_nm :候选人姓名
  • contbr_nm : 捐赠人姓名
  • contbr_st :捐赠人所在州
  • contbr_employer : 捐赠人所在公司
  • contbr_occupation : 捐赠人职业
  • contb_receipt_amt :捐赠数额(美元)
  • contb_receipt_dt : 捐款的日期
用统计学指标快速描述数值型属性的概要。
  • #用统计学指标快速描述数值型属性的概要
    df.describe()
    
    • 在这里插入图片描述
空值处理。可能因为忘记填写或者保密等等原因,相关字段出现了空值,将其填充为NOT PROVIDE
  • df.fillna(value='NOT PROVIDE',inplace=True)
    
异常值处理。将捐款金额<=0的数据删除
indexs=df.loc[df['contb_receipt_amt']<=0].index
df.drop(lables=indexs,axis=0,inplace=True)
新建一列为各个候选人所在党派party
  • 首先我们需要查阅资料获取各个候选人党派的关系映射表,如下:

    • parties = {
        'Bachmann, Michelle': 'Republican',
        'Romney, Mitt': 'Republican',
        'Obama, Barack': 'Democrat',
        "Roemer, Charles E. 'Buddy' III": 'Reform',
        'Pawlenty, Timothy': 'Republican',
        'Johnson, Gary Earl': 'Libertarian',
        'Paul, Ron': 'Republican',
        'Santorum, Rick': 'Republican',
        'Cain, Herman': 'Republican',
        'Gingrich, Newt': 'Republican',
        'McCotter, Thaddeus G': 'Republican',
        'Huntsman, Jon': 'Republican',
        'Perry, Rick': 'Republican'           
       }
      
    • df['party'] = df['cand_nm'].map(parties)
      
查看party这一列中有哪些不同的元素
  • df['party'].unique()
    
统计party列中各个元素出现次数
  • df['party'].value_counts()
    
    • Democrat       289999
      Republican     234300
      Reform           5313
      Libertarian       702
      Name: party, dtype: int64
      
查看各个党派收到的政治献金总数contb_receipt_amt
  • df.groupby(by='party')[contb_receipt_amt].sum()
    
    • party
      Democrat       8.259441e+07
      Libertarian    4.132769e+05
      Reform         3.429658e+05
      Republican     1.251181e+08
      Name: contb_receipt_amt, dtype: float64
      
查看具体每天各个党派收到的政治献金总数contb_receipt_amt
  • df.groupby(by=['contb_receipt_dt','party'])['contb_receipt_amt'].sum()
    
    • contb_receipt_dt  party      
      01-APR-11         Reform             50.00
                        Republican      12635.00
      01-AUG-11         Democrat       182198.00
                        Libertarian      1000.00
                        Reform           1847.00
                                         ...    
      31-MAY-11         Republican     313839.80
      31-OCT-11         Democrat       216971.87
                        Libertarian      4250.00
                        Reform           3205.00
                        Republican     751542.36
      Name: contb_receipt_amt, Length: 1183, dtype: float64
      
将表中日期格式转换为’yyyy-mm-dd’。
  • months = {'JAN' : 1, 'FEB' : 2, 'MAR' : 3, 'APR' : 4, 'MAY' : 5, 'JUN' : 6,
              'JUL' : 7, 'AUG' : 8, 'SEP' : 9, 'OCT': 10, 'NOV': 11, 'DEC' : 12}
    #将表中日期格式转换为'yyyy-mm-dd
    def trandformDate(d):
        day,month,year = d.split('-')
        month = months[month]#将英文形式的月份转换成了数字形式的月份
        return '20'+year+'-'+str(month)+'-'+day
    df['contb_receipt_dt'] = df['contb_receipt_dt'].map(trandformDate)
    
查看老兵(捐献者职业)DISABLED VETERAN主要支持谁
  • 给谁捐赠的钱越多表示越支持谁

  • 可以先将源数据中的老兵这个职业对应的行数据取出

    • df_old = df.loc[df['contbr_occupation'] == 'DISABLED VETERAN']
      
  • 根据候选人分组,对捐赠金额求和

    • df_old.groupby(by='cand_nm')['contb_receipt_amt'].sum()
      
      • cand_nm
        Cain, Herman       300.00
        Obama, Barack     4205.00
        Paul, Ron         2425.49
        Santorum, Rick     250.00
        Name: contb_receipt_amt, dtype: float64
        
  • 可见此老兵主要支持奥巴马。

  • 24
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值