python时间序列画图plot总结
画图从直觉上来讲就是为了更加清晰的展示时序数据所呈现的规律(包括趋势,随时间变化的规律(一周、一个月、一年等等)和周期性规律),对于进一步选择时序分析模型至关重要。下面主要是基于pandas库总结一下都有哪些常见图可以用来分析。总共有下面几种:
- 线形图
- 直方图和密度图
- 箱形图
- 热力图
- 滞后图
- 散点图
- 自相关图
(1)线形图
这是最基本的图了,横轴是时间,纵轴是变量,描述了变量随着时间的变化关系,图中显然也容易发现上述的潜在规律。直接上代码:
# -*- coding: utf-8 -*-
from pandas import Series
import matplotlib.pyplot as plt
data = Series.from_csv('minimum.csv',header=0)
data.astype(float)
print(data.head())
data.plot(style='r.')
plt.show()
也可以只看其中一年的,比方说1990年,如下:
data = Series.from_csv('minimum.csv', header=0)
one_year = data['']
one_year.plot()
这个解决的一个问题是object类型是不能plot的,查看pandas 读csv文件 TypeError: Empty 'DataFrame': no numeric data to plot
另外plot的style可以查看文档自己选择喜欢的,文档链接
(2)直方图和密度图
直方图,大家是知道的,他没有时序,只是在一个时间范围的变量范围统计,比方说这些数据分成10个bins,我们会看到每个bin的数量(比方说多少天,月等等),这种统计方法同密度图是一样的,能看到变量在哪些取值范围比较多,哪些比较少等等,观测到数据的潜在分布规律。
from pandas import Series
import matplotlib.pyplot as plt
data = Series.from_csv('minimum.csv', header=0)
data.hist()
plt.show()
data.plot(kind='kde')
plt.show()
这里面主要有一个问题,就是什么是kde:Kernel Density Estimation,sklearn的tutorial会告诉你,请看文档
(3)箱形图
from pandas import *
import matplotlib.pyplot as plt
data = Series.from_csv('minimum.csv', header=0)
groups = data.groupby(TimeGrouper('A'))
years = DataFrame()
for name,group in groups:
years[name.year]=group.values
years.boxplot()
plt.show()
这里贴一下图:

顺便介绍一下箱形图,它能显示出一组数据的最大值、最小值、中位数、及上下四分位数,其中最主要的是最大值最小值给的是在上下四分位数的某个区间里面,形成一个盒子加上胡须(因此也叫盒须图),例如上图1981年,最大值是20-25之间,最小值在0-5之间,务必记住是在一个大概率区间里面最大最小,不是实际的最大最小,离开了这个区间会有很多小圆圈和*表示,圆圈表示离群值,*表示极端值。
当然也可以取出其中一年分析一下:
from pandas import *
import matplotlib.pyplot as plt
data = Series.from_csv('minimum.csv', header=0)
data = data['']
groups = data.groupby(TimeGrouper('M'))
months = concat([DataFrame(x[1].values) for x in groups], axis=1)
months = DataFrame(months)
months.columns = range(1,13)
months.boxplot()
plt.show()
(4)热力图
热力图就更加形象点了,虽然我们不知道数值,但是通过颜色我们能看看极值的分布,颜色越鲜艳,数值越大(红黄),颜色越暗淡,数值越小(蓝绿),当然显示也有可能不一样。
#1988年的例子
from pandas import *
import matplotlib.pyplot as plt
data = Series.from_csv('minimum.csv', header=0)
data = data['']
groups = data.groupby(TimeGrouper('M'))
months = concat([DataFrame(x[1].values) for x in groups], axis=1)
months = DataFrame(months)
months.columns = range(1,13)
plt.matshow(months,interpolation=None,aspect='auto')
plt.show()
(5)滞后图和散点图
这里应该注意一下,滞后图与散点图可以按照时序画,那就是(1)里面的线形图了,这里讲的其实不是时序的,而是分析数据相关性的,我们给数据一段时间的观测间隔,因为假定前面的数据和后面的数据有关系,是正相关或是负相关还是什么,选定一个间隔,plot一下。
from pandas import *
import matplotlib.pyplot as plt
from pandas.plotting import lag_plot
data = Series.from_csv('minimum.csv', header=0)
lag_plot(data)
plt.show()

明显我们看到了正相关。下面给出一个星期的散点图,我们可以看到间隔一天、两天、三天......
from pandas import *
import matplotlib.pyplot as plt
data = Series.from_csv('minimum.csv', header=0)
values = DataFrame(data.values)
lags = 7
columns = [values]
for i in range(1,(lags + 1)):
columns.append(values.shift(i))
dataframe = concat(columns, axis=1)
columns = ['t']
for i in range(1,(lags + 1)):
columns.append('t-' + str(i))
dataframe.columns = columns
plt.figure(1)
for i in range(1,(lags + 1)):
ax = plt.subplot(240 + i)
ax.set_title('t vs t-' + str(i))
plt.scatter(x=dataframe['t'].values, y=dataframe['t-'+str(i)].values)
plt.show()

