各国人均寿命与GDP数据集可视化与分析——{{title}}          Made by ®Langwenchong 人口与GDP时间演变 各国总GDP滚动演变 关键时间点人口增长 排名趋势走向可视化 数值趋势走向可视化 折线图趋势走向可视化 归一化堆叠柱状可视化 数据分析 数据集介绍 技术栈介绍

人口分布变化分析

人口数据的变化显示了各国人口的增长趋势。以下是一些观察点:

1800年 最少:冰岛(61428人) 最多:中国(321675013人) 1850年 最少:冰岛(74711人) 最多:中国(402711280人) 1900年 最少:冰岛(77961人) 最多:中国(429437950人) 1950年 最少:冰岛(143749人) 最多:中国(597745535人) 2000年 最少:冰岛(281191人) 最多:中国(1262645000人) 2015年 最少:冰岛(323764人) 最多:中国(1376048943人)

人口增长的主要驱动力包括出生率、死亡率、移民等。中国和印度等国由于基数大,其人口增长显得尤为明显。而冰岛等小国,虽然增长率较高,但人口基数小,总人口相对较少。

人均GDP变化分析

人均GDP的初始值从1800年开始,各国的分布较为广泛,最低的为579美元(朝鲜),最高的为3431美元(英国)。随着时间的推移,全球人均GDP整体呈现上升趋势,但各国之间的增长速度和幅度存在显著差异。

1800年 最低:朝鲜(579美元) 最高:英国(3431美元) 1850年 最低:朝鲜(550美元) 最高:英国(4480美元) 1900年 最低:中国(676美元) 最高:美国(4643美元) 1950年 最低:印度(619美元) 最高:美国(9617美元) 2000年 最低:印度(1824美元) 最高:美国(41712美元) 2015年 最低:朝鲜(1662美元)

人均GDP的差距随着时间的推移变得更加显著,特别是在工业革命之后,西方国家(如英国、美国、德国)的经济迅速发展,而一些发展中国家(如印度、中国)在人均GDP上相对较低,但在近现代(尤其是2000年后)这些国家开始迅速增长。

人均寿命变化分析

人均寿命也是一个重要的指标,从1800年到2015年,各国的平均寿命普遍呈现上升趋势。

800年 最低:印度(25.4424年) 最高:澳大利亚和新西兰(34.05年) 1850年 最低:印度(25.4424年) 最高:新西兰(34.05年) 1900年 最低:印度(25.4424年) 最高:冰岛(50.2064年) 1950年 最低:印度(37.0824年) 最高:冰岛(72.0496年) 2000年 最低:印度(62.4496年) 最高:日本(79.5384年) 2015年 最低:印度(68.35年) 最高:日本(83.4年)

寿命的增加与医疗卫生条件的改善、科技的进步、经济发展等密切相关。以日本为例,其在现代社会中的高寿命水平主要得益于其完善的医疗体系和高水平的生活质量。

变化原因分析

1800-1900年 工业革命的爆发使得西方国家(如英国、美国)的人均GDP和平均寿命显著提升。这一时期,许多国家开始工业化,经济结构发生巨大变化,农业向工业转型。 1900-1950年 这一时期经历了两次世界大战和大萧条,全球经济受到巨大冲击。尽管如此,西方国家的人均GDP和平均寿命仍保持增长,特别是战后经济复苏和技术进步对这些指标的推动作用显著。 1950-2000年 二战后,全球经济进入快速发展期。美国在战后成为全球经济的领导者,其人均GDP在这一时期大幅增长。亚洲国家(如日本、韩国)也开始崛起,通过现代化改革和工业化,实现了经济的迅速发展。 2000-2015年 进入21世纪后,全球化进程加快,信息技术革命推动了经济的发展。中国和印度等新兴经济体的快速发展使得全球经济格局发生显著变化。这一时期,全球人均寿命普遍提升,医疗卫生条件的改善起到关键作用。

