“一胎化”35年,Python可视化初探中国人口变化
点击上方图片抢购全场5折优惠课程
个人博客:zmister.com
公众号:州的先生(微信ID:zmister2016)
1980年9月,《关于控制我国人口增长问题的公开信》标志着“一胎化”政策开始;
1982年9月,计划生意被定为基本国策;
1982年12月,计划生育被写入宪法;
2015年10月,中共十八届五中全会,提出“全面实施一对夫妇可生育两个孩子政策,积极开展应对人口老龄化行动”,标志着“一胎化”政策的终结。
在这35年间,中国经历了经济巨大发展,经历了城市化进程的不断加快,经历了社会物质生活的不断丰富,同时也经历了很多问题,并且由“一胎化”政策所带来和引起的问题也逐渐显现到中国的社会发展中,最终导致了此政策在2015年底被终结。
那么在这35年间,中国的人口发生了怎样的变化?又出现了怎样的趋势呢?
本文借助Python从国家统计局提供的中国人口数据中,使用可视化的手段来初探这35年来,中国人口的变化。
注:本文所使用数据来源于国家统计局官方网站——“国家数据”
1981年及以前人口数据为户籍统计数;1982、1990、2000、2010年数据为当年人口普查数据推算数;其余年份数据为年度人口抽样调查推算数据。总人口和按性别分人口中包括现役军人,按城乡分人口中现役军人计入城镇人口。————《国家数据》网站网页数据说明
图表中数量单位为:万人,大多数占比单位为%,出生率、死亡率和自然增长率单位为‰
在国家数据网站,我们可以获得到建国以来至2016年的人口数据,但是下载的数据有一些小小的限制,很零乱也不便于整理。我们借助Python编写一个小小的工具,将数据下载汇总到一个CSV文件中:
方便后期直接使用Pandas库进行读取和操作。
一、中国总人口增长趋势放缓
首先来看看中国总人口的变化趋势。
我们将1949年至2016年共计67年的年末总人口数据通过柱状图的形式展示出来:
from pyecharts import Line
year = data['年份']
total = data['年末总人口(万人)']
men = data['男性人口(万人)']
women = data['女性人口(万人)']
men_women = data['男女人口差值']
city = data['城镇人口(万人)']
no_city = data['乡村人口(万人)']
line = Line("中国人口变化趋势",title_pos='center',subtitle="1949年~2016年年末总人口变化(万人)")
line.add(
"总人口",
year,total,
legend_top='bottom',
is_more_utils=True,
mark_point=[
'min','max',{'coord':[data[data['年份']=='1980年'].index,data[data['年份']=='1980年']['年末总人口(万人)'].values[0]]}
],
mark_point_symbolsize=80
)
line
在图中,我们设置了三个标记点,分别是:
1949年建国;
1980年“一胎化”政策实施那年
最近的2016年。
在这67年间,我国人口从1949年末的5亿多人口增长到了2016年末的近14亿人口,其中,在1980年末人口为9亿8千多万,即将突破10亿大关。
总体而言,在这67年间,我国的人口总数是呈上升趋势的。
但是从这个柱状图的走势中,我们很难看清“一胎化”政策实施前和实施后对人口的自然增长造成的影响如何。下面,我们通过计算“一胎化”政策实施前后32年(为了方便对比,取对等的年数)人口增长的总数,来大概看看“一胎化”政策对人口增长所产生的影响。
total_1949 = data[data['年份']=='1949年']['年末总人口(万人)'].values
total_1980 = data[data['年份']=='1980年']['年末总人口(万人)'].values
total_2012 = data[data['年份']=='2012年']['年末总人口(万人)'].values
from pyecharts import Bar
cate = ['人口增长总数']
after_total = total_1980-total_1949
last_total = total_2012-total_1980
bar_1980 = Bar("“一胎化”政策前后32年中国人口增长总数对比",title_pos='center',subtitle="1949-1980年人口增长总数与1980-2012年人口增长总数")
bar_1980.add('前32年',cate,after_total,legend_top='bottom',mark_point=["average"],mark_point_symbol='roundRect')
bar_1980.add('后32年',cate,last_total,legend_top='bottom',mark_point=["average"],mark_point_symbol='roundRect')
bar_1980
从上图“一胎化”政策前后32年中国人口增长总数对比来看,自1949年年末至1980年年末,中国人口总数从54167万人增长至98705万人,合计增长了44538万人;而自1980年“一胎化”政策出台至2012年,中国人口总数从98705万人增长至135404万人,合计增长了36699万人。
在“一胎化”政策出台后的32年间,中国总体人口增长总数比之前少了7839万人,可以说中国总体的人口增长趋势较之于之前是有明显的放缓的。
二、男女人口比例整体拉大
男女人口比例失衡一直是新闻媒体年年喜欢炒的冷饭,那么中国人口中的男女比例到底是个什么情况,我们来简单看看:
gender_line = Line("1949-2016年中国男女人口数量变化走势",title_pos='center')
gender_line.add("男性人口",year,men,legend_top='bottom',is_more_utils=True,is_fill=True)
gender_line.add("女性人口",year,women,legend_top='bottom',is_fill=True)
gender_line.add(
'男女人口差值',year,men_women,
mark_line=["average"],
legend_top='bottom',
mark_point=[{'coord':[data[data['年份']=='1980年'].index,data[data['年份']=='1980年']['男女人口差值'].values[0]]}]
)
gender_line
对1949年至2016年中国男性人口和女性人口分别绘制折线图,我们可以发现,从建国以来我国一直都是出于“男多女少”的局面,男性人口始终多于女性人口一定的数量。
之前我们已经通过Pandas对每一年的男女差值进行了计算,为了更加清晰地看到每年的男女人口数量差异值,我们单独将男女人口差值呈现在图表中:
gender_differ_line = Line("中国男女人口差值变化",title_pos='center',subtitle="1949-2016年")
gender_differ_line.add(
'男女人口差值',year,men_women,
mark_line=["average"],
legend_top='bottom',
is_fill=True,
line_opacity=0.2,
area_opacity=0.5,
mark_point=['min','max',{'coord':[data[data['年份']=='1980年'].index,data[data['年份']=='1980年']['男女人口差值'].values[0]]}]
)
gender_differ_line
可以发现,自1949年至2016年,中国男女人口差值最小的是1965年,仅为一千七百多万,最高为2000年的四千多万,均值为两千八百余万,其值在实施“一胎化”政策左右的年份。
在实施“一胎化”前,男女比例呈现出阶段性的起伏态势,但是人口差值基本处于六十余年的人口差值平均值之下:
从1949年到1959年,男女人口差值缓慢上升;
从1960年到1969年,男女人口差值迅速降至谷底,并在谷底徘徊了好几年;
从1970年到1980年,男女人口差值又缓慢上升了;
这个变化情况是否受到了当时的社会和政治活动的影响,这个暂不深究,大家如果有兴趣可以自己结合其他数据进行研究。
在实施“一胎化”之后,中国男女人口差值有过走高,也有过骤降的低谷,之后又达到了历史最大的差值4131万人(2000年),最后有阶梯性的下降,但还是维持在了差值高位上。
同时,女性人口无论是建国初期还是最近,在中国总人口中的占比始终没有超过50%(占比最低的年份为1949年末的48.04%,占比最高的年份为1996年的49.17%),下图为男女人口差值变化走势和三个基本年份的男女人口占比图:
在新闻媒体言及男女人口问题时,我们至少该知道“每年XXXX万男性将成为光棍”的背后,是我国人口基数的不断增长,以及男女人口占比的一个基本面。
三、人口自然增长率持续走低
“一胎化”政策的一个目的,就是通过减少新生儿的增加,降低人口出生率,进而降低人口自然增长率,从而减轻人口负担。那么,“一胎化”政策实施之后,我国的人口出生率,死亡率和自然增长率又有什么变化呢。
from pyecharts import Line,Bar
year = borth_data['年份']
borth_rate = borth_data['出生率']
death_rate = borth_data['死亡率']
natural_rate = borth_data['自然增长率']
borth_rate_line = Line("中国人口出生率、死亡率及自然增长率变化走势",title_pos='center',subtitle='1949年~2016年,单位:‰')
borth_rate_line.add("出生率",year,borth_rate,legend_top='bottom')
borth_rate_line.add("死亡率",year,death_rate,legend_top='bottom')
borth_rate_line.add("自然增长率",year,natural_rate,legend_top='bottom',)
borth_rate_line
由中国人口出生率、死亡率、自然增长率走势折线图我们可以发现,中国人口的死亡率在正常年份下都是比较稳定的,而出生率和自然增长率则在1981年之后,经历小幅波动然后逐年降低。
可以看到,“一胎化”政策带来的人口出生率和自然增长率的降低作用是十分明显的。在物质生活、医疗条件越来越好的情况下,人口的死亡率不会出现大幅的变动,那么出生人口的变动则直接影响着总的人口的变动。出生率的变化,则直接左右人口自然增长率的变化。
四、人口老龄化加剧
伴随着人口自然增长率的降低,人口年龄结构也会相应地发生一些变化,基于此,我们收集了人口年龄结构和抚养比数据,以增加可视化探索的方向。
由于历史原因,“国家数据”中只提供了从1982年至2016年的人口年龄结构和抚养比数据,所以我们就只从“一胎化”后看中国人口的年龄结构变化。
在大多数情况下,简单的折线图走势、柱状图对比、饼图结构分析就能够让我们从繁杂的数据中明了地看到一些隐藏其中的事实。所以这里我们依然先用折线图绘制出青少年(0-14岁)和老年(65岁及以上)人口的占比变化。
from pyecharts import Line,Bar
year = age_data['年份']
age_total = age_data['0-14岁人口(万人)']
age_men = age_data['15-64岁人口(万人)']
age_women = age_data['65岁及以上人口(万人)']
age_line = Line("中国人口年龄结构变化趋势",title_pos='center',subtitle='单位:万人')
age_line.add("0-14岁",year,age_total,is_more_utils=True,legend_top='bottom')
age_line.add("15-64岁",year,age_men,legend_top='bottom')
age_line.add("65岁及以上",year,age_women,legend_top='bottom')
age_line
由“中国人口年龄结构变化趋势图”可以发现,65岁及以上的老年人口是逐年增加的,而0-14岁的青少年人口呈局部波动的整体下降趋势。
通过年龄结构的饼图,我们可以更加直观地看到人口年龄架构发生的变化:
child_1982 = age_data[age_data['年份']=='1982年']['0-14岁人口(万人)'].values
mature_1982 = age_data[age_data['年份']=='1982年']['15-64岁人口(万人)'].values
old_1982 = age_data[age_data['年份']=='1982年']['65岁及以上人口(万人)'].values
pie_1982 = Pie('1982年中国人口年龄结构',title_pos='center')
pie_1982.add(
"",['0-14岁','15-64岁','65岁及以上'],[child_1982,mature_1982,old_1982],
is_label_show=True,
legend_pos="bottom",
radius=[20, 40],
rosetype='area'
)
child_2016 = age_data[age_data['年份']=='2016年']['0-14岁人口(万人)'].values
mature_2016 = age_data[age_data['年份']=='2016年']['15-64岁人口(万人)'].values
old_2016 = age_data[age_data['年份']=='2016年']['65岁及以上人口(万人)'].values
pie_2016 = Pie('2016年中国人口年龄结构',title_pos='center')
pie_2016.add(
"",['0-14岁','15-64岁','65岁及以上'],[child_2016,mature_2016,old_2016],
is_label_show=True,
legend_pos="bottom",
radius=[20, 40],
rosetype='area'
)
可以很明显地看到,从1982年到2016年,0-14岁的人口占比减少了一半以上,其原因,一方面是青少年进入到15-64岁的人口结构行列中(16-64岁人口结构占比是有提升的,转化为大量的劳动人口红利),另一方面,也是“一胎化”政策导致每年出生的新生儿人口减少。同时,65岁及其以上的老年人口占比增长的一倍以上。
由于0-14岁年龄段人口的逐渐减少以及65岁及以上人口的逐渐增多,导致中国近35年来,人口抚养比也发生了不小的变化。
抚养比又称抚养系数是指在人口当中,非劳动年龄人口对劳动年龄人口数之比。抚养比越大,表明劳动力人均承担的抚养人数就越多,即意味着劳动力的抚养负担就越严重。
少儿人口抚养比以反映每100名劳动年龄人口要负担多少名少年儿童。
老年人口抚养比 也称老年人口抚养系数。指某一人口中老年人口数与劳动年龄人口数之比。通常用百分比表示。用以表明每100名劳动年龄人口要负担多少名老年人。老年人口抚养比是从经济角度反映人口老化社会后果的指标之一
from pyecharts import Line,Bar
year = age_data['年份']
age_rate_total = age_data['总抚养比(%)']
age_rate_men = age_data['少儿抚养比(%)']
age_rate_women = age_data['老年抚养比(%)']
age_rate_line = Line("中国人口抚养比结构变化趋势")
age_rate_line.add("总抚养比",year,age_rate_total)
age_rate_line.add("少儿抚养比",year,age_rate_men)
age_rate_line.add("老年抚养比",year,age_rate_women)
age_rate_line
在“一胎化”的前二十余年间,得益于新生人口的减少,人口总抚养比随着少儿抚养比的下降而下降,尽管老年人口抚养比在逐渐升高,但其作用的体现,还是要等到2009年后。从2010年开始,少儿抚养占比保持了一定的稳定,同时大量的劳动力人口进入到了老年人口行列当中,导致老年抚养比迅速抬高,从而使得从2010年开始,中国人口总的抚养比开始重新逐渐走高。
虽然如今“一胎化”政策已经废除,但是一方面“一胎化”废除后可能导致新生儿增多,进而使得少儿抚养比继续有所提升,另一方面,人口红利持续消耗,老年人口持续增多,老年抚养比也将继续上扬,想要在短时间内将人口总抚养占比提高还是不大可能。
五、小绪
“一胎化”政策已经成为历史,但是其所产生的影响,并不会马上消失。人口的变化,关乎中国社会政治、经济产业等各方面的发展。废除“一胎化”政策之后,能否很快消除其所带来、将带来的影响,未来又会有什么人口政策随着中国社会的发展而出台,我们拭目以待。
今日4折优惠课程,扫码下图立即抢购