美国2012年总统候选人政治献金数据分析
- 导入包
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
- 方便大家操作,将月份和参选人以及所在政党进行定义
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}
of_interest = [\'Obama, Barack\', \'Romney, Mitt\', \'Santorum, Rick\',
\'Paul, Ron\', \'Gingrich, Newt\']
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\'
}
需求:
-
读取文件
usa_election.txt\df = pd.read_csv(\'data/usa_election.txt\') df.head() -
查看文件样式及基本信息
-
【知识点】使用map函数+字典,新建一列各个候选人所在党派party
df[\'parties\'] = df[\'cand_nm\'].map(parties) # 查看单独一行,是否加上了\'party\'一列 -
使用
np.unique()函数查看colums:party这一列中有哪些元素df[\'parties\'].unique() -
使用value_counts()函数,统计party列中各个元素出现次数,value_counts()是Series中的,无参,返回一个带有每个元素出现次数的Series
df[\'parties\'].value_counts() -
【知识点】使用
groupby()函数,查看各个党派收到的政治献金总数contb_receipt_amtdf.groupby(by=\'parties\')[\'contb_receipt_amt\'].sum() -
查看具体每天各个党派收到的政治献金总数contb_receipt_amt 。使用groupby([多个分组参数])
df.groupby(by=[\'contb_receipt_dt\',\'parties\'])[\'contb_receipt_amt\'].sum() -
将表中日期格式转换为
\'yyyy-mm-dd\'。日期格式,通过函数加map方式进行转换def func(s): # 20-JUN-11 day,month,year = s.split(\'-\') month = months[month] return f\'20{year}-{month}-{day}\' df[\'contb_receipt_dt\'] = df[\'contb_receipt_dt\'].apply(func) -
得到每天各政党所收政治献金数目。 考察知识点:
groupby(多个字段)cand_nm_df = df.groupby(by=[\'cand_nm\',\'contb_receipt_amt\'])[\'contb_receipt_dt\'].sum() cand_nm_df -
【知识点】使用 unstack() 将上面所得数据中的party行索引变成列索引
-
查看老兵(捐献者职业)DISABLED VETERAN主要支持谁 :查看老兵们捐赠给谁的钱最多
#获取老兵对应的行数据 df[\'contbr_occupation\'] == \'DISABLED VETERAN\' old_bing_df = df.loc[df[\'contbr_occupation\'] == \'DISABLED VETERAN\'] old_bing_df.groupby(by=\'cand_nm\')[\'contb_receipt_amt\'].sum() -
把索引变成列,Series变量.reset_index()
-
找出各个候选人的捐赠者中,捐赠金额最大的人的职业以及捐献额 .通过query("查询条件来查找捐献人职业")
df[\'contb_receipt_amt\'].max() df.query(\'contb_receipt_amt == 1944042.43\')