分析2012年美国选举数据---映射map/透视表pivot_table/聚合groupby/apply
来源:互联网 发布:刚学完php没有工作经验 编辑:程序博客网 时间:2024/06/01 10:29
import pandas as pdfrom matplotlib import pyplot as pltfec = pd.read_csv('D:\python program\pydata-book-2nd-edition\datasets\\fec\P00000001-ALL.csv')'''获取全部候选人名单unique_cands = fec.cand_nm.unique()'''#利用字典添加党派关系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'}#将党派添加为一个新列fec['party'] = fec.cand_nm.map(parties)#名字映射党派#只显示赞助的及出资额为正的数据fec = fec[fec.contb_receipt_amt > 0]#只包含重要信息的子集,即obama和romney的竞选信息fec_sub = fec[fec.cand_nm.isin(['Obama, Barack','Romney, Mitt'])]'''根据职业和雇主统计赞助信息。基于职业的赞助信息统计''''''获取赞助的职业及数量fec.contbr_occupation.value_counts()'''#许多职业涉及相同的基本工作类型,清理数据occ_mapping = { 'INFORMATION REQUESTED' : 'NOT PROVIDED', 'INFORMATION REQUESTED PER BEST EFFORTS' : 'NOT PROVIDED', 'INFORMATION REQUESTED (BEST EFFORTS)' : 'NOT PROVIDED', 'C.E.O.' : 'CEO'}#dict.get允许没有映射关系的也能通过,如果没有提供相关映射,则返回xf = lambda x: occ_mapping.get(x,x)fec.contbr_occupation = fec.contbr_occupation.map(f)#同理清理雇主数据emp_mapping = { 'INFORMATION REQUESTED PER BEST EFFORTS' : 'NOT PROVIDED', 'INFORMATION REQUESTED' : 'NOT PROVIDED', 'SELF' : 'SELF-EMPLOYED', 'SELF EMPLOYED' : 'SELF-EMPLOYED'}f = lambda x: emp_mapping.get(x,x)fec.contbr_employer = fec.contbr_employer.map(f)#根据党派和职业对数据进行聚合by_occupation = fec.pivot_table('contb_receipt_amt',index='contbr_occupation',columns='party',aggfunc='sum')#过滤掉总出资额低于200万美元的数据over_2mm = by_occupation[by_occupation.sum(1) > 2000000]#柱状图over_2mm.plot(kind='barh',title='occ_receipt for party')plt.show()
'''分析对Obama和Romney总出资额最高的职业和企业'''#求取最大值def get_top_amounts(group,key,n=5): totals = group.groupby(key)['contb_receipt_amt'].sum() #根据key对totals降序 return totals.sort_values(ascending=False)[:n]#根据雇主和职业聚合grouped = fec_sub.groupby('cand_nm')#职业,前7个occ_receipt_group = grouped.apply(get_top_amounts,'contbr_occupation',n=7)#雇主,前7个emp_receipt_group = grouped.apply(get_top_amounts,'contbr_employer',n=7)#画图fig,axes = plt.subplots(2,1)occ_receipt_group.plot(kind='barh',ax=axes[0],title='occ_receipt_group')emp_receipt_group.plot(kind='barh',ax=axes[1],title='emp_receipt_group.')plt.show()
'''对出资额分组分析两位候选人各种赞助额的比例
'''#利用cut函数根据出资额的大小将数据离散化到多个面元中bins = np.array([0,1,10,100,1000,10000,100000,1000000,10000000])labels = pd.cut(fec_sub.contb_receipt_amt,bins) #面元标签#根据候选人和面元标签对数据分组grouped = fec_sub.groupby(['cand_nm',labels])print(grouped.size().unstack(0))
#对出资额求和,并在面元内规格化bucket_sums = grouped.contb_receipt_amt.sum().unstack(0)#print(bucket_sums)#将得到的数据按比例normed_sums = bucket_sums.div(bucket_sums.sum(axis=1),axis=0)#print(normed_sums)#排除两个最大的normed_sums[:-2].plot(kind='barh',stacked=True)plt.show()
'''根据州统计赞助信息'''#根据候选人和州对数据聚合grouped = fec_sub.groupby(['cand_nm','contbr_st'])totals = grouped.contb_receipt_amt.sum().unstack(0).fillna(0)totals = totals[totals.sum(1) > 100000]#print(totals)#各行除以总赞助额,得到各候选人在各州的总赞助额比例percent = totals.div(totals.sum(1),axis=0) #跟sum(axis=1)一样print(percent)
阅读全文
0 0
- 分析2012年美国选举数据---映射map/透视表pivot_table/聚合groupby/apply
- pandas中groupby和pivot_table(数据透视表)
- python3的数据透视表pivot_table
- 利用python/pandas/numpy做数据分析(三)-透视表pivot_table
- 数据的分组和聚合 groupby agg apply
- Pandas透视表(pivot_table)详解
- Pandas透视表(pivot_table)详解
- Pandas透视表(pivot_table)详解
- 利用python进行数据分析-pandas.concat/subplots/gropuby/pivot_table,多文件整合、聚合、分组,子图
- groupby数据分析
- python科学计算笔记(七)pandas透视表 pivot_table
- pandas学习笔记2—透视表(pivot_table)详解
- 批量数据的聚合以及groupby实现
- python/pandas数据挖掘 groupby,聚合
- 透视美国大数据爆发全景
- 2015-04-08-数据聚合与分组运算(3)-透视表和交叉表+2012联邦选举委员会数据库
- 数据聚合与分组运算——GroupBy技术(1)
- 聚合函数&groupby&having
- Spark性能优化指南——基础篇
- 设计图标脚本
- 使用iTunes 12.7 可以直接安装ipa安装包
- python生成二维码
- JSTL 标签大全详解
- 分析2012年美国选举数据---映射map/透视表pivot_table/聚合groupby/apply
- -source 7 或更高版本以允许 switch 中存在字符串
- idea中pom如何加载jar包依赖
- APT 1004 Counting Leaves (30)
- typecho install.phpl漏洞分析
- 深度学习中的Attention模型介绍及其进展
- java程序员学习scala前必看的技术文档(2)
- CentOS7上elasticsearch5.0启动失败
- Flask框架项目实例:**租房网站(一)