中国离老龄化社会还有多远?数据图表源代码一览

发布于: 雪球转发:0回复:0喜欢:0

本文所使用的语言为Python,所使用的可视化module为pyecharts。数据源为iFinD数据接口。

建议使用脚本的朋友:

1、可以将Python版本更新到Python 3.7及以上

2、使用 pip install pyecharts安装pyecharts

3、点此申请iFinD数据接口的试用,并安装相关模块即可使用

--------------代码分界线---------------

from example.commons import Collector, Faker

from pyecharts import options as opts

from pyecharts.charts import Bar, Line, Page, Scatter

from decimal import Decimal

from iFinDPy import *

C = Collector()

#输入数据接口的账号密码

THS_iFinDLogin('请输入ifind数据接口账号','请输入ifind数据接口密码')

#开始日期

start_date = "1950-08-01"

#结束日期

end_date = "2019-08-21"

#指标说明

#M002902560 0-14

#M002902562 15-64

#M002902564 65+

a = THS_EDBQuery('M002902560;M002902562;M002902564',start_date, end_date)

#从iFinD终端获得时间序列

x_axis_list = a['tables'][1]['time']

x_axis_list.reverse()

#分别从iFinD数据终端获得

#0-14岁人口

#15-64岁人口

#65岁以上人口

v1 = a['tables'][0]['value']

v2 = a['tables'][1]['value']

v3 = a['tables'][2]['value']

v1.reverse()

v2.reverse()

v3.reverse()

#将所有人口调整成亿人

i = 0

while i < len(v1):

v1[i] = v1[i]/10000

v2[i] = v2[i]/10000

v3[i] = v3[i]/10000

i += 1

#计算老龄化比率,并且控制数值为2位小数

#将年份用两位数字显示

v4 = list()

new_x_axis_list = list()

i = 0

while i < len(v1):

total_pop = v1[i]+v2[i]+v3[i]

v4.append(Decimal(v3[i]/total_pop).quantize(Decimal('0.0000'))*100)

new_x_axis_list.append(x_axis_list[i][2:4])

i += 1

x_axis_list = new_x_axis_list

@C.funcs

def overlap_bar_line() -> Line:

#生成折线图

line = (

Line()

.add_xaxis(x_axis_list)

.add_yaxis("老龄化人口比率",

v4,

linestyle_opts=opts.LineStyleOpts(color="Crimson", width=3, type_="solid"),

itemstyle_opts=opts.ItemStyleOpts(border_width=1,color="Crimson"),

markpoint_opts=opts.MarkPointOpts(

data=[opts.MarkPointItem(name="18年老龄化人口比例", coord=[x_axis_list[30], v4[30]], value="12%"),opts.MarkPointItem(name="18年老龄化人口比例", coord=[x_axis_list[12], v4[12]], value="7%")]

),

markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(y=7, name="进入老龄化社会"),opts.MarkLineItem(y=14, name="进入老龄社会")]),

)

.extend_axis(

yaxis=opts.AxisOpts(

axislabel_opts=opts.LabelOpts(formatter="{value}亿"),name="(中国人口数量/亿)"

),

)

.set_series_opts(

yaxis_opts=opts.AxisOpts(

axislabel_opts=opts.LabelOpts(formatter="{value}"),max_=20,min_=0,interval=5,

name="(万人)"

),

)

.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

.set_global_opts(

title_opts=opts.TitleOpts(title="中国人口结构图:iFinD EDB"),

yaxis_opts=opts.AxisOpts(

axislabel_opts=opts.LabelOpts(formatter="{value}%"),max_=20,min_=0,interval=5,

name="(老龄化人口比率/%)"

),

xaxis_opts=opts.AxisOpts(

axislabel_opts=opts.LabelOpts(formatter="{value}年"),

),

)

)

bar = (

Bar()

.add_xaxis(x_axis_list)

.add_yaxis("0-14岁", v1,stack=True,yaxis_index=1,itemstyle_opts=opts.ItemStyleOpts(color="SteelBlue"))

.add_yaxis("15-64岁", v2,stack=True,yaxis_index=1,itemstyle_opts=opts.ItemStyleOpts(color="DeepSkyBlue"))

.add_yaxis("65岁以上", v3,stack=True,yaxis_index=1,itemstyle_opts=opts.ItemStyleOpts(color="SkyBlue"))

.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

)

line.overlap(bar)

return line

Page().add(*[fn() for fn, _ in C.charts]).render()

--------------代码分界线---------------

关注“核新同花顺iFinD”公众号(微信号:ths_iFinD),获取更多价值数据分析!