python数据分析:关于时间序列的问题

简介: 文章目录前言1️⃣datetime模块2️⃣strftime()方法3️⃣strptime()方法Pandas时间序列基础

前言

在金融、经济、物理学等领域,都需要在多个时间点观测或者测量数据,这样就产生了关于时间序列的数据。

时间序列数据(Time Series Data)是在不同时间上收集到的数据,这类数据是按时间顺序收集到的,用于描述现象随时间变化的情况。

很不巧,Pandas为我们提供了强大的时间序列数据处理的方法。

1️⃣datetime模块

Python标准库包含了日期和时间数据的数据类型,datetime模块是开始处理时间数据最广泛的。

# 创建时间
import datetime
time = datetime.time(13, 14, 20)
print(time)
# 获取小时
print(time.hour)
# 获取分钟
print(time.minute)
# 获取秒
print(time.second)

时间(time)类型的使用:

# 创建时间
import datetime
time = datetime.time(13, 14, 20)
print(time)
# 获取小时
print(time.hour)
# 获取分钟
print(time.minute)
# 获取秒
print(time.second)

日期和时间的结合体–日期时间(datetime):

import datetime
# 创建日期时间
datetime = datetime.datetime(2019, 9, 9, 13, 14, 20)
print(datetime)
# 获取年
print(datetime.year)
# 获取月
print(datetime.month)
# 获取日
print(datetime.day)
# 获取小时
print(datetime.hour)
# 获取分钟
print(datetime.minute)
# 获取秒
print(datetime.second)

datetime的time方法可以创建时间,date方法可以创建日期,datetime方法则是日期和时间的结合体。

通过year、month、day、hour、minute、second属性,可以获取到相应的日期或者时间的值。

同样,使用datetime.now()方法可以获取到当前时间

🚩上面这些代码,大家自己尝试运行,这里不做演示了,so easy

现在我们知道如何使用datetime模块创建时间,但是有些时候我们可能需要将datetime类型转成字符串样式。

例如:将字符串类型的Aug-23-19 20:13转化成2019-08-23 20:13:00样式的datetime类型

import datetime
strp = datetime.datetime.strp
time('may-23-19 20:13', '%b-%d-%y %H:%M')
print(strp)

✨效果

2019-05-23 20:13:00

有的小伙伴会问道:“datetime.datetime(2019, 9, 9, 13, 14, 20)输出的的结果不就是2019-9-9 13:14:20吗?为什么还需要变?”。

没错,它的结果就是我们想要的样式,但是,需要注意的是它的类型是datetime,并不是str。

如果我们只是单一的想改变类型,就可以使用强制类型转换:

import datetime
date_time = datetime.datetime(2019, 9, 9, 13, 14, 20)
print(type(date_time))
str_date_time = str(date_time)
print(str_date_time)
print(type(str_date_time))

✨效果

<class ‘datetime.datetime’>

2019-09-09 13:14:20

<class ‘str’>

但是,我想提一个需求:将datetime.datetime(2019, 9, 9, 13, 14, 20)转换成9/9/2019 13:14样式的字符串。

2️⃣strftime()方法

莫慌,使用strftime()方法便可解决

import datetime
date_time = datetime.datetime(2019, 9, 9, 13, 14, 20)
str_time = date_time.strftime('%m/%d/%Y %H:%M')
str_time

关于时间格式的汇总如下图

那么如何将str类型转化成datetime类型。

3️⃣strptime()方法

例如:将字符串类型的Aug-23-19 20:13转化成2019-08-23 20:13:00样式的datetime类型。 同理,使用strptime()方法。

import datetime
strp = datetime.datetime.strptime('Aug-23-19 20:13', '%b-%d-%y %H:%M')
print(strp)
print(type(strp))

🚩strptime()方法的作用是字符串时间转化为datetime格式,需要注意的是按一定的格式输出时间。

例如:第二个参数不可写成%B-%d-%Y %H:%M ,或者%b / %d / %Y %H:%M

Pandas时间序列基础

前面我们了解了Python内置的datetime模块对时间和日期的处理方法,接下来我们看一下Pandas处理时间上有哪些方法。

使用Pandas的date_range()方法可以快速创建出一个日期范围。

pd.date_range(start=None,end=None,periods=None,freq="D")
  1. start:日期范围的开始;
  2. end:日期范围的结束;
  3. periods:固定日期的个数;
  4. freq:日期偏移量,取值为string,
    默认为’D’,即:一天为日期偏移量
import pandas as pd
import time 
#使用start和periods以及默认的频率参数创建:
dat = pd.date_range(start='20010919', periods=10, freq="D")
#使用start和end以及频率参数freq为10天创建:
date = pd.date_range(start='20190808', end='20190921', freq="10D")
print(date)
print(dat)

✨效果

start和end以及freq配合能够生成start和end范围内以频率freq的一组时间索引。

start和periods以及freq配合能够生成从start开始的频率为freq的periods个时间索引。

关于频率的更多缩写:

有时候我们会对一天或者一个月的数据进行分析,这就需要我们将时间设置成数据的索引,然后通过时间索引获取到一定时间范围内的数据进行分析。

现在我们创建一个以时间序列为索引的Series数据。

import pandas as pd
time_index = pd.date_range('2019-01-01', periods=365)
print(time_index)

然后,使用numpy的随机数创建365个随机整数:

