pandas 时间序列可视化

本博客通过使用Python的Pandas、Matplotlib和Seaborn库,对北京2010年至2014年的PM2.5数据进行深度分析。不仅展示了数据的清洗与预处理过程,还通过各种图表如折线图、散点图、直方图、核密度估计图、箱线图、小提琴图和热力图等,详细探讨了温度数据的时间序列特性。此外,还深入研究了温度数据的滞后效应和自相关性。
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()

在这里插入图片描述
换一种打开方式

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

在这里插入图片描述

df = df.set_index('datetime')
df.info()
'''
<class 'pandas.core.frame.DataFrame'>
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()

在这里插入图片描述

选取温度数据

折线图

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

散点图

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

在这里插入图片描述

直方图

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

在这里插入图片描述

核密度估计图

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

按年份分组

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

在这里插入图片描述
按年份分组

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

在这里插入图片描述

折线图

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

在这里插入图片描述

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

plt.show()

在这里插入图片描述

箱线图

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

在这里插入图片描述

热力图

sns.heatmap(years.T)

在这里插入图片描述

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

在这里插入图片描述

直方图

years.hist(bins=100)

在这里插入图片描述

按月分组

箱线图

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年每月温度分布')

在这里插入图片描述

小提琴图

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

在这里插入图片描述

滞后散点图

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

在这里插入图片描述

自相关图

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颹蕭蕭

白嫖?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值