人口数据的变化显示了各国人口的增长趋势。以下是一些观察点:
1800年 最少:冰岛(61428人) 最多:中国(321675013人) 1850年 最少:冰岛(74711人) 最多:中国(402711280人) 1900年 最少:冰岛(77961人) 最多:中国(429437950人) 1950年 最少:冰岛(143749人) 最多:中国(597745535人) 2000年 最少:冰岛(281191人) 最多:中国(1262645000人) 2015年 最少:冰岛(323764人) 最多:中国(1376048943人)
人口增长的主要驱动力包括出生率、死亡率、移民等。中国和印度等国由于基数大,其人口增长显得尤为明显。而冰岛等小国,虽然增长率较高,但人口基数小,总人口相对较少。
人均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年所有国家的数据
...
]
]
}






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