今天学习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对国民生产总值分析,可以让我们更快的了解对其中绘图方法的使用的了解
。且无论是哪种绘图方法都不要忘记对最种的结果进行分析,获取我们所要的结论。

用Python分析国民生产总值的更多相关文章

  1. 用Python分析国庆旅游景点,告诉你哪些地方好玩、便宜、人又少

    注:本人参考“裸睡的猪”公众号同名文章,学习使用. 一.目标 使用Python分析出国庆哪些旅游景点:好玩.便宜.人还少的地方,不然拍照都要抢着拍! 二.获取数据 爬取出行网站的旅游景点售票数据,反映 ...

  2. python 分析慢查询日志生成报告

    python分析Mysql慢查询.通过Python调用开源分析工具pt-query-digest生成json结果,Python脚本解析json生成html报告. #!/usr/bin/env pyth ...

  3. Python分析盘点2019全球流行音乐:是哪些歌曲榜单占领了我们?

    写在前面:圣诞刚过,弥留者节日气息的大家是否还在继续学习呐~在匆忙之际也不忘给自己找几首好听的歌曲放松一下,缠绕着音乐一起来看看关于2019年流行音乐趋势是如何用Python分析的吧! 昨天下午没事儿 ...

  4. Python分析数据难吗?某科技大学教授说,很难但有方法就简单

    用python分析数据难吗?某科技大学的教授这样说,很难,但要讲方法,主要是因为并不是掌握了基础,就能用python来做数据分析的. 所谓python的基础,也就是刚入门的python学习者,学习的基 ...

  5. 五月天的线上演唱会你看了吗?用Python分析网友对这场线上演唱会的看法

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:CDA数据分析师 豆瓣9.4分!这场线上演唱会到底多好看? 首先让我 ...

  6. Python分析离散心率信号(下)

    Python分析离散心率信号(下) 如何使用动态阈值,信号过滤和离群值检测来改善峰值检测. 一些理论和背景 到目前为止,一直在研究如何分析心率信号并从中提取最广泛使用的时域和频域度量.但是,使用的信号 ...

  7. Python分析离散心率信号(中)

    Python分析离散心率信号(中) 一些理论和背景 心率信号不仅包含有关心脏的信息,还包含有关呼吸,短期血压调节,体温调节和荷尔蒙血压调节(长期)的信息.也(尽管不总是始终如一)与精神努力相关联,这并 ...

  8. Python分析离散心率信号(上)

    Python分析离散心率信号(上) 一些理论和背景 心率包含许多有关信息.如果拥有心率传感器和一些数据,那么当然可以购买分析包或尝试一些可用的开源产品,但是并非所有产品都可以满足需求.也是这种情况.那 ...

  9. Python分析世界幸福指数

    前言 民意测验机构盖洛普从2012年起,每年都会在联合国计划下发布<世界幸福指数报告>,报告会综合两年内150多个国家的国民对其所处社会.城市和自然环境等因素进行评价后,再根据他们所感知的 ...

随机推荐

  1. Hadoop实战-Flume之自定义Source(十八)

    import java.nio.charset.Charset; import java.util.HashMap; import java.util.Random; import org.apach ...

  2. 观察OnPaint与OnIdle与OnSize事件

    import wx class SketchWindow(wx.Window): def __init__(self, parent, ID): wx.Window.__init__(self, pa ...

  3. python网络爬虫之如何识别验证码

    有些网站的登录方式是验证码登录的方式,比如今天我们要测试的网站专利检索及分析. http://www.pss-system.gov.cn/sipopublicsearch/portal/uilogin ...

  4. Java for LeetCode 099 Recover Binary Search Tree

    Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...

  5. Android tab页制作

    全屏启动页 activity_launcher <?xml version="1.0" encoding="utf-8"?> <Relativ ...

  6. HDU - 2612 Find a way 【BFS】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2612 题意 有两个人 要去一个城市中的KFC 一个城市中有多个KFC 求两个人到哪一个KFC的总时间最 ...

  7. linux字符设备学习笔记【原创】

    1.申请设备号 int register_chrdev_region(dev_t from, unsigned count, const char *name) 指定从设备号from开始,申请coun ...

  8. zabbix simple check

    摘自: http://www.ttlsa.com/zabbix/zabbix-simple-checks/ 1. 开始 Simple checks通常用来检查远程未安装代理或者客户端的服务 使用sim ...

  9. Java多线程编程核心 - 对象及变量的并发访问

    1.什么是“线程安全”与“非线程安全”? “非线程安全”会在多个线程对同一对象总的实例变量进行并发访问时发生,产生的后果是“脏读”,也就是取到的数据其实是被更改过的. “线程安全”是以获得的实例变量的 ...

  10. CentOS Wifi Connection

    方法一: http://wiki.centos.org/HowTos/Laptops/WpaSupplicant http://www.cnblogs.com/tanghuimin0713/p/343 ...