数据分析 | 9年间各省市平均收入分析

2020-03-06 16:10:33 浏览数 (2)

↑ 关注 星标 ~ 有趣的不像个技术号

每晚九点,我们准时相约

各省市平均工资怎么样?

你每年调薪百分之多少才不低于平均值?

9年时间可以有多大的发展差距?

预测2019年各省市人平均收入应该是多少?

这篇文章告诉你!

今天逛kaggle看到一个数据集[1],其中有一部分是一个叫做income的表格文档。虽然最后的数据是2017年,但也值得研究一下。嗯,拿来捋一捋。

这次分析用到pandas、matplotlib 以及一些分析思路,比较浅显求评论区多指教。

信息概览

拿到一个陌生的文档第一步是先粗略的看一下,用到以下代码

代码语言:javascript复制
dtincome=pd.read_excel('income.xls')
print(dtincome.shape)
dtincome.info()

输出结果如下:31行10列;1列地区area,9列年份,没有空值;使用2.5 kB内存

代码语言:javascript复制
(31, 10)
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 31 entries, 0 to 30
Data columns (total 10 columns):
area 31 non-null object
2017 31 non-null int64
2016 31 non-null int64
2015 31 non-null int64
2014 31 non-null int64
2013 31 non-null int64
2012 31 non-null int64
2011 31 non-null int64
2010 31 non-null int64
2009 31 non-null int64
dtypes: int64(9), object(1)
memory usage: 2.5  KB

通过head函数查看的本表头部信息如下:按地区、年代展示了收入数据

但这个数据表没有明说这个表是什么,看样子理解是人均年收入?拿北京的搜索验证一下,得到的答案是:北京职工年平均工资。

看上边头部信息那个表,因为索引列是编号,为了方便,我想改为area为索引列,那么需要用函数转化一下:得到图的图如下,修改了哪里可以与上边图对比一下首列(没了01234)。

代码语言:javascript复制
dtincome=dtincome.set_index('area')
dtincome.head()

分析部分

上边的数据概览跟索引列设置完了,下边开始一些简单分析

2017年收入排序

我想取出2009,2017年数据,按照2017数据降序排列,然后做柱状图

代码语言:javascript复制
x=dtincome[2009].sort_values(ascending=False)
y=dtincome[2017].sort_values(ascending=False)
plt.figure(figsize=(16,9))

total_width, n = 0.8, 2
width = total_width / n

plt.bar(dtincome.index, y, width=2*width,label='2017',color='#334252')
plt.bar(dtincome.index, x,  width=width, label='2009', color='#fd5f00')

plt.legend()

plt.ylabel('单位:元')
plt.xlabel('省,直辖市')
plt.xticks(rotation=80, fontsize=14)
plt.savefig('2017降序bar.png')
plt.show()

通过这张图可以看到:北京、上海、西藏、天津人均收入居全国之首,但跟我认知不一样,西藏这么高呀,广东没在前面?

针对西藏再google一下找到一个链接。

http://finance.china.com.cn/news/20191030/5109469.shtml

31省市前三季居民收入榜单:京沪突破5万元 西藏增速第一,看来数据没得问题。

此外下图2009年原本最低的江西、海南等,也不再垫底。

青海贵州也是名列前茅。

极差值

那么2017年最高的北京和最低的河南差多少呢?

代码语言:javascript复制
dtincome.max()-dtincome.min()

2017年最高的北京市比最低的河南省差了78997元。往年极差数据如上。

9年净增加额

现在想知道一下两个数据:

1. 每个省市自身9年间增加了多少收入?

2. 如果以2009年为基数,增长率是多少?

代码语言:javascript复制
addnum=dtincome[2017]-dtincome[2009]  # 增长数字计算
dtincome.insert(0,'addnum',addnum)    # 将计算数字加入首列
dtincome.head(10)                     # 展示头部信息

通过得到的addnum列可以看到9年间收入都是翻了一番的。所以增长率应该是大于1,以北京、河南为例计算:

代码语言:javascript复制
add_rate_bj=dtincome.loc['北京市']['addnum']/dtincome.loc['北京市'][2009]
add_rate_hn=dtincome.loc['河南省']['addnum']/dtincome.loc['河南省'][2009]
print(add_rate_hn)
print(add_rate_bj)

1.32

1.05

结果显示,北京九年增长了1.32倍,河南省增长了1.05倍。

但这个衡量指标不够完善,我们知道收入增加都是在往年基础上更进一步的,就像调工资都是以之前工资水准上调,不会一直以入司时候公司为基数,所以想算一下9年的复增长率,这个指标就像存钱的复利。

复利率计算

复利公式 :F=P*(1 i)^n

