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()
#畫其中一年圖
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可以查看文檔自己選擇喜歡的企孩,查看
plot類型
2直方圖和密度圖
??直方圖僻焚,沒有時序肚邢,只是在一個時間范圍的變量范圍統(tǒng)計诈铛,比方說這些數(shù)據(jù)分成10個bins篡九,我們會看到每個bin的數(shù)量(比方說多少天谐岁,月等等),這種統(tǒng)計方法同密度圖是一樣的榛臼,能看到變量在哪些取值范圍比較多伊佃,哪些比較少等等,觀測到數(shù)據(jù)的潛在分布規(guī)律沛善。
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()
??箱形圖帅涂,它能顯示出一組數(shù)據(jù)的最大值、最小值尤蛮、中位數(shù)媳友、及上下四分位數(shù),其中最主要的是最大值最小值給的是在上下四分位數(shù)的某個區(qū)間里面产捞,形成一個盒子加上胡須(因此也叫盒須圖)醇锚,例如上圖1981年,最大值是20-25之間坯临,最小值在0-5之間焊唬,務(wù)必記住是在一個大概率區(qū)間里面最大最小,不是實際的最大最小看靠,離開了這個區(qū)間會有很多小圓圈和表示赶促,圓圈表示離群值,表示極端值挟炬。
??也可以取出其中一年分析:
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熱力圖
??熱力圖就更加形象鸥滨,雖然我們不知道數(shù)值嗦哆,但是通過顏色我們能看看極值的分布,顏色越鮮艷爵赵,數(shù)值越大(紅黃)吝秕,顏色越暗淡,數(shù)值越锌栈谩(藍(lán)綠),當(dāng)然顯示也有可能不一樣烁峭。
#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滯后圖和散點(diǎn)圖
??這里應(yīng)該注意一下,滯后圖與散點(diǎn)圖可以按照時序畫秕铛,那就是(1)里面的線形圖了约郁,這里講的其實不是時序的,而是分析數(shù)據(jù)相關(guān)性的但两,我們給數(shù)據(jù)一段時間的觀測間隔鬓梅,因為假定前面的數(shù)據(jù)和后面的數(shù)據(jù)有關(guān)系,是正相關(guān)或是負(fù)相關(guān)還是什么谨湘,選定一個間隔绽快,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()
??明顯我們看到了正相關(guān)紧阔。下面給出一個星期的散點(diǎn)圖坊罢,我們可以看到間隔一天、兩天擅耽、三天......
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自相關(guān)圖
??自相關(guān)圖其實就是考慮數(shù)據(jù)和一定間隔數(shù)據(jù)的相關(guān)性活孩,越接近1是正相關(guān),接近-1是負(fù)相關(guān)乖仇,接近0就是相關(guān)性很低憾儒。下面就是計算公式(右邊是左邊的特殊情形,也就是自相關(guān)圖的公式乃沙,因為是自己和自己所有可能的間隔產(chǎn)生的)起趾,下面代碼給的自相關(guān)默認(rèn)是數(shù)據(jù)和滯后1步的相關(guān)性。
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()
7時序圖(加label)
import pandas as pd
import matplotlib.pyplot as plt
?
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標(biāo)簽
plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負(fù)號
?
df = pd.read_excel('quanguojingji10nian.xls')
x=df['指標(biāo)']
y1=df['國民總收入(億元)']
plt.plot(x,y1,label='國民總收入')
?
plt.xlabel('年份')
plt.ylabel('億元')
plt.title('國內(nèi)生產(chǎn)總值')
plt.legend()
plt.show()
8直方圖(帶label)
import pandas as pd
import matplotlib.pyplot as plt
?
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標(biāo)簽
plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負(fù)號
df = pd.read_excel('quanguojingji10nian.xls')
x=df['指標(biāo)']
y1=df['國民總收入(億元)']
?
plt.bar(x, y1, label='國民總收入')
plt.xlabel('年份')
plt.ylabel('億元')
plt.legend()
plt.show()
9餅圖(帶label)
import pandas as pd
import matplotlib.pyplot as plt
?
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標(biāo)簽
plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負(fù)號
df = pd.read_excel('quanguojingji10nian.xls')
?
labels='2018年','2017年','2016年','2015年','2014年','2013年','2012年','2011年','2010年','2009年'
x=df['國民總收入(億元)']
explode=(0.1,0,0,0,0,0,0,0,0,0)
plt.pie(x,labels=labels,explode=explode,startangle=60,autopct='%1.1f%%')
plt.axis("equal")
plt.title('國民總收入')
plt.show()