標籤:empty density class 關係 taf 不能 target 看到了 有一個
畫圖從直覺上來講就是為了更加清晰的展示時序資料所呈現的規律(包括趨勢,隨時間變化的規律(一周、一個月、一年等等)和周期性規律),對於進一步選擇時序分析模型至關重要。下面主要是基於pandas庫總結一下都有哪些常見圖可以用來分析。總共有下面幾種:
- 線形圖
- 長條圖和密度圖
- 盒鬚圖
- 熱力圖
- 滯後圖
- 散佈圖
- 自相關圖
(1)線形圖
這是最基本的圖了,橫軸是時間,縱軸是變數,描述了變數隨著時間的變化關係,圖中顯然也容易發現上述的潛在規律。直接上代碼:
# -*- coding: utf-8 -*-from pandas import Seriesimport matplotlib.pyplot as pltdata = 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 Seriesimport matplotlib.pyplot as pltdata = 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 pltdata = Series.from_csv(‘minimum.csv‘, header=0)groups = data.groupby(TimeGrouper(‘A‘))years = DataFrame()for name,group in groups: years[name.year]=group.valuesyears.boxplot()plt.show()
這裡貼一:
順便介紹一下盒鬚圖,它能顯示出一組資料的最大值、最小值、中位元、及上下四分位元,其中最主要的是最大值最小值給的是在上下四分位元的某個區間裡面,形成一個盒子加上鬍鬚(因此也叫盒須圖),例如1981年,最大值是20-25之間,最小值在0-5之間,務必記住是在一個大機率區間裡面最大最小,不是實際的最大最小,離開了這個區間會有很多小圓圈和*表示,圓圈表示離群值,*表示極端值。
當然也可以取出其中一年分析一下:
from pandas import *import matplotlib.pyplot as pltdata = 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 pltdata = 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 pltfrom pandas.plotting import lag_plotdata = Series.from_csv(‘minimum.csv‘, header=0)lag_plot(data)plt.show()
明顯我們看到了正相關。下面給出一個星期的散佈圖,我們可以看到間隔一天、兩天、三天......
from pandas import *import matplotlib.pyplot as pltdata = Series.from_csv(‘minimum.csv‘, header=0)values = DataFrame(data.values)lags = 7columns = [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 = columnsplt.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 Seriesimport matplotlib.pyplot as pltfrom pandas.plotting import autocorrelation_plotseries = Series.from_csv(‘minimum.csv‘, header=0)autocorrelation_plot(series)plt.show()
當然,這些並沒有介紹完全,詳細版還是附在下面:
所有圖的資料
python時間序列畫圖plot總結