文章目录
- 数据分析案例之米国选举捐赠分析
- 需求
- 加载数据
- 查看数据的基本信息
- 指定数据截取,将如下字段的数据进行提取,其他数据舍弃
- 用统计学指标快速描述数值型属性的概要。
- 空值处理。可能因为忘记填写或者保密等等原因,相关字段出现了空值,将其填充为NOT PROVIDE
- 异常值处理。将捐款金额<=0的数据删除
- 新建一列为各个候选人所在党派party
- 查看party这一列中有哪些不同的元素
- 统计party列中各个元素出现次数
- 查看各个党派收到的政治献金总数`contb_receipt_amt`
- 查看具体每天各个党派收到的政治献金总数`contb_receipt_amt`
- 将表中日期格式转换为'yyyy-mm-dd'。
- 查看老兵(捐献者职业)DISABLED VETERAN主要支持谁
数据分析案例之米国选举捐赠分析
需求
加载数据
-
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
-
-
-
可见此老兵主要支持奥巴马。