用Python分析国民生产总值

您所在的位置:网站首页 预测gdp 用Python分析国民生产总值

用Python分析国民生产总值

2023-10-18 00:04| 来源: 网络整理| 查看: 265

  今天学习Python的matplotlib,书上的一道例题感觉写的很好(黄红梅的Python数据分析与应用),就是

利用matplotlib的各种图来对2000-2017年季度生产总值进行分析,这道题确实是学习用图分析数据的一道经典

题,于是我根据书上的代码和自己的理解在jupyter上敲了一下,并做了总结,贴在下面,方便后序的学习和使用

 

1 首先把数据文件导进来,然后大概了解数据文件里面有啥内容,这是文件的链接,有需要的朋友可以下载来学习使用

https://files.cnblogs.com/files/henuliulei/%E5%9B%BD%E6%B0%91%E7%BB%8F%E6%B5%8E%E6%A0%B8%E7%AE%97%E5%AD%A3%E5%BA%A6%E6%95%B0%E6%8D%AE.zip

然后再绘制散点图,下面是以第一季度绘制的,代码如下

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']='SimHei'#设置中文显示,否则可能无法显示中文或者是各种字符错乱plt.rcParams['axes.unicode_minus']=Falsedata=np.load("D:/国民经济核算季度数据.npz")#加载数据print(data)#这时的data是数据对象print(data.keys())#该数据对象是个字典,所以先获取他的key值print(data['columns'])#看一下key值里面有什么,print(data['values'])#看一下value值里面有什么,name=data['columns']values=data['values']plt.figure(figsize=(8,7))plt.scatter(values[:,0],values[:,2],marker='o')#以数据的第零列做x轴,第三列做y轴,来描绘散点图plt.xlabel('年份');plt.ylabel('生产总值(亿元)');plt.ylim((0,225000))plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)#此时取得值都是第一季度的plt.title('2000-2017年季度生产总值散点图')plt.savefig('D:/2000-2017年季度生产总值散点图.png')#注意要先保存再showplt.show()#下面是得到的结果

可以很清晰看出数据里面大致是啥东西。

2: 再如下面是分析的第一二三产业的的国民生产总值,代码如下

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']='SimHei'#设置中文显示,否则可能无法显示中文或者是各种字符错乱plt.rcParams['axes.unicode_minus']=Falsedata=np.load("D:/国民经济核算季度数据.npz")#加载数据plt.figure(figsize=(8,7))plt.scatter(values[:,0],values[:,3],marker='o',c='red')#下面三类是绘制的第一二三产业的增加值plt.scatter(values[:,0],values[:,4],marker='D',c='blue')plt.scatter(values[:,0],values[:,5],marker='v',c='yellow')plt.xlabel('年份');plt.ylabel('生产总值(亿元)');plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)#此时取得值都是第一季度的plt.title('2000-2017年季度生产总值散点图')plt.legend(['第一产业','第二产业','第三产业'])plt.savefig('D:/2000-2017年季度生产总值散点图.png')#注意要先保存再showplt.show()

其实画图并不是目的,真正的目的是通过这些图来进行数据分析,获取我们要找到的东西

比如上面的图我们可以得到:第一季度增长平缓,第三季度呈现指数增长,第二季度每年会根据季度呈现指数增长。总体来看,我国近18年的各个产业都在持续增长中,

并且第二和第三产业的增长幅度比较大,18年增长了400%以上。这些结论性的东西才是我们最终的目的。

3 下面是折现图分析第一季度

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']='SimHei'#设置中文显示,否则可能无法显示中文或者是各种字符错乱plt.rcParams['axes.unicode_minus']=Falsedata=np.load("D:/国民经济核算季度数据.npz")#加载数据plt.figure(figsize=(8,7))plt.plot(values[:,0],values[:,2],color='r',linestyle='--')plt.xlabel('年份');plt.ylabel('生产总值(亿元)');plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)#此时取得值都是第一季度的plt.title('2000-2017年季度生产总值折现图')plt.savefig('D:/2000-2017年季度生产总值散点图.png')#注意要先保存再showplt.show()

 

 散点图可以反映x和y轴(特性)的相关关系

