Python可视化之青少年近视数据

最近看了国家卫健委发布的青少年近视数据,感觉挺吓人的。我国儿童青少年总体近视率为53.6%,其中,6岁儿童为14.5%,小学生为36.0%,初中生为71.6%,高中生为81.0%。我有个小外甥6岁的时候就带上眼镜了,看着心里确实挺别扭的,尤其是今年的疫情好多学生要在家里上网课,外出的时间变少了,而看手机、电脑等电子产品的时间变多了,这样势必会导致孩子眼疲劳。希望身边有小孩的朋友能够注意,带上眼睛就是个不可逆的过程,并且生活上也会带来一定的不方便。

下面我们用pyechars对青少年的近视率和近视防控进行可视化。先来看下近视率的效果图:

这里通过仪表盘来展示的,仪表盘能非常清楚的看到每个年龄段的近视率以及是否超过警戒线。这里还是能明显感到我国儿童青少年近视发病形势非常严峻。

下面以“6岁儿童近视率”为例,看具体代码

import pyecharts.options as opts
from pyecharts.charts import Gauge

# bg_color 设置背景色
Gauge(init_opts=opts.InitOpts(bg_color='#364045')) \
    .add(series_name="近视率",
         data_pair=[["6岁儿童近视率", 14.5]],  # 仪表盘的数据名称和数据值
         radius="55%",  # 表盘圆圈大小
         title_label_opts=opts.LabelOpts(font_size=15, color="white")  # 设置数据名称的字体大小和颜色
         ) \
    .set_global_opts(
        legend_opts=opts.LegendOpts(is_show=False),
        tooltip_opts=opts.TooltipOpts(is_show=True, formatter="{a} 
{b} : {c}%"
), ) \ .set_series_opts( axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts( color=[[0.1, "#84E910"], [0.3, "#E9B310"], [0.7, '#E94A10'], [1, "#E91410"]], # 仪表盘每一段的颜色 width=30 ) ) ) \ .render("gauge_change_color.html")

看过我之前写的pyechars教程,应该很容易能写出来。其他年龄段的图类似,修改data_pair属性即可。

看到这么吓人的数据,我们当然还是希望能够看到如何预防青少年近视。我在国家卫健委网站找到一些的预防方法,下面用pyechars的树形图将其展示出来。效果如下:

代码如下:

from pyecharts import options as opts
from pyecharts.charts import Tree


data = [
    {
        "children": [
            {"name": "每天2小时以上的白天户外活动"},
            {
                "children": [
                    {"name": "眼睛离书本一尺"},
                    {"name": "胸口离桌沿一拳"},
                    {"name": "握笔的手指离笔尖一寸"}
                ],
                "name": "保持正确的读写姿势",
            },
            {
                "children": [
                    {"name": "走路时、吃饭时、卧床时"},
                    {"name": "晃动的车厢内"},
                    {"name": "光线暗弱或阳光直射"},

                ],
                "name": "避免不良的读写习惯",
            },
            {
                "children": [
                    {"name": "学习30—40分钟后,应休息远眺放松10分钟"},
                    {"name": "非学习目单次不超15分钟,每天不超1小时"},
                    {"name": "6岁以下儿童避免使用电子产品"},

                ],
                "name": "控制使用电子产品的时间",
            },
            {
                "name": "定期进行视力检查",
            },
            {
                "children": [
                    {"name": "小学生每天10小时"},
                    {"name": "初中生每天9小时"},
                    {"name": "高中生每天8小时"},
                ],
                "name": "保证充足的睡眠",
            },
        ],
        "name": "预防近视",
    }
]

Tree(init_opts=opts.InitOpts(width="900px", height="900px", bg_color='#364045'))\
    .add("", data, pos_right='30%',
         label_opts=opts.LabelOpts(font_size=17, color="white")
         )\
    .set_global_opts(title_opts=opts.TitleOpts(title="青少年近视预防"))\
    .render("tree_base.html")

逻辑比较简单,首先用json格式构造树的节点及其叶子节点,然后传给Tree对象展示即可。

心里还是有些许的沉重,虽然我的文章是讲编程的,但我希望后续能经常找到一些有价值的数据,让大家在学习编程的同时有一些其他的启发。

另外,大家如果觉得公众号看代码不方便,可以回复关键字 青少年近视获得完整的代码文件。

欢迎关注公众号 渡码