一、人口分析
现在有三个文本文件,state-abbrevs.csv存放的是每个州的名字及简写;state-areas.csv存放的州名和占地面积;state-population.csv存放的州名简写和人口信息。
1,题目要求
- 导入文件,查看原始数据 - 将人口数据和各州简称数据进行合并 - 将合并的数据中重复的abbreviation列进行删除 - 查看存在缺失数据的列 - 找到有哪些state/region使得state的值为NaN,进行去重操作 - 为找到的这些state/region的state项补上正确的值,从而去除掉state这一列的所有NaN - 合并各州面积数据areas - 我们会发现area(sq.mi)这一列有缺失数据,找出是哪些行 - 去除含有缺失数据的行 - 找出2010年的全民人口数据 - 计算各州的人口密度 - 排序,并找出人口密度最高的五个州 df.sort_values()
2,导入文件,查看每个表的数据
import numpy as np from pandas import DataFrame,Series import pandas as pd f1=pd.read_csv('state-abbrevs.csv') f2=pd.read_csv('state-areas.csv') f3=pd.read_csv('state-population.csv')
3,将人口数据和各州的简称数据合并,然后把重复的列给删除
f4=pd.merge(f1,f3,left_on='abbreviation',right_on='state/region',how='outer') f5=f4.drop(labels='abbreviation',axis=1) f5.head()
4,查看存在缺失数据的列
f5.isnull().any(axis=0)
5,找出缺失‘state’数据的州的简称
f5.loc[f5['state'].isnull()]['state/region'].unique()
6,给缺失的‘state’补上对应的值
indexs1=f5.loc[f5['state/region']=='PR'].index f5.loc[indexs1,'state']='prorrrr' indexs2=f5.loc[f5['state/region']=='USA'].index f5.loc[indexs2,'state']='unista'
7,合并各州面积数据
f6=pd.merge(f5,f2,on='state') f6.head()
8,找出缺失area的行,然后删除
con = f6['area (sq. mi)'].isnull() indexs = f6.loc[con].index f6.drop(labels=indexs,axis=0,inplace=True)
9,找出2010年的全民人口数据
f7=f6.query('year==2010 & ages=="total"') f7.head()
10,计算各州的人口密度
f7['ss']=f7['population']/f7['area (sq. mi)'] f7.head()
11,排序,找出人口密度最高的前5个
f7.sort_values('ss',axis=0,ascending=False).head()
二、总统候选人政治献金数据分析
现在有一个usa_election.txt文本文件,存放的是总统候选人政治献金的相关数据。
1,题目要求
1.读取文件usa_election.txt 2.查看文件样式及基本信息 3.【知识点】使用map函数+字典,新建一列各个候选人所在党派party 4.使用np.unique()函数查看colums:party这一列中有哪些元素 5.使用value_counts()函数,统计party列中各个元素出现次数,value_counts()是Series中的,无参,返回一个带有每个元素出现次数的Series 6.【知识点】使用groupby()函数,查看各个党派收到的政治献金总数contb_receipt_amt 7.查看具体每天各个党派收到的政治献金总数contb_receipt_amt 。使用groupby([多个分组参数]) 8. 将表中日期格式转换为'yyyy-mm-dd'。日期格式,通过函数加map方式进行转换
9.查看老兵(捐献者职业)DISABLED VETERAN主要支持谁 :查看老兵们捐赠给谁的钱最多
2,读取文件
usa_election=pd.read_csv('./data/usa_election.txt') usa_election.head()
3,新建一列为各候选人所在党派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' } usa_election['party']=usa_election['cand_nm'].map(parties) usa_election.head()
4,查看所有候选人共几个党派,及各党派出现过多少次
usa_election['party'].unique()
usa_election['party'].value_counts()
5,查看各党派收到的政治献金总数,查看每天各党派收到的政治献金总数
usa_election.groupby(by='party')['contb_receipt_amt'].sum()
usa_election.groupby(['party','contb_receipt_dt'])['contb_receipt_amt'].sum()
6,把日期格式转化为数字格式,如“2013-11-12”
def transform_date(date): day,mon,year = date.split('-') month = months[mon] return '20'+year + '-' + str(month) + '-' + day usa_election['contb_receipt_dt'] = usa_election['contb_receipt_dt'].map(transform_date)
7,查看老兵(职业为DISABLED VETERAN)支持谁,给谁捐款最多
old_bing=usa_election.loc[usa_election['contbr_occupation'] == 'DISABLED VETERAN'] old_bing.groupby('cand_nm')['contb_receipt_amt'].sum()