python時間序列畫圖plot總結 pandas 讀csv文件 TypeError: Empty 'DataFrame': no numeric data to plot

畫圖從直覺上來說就是爲了更加清晰的展現時序數據所呈現的規律(包括趨勢,隨時間變化的規律(一週、一個月、一年等等)和週期性規律),對於進一步選擇時序分析模型相當重要。下面主要是基於pandas庫總結一下都有哪些常見圖能夠用來分析。總共有下面幾種:html

  • 線形圖
  • 直方圖和密度圖
  • 箱形圖
  • 熱力圖
  • 滯後圖
  • 散點圖
  • 自相關圖

(1)線形圖api

這是最基本的圖了,橫軸是時間,縱軸是變量,描述了變量隨着時間的變化關係,圖中顯然也容易發現上述的潛在規律。直接上代碼:app

# -*- 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年,以下:post

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 ploturl

另外plot的style能夠查看文檔本身選擇喜歡的,文檔連接spa

(2)直方圖和密度圖3d

直方圖,你們是知道的,他沒有時序,只是在一個時間範圍的變量範圍統計,比方說這些數據分紅10個bins,咱們會看到每一個bin的數量(比方說多少天,月等等),這種統計方法同密度圖是同樣的,能看到變量在哪些取值範圍比較多,哪些比較少等等,觀測到數據的潛在分佈規律。code

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會告訴你,請看文檔htm

(3)箱形圖blog

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()

 固然,這些並無介紹徹底,詳細版仍是附在下面:

全部圖的資料

相關文章
相關標籤/搜索