(6)自相关图
这个不用说的,其实就是考虑数据和一定间隔数据的相关性,越接近1是正相关,接近-1是负相关,接近0就是相关性很低。下面就是计算公式(右边是左边的特殊情形,也就是自相关图的公式,因为是自己和自己所有可能的间隔产生的),下面代码给的自相关默认是数据和滞后1步的相关性。


from pandas import Series
import matplotlib.pyplot as plt
from pandas.plotting import autocorrelation_plot
series = Series.from_csv('minimum.csv', header=0)
autocorrelation_plot(series)
plt.show()
当然,这些并没有介绍完全,详细版还是附在下面:
python时间序列画图plot总结的更多相关文章
- python seaborn 画图
python seaborn 画图 59888745@qq.com 2017.08.02 distplot( ) kdeplot( ) distplot( )为hist加强版, kdeplot( ) ...
- python数据分析画图体验
对于numpy的函数,pands等,不是很熟,我来copy一下code,敲击一下,找找感觉. 默认的导入包import numpy as npimport matplotlib.pyplot as p ...
- python matplotlib画图产生的Type 3 fonts字体没有嵌入问题
ScholarOne's 对python matplotlib画图产生的Type 3 fonts字体不兼容,更改措施: 在程序中添加如下语句 import matplotlib matplotlib. ...
- python时间序列按频率生成日期的方法
引用:https://www.zhangshengrong.com/p/281omE7rNw/ 有时候我们的数据是按某个频率收集的,比如每日.每月.每15分钟,那么我们怎么产生对应频率的索引呢?pan ...
- Python科学画图小结
Python画图主要用到matplotlib这个库.具体来说是pylab和pyplot这两个子库.这两个库可以满足基本的画图需求,而条形图,散点图等特殊图,下面再单独具体介绍. 首先给出pylab神器 ...
- Python基础-画图:matplotlib
Python画图主要用到matplotlib这个库.具体来说是pylab和pyplot这两个子库.这两个库可以满足基本的画图需求. pylab神器:pylab.rcParams.update(para ...
- python pandas 画图、显示中文、股票K线图
目录: 1.pandas官方画图链接 2.标记图中数据点 3.画图显示中文 4.画股票K线图 5.matplotlib基本用法 6.format输出 6.format输出例子 eps_range=[0 ...
- Python中plt.plot()、plt.scatter()和plt.legend函数的用法示例
参考:http://www.cppcns.com/jiaoben/python/471948.html https://blog.csdn.net/weixin_44825185/article/de ...
- python 怎么画图
1 安装matplotlib: 安装方法:http://www.2cto.com/os/201309/246928.html(其中,安装过程中,tar解压怎么解都有问题.然后就删掉再下载一遍) 2 使 ...
随机推荐
- XE2 运行时 item not found的解决办法
.net类库的原因. 将C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG下面的 machine.config.default 改名为machin ...
- [代码]--python爬虫联系--爬取成语
闲来无事,玩了个成语接龙,于是就想用python爬取下成语网站上的成语,直接上代码: #coding=utf-8 import requests from bs4 import BeautifulSo ...
- BZOJ2212 POI2011Tree Rotations(线段树合并)
显然子树内的操作不会对子树外产生影响.于是贪心,若交换之后子树内逆序对减少就交换. 这个东西可以用权值线段树计算.操作完毕后需要对两棵权值线段树合并,这个的复杂度是两棵线段树的重复节点个数.那么总复杂 ...
- IDEA 快捷键修改(长期更新)
最近误操作,导致idea的快捷键没了. 痛定思痛,打算记录一下,以前修改过的key map 搜索一下就好了: 1 代码格式化 -- reformat code:Ctrl+Alt+L(如果按了没反应, ...
- POJ 1661 (Help Jimmy )
Help Jimmy Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 13669 Accepted: 4541 Descr ...
- 在Java Web程序中使用监听器可以通过以下两种方法
之前学习了很多涉及servlet的内容,本小结我们说一下监听器,说起监听器,编过桌面程序和手机App的都不陌生,常见的套路都是拖一个控件,然后给它绑定一个监听器,即可以对该对象的事件进行监听以便发生响 ...
- php语言基础语法与编程工具推荐
php脚本语言,需要在服务器端执行,用浏览器返回HTML结果.在PHP中所有的语法都是如此,用户端是无法修改的,只有浏览权限. 一.php基础语法之输出方法 1.PHP中所有的脚本,可以放在文件中的任 ...
- sklearn 的train_test_split
train_test_split函数用于将矩阵随机划分为训练子集和测试子集,并返回划分好的训练集测试集样本和训练集测试集标签. 格式: from sklearn.model_selection imp ...
- 两场CF
分别是正规赛998和虚拟赛935 998我神速A了前三题之后挂了,第四题是一个打表找规律题然而我并没有想到打表... 然后靠着速度拿到470名,上了蓝名.这告诉我们:输入数据是一个数/两个数(noip ...
- P1274 魔术数字游戏 naive搜索+剪枝
真的naive...... 我把所有能剪的枝都剪了才过的.否则就是TTT 还有个很神奇的事:数组作为参数传进递归函数时会造成上一层函数里的数组的改变.这个我TM调了一天. 下面奉上代码 #includ ...