一、人口分析
现在有三个文本文件,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()