Python数据交互式可视化 - 跨时间数据

时间数据

依赖于时间以及明确记录时间的数据称为时间数据。 对于此类数据,时间是一个固有维度,始终与数据相关。 例如,假设我们有一个数据集,其中记录了格陵兰岛最近五年的冰融化速率。

让我们看下面的数据集:

图略

我们可以看到,时间是这类数据的固有组成部分。

时间数据类型

时间数据可以包含有关以下内容的信息:

  • 事件:事件是在给定时间对象状态的变化。 事件=时间对象状态。
  • 度量:度量记录跨时间的值。 测量=时间测量。

时间的另一种观点可以基于时间的进展:

  • 顺序的:我们在这里将时间视为连续的线性值。 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'] 

详情参阅 - 亚图跨际

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值