预测俄罗斯联邦常住人口的增长
在这个例子中,我们将看到使用多项式的数据外推,它们的评估和显示。
外推的数据集是1990年至2023年期间俄罗斯联邦常住人口的总增长。 资料来源:[Rosstat统计数据展示](https://showdata.gks.ru/finder /)。
连接图书馆 XLSX.jl 以接收并处理一组数据。
In [ ]:
Pkg.add(["XLSX"])
In [ ]:
using XLSX;
文件中提供了插值和外推的数据 Прирост населения РФ.xlsx. 让我们创建用于分析的数据向量-计算人口增长的年份和人口增长的值。
In [ ]:
file = "$(@__DIR__)/人口增长РФ。xlsx系列";
years = vec(XLSX.readdata(file, "报告!A4:A33")); # 格式为"xxxx g"的小写值向量。
Growth = vec(Int64.(XLSX.readdata(file, "报告!C4:C33"))); # 整数的向量
在数据表中,人口增长年份的值以小写格式显示,如 "XXXX г.". 这种格式不适合计算和显示,因此我们将创建用于计算人口增长的年份向量,以整数格式表示。
In [ ]:
Years = convert(Vector{Int64}, zeros(length(years))); # 获取值的向量
i = 1
for year in years
Years[i] = parse(Int64, year[1:4]) # 我们只从字符串中获取前4个值,并将它们转换为Int64
i += 1
end
让我们在图表上绘制获得的数据。
In [ ]:
using Plots
plotlyjs()
plot(Years, Growth,
shape = :circle, ms = 3,
legend = :topright, label = "初始数据",
ylims = (minimum(Growth)-5e4, maximum(Growth)+5e4),
xlabel = "年份", ylabel = "人口增长,人",
title = "俄罗斯联邦1990-2023年人口增长")
Out[0]:
要预测数据,请下载并连接库 Polynomials.jl.
In [ ]:
Pkg.add("Polynomials")
using Polynomials;
为了进一步推断数据,我们计算多项式-1,2,3和6阶。:
In [ ]:
Numbers = Years.-1990;
pol1 = fit(Numbers,Growth,1);
pol2 = fit(Numbers,Growth,2);
pol3 = fit(Numbers,Growth,3);
pol6 = fit(Numbers,Growth,6);
让我们绘制多项式和初始数据的图形。
In [ ]:
scatter(Years, Growth,
label = "初始数据", legend = :topright,
ylims = (minimum(Growth)-5e4, maximum(Growth)+5e4),
xlabel = "年份", ylabel = "人口增长,人",
title = "1990-2023年俄罗斯联邦人口增长")
plot!(Years, pol1.(Numbers), label="多项式为1por。")
plot!(Years, pol2.(Numbers), label="多项式为2次。")
plot!(Years, pol3.(Numbers), label="多项式为3次。")
plot!(Years, pol6.(Numbers), label="的6孔多项式。")
Out[0]:
让我们计算2024年和2025年的数据外推。
In [ ]:
Extra_Years = [2024, 2025];
Extra_Numbers = [34, 35];
Extra_G_1 = (pol1.(Extra_Numbers));
Extra_G_2 = (pol2.(Extra_Numbers));
Extra_G_3 = (pol3.(Extra_Numbers));
Extra_G_6 = (pol6.(Extra_Numbers));
# Numbers = vcat(Numbers, Extra_Numbers);
让我们绘制多项式,初始和预测数据的图形。
In [ ]:
Plots.scatter(Years, Growth,
label = "初始数据", legend = :top,
ylims = (minimum(Extra_G_3)-5e4, maximum(Extra_G_6)+5e4),
xlabel = "年份", ylabel = "人口增长,人")
Plots.plot!(Years, pol1.(Numbers), label = "多项式为1por。")
Plots.plot!(Years, pol2.(Numbers), label = "多项式为2次。")
Plots.plot!(Years, pol3.(Numbers), label = "多项式为3次。")
Plots.plot!(Years, pol6.(Numbers), label = "的6孔多项式。", color = :orange)
Plots.scatter!(Extra_Years, Extra_G_1, color = :red, shape = :xcross, label = "1孔的外推。")
Plots.scatter!(Extra_Years, Extra_G_2, color = :green, shape = :xcross, label = "2个孔隙的外推。")
Plots.scatter!(Extra_Years, Extra_G_3, color = :violet, shape = :xcross, label = "3个孔隙的外推。")
Plots.scatter!(Extra_Years, Extra_G_6, color = :orange, shape = :xcross, label = "6个孔隙的外推。")
Out[0]:
从构造中可以看出,不同阶数的外推数据具有显着的值范围。
结论
在这个例子中,我们检查了各种多项式阶数的数据外推及其构造。