【Python】国内生产总值分析预测

✨博文作者 wangzirui32
💖 喜欢的可以 点赞 收藏 关注哦~~
👏 我的第162篇原创作品
👉本文首发于CSDN,未经许可禁止转载
hello,大家好,我是wangzirui32,今天我们来学习如何对国内生产总值进行分析预测,开始学习吧!

  1. 数据来源

数据涵盖范围为2010-2021的国内生产总值csv文件,来自国家统计局官方数据:

【Python】国内生产总值分析预测
依次选择时间(2010-2021),下载CSV文件,分别命名为 2010.csv2011.csv(年份+.csv),结果如下:
【Python】国内生产总值分析预测

; 2. 清洗数据文件

2010年的数据文件内容如下:

【Python】国内生产总值分析预测
可以看到,真正的数据是在文件的第3行开始到倒数第6行,我们需要对其数据进行提取,并且进行gbk编码转换(源文件是gbk编码,需求是UTF8编码),将数据文件放入 datafiles文件夹中,再在这个目录的上层目录创建Python文件 collate_data.py,写入代码:
import os
import codecs

for i in os.listdir("datafiles"):
    path = "datafiles/{}".format(i)

    try:

        with codecs.open(path, "rb", "gb2312") as f:
            content = f.read()
        with codecs.open(path, "wb", "utf-8") as f:
            f.write(content)
    except: pass

    with codecs.open(path, "rb", "utf-8") as f:
        new_content = f.readlines()[2:-5]
    with codecs.open(path, "wb", "utf-8") as f:
        f.writelines(new_content)

执行这段代码,数据就清洗完毕了。

  1. 分析

这里借助 pandas读取数据, matplotlib绘制统计图进行分析,安装库命令:

pip install pandas matplotlib

3.1 折线统计图

代码如下:

import pandas
import matplotlib
import matplotlib.pyplot as plt
import os

gdp_Q1 = []
gdp_Q2 = []
gdp_Q3 = []
gdp_Q4 = []
gdp_all_year = []
years = []

matplotlib.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False

for filename in os.listdir("datafiles"):
    year = filename.split(".")[0]
    path = "datafiles/{}".format(filename)
    df = pandas.read_csv(path)
    df.columns = ['指标','第四季度', '第三季度', '第二季度', '第一季度']

    gdp_Q1.append(df['第一季度'][0])
    gdp_Q2.append(df['第二季度'][0])
    gdp_Q3.append(df['第三季度'][0])
    gdp_Q4.append(df['第四季度'][0])
    gdp_all_year.append(df['第四季度'][1])

    years.append(year)

Q1_line, = plt.plot(years, gdp_Q1, color="blue")
Q2_line, = plt.plot(years, gdp_Q2, color="pink")
Q3_line, = plt.plot(years, gdp_Q3, color="green")
Q4_line, = plt.plot(years, gdp_Q4, color="orange")
all_year_line, = plt.plot(years, gdp_all_year, color="red")

plt.title("2010-2021国内生产总值分析预测")
plt.xlabel("年份")
plt.ylabel("国内生产总值(亿元)")
plt.xticks(years)

plt.legend([Q1_line, Q2_line, Q3_line, Q4_line, all_year_line],
            ['第一季度','第二季度', '第三季度', '第四季度', '全年总值'],
            loc='upper right')

plt.show()

效果如下:

【Python】国内生产总值分析预测

3.2 柱形统计图

代码如下:

import pandas
import matplotlib
import matplotlib.pyplot as plt
import os

gdp_all_year = []
years = []

matplotlib.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False

for filename in os.listdir("datafiles"):
    year = filename.split(".")[0]
    path = "datafiles/{}".format(filename)
    df = pandas.read_csv(path)
    df.columns = ['指标','第四季度', '第三季度', '第二季度', '第一季度']

    gdp_all_year.append(df['第四季度'][1])
    years.append(year)

plt.bar(years, gdp_all_year, width=0.5, label="numbers")
all_year_line, = plt.plot(years, gdp_all_year, color="red")
plt.title("2010-2021国内生产总值分析", loc="center")
plt.xlabel("年份", fontsize=14)
plt.ylabel("国内生产总值(亿元)", fontsize=14)

plt.show()

效果如下:

【Python】国内生产总值分析预测
可以看到,2020年因为疫情原因,生产总值有所下降,但近年来总体情况还是呈上涨态势的。
  1. 拟合线性回归方程

下面我们将使用 sklearn机器学习库来拟合线性回归方程,它的安装命令如下:

pip install scikit-learn

4.1 以第1季度作为参数

