Xử Lý Dữ Liệu Thời Gian trong Pandas
· 3 min read
Dữ liệu thời gian (Time Series) là một dạng dữ liệu quan trọng trong phân tích tài chính và thị trường. Pandas cung cấp nhiều công cụ mạnh mẽ để xử lý và phân tích dữ liệu thời gian. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về cách xử lý dữ liệu thời gian trong Pandas.
1. Time Series trong Pandas
1.1. Tạo Time Series
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
# Tạo index thời gian
dates = pd.date_range(start='2024-01-01', end='2024-01-10', freq='D')
print("Index thời gian:")
print(dates)
# Tạo Time Series với dữ liệu ngẫu nhiên
ts = pd.Series(np.random.randn(len(dates)), index=dates)
print("\nTime Series:")
print(ts)
1.2. Truy cập dữ liệu theo thời gian
# Lấy dữ liệu theo ngày cụ thể
print("Dữ liệu ngày 2024-01-05:")
print(ts['2024-01-05'])
# Lấy dữ liệu theo khoảng thời gian
print("\nDữ liệu từ 2024-01-03 đến 2024-01-07:")
print(ts['2024-01-03':'2024-01-07'])
# Lấy dữ liệu theo tháng
print("\nDữ liệu tháng 1/2024:")
print(ts['2024-01'])
2. Resampling và Rolling Windows
2.1. Resampling
Resampling là quá trình chuyển đổi dữ liệu từ một tần suất thời gian sang tần suất khác.
# Tạo dữ liệu mỗi giờ
hourly_data = pd.date_range(start='2024-01-01', periods=24, freq='H')
hourly_ts = pd.Series(np.random.randn(len(hourly_data)), index=hourly_data)
# Resampling thành dữ liệu hàng ngày
daily_data = hourly_ts.resample('D').mean()
print("Dữ liệu hàng ngày:")
print(daily_data)
# Resampling thành dữ liệu hàng tuần
weekly_data = hourly_ts.resample('W').mean()
print("\nDữ liệu hàng tuần:")
print(weekly_data)
2.2. Rolling Windows
Rolling Windows cho phép tính toán các thống kê trên một cửa sổ trượt của dữ liệu.
# Tính trung bình động 3 ngày
rolling_mean = ts.rolling(window=3).mean()
print("Trung bình động 3 ngày:")
print(rolling_mean)
# Tính độ lệch chuẩn 5 ngày
rolling_std = ts.rolling(window=5).std()
print("\nĐộ lệch chuẩn 5 ngày:")
print(rolling_std)
3. Bài Tập Thực Hành
3.1. Phân tích dữ liệu giá cổ phiếu theo thời gian
# Đọc dữ liệu từ file CSV
stock_data = pd.read_csv('stock_data.csv', index_col='Date', parse_dates=True)
# Tính toán các chỉ số theo thời gian
daily_returns = stock_data['Close'].pct_change()
monthly_returns = daily_returns.resample('M').mean()
yearly_returns = daily_returns.resample('Y').mean()
# Tính trung bình động
stock_data['MA20'] = stock_data['Close'].rolling(window=20).mean()
stock_data['MA50'] = stock_data['Close'].rolling(window=50).mean()
# Tính biến động
stock_data['Volatility'] = daily_returns.rolling(window=20).std() * np.sqrt(252)
3.2. Phân tích mùa vụ
# Phân tích theo mùa
def analyze_seasonality(data):
# Tính trung bình theo tháng
monthly_avg = data.groupby(data.index.month).mean()
# Tính trung bình theo ngày trong tuần
daily_avg = data.groupby(data.index.dayofweek).mean()
return {
'Monthly Average': monthly_avg,
'Daily Average': daily_avg
}
seasonality = analyze_seasonality(stock_data['Close'])
print("\nPhân tích mùa vụ:")
print(seasonality)
4. Lưu ý Quan Trọng
-
Xử lý múi giờ:
- Sử dụng
tz_localize()
để thiết lập múi giờ - Sử dụng
tz_convert()
để chuyển đổi múi giờ
- Sử dụng
-
Xử lý dữ liệu thiếu:
- Sử dụng
fillna()
với phương pháp phù hợp - Sử dụng
interpolate()
để nội suy dữ liệu
- Sử dụng
-
Tối ưu hiệu suất:
- Sử dụng
resample()
thay vì vòng lặp - Sử dụng
rolling()
cho tính toán cửa sổ trượt
- Sử dụng
5. Kết luận
Xử lý dữ liệu thời gian là một kỹ năng quan trọng trong phân tích dữ liệu. Pandas cung cấp nhiều công cụ mạnh mẽ để xử lý và phân tích dữ liệu thời gian một cách hiệu quả.