MST
星途 面试题库

面试题:Python中Pandas时间序列数据处理的专家级问题

假设有一个非常大的时间序列数据集(内存无法完全容纳),数据以CSV文件形式存储,包含时间戳'timestamp'和数值'value'。要求在Python中使用Pandas和Dask(假设已安装),对数据进行以下操作:1. 以每季度为间隔进行重采样,计算每个季度的平均值;2. 对重采样后的数据,去除异常值(例如,大于均值3倍标准差的值);3. 对处理后的数据进行可视化(简单示意如何进行即可)。请给出完整的代码思路和关键代码片段。
38.7万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

代码思路

  1. 使用Dask读取CSV文件:由于数据量过大无法完全载入内存,利用Dask的read_csv方法读取CSV文件,Dask会以分块的方式处理数据。
  2. 将时间戳列转换为日期时间类型:以便进行后续的重采样操作。
  3. 按季度重采样并计算平均值:使用resample方法按季度对数据进行重采样,并计算每个季度数值的平均值。
  4. 去除异常值:计算重采样后数据的均值和标准差,筛选出不大于均值3倍标准差的数据。
  5. 可视化处理后的数据:使用合适的绘图库(如Matplotlib)对处理后的数据进行可视化展示。

关键代码片段

import dask.dataframe as dd
import matplotlib.pyplot as plt
import pandas as pd

# 1. 使用Dask读取CSV文件
df = dd.read_csv('your_file.csv')

# 2. 将时间戳列转换为日期时间类型
df['timestamp'] = dd.to_datetime(df['timestamp'])

# 3. 按季度重采样并计算平均值
resampled_df = df.set_index('timestamp').resample('Q').mean().reset_index()

# 4. 去除异常值
# 将Dask DataFrame转换为Pandas DataFrame以进行计算,因为Dask在这方面操作相对复杂
pandas_df = resampled_df.compute()
mean_value = pandas_df['value'].mean()
std_value = pandas_df['value'].std()
filtered_df = pandas_df[pandas_df['value'] <= mean_value + 3 * std_value]

# 5. 可视化处理后的数据
plt.plot(filtered_df['timestamp'], filtered_df['value'])
plt.xlabel('Quarter')
plt.ylabel('Average Value')
plt.title('Quarterly Averages after Outlier Removal')
plt.show()