使用Pandas进行时间重采样,充分挖掘数据价值

一、简介时间序列数据蕴含着很大价值,通过重采样技术可以提升原始数据的表现形式 。无论你是数据科学家、分析师 , 还是对数据挖掘感兴趣,都可以从本文学习方法和工具,提升数据可视化技巧 。
二、为什么需要进行数据重采样?在进行时间数据可视化时,数据重采样是至关重要且非常有用的 。它支持控制数据的粒度,以挖掘数据价值,并创建具有吸引力的图片 。用户可以根据需求,对时间序列数据的频率进行上采样或下采样 。

使用Pandas进行时间重采样,充分挖掘数据价值

文章插图
图片
三、数据重采样的方法数据重采样主要有以下两个目的:
  • 调整粒度:通过数据采集可以修改收数据点的时间间隔,只获取关键信息,剔除噪音数据,提升数据可视化效果 。
  • 对齐:重采样还有助于将来自不同时间间隔的多个数据源进行对齐 , 确保在创建可视化或进行分析时保持一致性 。
例如 , 对于某家公司的每日股价数据,该数据来自股票交易所,对其进行可视化,挖掘长期趋势,并剔除噪音数据点 。为此 , 可以通过取每月的平均收盘价,将每日数据重采样为每月频率,从而降低用于可视化的数据量,提升数据可视化的效果 。
import pandas as pd# 每日股票价格数据样本data = https://www.isolves.com/it/cxkf/yy/Python/2023-10-17/{'Date': pd.date_range(start='2023-01-01', periods=365, freq='D'),'StockPrice': [100 + i + 10 * (i % 7) for i in range(365)]}df = pd.DataFrame(data)# 按月频率重采样monthly_data = df.resample('M', notallow='Date').mean()print(monthly_data.head())这个例子通过将每日数据重采样为每月数据 , 并计算出每月的平均收盘价,从而得到了更平滑、噪声更小的股价数据,从而更容易识别长期趋势和规律 , 以便做出决策 。
3.1、选择正确的重采样频率处理时间序列数据时,重采样的主要参数是频率,必须正确选择频率 , 才能获得具有洞察力和实用的可视化效果 。不过,粒度和清晰度之间存在着权衡,粒度表示数据的详细程度,而清晰度则表示数据规律的展现程度 。
例如,对于一年内每分钟记录的温度数据,对年度温度趋势进行可视化,但使用分钟级数据将导致图形过于密集和混乱 。另外,如果将数据聚合为年度平均值,可能会丢失有价值的信息 。
# 采集分钟级温度数据data = https://www.isolves.com/it/cxkf/yy/Python/2023-10-17/{'Timestamp': pd.date_range(start='2023-01-01', periods=525600, freq='T'),'Temperature': [20 + 10 * (i % 1440) / 1440 for i in range(525600)]}df = pd.DataFrame(data)# 按不同频率重采样dAIly_avg = df.resample('D', notallow='Timestamp').mean()monthly_avg = df.resample('M', notallow='Timestamp').mean()yearly_avg = df.resample('Y', notallow='Timestamp').mean()print(daily_avg.head())print(monthly_avg.head())print(yearly_avg.head())此示例将分钟级温度数据重采样为日平均值、月平均值和年平均值 。根据分析或可视化目标,可以选择最适合的详频率 。每日平均值揭示了每日的温度规律,而每年平均值展示了年度趋势 。
通过选择最佳的重采样频率 , 可以在数据细节和可视化清晰度之间取得平衡,进而传达数据中的规律和价值 。
3.2、聚合方法在处理时间数据时,了解各种聚合方法非常重要 。通过这些方法 , 可以有效地总结和分析数据,揭示时间相关信息的不同方面 。标准的聚合方法包括计算总和与平均值 , 或应用自定义函数 。
使用Pandas进行时间重采样,充分挖掘数据价值

文章插图
图片
例如,对于包含一年内零售店每日销售数据的数据集 , 对其进行年度收入趋势分析 。为此,你可以使用聚合方法计算每月和每年的总销售额 。
# 每日销售数据样本data = https://www.isolves.com/it/cxkf/yy/Python/2023-10-17/{'Date': pd.date_range(start='2023-01-01', periods=365, freq='D'),'Sales': [1000 + i * 10 + 5 * (i % 30) for i in range(365)]}df = pd.DataFrame(data)# 使用聚合方法计算每月和每年的销售额monthly_totals = df.resample('M', notallow='Date').sum()yearly_totals = df.resample('Y', notallow='Date').sum()print(monthly_totals.head())print(yearly_totals.head())此示例使用sum()聚合方法将每日销售数据重采样为每月和每年的总销售额 。通过该方法,可以分析在不同粒度级别上的销售趋势 。月度总计揭示了季节变化 , 而年度总计则展示了年度业绩 。


推荐阅读