而绘制折线图可以了解特性之间的趋势关系

4点线图(其实就是改变marker)

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']='SimHei'plt.rcParams['axes.unicode_minus']=Falsedata=np.load("D:/国民经济核算季度数据.npz")#加载数据plt.figure(figsize=(8,7))plt.plot(values[:,0],values[:,2],color='r',linestyle='--',marker='s')#plot绘制点线图plt.xlabel('年份',fontsize=10);plt.ylabel('生产总值(亿元)',fontsize=20);plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)plt.title('2000-2007年各季度国民生产总值点线图')plt.savefig('D:/a4.png')plt.show()

有时可能默认的图片字体大小可能不符合要求,只需要用fontsize去改变大小即可

5:下面绘制2000-2017年各产业季度生产总值折线图

plt.plot(values[:,0],values[:,3],'bs-')#第三个参数的含义是颜色blue点的形状正方形线的类型是实线-plt.plot(values[:,0],values[:,4],'ro-.')plt.plot(values[:,0],values[:,5],'gh--')plt.xlabel('年份',fontsize=15);plt.ylabel('生产总值(亿元)',fontsize=20);plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)plt.title('2000-2007年各季度国民生产总值折线图')plt.legend(['第一季度','第二季度','第三季度'])plt.savefig('D:/a4.png')plt.show()

 

同时把三条线加到同一张图片上,同时每个图片设置各自的属性(颜色,点的形状,线性)

注意要先绘制图形,再添加图例(先plot再legend)否则图列显示不出来。同理应该先保存再show()

6:下面是直方图

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']='SimHei'plt.rcParams['axes.unicode_minus']=Falsedata=np.load("D:/国民经济核算季度数据.npz")#加载数据plt.figure(figsize=(8,7))name=data['columns']values=data['values']plt.bar(range(3),values[-1,3:6],width=0.5)#-1指的是最后一行2017,第一个参数是下标位置,第二个是对应的y值,后一个是宽度,默认为0.8,还可以自己设置颜色plt.xlabel('年份',fontsize=15);plt.ylabel('生产总值(亿元)',fontsize=20);plt.xticks(range(3),['第一产业','第二产业','第三产业'])plt.title('2017年第一季度国民生产总值直方图')

plt.savefig('D:/a4.png')plt.show()

调用plt.bar方法获取直方图,

直方图容易分析数字占比关系

7:下面是饼图的使用

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']='SimHei'plt.rcParams['axes.unicode_minus']=Falsedata=np.load("D:/国民经济核算季度数据.npz")#加载数据plt.figure(figsize=(8,7))name=data['columns']values=data['values']label=['第一产业','第二产业','第三产业']explode=[0.1,0.5,0.03]#设置指定项距离圆心的距离为N 倍的半径plt.pie(values[-1,3:6],explode=explode,labels=label,autopct='%1.1f%%')plt.title('2017年第一季度各产业国民生产总值直方图')plt.savefig('D:/a4.png')plt.show()

 

 通过explode改变每份图距离圆心的距离,该距离为半径的指定倍数,也可以通过radius=数值来设置半径的大小

饼图可以方便看出占比

8:下面介绍箱线图的使用

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']='SimHei'plt.rcParams['axes.unicode_minus']=Falsedata=np.load("D:/国民经济核算季度数据.npz")#加载数据plt.figure(figsize=(8,7))name=data['columns']values=data['values']label=['第一产业','第二产业','第三产业']gdp=(list(values[:,3]),list(values[:,4]),list(values[:,5]))plt.boxplot(gdp,notch=True,labels=label,meanline=True)#第一个参数是数据,第二个参数是是否带有缺口,第三个参数是标签,第四个参数是是否带有均值线plt.title('2017年第一季度各产业国民生产总值箱线图')plt.savefig('D:/a4.png')plt.show()

 

可以看出第一产业某个季度有异常值,第三季度增速大,而且数据前半部分相对密集。总结:通过matplotlib对国民生产总值分析,可以让我们更快的了解对其中绘图方法的使用的了解。且无论是哪种绘图方法都不要忘记对最种的结果进行分析,获取我们所要的结论。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3