利率公式:i=(F/P)^1/n-1

在这里p相当于2009年的收入,F相当于2017年收入,n为8年

代码语言:javascript复制
i_bj=(pow(dtincome.loc['北京市'][2017]/dtincome.loc['北京市'][2009],1/8)-1)*100
i_hn=(pow(dtincome.loc['河南省'][2017]/dtincome.loc['河南省'][2009],1/8)-1)*100

print('北京市8年复利:%.3f ' % i_bj)
print('北京市8年复利:%.3f ' % i_hn)

计算结果是:北京市8年复利:11.104 ;河南省8年复利:9.367

北京基数大,增长率也高;河南基数小,增长率也小于北京。

也就是过去9年如果你都在上班,工资每年调薪10%才满足正常水平。

复利率全部计算一遍

现在想把所有省市的增长复利率都计算一遍,并加入原表,所以需要写一个函数方便计算,整体代码如下:

代码语言:javascript复制
# 先想办法取到area作为列表
province=list(dtincome.index)

# 定义计算函数
def fuli_i(future,now,year):
    return (pow(future/now,1/year)-1)*100
# 计算的i存列表
fuli_i_list=[]
for z in province:
    future=dtincome.loc[z][2017]
    now=dtincome.loc[z][2009]
    i=fuli_i(future,now,8)
    fuli_i_list.append(i)
# 打印看看
print(fuli_i_list)

通过上边代码跑出数据如下:OK,成功了。

代码语言:javascript复制
[11.104060121135761, 10.07405428410808, 10.96948932120323, 10.11699074109298, 10.38839823219011, 9.124444064311987, 11.554847909745991, 10.735531812575317, 9.43918486872537, 10.493957164921696, 10.42016967823416, 10.914307419581725, 11.611272768884827, 12.434260050070067, 11.179048603584052, 9.367185582178106, 12.118485437358494, 11.673351814934364, 10.364474505013742, 11.260148139091243, 13.58105530869107, 11.367474245793607, 12.179151115437591, 13.003995739791186, 13.34245416624098, 11.39070340256878, 10.569453392495465, 11.671400047653036, 10.854454505533129, 9.947441194548222, 11.9848334119395]

既然成功了,那就加入原表首列

代码语言:javascript复制
dtincome.insert(0,'fuli_i',fuli_i_list)
dtincome.head(5)

可以看到,最大增加率13%,最小9.12% ,50%分位数是11.1%,也就是50%的人工资增长率在11%以上 。

最后做个图展示一下

可以看到9年下来,海南省增长速度最高,年平均增长13.58%,辽宁最低9.12%。我大中华发展真是太猛了!

最后一点就是,这是工资平均增速,所以,你拖后腿了么......

为了验证是否拖后腿,继续再写一部分

2019平均工资预测

验证思路:用这9年算出的年增长率(fuli_i那列)来测算一下2019年各个省市的平均工资吧,如果出乎意料,请看下方分析。

还是那句话:Show you my code

代码语言:javascript复制
# 复利公式:F=P*(1 i)^n  参照这个公式定义函数
def prelook(now,i,year):
    return now*((1 i)**year)

# 拿到2019预测值
wage2019=[]
for z in prov:
    now=dtincome.loc[z][2017]
    i =dtincome.loc[z]['fuli_i']/100  #换算回小数
    wage=prelook(now,i,2)
    wage2019.append(int(wage))  #与之前的统一格式,取整
# 插入表格
dtincome.insert(0,'2019',wage2019)

# 作图
x=dtincome['2019'].sort_values(ascending=False)
plt.figure(figsize=(16,9))
x.plot(kind='bar')
plt.ylabel('单位:元')
plt.xlabel('省,直辖市')
plt.savefig('2019降序bar.png')
plt.show()

计算结果是预测北京2019年人均收入166638元/年,平均13886元/月;河南5581元/月。

跟下图这个预测稍有差距[2]。

各省市的大家可以自己对照。

分析差异原因有两点:

  1. 2018-2019两年经济形势不好,所以用前9年增长率保持不变来预测2019年工资会导致偏高。
  2. 年收入包括奖金、各类补助补贴的合计值,并不是月薪*12这么简单。
  3. 社会上28定律导致财富不均衡。
  4. 这个数据集本身准不准并没有验证。
  5. 工资这事,冷暖自知,比如这图。

解释一大堆就是。。。我拖后腿了,严重的、病入膏肓的。

欢迎关注公众号:SUMER

参考来源:

  1. ^kaggle数据集https://www.kaggle.com/tduan007/china-marriage-and-divorce-data#income.xls
  2. https://www.xinchou.com/AverageWage/110000/2019

0 人点赞