今天学习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. 我的Android进阶之旅------>Android如何去除GridView的按下或点击选中后的背景效果

    今天用GridView做了一个界面,自己自定好了一个组件,并且设置好了点击和不点击组件时候的效果,但是运行的时候发现在我定义好的背景下面还有一层不知道哪儿来的背景,严重影响了我自定义的组件的效果. 后 ...

  2. 前端基础之---css

    css  介绍 css 规则有两个主要的部分构成 : 选择器  , 以及一条或多条声明. 现在的互联网前端分为三层 : ● HTML :超文本标签机语言,从语义的角度描述页面结构. ● CSS : 层 ...

  3. UVA - 11954 Very Simple Calculator 【模拟】

    题意 模拟二进制数字的位运算 思路 手写 位运算函数 要注意几个坑点 一元运算符的优先级 大于 二元 一元运算符 运算的时候 要取消前导0 二元运算符 运算的时候 要将两个数字 数位补齐 输出的时候 ...

  4. ceph分布式存储系统初探

    前言 由于公司的业务调整,现在我又要接触ceph这个东西,由于我接手的是一个网盘类项目,所以分布式存储系统ceph就是我必须要学的了.现在压力还是比较大的,从业务直接到后台核心. 大概在这几天,我将c ...

  5. iOS 9 Safari广告拦截插件

    相对于谷歌对广告拦截的禁止,苹果与之态度截然相反,继Mac版Safari加入广告拦截工具之后,即将到来的iOS9对Safari也引入了内容拦截插件-Content Blocker,并且开发者可以使用最 ...

  6. 算法(Algorithms)第4版 练习 1.3.18

    1.3.18 Deletes from the list the node immediately following x.

  7. Contiki Timer & Stimer 模块

    一.Timer API struct timer { clock_time_t start; clock_time_t interval; }; CCIF void timer_set(struct ...

  8. JS继承的实现方式

    JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一.那么如何在JS中实现继承呢?让我们拭目以待. JS继承的实现方式 既然要实现继承,那么首先我们得有一个父类,代码如下: // 定义一个动物类 ...

  9. 9.1 NOIP普及组试题精解(3)

    9-6 seat.c #include <stdio.h> #define MAXN 1001 void swap(int *a, int *b) //交换数据 { int t; t = ...

  10. BZOJ 2442 [Usaco2011 Open]修剪草坪:单调队列优化dp

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2442 题意: 有n个数a[i]从左到右排成一排. 你可以任意选数,但是连续的数不能超过k个 ...