数据分析实例——美国加州人口分析

一、准备好数据集

二、需求分析

案例分析:美国各州人口数据分析

作业知识补充

首先导入文件,并查看数据样本

合并pop与abbrevs两个DataFrame,分别依据state/region列和abbreviation列来合并。

为了保留所有信息,使用外合并。

查看存在缺失数据的列。

使用.isnull().any(),只有某一列存在一个缺失数据,就会显示True。

查看缺失数据

根据数据是否缺失情况显示数据,如果缺失为True,那么显示

找到有哪些state/region使得state的值为NaN,使用unique()查看非重复值

为找到的这些state/region的state项补上正确的值,从而去除掉state这一列的所有NaN!

记住这样清除缺失数据NaN的方法!

合并各州面积数据areas,使用左合并。

思考一下为什么使用外合并?

继续寻找存在缺失数据的列

我们会发现area(sq.mi)这一列有缺失数据,为了找出是哪一行,我们需要找出是哪个state没有数据

去除含有缺失数据的行

查看数据是否缺失

找出2010年的全民人口数据,df.query(查询语句)

对查询结果进行处理,以state列作为新的行索引:set_index

计算人口密度。注意是Series/Series,其结果还是一个Series。

排序,并找出人口密度最高的五个州sort_values()

找出人口密度最低的五个州

要点总结:

  • 统一用loc()索引
  • 善于使用.isnull().any()找到存在NaN的列
  • 善于使用.unique()确定该列中哪些key是我们需要的
  • 一般使用外合并、左合并,目的只有一个:宁愿该列是NaN也不要丢弃其他列的信息

 

三、操作实例

1.导入三剑客:

import numpy as np
import pandas as pd
from pandas import Series,DataFrame

2.导入文件

abb=pd.read_csv('../data/state-abbrevs.csv')
areas=pd.read_csv('../data/state-areas.csv')
pop=pd.read_csv('../data/state-population.csv')

3.查看数据结构

4.实现需求

① 合并pop与abbrevs两个DataFrame,分别依据state/region列和abbreviation列来合并。

【为了保留所有信息,使用外合并】

abb_pop=pd.merge(abb,pop,left_on='abbreviation',right_on='state/region',how='outer')
abb_pop.head()

删除重复的列: .drop('abbreviation',axis=1,inplace=True)

#删除重复的列
abb_pop.drop('abbreviation',axis=1,inplace=True)
abb_pop.head()

查看存在缺失数据的列: 使用.isnull().any(),只有某一列存在一个缺失数据,就会显示True。

abb_pop.isnull().head()  #如果df中存在空值,则空值对应的行列位置显示的是True

abb_pop.isnull().any(axis=0) #检查每一列中是否存在空值(True)
#运行结果发现只有state和population中存在空值

④查看缺失数据【根据数据是否缺失情况显示数据,如果缺失为True,那么显示

#查看的是population列中空值所对应的行信息------------
misspop=abb_pop['population'].isnull() #找出pop这一列中所有的空值,如果是空值则返回True
misspop

abb_pop.loc[misspop] #获取了pop空值所对应的行数据


#查看的是state这一列中空值存在情况------------------
missState=abb_pop['state'].isnull()#如果该列中某一个数组元素为空值则显示True
missState 

#将上一步返回的布尔列表作为行索引
State=abb_pop.loc[missState]
State

⑤找到那些state的值为NAN,使用unique()查看非重复值

state['state/region'].unique()
#unique()是Serise的一个函数,该函数可以对Serise中的数组元素进行去重
Output: array(['PR', 'USA'], dtype=object)

为找到的这些state/region的state项补上正确的值,从而去除掉state这一列的所有NaN!

abb_pop['state/region']=='PR'  
#返回一组布尔值,True表示True所在位置的元素值为PR。
#获取的这组布尔值的意义在于想要将其作为行索引,
#目的是为了获取一个或者一组数组元素,将数组元素进行修改。

abb_pop.loc[abb_pop['state/region']=='PR','state']='PUERTO RICO'
abb_pop.loc[abb_pop['state/region']=='USA','state']='United State'

测试是否还存在空数据,使用isnull(),出现False表示没有空值

abb_pop['state'].isnull().any()
Output:False

⑥合并各州面积数据araes,使用左合并

abb_pop.head()
areas.head()

abb_pop_areas=pd.merge(abb_pop,areas,how='left')
abb_pop_areas

⑦继续寻找缺失的数据的列

abb_pop_areas.isnull().any()

  • 发现area(sq.mi)这一列有缺失值,为了找出是哪一行,需要找到那个state没有数据
abb_pop_areas['area (sq. mi)'].isnull()
abb_pop_areas.loc[abb_pop_areas['area (sq. mi)'].isnull()]

#获取行索引
indexs=abb_pop_area.loc[abb_pop_area['area (sq. mi)'].isnull()].index

去除含有缺失数据的行

abb_pop_areas.drop(indexs,axis=0,inplace=True)

⑧找出2010年的全民人口数据,df.query(查询语句)

abb_pop_areas.head()

data_2010=abb_pop_areas.query("year==2010 & ages=='total'")
data_2010.head()

⑨对查询结果进行处理,以state列作为新的行索引:set_index

data_2010['state']
data_2010_index=data_2010.set_index(data_2010['state'])
data_2010_index.head()

⑩计算人口密度【注意是Series/Series,其结果还是一个Series。】

data_2010_index['population']/data_2010_index['area (sq. mi)']
data_2010_index['midu']=data_2010_index['population']/data_2010_index['area (sq. mi)']
data_2010_index.head()

⑪排序,并找出人口密度最高的5个州 : sort_values

data_2010_index.sort_values(by='midu',axis=0,ascending=False).head()

找出人口密度最低的五个州

data_2010_index.sort_values(by='midu',axis=0,ascending=False).tail()

猜你喜欢

转载自blog.csdn.net/Dorisi_H_n_q/article/details/82285197