python 分析世界高收入数据集
1、加载库
import os, sys, re import numpy as np import pandas as pd import matplotlib.pyplot as plt
2、读取数据
path = r‘E:\数据集‘ data_file = os.path.join(path, "income_dist.csv") df = pd.read_csv(open(data_file)) # 路径含有中文字符,用 open() 函数 df.info()
2180行, 354列
3、美国每年的平均收入
# 筛选行,设置年份为索引 df_i = df[df.Country == ‘United States‘].set_index(‘Year‘) # 筛选列 data = data_1.loc[:, [‘Country‘, ‘Average income per tax unit‘]] ind = np.arange(len(data)) # 标识柱体的横轴位置的迭代器 # 以面向对象风格的接口绘图 fig = plt.figure(figsize=(22, 8)) # 初始化画布, 创建基准图表 ax = plt.subplot(111) # 一行一列的绘图方格的坐标轴数组 ax.bar(ind, data.iloc[:, 1], width=0.85) # 用‘ Average income per tax unit‘ 绘制柱状图,每个柱体宽度为 0.35 ax.set_xticks(np.arange(0, len(data), 4)) # 横轴刻度间隔为 4 ax.set_xticklabels(data.index[0::4], fontdict={‘size‘: 14, ‘color‘: ‘grey‘}, rotation=45) # 横轴刻度标签为间隔为 4 的年份,旋转 45 度 ax.set_ylabel(‘Income in USD‘, fontdict={‘size‘: 18, ‘color‘: ‘yellow‘}) # 纵轴标签 plt.title(‘U.S. Average Income 1913-2008‘, fontdict={‘size‘: 20, ‘color‘: ‘yellow‘}) # 设置图像标题 plt.yticks(size=14, color=‘grey‘) plt.show()
4、分析不同群组的美国高收入数据
前 10% 收入份额,前 5% 收入份额,前 1% 收入份额,前 0.5% 收入份,前 0.1% 收入份额
# 用正则筛选预期的列名成i = df.columns.str.contains(‘Top (10|5|1|0.5|0.1)%.+share$‘, regex=True) columns = df.columns[i].tolist() df_i = df[df[‘Country‘]==‘United States‘].set_index(‘Year‘) # 筛选行, 设置年份为索引 df_ij = df_i[columns] # 筛选列, fig = plt.figure(figsize=(12, 8)) for col in df_ij: lab = re.search(r‘Top .+%‘, col).group() df_ij[col].dropna().plot(label=lab) plt.yticks(fontproperties=‘Times New Roman‘, size=18, color=‘grey‘) plt.xticks(fontproperties=‘Times New Roman‘, size=18, color=‘grey‘) plt.legend(loc=‘best‘, fontsize=15) plt.xlim(1900, 2020) plt.ylim(0, 50) plt.xlabel(‘year‘, size=18, color=‘yellow‘) plt.show()
5、分析不同群组的美国高收入数据进行均值归一化,查看其变化趋势
# 用正则筛选预期的列名成 i = df.columns.str.contains(‘Top (10|5|1|0.5|0.1)%.+share$‘, regex=True) columns = df.columns[i].tolist() df_i = df[df[‘Country‘]==‘United States‘].set_index(‘Year‘) # 筛选行, 设置年份为索引 df_ij = df_i[columns] # 筛选列, fig = plt.figure(figsize=(12, 8)) for col in df_ij: lab = re.search(r‘Top .+%‘, col).group() mean = df_ij[col].mean() # 列均值 norm = df_ij[col] / mean # 均值归一化 norm.dropna().plot(label=lab) # 归一化后的的非空值绘图 plt.yticks(size=14, color=‘grey‘) plt.xticks(size=14, color=‘grey‘) plt.xlabel(‘year‘, size=18, color=‘yellow‘) plt.xlim(1900, 2020) plt.legend() plt.show()
6、美国的高收群体不同组的资本收益数据
# 选取包含资本收益和不包含资本收益的收入组 i_1 = df.columns.str.contains(‘Top (10|5|1|0.5|0.1)%.+share$‘, regex=True) i_2 = df.columns.str.contains(‘Top (10|5|1|0.5|0.1)% in.+capital gains$‘, regex=True) cols = zip(df.columns[i_1], df.columns[i_2]) cols = list(cols) # 筛选行, 设置年份为索引 df_i = df[df[‘Country‘]==‘United States‘].set_index(‘Year‘) fig = plt.figure(figsize=(14, 8)) # 资本收益 = 包含资本收益的收入 - 不包含资本收益的收入 for col_a, col_b in cols: # cols 是二元元组的列表 lab = re.search(r‘Top .+%‘, col_a).group() capital_gains = df_i[col_a] - df_i[col_b] capital_gains.dropna().plot(label=lab) # 设置图形参数 plt.yticks(size=14, color=‘grey‘) plt.xticks(size=14, color=‘grey‘) plt.xlabel(‘year‘, size=18, color=‘yellow‘) plt.xlim(1900, 2020) plt.legend() plt.show()
7、进一步分析美国高收入群体中不同组的平均收入随时间的相对变动
# 筛选行, 设置年份为索引 df_i = df[df[‘Country‘]==‘United States‘].set_index(‘Year‘) i = df_i.columns.str.contains(‘Top (10|5|1|0.5|0.1)% av.+income$‘) cols = df_i.columns[i].tolist() df_ij = df_i[columns] plt.rcParams[‘font.sans-serif‘] = ‘SimHei‘ # 使轴标题正常显示中文 fig = plt.figure(figsize=(14, 12)) # 资本收益 = 包含资本收益的收入 - 不包含资本收益的收入 for col in cols: lab = re.search(r‘Top .+%‘, col).group() df_ij[col].dropna().plot(label=lab) plt.yticks(range(0, 5000000, 500000), range(0, 500, 50), size=14, color=‘grey‘) plt.ylabel(‘income 单位:万‘, size=18, color=‘yellow‘) plt.xticks(size=14, color=‘grey‘) plt.xlabel(‘year‘, size=18, color=‘yellow‘) plt.title(‘美国高收入群体不同组的平均收入‘, size=20, color=‘yellow‘) plt.xlim(1900, 2020) plt.legend() plt.grid() plt.show()
8、美国最富裕群体的收入组成
%matplotlib inline # 筛选行, 设置年份为索引 df_i = df[df[‘Country‘]==‘United States‘].set_index(‘Year‘) # 选择期望的列名称 i = df.columns.str.contains(‘Top 10% income com.+?-[WDIRE]‘) cols = df.columns[i].tolist() cols.pop(3) # Investment income 不需要 df_ij = df_i[cols] # 对筛选过行的数据框进行列筛选 # 图例标签 labs = [‘Salary‘, ‘Dividend‘, ‘Interest‘, ‘Rent‘, ‘Business‘] fig = plt.figure(figsize=(12, 8)) ax = plt.gca() # 为了转换图例标签进行的数据框重命名 df_ = df_ij.rename(dict(zip(cols, labs)), axis=1) df_.plot(kind=‘area‘, ax=ax) plt.yticks(size=14, color=‘grey‘) plt.ylabel(‘收入构成百分比 单位:%‘, size=18, color=‘yellow‘) plt.xticks(size=14, color=‘grey‘) plt.xlabel(‘year‘, size=16, color=‘yellow‘) plt.xlim(1915, 2010) plt.legend(loc=‘best‘, fontsize=16) plt.title(‘美国最富裕群体的收入组成‘, size=18, color=‘yellow‘) plt.grid() plt.show()
相关推荐
YENCSDN 2020-11-17
lsjweiyi 2020-11-17
houmenghu 2020-11-17
Erick 2020-11-17
HeyShHeyou 2020-11-17
以梦为马不负韶华 2020-10-20
lhtzbj 2020-11-17
夜斗不是神 2020-11-17
pythonjw 2020-11-17
dingwun 2020-11-16
lhxxhl 2020-11-16
坚持是一种品质 2020-11-16
染血白衣 2020-11-16
huavhuahua 2020-11-20
meylovezn 2020-11-20
逍遥友 2020-11-20
weiiron 2020-11-16