数据分析实战 -----美国人口密度

资源包地址

链接:百度网盘 请输入提取码

提取码:6666

步骤

导入库

复制代码
import numpy as np
import pandas as pd
首先导入文件,并查看数据样本


# 州的全称和州名称简写对应关系表
abb = pd.read_csv('./data/state-abbrevs.csv')
# 州的全称和面积表
areas = pd.read_csv('./data/state-areas.csv')
# 州名称的简写和面积表,包括年龄和年份信息
population = pd.read_csv('./data/state-population.csv')
display(abb.head(), areas.head(), population.head())
复制代码
复制代码
合并pop与abbrevs两个DataFrame,分别依据state/region列和abbreviation列来合并。

为了保留所有信息,使用外合并。
复制代码
# 根据某一列或几列来合并
# 默认合并的规则是查找字段名称相同的列
# 合并的列在内容上,要存在一对一、一对多、多对多的关系
pd.merge(left=population, right=abb, left_on='state/region', right_on='abbreviation', how='inner

看数据是否缺少

复制代码
abb.abbreviation.unique()
population['state/region'].unique()
复制代码
# PR USA这两个简称,在abb表中,是不存在的
set(population['state/region'].unique()) - set(abb.abbreviation.unique())  

{'PR', 'USA'}

内合并没有,外合并有

复制代码
temp = pd.merge(left=population, right=abb, left_on='state/region', right_on='abbreviation', how='outer')
复制代码
# USA不是一个州,是美国的全称
temp.loc[temp['state/region'] == 'USA']
复制代码
### 查看存在缺失数据的列。

使用.isnull().any(),只有某一列存在一个缺失数据,就会显示True。
复制代码
### 根据数据是否缺失情况显示数据,如果缺失为True,那么显示
temp.loc[temp.isnull().any(axis=1)]
复制代码
复制代码
### 找到有哪些state/region使得state的值为NaN,使用unique()查看非重复值
temp.loc[temp.isnull().any(axis=1), 'state/region'].unique()
复制代码
### 为找到的这些state/region的state项补上正确的值,从而去除掉state这一列的所有NaN!
复制代码
经过分析,只有PR和USA对应的state有空值,所以只需要填写这两组数据即可

USA  -->  USA
PR  --> 
复制代码
# 面积表中存在PR州对应的全称 Puerto Rico
# 简写和全称对应不上关系的时候的处理逻辑??  业务方确认
set(areas['state']) - set(abb['state'])

{'Puerto Rico'}

复制代码
temp.loc[temp['state/region'] == 'PR', 'state'] = 'Puerto Rico'
# 查看使得state为空的州还有哪些
temp.loc[temp['state'].isnull(), 'state/region'].unique()
复制代码
# 由于USA是全美国的数据,不需要保留,可以删除
# 把sate/region == USA的数据删除
复制代码
usa_index = temp.loc[temp['state/region'] == 'USA'].index
pop_abb = temp.drop(labels=usa_index).copy()
pop_abb.isnull().any()
pop_abb = pop_abb.drop(labels=['abbreviation'], axis=1)
复制代码
### 继续寻找存在缺失数据的列
复制代码
# 由于2000年之前,并没有统计过PR州的人口数据,所以删除
pop_abb.loc[pop_abb.population.isnull()]
pop_abb.isnull().any()
pop_abb.dropna().isnull().any()
复制代码
复制代码
# 删除人口为空的所有行
复制代码
pop_abb.dropna(inplace=True)
pop_abb.head()
复制代码
areas.head()
复制代码
# 使用外合并,保证数据的完整
复制代码
total = pd.merge(left=pop_abb, right=areas, how='outer')
### 找出2010年的全民人口数据,df.query(查询语句)
pop_2010_total = total.query('year == 2010 & ages == "total"')
或者
con1 = total.year == 2010
con2 = total.ages == 'total'
total.loc[con1 & con2]
复制代码
### 对查询结果进行处理,以state列作为新的行索引:set_index
复制代码
total['density'] = total['population']/total['area (sq. mi)']
total
复制代码
复制代码
density_df = total.query('year == 2012 & ages == "total"').sort_values('density', ascending=False)
density_df.set_index('state').head()
相关推荐
卷无止境16 小时前
Apache Ossie:打破数据孤岛的语义互操作标准
后端·数据分析
keke.shengfengpolang18 小时前
软件工程转数据分析,真的能行吗?过来人给你交个底
数据挖掘·数据分析·软件工程
小懿互联集成平台19 小时前
企业微信与金蝶云星空业财审批一体化对接实施方案
数据分析·企业微信·金蝶云星空·小懿互联·数据集成对接·采购申请审批·费用报销审批
byte轻骑兵21 小时前
国策合规底座+时序智能分析:自主可控Timecho体系落地关键行业数据安全与价值挖掘
大数据·网络·数据库·人工智能·数据分析
孟无岐21 小时前
埋点驱动调优:TapTap 数据反推卡点、LTV 推算与 A/B 测试实战
数据分析·ab测试·数据驱动·埋点·ltv·付费漏斗·留存优化
QN1幻化引擎1 天前
# DalinX V8 灵鉴 V2:12维意识评测框架 —— 从 Tononi IIT 到 Friston FEP 的理论统一
数据库·人工智能·算法·机器学习·数据挖掘·agi
AI推荐率1 天前
品牌AI曝光度量化中的采样方法、指标设计与数据分析
人工智能·数据挖掘·数据分析
YangYang9YangYan1 天前
2026电子商务毕业学数据分析的指南与路径
数据挖掘·数据分析
数聚天成DeepSData1 天前
遥感农业数据集下载全攻略
数据库·人工智能·深度学习·机器学习·自然语言处理·数据挖掘
字节跳动开源2 天前
扣子✖️ SearchCLI:一个不会英语的卖家,靠一个 bot 卖到了日韩英多个市场
数据挖掘·开源·agent