pandas 时间序列可视化

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif'] = 'SimHei'  #显示中文
plt.rcParams['axes.unicode_minus'] = False  #显示负号

数据集

北京 2010-2014年 PM2.5 数据集,可从 UCI 下载

path = 'PRSA_data_2010.1.1-2014.12.31.csv'
data = pd.read_csv(path)
data.tail()

pandas 时间序列可视化_第1张图片
换一种打开方式

df = pd.read_csv(path, index_col='No', 
                 parse_dates={'datetime': [1,2,3,4]},
                 date_parser=lambda x: pd.datetime.strptime(x, '%Y %m %d %H')
                )
df.head()

pandas 时间序列可视化_第2张图片

df = df.set_index('datetime')
df.info()
'''

DatetimeIndex: 43824 entries, 2010-01-01 00:00:00 to 2014-12-31 23:00:00
Data columns (total 8 columns):
pm2.5    41757 non-null float64
DEWP     43824 non-null int64
TEMP     43824 non-null float64
PRES     43824 non-null float64
cbwd     43824 non-null object
Iws      43824 non-null float64
Is       43824 non-null int64
Ir       43824 non-null int64
dtypes: float64(4), int64(3), object(1)
memory usage: 3.0+ MB
'''
df.head()

pandas 时间序列可视化_第3张图片

选取温度数据

折线图

plt.figure(figsize=(20,10))
df['TEMP'].plot()
plt.tick_params(labelsize=20)
plt.grid()

pandas 时间序列可视化_第4张图片

散点图

df['TEMP'].plot(style='.k', figsize=(20,10))
plt.tick_params(labelsize=20)
plt.grid()

pandas 时间序列可视化_第5张图片

直方图

# df['TEMP'].hist(bins=100)
df['TEMP'].plot(kind='hist',bins=100)
plt.grid()

pandas 时间序列可视化_第6张图片

核密度估计图

df['TEMP'].plot(kind='kde')

pandas 时间序列可视化_第7张图片

按年份分组

temp = df['TEMP'].to_frame()
temp.head()

pandas 时间序列可视化_第8张图片
按年份分组

groups= temp.groupby(pd.Grouper(freq='Y'))['TEMP']
yearly = {name.year:group.values for name,group in groups}
years = pd.DataFrame()
for k,v in yearly.items():
    years[k] = pd.Series(v)
years.head()

pandas 时间序列可视化_第9张图片

折线图

plt.style.use({'figure.figsize':(50,15)})
years.plot()
plt.tick_params(labelsize=20)
plt.legend(fontsize=20, markerscale=20)
plt.grid()

pandas 时间序列可视化_第10张图片

years.plot(subplots=True,figsize=(50,15*5))

plt.show()

箱线图

years.boxplot(figsize=(50,15))

pandas 时间序列可视化_第11张图片

热力图

sns.heatmap(years.T)

pandas 时间序列可视化_第12张图片

plt.matshow(years.T, interpolation=None, aspect='auto')

pandas 时间序列可视化_第13张图片

直方图

years.hist(bins=100)

pandas 时间序列可视化_第14张图片

按月分组

箱线图

group_month = df['2014'].groupby(pd.Grouper(freq='M'))['TEMP']
month = pd.concat([pd.DataFrame(x[1].values) for x in group_month], axis=1)
month = pd.DataFrame(month)
month.columns = range(1,13)
month.boxplot(figsize=(20,5))
plt.title('北京2014年每月温度分布')

pandas 时间序列可视化_第15张图片

小提琴图

plt.style.use({'figure.figsize':(20,5)})
sns.violinplot(data=month, linewidth=2)
plt.title('北京2014年每月温度分布小提琴图')

pandas 时间序列可视化_第16张图片

滞后散点图

lag_list = [2**i for i in range(9)]
plt.style.use({'figure.figsize':(30,30)})
for i in range(9):
    ax = plt.subplot(3,3,i+1)
    ax.set_title('t vs t+{}'.format(lag_list[i]))
    lag_plot(month, lag=lag_list[i])
    plt.title('气温滞后{}小时散点图'.format(lag_list[i]))

pandas 时间序列可视化_第17张图片

自相关图

plt.style.use({'figure.figsize':(10,10)})
from  pandas.plotting import autocorrelation_plot
autocorrelation_plot(temp)
plt.tick_params(labelsize=10)
plt.yticks(np.linspace(-1,1,20))

pandas 时间序列可视化_第18张图片

你可能感兴趣的:(时间序列,#,数据可视化,#,编程语言)