设置画板
import warnings
import matplotlib.pyplot as plt
%matplotlib inline
# 屏蔽代码运行过程中出现的警告信息,主要是屏蔽 pandas 的 .loc 警告问题
warnings.filterwarnings("ignore")
fontsize = 20
plt.rcParams['xtick.labelsize'] = fontsize
plt.rcParams['ytick.labelsize'] = fontsize
plt.rcParams['axes.labelsize'] = fontsize
plt.rcParams['axes.titlesize'] = fontsize
plt.rcParams['legend.fontsize'] = fontsize
plt.rcParams['legend.frameon'] = False # 去除图例边框
plt.rcParams['axes.unicode_minus'] = False # 显示负数
plt.rcParams['axes.spines.right'] = False # 去除右侧坐标轴
plt.rcParams['axes.spines.top'] = False # 去除顶部坐标轴
数据准备
#数据导入
import pandas as pd
df = pd.read_csv('https://labfile.oss.aliyuncs.com/courses/3023/American_Race_Gender_Population.csv')
df.head()
#认识数据:本数据集来源于美国人口普查局与美国国家卫生统计中心,该数据集统计了美国自 1990 至 2019 年期间,各年度全美 51 州各年度性别(Gender)、种族(Race)、年龄段(Age Group)的人口数(Population),数据集中的 Mean Age 字段根据 Age Group 求算术平均得到。
各州各种族人口数分布
目标:想做一个在不同州不同种族上人口数的散点图分布。步骤:
- 将数据集按照州(State)、种族(Race)进行人口数(Population)聚合并按照人口数升序排序。
- 聚合后,将聚合数据集中的 State、Race 特征分别映射至散点图 x、y 坐标,将 Population 人口数特征映射至点的颜色(c)和大小(s)。
- 还有年份这一特征,选择最大最小两个年份(1990 和 2019 )作图。
plt.rcParams['figure.figsize'] = (20, 5)
for year in [1990, 2019]:
data = df.loc[df['Year'] == year]
# 各州按照总人口数升序排序
state_order = data.groupby(['State'])[
'Population'].sum().sort_values().index
# 将 State 字段设置为有序字段,astype:转换数组的数据类型。
data['State'] = data['State'].astype(
pd.api.types.CategoricalDtype(state_order, ordered=True))
# 获取州、种族的聚合结果,并按州升序排序
data = data.groupby(['State', 'Race'], as_index=False)[
'Population'].sum().sort_values(['State'])
plt.scatter(
x=data['State'],
y=data['Race'],
c=data['Population'],
s=data['Population']*0.0001,
ec='tab:blue',
cmap=plt.cm.Accent,
alpha=0.8)
#c指colors颜色,s表示点的大小,cmap指定某个colormap值
#plt.gca可以通过这个改图标的边框属性
ax = plt.gca()
# 将x轴刻度标签旋转90度,刻度字太多
ax.tick_params(axis='x', rotation=90)
# 调节y轴显示范围
ax.set_ylim(-0.5, 3.5)
plt.title('Population Distribution of States of American in Year %d' % year)
plt.show() # 关闭当前图层以绘制下一幅图
做出图了最好给出一些结论。
例如,州对比:在2019年,人口数最多的州是哪些,最少的州是哪些。
种族对比:不同种类的人口数是怎么排名的
各州人口变迁:1990年与2019年,有哪些变化趋势
人口与人口增长率
通过数据透视计算1990到2019的各州人口增长率(Pupulation Changed %),通过数据聚合计算各州 2019 年总人口数(Population)
data = df.loc[(df['Year'] == 1990) | (df['Year'] == 2019)]
# 计算美国各州人口增长率
#pivot_table数据透视表,可以查询每个参数含义
pop_change = data.pivot_table(
index='State'