时间数据
依赖于时间以及明确记录时间的数据称为时间数据。 对于此类数据,时间是一个固有维度,始终与数据相关。 例如,假设我们有一个数据集,其中记录了格陵兰岛最近五年的冰融化速率。
让我们看下面的数据集:
图略
我们可以看到,时间是这类数据的固有组成部分。
时间数据类型
时间数据可以包含有关以下内容的信息:
- 事件:事件是在给定时间对象状态的变化。 事件=时间对象状态。
- 度量:度量记录跨时间的值。 测量=时间测量。
时间的另一种观点可以基于时间的进展:
- 顺序的:我们在这里将时间视为连续的线性值。 Unix时间戳就是这种类型的一个例子。
- 周期性的:时间可以看作是周期性事件,在这里它被理解为固定的时间段,例如几周或几个月。 时间的周期性解释用于比较同一时期的值,例如每月或每年温度变化的销售额。
- 分层的:了解时间信息的另一种方法是通过分层模式。 分层时间结构有助于我们可视化不同级别的数据。 假设您正在绘制每个月的销售数据。 为了了解给定月份的每周模式,我们将时间段从较大的时期(几个月)划分为较小的时期(星期)。
处理和可视化时间序列数据
Pandas是用于导入,整理和分析数据的最常用的库。 对于时间序列数据,它具有内置的datetime功能,使时间序列分析和可视化变得容易。 当绘制时间序列数据时,我们希望执行诸如重新采样,上采样或解析一个月或一天的日期之类的操作,以根据需求自定义可视化。 重采样和上采样是汇总时间段的方法。 在下一部分中,我们将通过一些动手练习来更好地理解重采样。
现在,让我们来看一个使用pandas和Airpassengers.csv数据集的解析示例:
import pandas as pd
from pathlib import Path
DATA_PATH = Path("datasets")
passenger_df = pd.read_csv(DATA_PATH /"AirPassengers.csv")
print(passenger_df.info())
输出结果:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 144 entries, 0 to 143
Data columns (total 2 columns):
Month 144 non-null object
#Passengers 144 non-null int64
dtypes: int64(1), object(1)
memory usage: 2.3+ KB
None
我们可以看到Month列包含对象类型的数据。 现在,使用以下代码将其转换为日期时间:
passenger_df["Month"] = pd.to_datetime(passenger_df["Month"])
# converts into datetime object
print(passenger_df.info())
输出结果:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 144 entries, 0 to 143
Data columns (total 2 columns):
Month 144 non-null datetime64[ns]
#Passengers 144 non-null int64
dtypes: datetime64[ns](1), int64(1)
memory usage: 2.3 KB
None
在处理时间序列数据之前,让我们向您介绍Pandas中时间和日期处理的主要概念。
日期/时间处理
以下是在分析和可视化过程中使用的常见的日期/时间操作技术或pandas函数:
-
Datetime:具有时区支持的特定日期和时间。 Datetime用于将str对象转换为datetime对象。 通常,将其应用于列以进行时间分析。 它支持各种类型的日期
pd.to_datetime([‘2019/09/20’, ‘2019.10.31’])
结果:
DatetimeIndex([‘2019-09-09’, ‘2019-09-10’], dtype=‘datetime64[ns]’,freq=None)
* timedelta:timedelta用于计算绝对持续时间。 timedelta可用于在datetime列中添加或减去特定时间值。 让我们看一个为日期添加一天的示例:
```
import numpy as np
#week_delta arranged over week period, we can add these dates.
week_delta = pd.to_timedelta(np.arange(5), unit='w')
dates = pd.to_datetime(['9/9/2019', '9/9/2019', '9/9/2019',
'9/9/2019', '9/9/2019'])
print(dates + week_delta)
结果:
DatetimeIndex(['2019-09-09', '2019-09-16', '2019-09-23', '2019-09-
30', '2019-10-07'],
dtype='datetime64[ns]', freq='W-MON')
#freq='W-MON' implies weekday starting from Monday
-
时间跨度:由时间点及其关联的频率定义的时间跨度。 时间戳和时间跨度都可以索引到DataFrame:
pd.Period(‘2019-09’)
结果:
Period(‘2019-09’, ‘M’)
* 日期偏移量:日期偏移量是相对于日历算法的相对持续时间:
```
## Day-light saving in US (2019)
timestamp = pd.Timestamp('2019-03-10 00:00:00', tz='US/Pacific')
# Timedelta with respect to absolute time
print(timestamp + pd.Timedelta(days=1))
结果:
2019-03-11 01:00:00-07:00
其他示例:
# DateOffset with respect to calendar time
print(timestamp + pd.DateOffset(days=1))
结果:
2019-03-11 00:00:00-07:00
建立日期时间索引
Pandas DataFrames由有序的可切片集合索引。 如果我们将DatetimeIndex分配为DataFrame的索引,则可以基于日期,月份等进行切片和过滤。
这是制作日期时间索引的一种方法:
passenger_df = passenger_df.set_index(pd.DatetimeIndex(passenger_df['Month']))
或者,我们可以这样做:
passenger_df.index = passenger_df['Month']
详情参阅 - 亚图跨际