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['1990']
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['1990']
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['1988']
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总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言简单密码字符a用f代替,c语言实验
- 下一篇: 刷卡限额多少