人口分析案例

Posted 胜天半月子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了人口分析案例相关的知识,希望对你有一定的参考价值。


需求

源数据获取–密码:6qpt

  • 导入文件,查看原始数据
  • 将人口数据和各州简称数据进行合并
  • 将合并的数据中重复的abbreviation列进行删除
  • 查看存在缺失数据的列
  • 找到有哪些state/region使得state的值为NaN,进行去重操作
  • 为找到的这些state/region的state项补上正确的值,从而去除掉state 这一列的所有NaN
  • 合并各州面积数据areas
  • 我们会发现area(sq.mi)这一列有缺失数据,找出是哪些行
  • 去除含有缺失数据的行
  • 找出2010年的全民人口数据
  • 计算各州的人口密度
  • 排序,并找出人口密度最高的五个州 df.sort_values()

一、数据预处理

  • 导入包
import pandas as pd
import numpy as np
from pandas import DataFrame
  • 导入文件 查看原始数据
abb = pd.read_csv('./data/state-abbrevs.csv')
abb
# state:全称  abbreviation:简称

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

area = pd.read_csv('./data/state-areas.csv')
area

  • 各州数据【abb】和人口数据【pop】进行合并

使用outer:保证数据完整性
[Python3]pandas.merge用法详解

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

  • 将合并后的数据列进行删除 : abbreviation
# inplace作用在原DataFrame上
abb_pop.drop(labels='abbreviation',axis=1,inplace=True)
abb_pop.head()

  • 查看表中的缺失数据

info()
isnull().any(axis=0)

abb_pop.info()

# isnull()和any 连接使用
abb_pop.isnull().any(axis=0)


二、数据处理

  • 找到有哪些state/region使得state的值为NaN,进行去重操作【将state中空值对应的简称找到,对找到的简称进行去重操作】
abb_pop.head()

步骤:

  1. 找到state中的空值
  2. 将state中的空值对应的简称找到
  3. 对简称去重
abb_pop['state'].isnull()

# 将布尔值作为数据的索引 取出对应的行数据
abb_pop.loc[abb_pop['state'].isnull()]

abb_pop.loc[abb_pop['state'].isnull()]['state/region']

abb_pop.loc[abb_pop['state'].isnull()]['state/region'].unique()

array([‘PR’, ‘USA’], dtype=object)

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

  • fillna():填充成一致的 – 不适用于该项目
    • PR:填充为对应的全称 USA:填充为对应的全称

实现:

  1. 根据简称将简称对应的全称的空值找到
  2. 将找到的空值填充称对应的全称即可
# 1. 将PR对应的行找到
abb_pop['state/region'] == 'PR'

别看这显示都是False,True都在里面藏着呢!

abb_pop.loc[abb_pop['state/region'] == 'PR']

# 2.  获取行索引
indexs = abb_pop.loc[abb_pop['state/region'] == 'PR'].index
indexs

Int64Index([2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458,2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2472, 2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480,2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491,2492, 2493, 2494, 2495],dtype=‘int64’)

# 3. 做批量赋值
abb_pop.loc[indexs,'state'] = 'PPPRRR'
abb_pop.loc[abb_pop['state/region'] == 'PR']

同理对简称为USA的操作是一样进行的

abb_pop['state/region'] == 'USA'
indexsusa = abb_pop.loc[abb_pop['state/region'] == 'USA'].index
abb_pop.loc[indexsusa,'state'] = 'United States'
 abb_pop.loc[abb_pop['state/region'] == 'USA']

  • 合并各州面积数据areas
abb_pop.head()

area.head()

abb_pop_area = pd.merge(abb_pop,area,on='state',how='outer')
abb_pop_area

  • 我们会发现area(sq.mi)这一列有缺失数据,找出是哪些行
abb_pop_area['area (sq. mi)'].isnull()

abb_pop_area.loc[abb_pop_area['area (sq. mi)'].isnull()]

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

Int64Index([2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458,2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 2467, 2468, 2469,2470, 2471, 2472, 2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480,2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491,2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502,2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513,2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524,2525, 2526, 2527, 2528, 2529, 2530, 2531, 2532, 2533, 2534, 2535, 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543], dtype=‘int64’)

  • 去除含有缺失数据的行
# drop系列的函数 0:行  1:列
abb_pop_area.drop(labels=indexs,axis=0,inplace=True)
  • 找出2010年的全民人口数据

query():条件查询 ⭐

abb_pop_area.head()

abb_pop_area.info()

abb_pop_area.query('ages == "total" & year == 2010')

  • 计算各州的人口密度 人口/区域面积,将人口密度数据汇总到源数据(添加一列)
abb_pop_area['population'] / abb_pop_area['area (sq. mi)']

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

  • 排序,并找出人口密度最高的五个州 df.sort_values()
abb_pop_area.sort_values(by='midu')

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


总结

  1. 关于iloc与loc的索引问题
  • loc:显示索引
  • iloc:隐世索引

abb_pop_area.sort_values(by='midu',axis=0,ascending=False).iloc[0]['state']

‘District of Columbia’

abb_pop_area.sort_values(by='midu',axis=0,ascending=False).loc[51]['state']

‘Alaska’

以上是关于人口分析案例的主要内容,如果未能解决你的问题,请参考以下文章

Pandas案例--人口密度分析

数据分析案例

【系列】主成分分析(3)案例(R语言)

数据分析入门——美国各州人口分析

号外号外:9月21号关于Speed-BI 《全国人口统计数据分析》开讲了

案例:亚洲国家人口数据计算