Python数据分析-人口分析案例、2012美国大选献金项目数据分析
人口分析案例
需求:
- 导入文件,查看原始数据
- 将人口数据和各州简称数据进行合并
- 将合并的数据中重复的abbreviation列进行删除
- 查看存在缺失数据的列
- 找到有哪些state/region使得state的值为NaN,进行去重操作
- 为找到的这些state/region的state项补上正确的值,从而去除掉state这一列的所有NaN
- 合并各州面积数据areas
- 我们会发现area(sq.mi)这一列有缺失数据,找出是哪些行
- 去除含有缺失数据的行
- 找出2010年的全民人口数据
- 计算各州的人口密度
- 排序,并找出人口密度最高的州
import pandas as pdfrom pandas import DataFrame,Series
import numpy as np
abb = pd.read_csv(\'./data/state-abbrevs.csv\')
abb.head()
#state州的全称
#abbreviation州的简称
pop = pd.read_csv(\'./data/state-population.csv\')
pop.head()
#将abb和pop进行数据的合并
abb_pop = pd.merge(left=abb,right=pop,left_on=\'abbreviation\',right_on=\'state/region\',how=\'outer\')
abb_pop.head()
#将合并的数据中重复的abbreviation列进行删除
abb_pop.drop(labels=\'abbreviation\',axis=1,inplace=True)
#查看存在缺失数据的列
abb_pop.info()
<class \'pandas.core.frame.DataFrame\'>Int64Index: 2544 entries, 0 to 2543
Data columns (total 5 columns):
state 2448 non-null object
state/region 2544 non-null object
ages 2544 non-null object
year 2544 non-null int64
population 2524 non-null float64
dtypes: float64(1), int64(1), object(3)
memory usage: 119.2+ KB
abb_pop.isnull().any(axis=0)
state Truestate/region False
ages False
year False
population True
dtype: bool
#ages列中存有哪些不同的元素
abb_pop[\'ages\'].unique()
array([\'under18\', \'total\'], dtype=object)
#查看ages列中不同元素出现的次数
abb_pop[\'ages\'].value_counts()
total 1272under18 1272
Name: ages, dtype: int64
#找到有哪些state/region使得state的值为NaN,进行去重操作
#前提:已知state列中存有空值数据
#将state列中的空值对应的简称数据找出,且对这些找出的简称数据进行去重,去重后就可以得知
#到底是哪些简称对应的全称的值为空
abb_pop.head()
#1.将state中的空值找出
abb_pop[\'state\'].isnull()
#2.将步骤1获取的布尔值作为源数据的行索引,获得state为空值对应的行数据
abb_pop.loc[abb_pop[\'state\'].isnull()]
#3.将步骤二获取的df中的简称列取出即可
abb_pop.loc[abb_pop[\'state\'].isnull()][\'state/region\']
#4.去重
abb_pop.loc[abb_pop[\'state\'].isnull()][\'state/region\'].unique()
#为找到的这些state/region的state项补上正确的值,从而去除掉state这一列的所有NaN
#分析:
#state列出现的空值依次可以被填充为PR和USA的全称
#将state列中对应PR的空数据取出,给其填充成PR的全称
#将state列中对应USA的空数据取出,给其填充成USA的全称
#1.将PR对应的行数据取出
abb_pop[\'state/region\'] == \'PR\'
abb_pop.loc[abb_pop[\'state/region\'] == \'PR\']
#2.可以将上一步获取的临时表的行索引获取
#行索引就是PR对应的空值对应的行索引
indexs = abb_pop.loc[abb_pop[\'state/region\'] == \'PR\'].index
#3.填充
abb_pop.loc[indexs,\'state\'] = \'PPPRRR\'
#1.将USA对应的行数据取出
abb_pop[\'state/region\'] == \'USA\'
abb_pop.loc[abb_pop[\'state/region\'] == \'USA\']
#2.获取需要填充空值的索引
indexs = abb_pop.loc[abb_pop[\'state/region\'] == \'USA\'].index
#3.填充
abb_pop.loc[indexs,\'state\'] = \'United States\'
#合并各州面积数据areas
abb_pop_area = pd.merge(left=abb_pop,right=area,on=\'state\',how=\'outer\')
abb_pop_area.head()
#我们会发现area(sq.mi)这一列有缺失数据,找出是哪些行
drop_indexs = abb_pop_area.loc[abb_pop_area[\'area (sq. mi)\'].isnull()].index
#去除含有缺失数据的行
abb_pop_area.drop(labels=drop_indexs,axis=0,inplace=True)
#找出2010年的全民人口数据(条件查询)
abb_pop_area.query(\'year == 2010 & ages == "total"\')
#计算各州的人口密度
abb_pop_area[\'midu\'] = abb_pop_area[\'population\'] / abb_pop_area[\'area (sq. mi)\']
#对人口密度排序
abb_pop_area.sort_values(by=\'midu\',axis=0,ascending=False)
2012美国大选献金项目数据分析
需求
- 加载数据
- 查看数据的基本信息
- 指定数据截取,将如下字段的数据进行提取,其他数据舍弃
- cand_nm :候选人姓名
- contbr_nm : 捐赠人姓名
- contbr_st :捐赠人所在州
- contbr_employer : 捐赠人所在公司
- contbr_occupation : 捐赠人职业
- contb_receipt_amt :捐赠数额(美元)
- contb_receipt_dt : 捐款的日期
- 对新数据进行总览,查看是否存在缺失数据
- 用统计学指标快速描述数值型属性的概要。
- 空值处理。可能因为忘记填写或者保密等等原因,相关字段出现了空值,将其填充为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
#方便操作,将月份和参选人以及所在政党进行定义:
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\'
}
df = pd.read_csv(\'./data/usa_election.txt\')
df.head()
df.shape
(536041, 16)
#对新数据进行总览,查看是否存在缺失数据
df.info()
<class \'pandas.core.frame.DataFrame\'>RangeIndex: 536041 entries, 0 to 536040
Data columns (total 16 columns):
cmte_id 536041 non-null object
cand_id 536041 non-null object
cand_nm 536041 non-null object
contbr_nm 536041 non-null object
contbr_city 536026 non-null object
contbr_st 536040 non-null object
contbr_zip 535973 non-null object
contbr_employer 525088 non-null object
contbr_occupation 530520 non-null object
contb_receipt_amt 536041 non-null float64
contb_receipt_dt 536041 non-null object
receipt_desc 8479 non-null object
memo_cd 49718 non-null object
memo_text 52740 non-null object
form_tp 536041 non-null object
file_num 536041 non-null int64
dtypes: float64(1), int64(1), object(14)
memory usage: 65.4+ MB
df.describe() #对原始数据数值型数据的统计描述
#空值处理。可能因为忘记填写或者保密等等原因,相关字段出现了空值,将其填充为NOT PROVIDE
df.fillna(value=\'NOT PROVIDE\',inplace=True)
#异常值处理。将捐款金额<=0的数据删除
df = df.loc[~(df[\'contb_receipt_amt\'] <= 0)]
#新建一列为各个候选人所在党派party
df[\'party\'] = df[\'cand_nm\'].map(parties)
df.head()
#查看party这一列中有哪些不同的元素
df[\'party\'].unique()
array([\'Republican\', \'Democrat\', \'Reform\', \'Libertarian\'], dtype=object)
#统计party列中各个元素出现次数
df[\'party\'].value_counts()
Democrat 289999Republican 234300
Reform 5313
Libertarian 702
Name: party, dtype: int64
#查看各个党派收到的政治献金总数contb_receipt_amt
df.groupby(by=\'party\')[\'contb_receipt_amt\'].sum()
partyDemocrat 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()
#将表中日期格式转换为\'yyyy-mm-dd\'。
def transform_date(d):
day,month,year = d.split(\'-\')
month = months[month]
return \'20\'+year+\'-\'+str(month)+\'-\'+day
# df[\'contb_receipt_dt\'].map(transform_date)
df[\'contb_receipt_dt\'] = df[\'contb_receipt_dt\'].apply(transform_date)
df.head()
#查看老兵(捐献者职业)DISABLED VETERAN主要支持谁
#老兵给谁捐的钱最多就表示最支持谁
#1.将老兵对应的行数据
old_bing_df = df.loc[df[\'contbr_occupation\'] == \'DISABLED VETERAN\']
#2.根据候选人分组
old_bing_df.groupby(by=\'cand_nm\')[\'contb_receipt_amt\'].sum()
cand_nmCain, Herman 300.00
Obama, Barack 4205.00
Paul, Ron 2425.49
Santorum, Rick 250.00
Name: contb_receipt_amt, dtype: float64
以上是 Python数据分析-人口分析案例、2012美国大选献金项目数据分析 的全部内容, 来源链接: utcz.com/z/387278.html