工业革命:工业革命是推动19世纪和20世纪初期西方国家经济快速发展的主要原因。工业化进程带来了生产力的大幅提升和经济结构的转型。 战争和政治动荡:两次世界大战和冷战对全球经济和社会产生了深远影响。一些国家因战争遭受重大损失,而战后重建和经济援助也促进了经济复苏和发展。 技术进步:20世纪中后期,科技进步(如电气化、信息化)极大地提升了生产效率,推动了经济增长,同时也改善了人们的生活质量和健康状况。 全球化:全球化进程加快,国际贸易和投资的增加使得各国经济更加互联。新兴市场国家(如中国、印度)通过开放政策和改革实现了快速发展,成为全球经济增长的重要引擎。 政策和制度改革:许多国家通过经济政策和制度改革促进了经济发展和社会进步。比如,中国在20世纪70年代末开始的改革开放政策,极大地推动了经济增长和人民生活水平的提高。

综上所述,这个数据集展示了19个国家在过去两个多世纪中的经济和社会变迁。通过分析人均GDP、平均寿命和人口的变化,可以看到工业革命、战争、技术进步、全球化和政策改革等因素对这些国家的发展产生了深远影响。理解这些变化的原因和趋势对于制定未来的发展战略和政策具有重要意义。

数据集存储从1800-2015年每一个国家的人均GDP,总人口,人均寿命的变化,采用json格式存储,国家包含中日美法英俄等19个主要国家包含发达国家与发展中国家,特征覆盖面广,数据内容丰富可用来进行数据可视化与数据分析。

                            
                              {
                                "counties": [
                                        "China",
                                        "United States",
                                        "United Kingdom",
                                        "Russia",
                                        "India",
                                        "France",
                                        "Germany",
                                        "Australia",
                                        "Canada",
                                        "Cuba",
                                        "Finland",
                                        "Iceland",
                                        "Japan",
                                        "North Korea",
                                        "South Korea",
                                        "New Zealand",
                                        "Norway",
                                        "Poland",
                                        "Turkey"
                                    ],
                                    "timeline": [
                                        1800,
                                        1810,
                                        1820,
                                        1830,
                                        1840,
                                        1850,
                                        1860,
                                        1870,
                                        1880,
                                        1890,
                                        ...//至2015
                                     ],
                                     "series":[
                                        [//1800年所有国家的数据
                                            [
                                                815,
                                                34.05,
                                                351014,
                                                "Australia",
                                                1800
                                            ],
                                            [
                                                    1314,
                                                    39,
                                                    645526,
                                                    "Canada",
                                                    1800
                                            ],
                                        ],
                                        [//1810年所有国家的数据
                                          ...
                                        ]
                                    ]
                              }
                            
                          
  • js
  • js
  • js
  • js
  • js
  • js
  •                         
                                var dom = document.getElementById('life-time-line');
                                var myChart = echarts.init(dom, null, {
                                    renderer: 'canvas',
                                    useDirtyRect: false
                                });
                                var app = {};
                                var option;
                                myChart.showLoading();
                                $.get('./data.json', function (data) {
                                    myChart.hideLoading();
                                    var itemStyle = {
                                        opacity: 0.8
                                    };
                                    var sizeFunction = function (x) {
                                        var y = Math.sqrt(x / 5e8) + 0.1;
                                        return y * 80;
                                    };
                                    // Schema:
                                    var schema = [
                                        { name: 'Income', index: 0, text: '人均收入', unit: '美元' },
                                        { name: 'LifeExpectancy', index: 1, text: '人均寿命', unit: '岁' },
                                        { name: 'Population', index: 2, text: '总人口', unit: '' },
                                        { name: 'Country', index: 3, text: '国家', unit: '' }
                                    ];
                                    option = {
                                        baseOption: {
                                            timeline: {
                                                axisType: 'category',
                                                orient: 'vertical',
                                                autoPlay: true,
                                                inverse: true,
                                                playInterval: 1000,
                                                left: null,
                                                right: 0,
                                                top: 20,
                                                bottom: 20,
                                                width: 55,
                                                height: null,
                                                symbol: 'none',
                                                checkpointStyle: {
                                                    borderWidth: 2
                                                },
                                                controlStyle: {
                                                    showNextBtn: false,
                                                    showPrevBtn: false
                                                },
                                                data: []
                                            },
                                            title: [
                                                {
                                                    text: data.timeline[0],
                                                    textAlign: 'center',
                                                    left: '63%',
                                                    top: '55%',
                                                    textStyle: {
                                                        fontSize: 100
                                                    }
                                                },
                                            ],
                                            tooltip: {
                                                padding: 5,
                                                borderWidth: 1,
                                                formatter: function (obj) {
                                                    var value = obj.value;
                                                    // prettier-ignore
                                                    return schema[3].text + ':' + value[3] + '
    ' + schema[1].text + ':' + value[1] + schema[1].unit + '
    ' + schema[0].text + ':' + value[0] + schema[0].unit + '
    ' + schema[2].text + ':' + value[2] + '
    '; } }, grid: { top: 100, containLabel: true, left: 30, right: '110' }, xAxis: { type: 'log', name: '人均收入', max: 100000, min: 300, nameGap: 25, nameLocation: 'middle', nameTextStyle: { fontSize: 18 }, splitLine: { show: false }, axisLabel: { formatter: '{value} $' } }, yAxis: { type: 'value', name: '平均寿命', max: 100, nameTextStyle: { fontSize: 18 }, splitLine: { show: false }, axisLabel: { formatter: '{value} 岁' } }, visualMap: [ { show: false, dimension: 3, categories: data.counties, inRange: { color: (function () { // prettier-ignore var colors = ['#51689b', '#ce5c5c', '#fbc357', '#8fbf8f', '#659d84', '#fb8e6a', '#c77288', '#786090', '#91c4c5', '#6890ba']; return colors.concat(colors); })() } } ], series: [ { type: 'scatter', itemStyle: itemStyle, data: data.series[0], symbolSize: function (val) { return sizeFunction(val[2]); } } ], animationDurationUpdate: 1000, animationEasingUpdate: 'quinticInOut' }, options: [] }; for (var n = 0; n < data.timeline.length; n++) { option.baseOption.timeline.data.push(data.timeline[n]); option.options.push({ title: { show: true, text: data.timeline[n] + '' }, series: { name: data.timeline[n], type: 'scatter', itemStyle: itemStyle, data: data.series[n], symbolSize: function (val) { return sizeFunction(val[2]); } } }); } myChart.setOption(option); if (option && typeof option === 'object') { myChart.setOption(option); } window.addEventListener('resize', myChart.resize); });
                            
                                var dom = document.getElementById('total-gdp');
                                var myChart = echarts.init(dom, null, {
                                    renderer: 'canvas',
                                    useDirtyRect: false
                                });
                                var app = {};
                                var option;
                
                                const updateFrequency = 2000;
                                const dimension = 5;
                                const countryColors = {
                                    Australia: '#003f5c',
                                    Canada: '#58508d',
                                    China: '#ff0000',
                                    Cuba: '#ff6361',
                                    Finland: '#ffa600',
                                    France: '#ff7c43',
                                    Germany: '#ff6361',
                                    Iceland: '#58508d',
                                    India: '#00ff00',
                                    Japan: '#ffa600',
                                    'North Korea': '#ff7c43',
                                    'South Korea': '#003f5c',
                                    'New Zealand': '#58508d',
                                    Norway: '#bc5090',
                                    Poland: '#ffa600',
                                    Russia: '#ff7c43',
                                    Turkey: '#003f5c',
                                    'United Kingdom': '#58508d',
                                    'United States': '#bc5090'
                                };
                                $.when(
                                    $.getJSON('https://fastly.jsdelivr.net/npm/emoji-flags@1.3.0/data.json'),
                                    $.getJSON('data.json')
                                ).done(function (res0, res1) {
                                    console.log(res0, res1)
                                    // const flags = res0[0];
                                    var data = [[
                                        "Income",
                                        "Life Expectancy",
                                        "Population",
                                        "Country",
                                        "Year"
                                    ]];
                                    const flags = res0[0];
                                    const tmp_data = res1[0]['series'];
                                    tmp_data.forEach((arr) => {
                                        data = data.concat(arr);
                                    })
                                    console.log(data)
                                    data.forEach(function (item) {
                                        item.push(item[0] * item[2])
                                    });
                                    // console.log(flags)
                                    // console.log(data)
                                    const years = [];
                                    for (let i = 0; i < data.length; ++i) {
                                        if (years.length === 0 || years[years.length - 1] !== data[i][4]) {
                                            years.push(data[i][4]);
                                        }
                                    }
                                    function getFlag(countryName) {
                                        if (!countryName) {
                                            return '';
                                        }
                                        return (
                                            flags.find(function (item) {
                                                return item.name === countryName;
                                            }) || {}
                                        ).emoji;
                                    }
                                    let startIndex = 10;
                                    let startYear = years[startIndex];
                                    option = {
                                        grid: {
                                            top: 10,
                                            bottom: 30,
                                            left: 150,
                                            right: 80
                                        },
                                        xAxis: {
                                            max: 'dataMax',
                                            axisLabel: {
                                                formatter: function (n) {
                                                    return Math.round(n) + '';
                                                }
                                            }
                                        },
                                        dataset: {
                                            source: data.slice(1).filter(function (d) {
                                                return d[4] === startYear;
                                            })
                                        },
                                        yAxis: {
                                            type: 'category',
                                            inverse: true,
                                            max: 10,
                                            axisLabel: {
                                                show: true,
                                                fontSize: 14,
                                                formatter: function (value) {
                                                    return value + '{flag|' + getFlag(value) + '}';
                                                },
                                                rich: {
                                                    flag: {
                                                        fontSize: 25,
                                                        padding: 5
                                                    }
                                                }
                                            },
                                            animationDuration: 300,
                                            animationDurationUpdate: 300
                                        },
                                        series: [
                                            {
                                                realtimeSort: true,
                                                seriesLayoutBy: 'column',
                                                type: 'bar',
                                                itemStyle: {
                                                    color: function (param) {
                                                        return countryColors[param.value[3]] || '#5470c6';
                                                    }
                                                },
                                                encode: {
                                                    x: dimension,
                                                    y: 3
                                                },
                                                label: {
                                                    show: true,
                                                    precision: 1,
                                                    position: 'right',
                                                    valueAnimation: true,
                                                    fontFamily: 'monospace'
                                                }
                                            }
                                        ],
                                        // Disable init animation.
                                        animationDuration: 0,
                                        animationDurationUpdate: updateFrequency,
                                        animationEasing: 'linear',
                                        animationEasingUpdate: 'linear',
                                        graphic: {
                                            elements: [
                                                {
                                                    type: 'text',
                                                    right: 160,
                                                    bottom: 60,
                                                    style: {
                                                        text: startYear,
                                                        font: 'bolder 80px monospace',
                                                        fill: 'rgba(100, 100, 100, 0.25)'
                                                    },
                                                    z: 100
                                                }
                                            ]
                                        }
                                    };
                                    // console.log(option);
                                    myChart.setOption(option);
                                    for (let i = startIndex; i < years.length - 1; ++i) {
                                        (function (i) {
                                            setTimeout(function () {
                                                updateYear(years[i + 1]);
                                            }, (i - startIndex) * updateFrequency);
                                        })(i);
                                    }
                                    function updateYear(year) {
                                        let source = data.slice(1).filter(function (d) {
                                            return d[4] === year;
                                        });
                                        option.series[0].data = source;
                                        option.graphic.elements[0].style.text = year;
                                        myChart.setOption(option);
                                    }
                                });
                
                                if (option && typeof option === 'object') {
                                    myChart.setOption(option);
                                }
                
                                window.addEventListener('resize', myChart.resize);
                            
                            
                                
                                    var dom = document.getElementById('key-time-population');
                                    var myChart = echarts.init(dom, null, {
                                        renderer: 'canvas',
                                        useDirtyRect: false
                                    });
                                    var app = {};
                    
                                    var option;
                                    $.get('./data.json', function (data) {
                                        var counties = [], timeline = [], series = [];
                                        counties = data.counties;
                                        timeline = data.timeline;
                                        series = data.series;
                                        line_series = []
                                        var source = [['Income']]
                                        var map = new Map();
                                        for (let i = 0; i < counties.length; i++) {
                                            map.set(counties[i], [counties[i]])
                                        }
                                        for (let i = 0; i < series.length; i += 10) {
                                            tmp_list = series[i];
                                            // console.log(tmp_list)
                                            source[0].push(tmp_list[0][4])
                                            for (let j = 0; j < tmp_list.length; j++) {
                                                element = tmp_list[j];
                                                value = map.get(element[3]);
                                                value.push(element[2])
                                                map.set(element[3], value)
                                            }
                                        }
                                        map.forEach((value, key) => {
                                            source.push(value)
                                        })
                                        // console.log(source);
                                        for (let i = 0; i < source.length - 1; i++) {
                                            line_series.push({
                                                type: 'line',
                                                smooth: true,
                                                seriesLayoutBy: 'row',
                                                emphasis: { focus: 'series' }
                                            })
                                        }
                                        line_series.push({
                                            type: 'pie',
                                            id: 'pie',
                                            radius: '35%',
                                            center: ['50%', '25%'],
                                            emphasis: {
                                                focus: 'self'
                                            },
                                            label: {
                                                formatter: '{@1800} ({d}%)'
                                            },
                                            encode: {
                                                itemName: 'Income',
                                                value: 1800,
                                                tooltip: 1800
                                            }
                                        })
                                        setTimeout(function () {
                                            option = {
                                                aria: {
                                                    enabled: true,
                                                    decal: {
                                                        show: true,
                                                        decals: [
                                                            // { symbol: 'rect' },
                                                            { symbol: 'circle' },
                                                            // { symbol: 'roundRect' },
                                                            // { symbol: 'triangle' },
                                                            // { symbol: 'diamond' },
                                                            // { symbol: 'pin' },
                                                            // { symbol: 'arrow' }
                                                        ]
                                                    }
                                                },
                                                legend: {},
                                                tooltip: {
                                                    trigger: 'axis',
                                                    showContent: true
                                                },
                                                dataset: {
                                                    source: source
                                                },
                                                xAxis: { type: 'category' },
                                                yAxis: { gridIndex: 0 },
                                                grid: { top: '55%' },
                                                series: line_series
                                            };
                                            myChart.on('updateAxisPointer', function (event) {
                                                const xAxisInfo = event.axesInfo[0];
                                                if (xAxisInfo) {
                                                    const dimension = xAxisInfo.value + 1;
                                                    myChart.setOption({
                                                        series: {
                                                            id: 'pie',
                                                            label: {
                                                                formatter: '{@[' + dimension + ']} ({d}%)'
                                                            },
                                                            encode: {
                                                                value: dimension,
                                                                tooltip: dimension
                                                            }
                                                        }
                                                    });
                                                }
                                            });
                                            myChart.setOption(option);
                                        });
                                        if (option && typeof option === 'object') {
                                            myChart.setOption(option);
                                        }
                    
                                        window.addEventListener('resize', myChart.resize);
                                    });
                                
                                

    更多可视化代码等请查看github仓库 https://github.com/Langwenchong/DataVisualization