美文网首页
2012 美国总统竞选赞助情况分析(pandas实战)

2012 美国总统竞选赞助情况分析(pandas实战)

作者: 弱碱强酸 | 来源:发表于2018-11-22 14:59 被阅读0次

    数据:https://github.com/GibZhang/datasets/blob/master/P00000001-ALL.csv.zip

    ———参考《利用python进行数据分析》案例

    引入相关库:

    # coding=utf-8

    import numpy as np

    import pandas as pd

    import matplotlib.pyplot as plt

    1.数据载入与总览

    df= pd.read_csv('ALL.csv')   //ALL.csv是竞选资助详情

    在ipython交互环境输入:df.columns

    Index(['cmte_id', 'cand_id', 'cand_nm', 'contbr_nm', 'contbr_city',

          'contbr_st', 'contbr_zip', 'contbr_employer', 'contbr_occupation',

          'contb_receipt_amt', 'contb_receipt_dt', 'receipt_desc', 'memo_cd',

          'memo_text', 'form_tp', 'file_num'],

          dtype='object')

    数据基本信息

    其中:cand_id:竞选者编号、cand_nm:竞选者姓名、contbr_nm:捐助者姓名、contbr_city:捐助者所在城市、contbr_st:捐助者所在州、contbr_zip:捐助者邮政编码、contbr_employer:捐助者公司、contbr_occupation:捐助者职业、contb_receipt_amt:捐助金额、contb_receipt_dt:捐助时间、receipt_desc:收据描述、memo_cd:无、memo_text:无、form_tp:无

    2.了解数据(缺失值处理及信息填充)

    1.党派信息填充

    首先我们看一下竞选者列表:unique_cand = df['cand_nm'].unique()

    array(['Bachmann, Michelle', 'Romney, Mitt', 'Obama, Barack',

          "Roemer, Charles E. 'Buddy' III", 'Pawlenty, Timothy',

          'Johnson, Gary Earl', 'Paul, Ron', 'Santorum, Rick',

          'Cain, Herman', 'Gingrich, Newt', 'McCotter, Thaddeus G',

          'Huntsman, Jon', 'Perry, Rick'], dtype=object)

    由于数据中没有竞选者的党派信息,而该信息在竞选过程中又有一定的意义,因此我们将对应的党派信息用字典保存并加入读取的dataframe中。

    parties= {'Bachmann, Michelle':'Republican',

    'Cain, Herman':'Republican',

    'Gingrich, Newt':'Republican',

    'Huntsman, Jon':'Republican',

    'Johnson, Gary Earl':'Republican',

    'McCotter, Thaddeus G':'Republican',

    'Obama, Barack':'Democrat',

    'Paul, Ron':'Republican',

    'Pawlenty, Timothy':'Republican',

    'Perry, Rick':'Republican',

    "Roemer, Charles E. 'Buddy' III":'Republican',

    'Romney, Mitt':'Republican',

    'Santorum, Rick':'Republican'}

    利用pandas的map命令将党派数据加入数据表中:df['party']=df['cand_nm'].map(parties)

    再来查看df的基本信息:df.columns

    Index(['cmte_id', 'cand_id', 'cand_nm', 'contbr_nm', 'contbr_city',

          'contbr_st', 'contbr_zip', 'contbr_employer', 'contbr_occupation',

          'contb_receipt_amt', 'contb_receipt_dt', 'receipt_desc', 'memo_cd',

          'memo_text', 'form_tp', 'file_num', 'party'],

          dtype='object'),党派信息已成功插入。

    2.由于df中某些参数并没有特别有价值的信息(cmte_id,file_num,form_tp,contbr_zip等),还有些信息存在冗余(cand_id与cand_nm都表示竞选者,cand_id冗余),因此我们将这些信息移除。

    >>> dt =df.drop(labels=['cmte_id', 'cand_id','contbr_zip','form_tp', 'file_num'],axis=1)

    3.数据缺失值处理

    我们注意到contbr_city、contbr_st、contbr_employer、contbr_occupation、receipt_desc、memo_cd、memo_text数据均存在缺失。由于这些数据并非数值数据,且这些数据所在列,并非异常数据,仅仅可能是由于登记不全,所以我们可以在这些缺失的数据设置默认值。

    dt['contbr_employer'].fillna('NOT PROVIDED',inplace=True)

    dt['contbr_occupation'].fillna('NOT PROVIDED',inplace=True)

    dt['memo_text'].fillna('default',inplace=True)

    dt['memo_cd'].fillna('default',inplace=True)

    dt['receipt_desc'].fillna('default',inplace=True)

    3.数据基本性质初窥(数据探索)

    >>> dt['cand_nm'].value_counts()

    竞选者捐助人数分布

    可以看出捐助Obama竞选的人达到了593746人,远远超过排在第二、第三,甚至人数超过了其他所有人数之和。Obama看来真的当之无愧是人民心中的总统人选。

    >>> dt['contbr_occupation'].value_counts()[:20]

    不同职业捐助人数排序前20 不同职业捐助总金额排序前20 不同职业捐助金额总额(前10) 出资额统计量

    从出资额表中,可以看到出资额最小值为-30800,这是由于有些退款事项。我们关注出资额大与0的部分数据。从数据可以看出,出资额方差很大,说明出资额非常分散,其中,中值为100,75%分位线位250,而平均值为298,可以看出大部分人,

    >>> data= dt[dt['contb_receipt_amt']>0]

    查看不同候选人获得资助情况:

    >>> data.groupby('cand_nm')['contb_receipt_amt'].sum().sort_values(ascending=False)

    候选人获得出资额度排序

    从上面可以看到,Obama,Barack和Romney,Mitt获得资金额度最多,他们两个是大选热门。因此在下一部分,我们会针对这两个人的数据进行对比分析。

    4.数据可视化

    数据可视化是数据分析中的一项重要工作,它可以帮助我们快速清晰的了解数据的特征。现在我们对第3部分的单项数据特征以及接下来的不同数据之间的特征进行挖掘。

    >>> byocc =pd.pivot_table(data,values=['contb_receipt_amt'],index=['contbr_occupation'],columns=['party'],aggfunc='sum')

    >>>  byocc[byocc.sum(axis=1)>2000000]

    不同职业对两个党派资助情况的对比 不同职业对两党派资助情况

    从上图看出,代理人、律师、医生、教授等职业主要倾向于支持民主党,而公司CEO,企业主、投资人、Owner、自我创业者等职业主要倾向于资助共和党,这可能和这两个党派所支持的利益有关,可以关注候选人在这方面的政策倾向等。

    下面我们分析给予Obama,Barack和Romney,Mitt资助额最大的前几个职业

    def get_top_amounts(group, key, n=5):

        totals = group.groupby(key)['contb_receipt_amt'].sum()

        return totals.nlargest(n)

    cand_nm_grouped= cand_nm_dt.groupby('cand_nm')

    cand_amt= cand_nm_grouped.apply(get_top_amounts,'contbr_occupation',10)

    对两位候选人出资职业前10位

    可以看出,支持Obama的职业排名靠前的主要是医生、律师、咨询师、教授等社会精英,而支持Romney的职业则主要为企业CEO,企业主等。

    对两位候选人资助最多的公司

    Obama:微软、盛德国际律师事务所; Romney:瑞士瑞信银行、摩根斯坦利、高盛公司、巴克莱资本、H.I.G.资本。

    出资额分布分析:

    bins= np.array([0,1,100,1000,10000,100000,1000000])

    labels = pd.cut(dt['contb_receipt_amt'],bins)

    现在可根据候选人姓名对obama和Romney进行分组,已得到一个对比图。

    对两位候选人不同出资额人数的分布

    从上图可以看出,对于小额出资者人数而言,支持Obama的人数远远多于第二位候选人Romney。从这里也可以看出Obama真的是民心所向,深得广大人民的支持。

    另外,从各州的投票情况看,在出资额最多的10个州,Obama都要领先于Romney,特别是在PA、MD、MA、IL、CA这些州,这种优势更加明显。

    出资额最多的10各州,两位候选人的投资额对比

    从投资人出资情况看,也可以发现,越是临近大选,出资人额度越大,竞争也更加白热化,充分说明了美国大选真的是极其烧钱的,要想获得大选的胜利,不仅要有人脉,而且要有资金支持。

    两人获得投资额随时间变化

    相关文章

      网友评论

          本文标题:2012 美国总统竞选赞助情况分析(pandas实战)

          本文链接:https://www.haomeiwen.com/subject/wdbhqqtx.html