import numpy as np
time_data = np.random.randint(100,size=365)
import pandas as pd
import numpy as np
time_index = pd.date_range('2019-01-01', periods=400)
time_data = np.random.randint(100,size=400)
date_time = pd.Series(data=time_data,index=time_index)
print(date_time)

效果

现在已经成功创建出数据,并将时间索引值设置成数据的索引项,接下来的重点是如何根据时间序列索引获取数据呢?

可以依据年份进行索引

date_time['2020']

可以依据年和月进行索引

date_time['2019-10']

可以使用时间戳进行切片获取数据

date_time['2019-10-05':'2019-10-10']

🚩在获取数据的时候可以直接使用字符串的形式获取以及切片操作。

有的时候用csv导入到时间数据时,默认的是字符串的数据类型 ,当可视化的时候,会出现没有按时间先后顺序的方式绘图 ,所以需要将字符串解析为时间类型的数据类型。

pd.to_datetime(arg,format=None)
  1. arg:需要修改的数据
  2. format:数据的格式
  3. to_datetime()方法会将字符串类型的是时间转换成Timestamp(‘2019-10-05 00:00:00’)时间戳类型。

✨效果

如果想对时间格式修改,还可以使用to_pydatetime()方法将Timestamp类型转换成datetime类型。

pd.to_datetime('2019-10-05').to_pydatetime()

需要注意的是字符串日期中包含中文,我们可以这样处理

pd.to_datetime('2019年10月10日',format='%Y年%m月%d日')

相关文章
|
1月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
在现代数据分析中,高维时间序列数据的处理和预测极具挑战性。基于矩阵分解的长期事件(MFLEs)分析技术应运而生,通过降维和时间序列特性结合,有效应对大规模数据。MFLE利用矩阵分解提取潜在特征,降低计算复杂度,过滤噪声,并发现主要模式。相比传统方法如ARIMA和深度学习模型如LSTM,MFLE在多变量处理、计算效率和可解释性上更具优势。通过合理应用MFLE,可在物联网、金融等领域获得良好分析效果。
62 0
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
|
2月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
本文将引导读者了解如何使用Python进行数据分析,从安装必要的库到执行基础的数据操作和可视化。通过本文的学习,你将能够开始自己的数据分析之旅,并掌握如何利用Python来揭示数据背后的故事。
|
3月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
【10月更文挑战第42天】本文是一篇技术性文章,旨在为初学者提供一份关于如何使用Python进行数据分析的入门指南。我们将从安装必要的工具开始,然后逐步介绍如何导入数据、处理数据、进行数据可视化以及建立预测模型。本文的目标是帮助读者理解数据分析的基本步骤和方法,并通过实际的代码示例来加深理解。
93 3
|
1月前
|
数据可视化 算法 数据挖掘
Python时间序列分析工具Aeon使用指南
**Aeon** 是一个遵循 scikit-learn API 风格的开源 Python 库,专注于时间序列处理。它提供了分类、回归、聚类、预测建模和数据预处理等功能模块,支持多种算法和自定义距离度量。Aeon 活跃开发并持续更新至2024年,与 pandas 1.4.0 版本兼容,内置可视化工具,适合数据探索和基础分析任务。尽管在高级功能和性能优化方面有提升空间,但其简洁的 API 和完整的基础功能使其成为时间序列分析的有效工具。
79 37
Python时间序列分析工具Aeon使用指南
|
1月前
|
机器学习/深度学习 运维 数据可视化
Python时间序列分析:使用TSFresh进行自动化特征提取
TSFresh 是一个专门用于时间序列数据特征自动提取的框架,支持分类、回归和异常检测等机器学习任务。它通过自动化特征工程流程,处理数百个统计特征(如均值、方差、自相关性等),并通过假设检验筛选显著特征,提升分析效率。TSFresh 支持单变量和多变量时间序列数据,能够与 scikit-learn 等库无缝集成,适用于大规模时间序列数据的特征提取与模型训练。其工作流程包括数据格式转换、特征提取和选择,并提供可视化工具帮助理解特征分布及与目标变量的关系。
70 16
Python时间序列分析:使用TSFresh进行自动化特征提取
|
3月前
|
机器学习/深度学习 算法 数据挖掘
数据分析的 10 个最佳 Python 库
数据分析的 10 个最佳 Python 库
191 4
数据分析的 10 个最佳 Python 库
|
3月前
|
存储 数据可视化 数据挖掘
使用Python进行数据分析和可视化
本文将引导你理解如何使用Python进行数据分析和可视化。我们将从基础的数据结构开始,逐步深入到数据处理和分析的方法,最后通过实际的代码示例来展示如何创建直观的数据可视化。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。让我们一起探索数据的世界,发现隐藏在数字背后的故事!
145 5
|
3月前
|
存储 数据可视化 数据挖掘
Python数据分析项目:抖音短视频达人粉丝增长趋势
Python数据分析项目:抖音短视频达人粉丝增长趋势
|
3月前
|
数据采集 存储 数据可视化
Python数据分析:揭秘"黑神话:悟空"Steam用户评论趋势
Python数据分析:揭秘"黑神话:悟空"Steam用户评论趋势
|
3月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析和可视化
【10月更文挑战第42天】本文将介绍如何使用Python进行数据分析和可视化。我们将从数据导入、清洗、探索性分析、建模预测,以及结果的可视化展示等方面展开讲解。通过这篇文章,你将了解到Python在数据处理和分析中的强大功能,以及如何利用这些工具来提升你的工作效率。