程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【Python】國內生產總值分析預測

編輯:Python

博文作者 wangzirui32
喜歡的可以 點贊 收藏 關注哦~~
我的第162篇原創作品
本文首發於CSDN,未經許可禁止轉載


hello,大家好,我是wangzirui32,今天我們來學習如何對國內生產總值進行分析預測,開始學習吧!

1. 數據來源

數據涵蓋范圍為2010-2021的國內生產總值csv文件,來自國家統計局官方數據:

依次選擇時間(2010-2021),下載CSV文件,分別命名為2010.csv2011.csv(年份+.csv),結果如下:

2. 清洗數據文件

2010年的數據文件內容如下:

可以看到,真正的數據是在文件的第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:
# 把數據文件的gbk編碼轉換為utf-8
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)

執行這段代碼,數據就清洗完畢了。

3. 分析

這裡借助pandas讀取數據,matplotlib繪制統計圖進行分析,安裝庫命令:

pip install pandas matplotlib

3.1 折線統計圖

代碼如下:

import pandas
import matplotlib
import matplotlib.pyplot as plt
import os
# 提取數據
gdp_Q1 = [] # 第一季度gdp
gdp_Q2 = [] # 第二季度gdp
gdp_Q3 = [] # 第三季度gdp
gdp_Q4 = [] # 第四季度gdp
gdp_all_year = [] # 全年gdp
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()

效果如下:

3.2 柱形統計圖

代碼如下:

import pandas
import matplotlib
import matplotlib.pyplot as plt
import os
# 提取數據
gdp_all_year = [] # 全年gdp
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()

效果如下:

可以看到,2020年因為疫情原因,生產總值有所下降,但近年來總體情況還是呈上漲態勢的。

4. 擬合線性回歸方程

下面我們將使用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
gdp_Q2 = [] # 第二季度gdp
gdp_all_year = [] # 全年gdp
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()

效果如下:

可以看到,方程基本擬合曲線,但因為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
gdp_Q2 = [] # 第二季度gdp
gdp_all_year = [] # 全年gdp
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()

效果如下:

可以看到,這個方程的擬合結果十分不錯,可以將它作為預測的方程。
線性回歸方程為:

y = x1*0.20405068090604006 + x2*3.8656156020304238 + 9671.424027125235

等價於:

國內生產總值 = 第一季度生產總值*0.20405068090604006 + 第二季度生產總值*3.8656156020304238 + 9671.424027125235

這就完成了整個分析預測的流程。


好了,今天的課程就到這裡,我是wangzirui32,喜歡的可以點個收藏和關注,我們下次再見!


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved