zoukankan      html  css  js  c++  java
  • 用Python分析国民生产总值

      今天学习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 np
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']='SimHei'#设置中文显示,否则可能无法显示中文或者是各种字符错乱
    plt.rcParams['axes.unicode_minus']=False
    data=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')#注意要先保存再show
    plt.show()#下面是得到的结果

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

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

    import numpy as np
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']='SimHei'#设置中文显示,否则可能无法显示中文或者是各种字符错乱
    plt.rcParams['axes.unicode_minus']=False
    data=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')#注意要先保存再show
    plt.show()

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

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

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

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

    import numpy as np
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']='SimHei'#设置中文显示,否则可能无法显示中文或者是各种字符错乱
    plt.rcParams['axes.unicode_minus']=False
    data=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')#注意要先保存再show
    plt.show()

     

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

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

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

    import numpy as np
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']='SimHei'
    plt.rcParams['axes.unicode_minus']=False
    data=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 np
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']='SimHei'
    plt.rcParams['axes.unicode_minus']=False
    data=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 np
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']='SimHei'
    plt.rcParams['axes.unicode_minus']=False
    data=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 np
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']='SimHei'
    plt.rcParams['axes.unicode_minus']=False
    data=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对国民生产总值分析,可以让我们更快的了解对其中绘图方法的使用的了解
    。且无论是哪种绘图方法都不要忘记对最种的结果进行分析,获取我们所要的结论。
  • 相关阅读:
    【Codeforces 349B】Color the Fence
    【Codeforces 459D】Pashmak and Parmida's problem
    【Codeforces 467C】George and Job
    【Codeforces 161D】Distance in Tree
    【Codeforces 522A】Reposts
    【Codeforces 225C】Barcode
    【Codeforces 446A】DZY Loves Sequences
    【Codeforces 429B】Working out
    【Codeforces 478C】Table Decorations
    【Codeforces 478C】Table Decorations
  • 原文地址:https://www.cnblogs.com/henuliulei/p/9857572.html
Copyright © 2011-2022 走看看