思路如下,我们使用 sklearn库拟合线性回归方程,以第1季度作为参数,生成预测的方程,代码如下:

import pandas
import matplotlib
import matplotlib.pyplot as plt
import os
from sklearn import linear_model

gdp_Q1 = []
gdp_Q2 = []
gdp_all_year = []
years = []

matplotlib.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False

for filename in os.listdir("datafiles"):
    year = filename.split(".")[0]
    path = "datafiles/{}".format(filename)
    df = pandas.read_csv(path)
    df.columns = ['指标','第四季度', '第三季度', '第二季度', '第一季度']

    gdp_Q1.append(df['第一季度'][0])
    gdp_Q2.append(df['第二季度'][0])
    gdp_all_year.append(df['第四季度'][1])
    years.append(year)

Q1_line, = plt.plot(years, gdp_Q1, color="blue")
Q2_line, = plt.plot(years, gdp_Q2, color="pink")
all_year_line, = plt.plot(years, gdp_all_year, color="red")

plt.title("2010-2021国内生产总值分析预测")
plt.xlabel("年份")
plt.ylabel("国内生产总值(亿元)")
plt.xticks(years)

model = linear_model.LinearRegression()

model.fit(list(zip(gdp_Q1)), gdp_all_year)

coef = model.coef_

intercept = model.intercept_

equation = "y = x*{} + {}".format(coef[0], intercept)
print("线性回归方程:", equation)

forecast_value = [i*coef[0]+intercept for i in gdp_Q1]

forecast_line, = plt.plot(years, forecast_value, color="green")

plt.legend([Q1_line, Q2_line, all_year_line, forecast_line],
            ['第一季度','第二季度', '全年总值', '方程模拟'],
            loc='upper right')

plt.show()

效果如下:

【Python】国内生产总值分析预测

可以看到,方程基本拟合曲线,但因为2020年疫情第一季度生产总值下滑,进而预测的全年数据也产生了较大落差,这怎么办呢?

4.2 以第1,2季度作为参数

我们可以以第1,2季度作为参数,代码如下:

import pandas
import matplotlib
import matplotlib.pyplot as plt
import os
from sklearn import linear_model

gdp_Q1 = []
gdp_Q2 = []
gdp_all_year = []
years = []

matplotlib.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False

for filename in os.listdir("datafiles"):
    year = filename.split(".")[0]
    path = "datafiles/{}".format(filename)
    df = pandas.read_csv(path)
    df.columns = ['指标','第四季度', '第三季度', '第二季度', '第一季度']

    gdp_Q1.append(df['第一季度'][0])
    gdp_Q2.append(df['第二季度'][0])
    gdp_all_year.append(df['第四季度'][1])
    years.append(year)

Q1_line, = plt.plot(years, gdp_Q1, color="blue")
Q2_line, = plt.plot(years, gdp_Q2, color="pink")
all_year_line, = plt.plot(years, gdp_all_year, color="red")

plt.title("2010-2021国内生产总值分析预测")
plt.xlabel("年份")
plt.ylabel("国内生产总值(亿元)")
plt.xticks(years)

model = linear_model.LinearRegression()
model.fit(list(zip(gdp_Q1, gdp_Q2)), gdp_all_year)
coef = model.coef_
intercept = model.intercept_
equation = "y = x1*{} + x2*{} + {}".format(coef[0], coef[1], intercept)

print("线性回归方程:", equation)

forecast_value = [i[0]*coef[0]+i[1]*coef[1]+intercept for i in list(zip(gdp_Q1, gdp_Q2))]
forecast_line, = plt.plot(years, forecast_value, color="green")

plt.legend([Q1_line, Q2_line, all_year_line, forecast_line],
            ['第一季度','第二季度', '全年总值', '方程模拟'],
            loc='upper right')

plt.show()

效果如下:

【Python】国内生产总值分析预测

可以看到,这个方程的拟合结果十分不错,可以将它作为预测的方程。
线性回归方程为:

y = x1*0.20405068090604006 + x2*3.8656156020304238 + 9671.424027125235

等价于:

国内生产总值 = 第一季度生产总值*0.20405068090604006 + 第二季度生产总值*3.8656156020304238 + 9671.424027125235

这就完成了整个分析预测的流程。

🎉🎉🎉 好了,今天的课程就到这里,我是wangzirui32,喜欢的可以点个收藏和关注,我们下次再见!

Original: https://blog.csdn.net/wangzirui32/article/details/125464048
Author: wangzirui32
Title: 【Python】国内生产总值分析预测

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/622981/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球