Bỏ qua tới nội dung chính
Quay lại tin tức

Kỹ thuật tính năng chuỗi thời gian với Python Itertools

KDnuggets· Bala Priya C· 14/5/2026general

Tìm hiểu cách sử dụng itertools của Python để xây dựng các tính năng chuỗi thời gian hiệu quả và có thể mở rộng.

--> Kỹ thuật tính năng chuỗi thời gian với Python Itertools - KDnuggets --> Blog Bài viết hàng đầu Giới thiệu chủ đề trí tuệ nhân tạo Lời khuyên nghề nghiệp Thị giác máy tính Kỹ thuật dữ liệu Khoa học dữ liệu Mô hình ngôn ngữ Học máy MLOps NLP Lập trình Python SQL Bộ dữ liệu Sự kiện Tài nguyên Bảng cheat Khuyến nghị Tóm tắt công nghệ Quảng cáo Tham gia bản tin Kỹ thuật tính năng chuỗi thời gian với Python Itertools Tìm hiểu cách sử dụng itertools của Python để xây dựng các tính năng chuỗi thời gian hiệu quả và có thể mở rộng. Bởi Bala Priya C, KDnuggets Biên tập viên đóng góp & Chuyên gia nội dung kỹ thuật vào ngày 14 tháng 5 năm 2026 trên tạp chí Khoa học dữ liệu --> #Giới thiệu Kỹ thuật tính năng chuỗi thời gian không tuân theo các quy tắc giống như dữ liệu dạng bảng. Các quan sát không độc lập, thứ tự hàng không ngẫu nhiên và các tính năng hữu ích nhất hiếm khi là các bài đọc riêng lẻ. Bạn sẽ phải xác định các mẫu theo thời gian như tốc độ thay đổi, so sánh độ trễ, độ lệch so với đường cơ sở luân phiên, v.v. Về bản chất, độ trễ xây dựng, cửa sổ trượt và nhóm giữa các độ phân giải đều là các vấn đề cốt lõi của việc lặp lại theo trình tự được sắp xếp. Mô-đun itertools của Python rất phù hợp cho loại công việc này. Nó không thay thế các khái niệm trừu tượng về gấu trúc cấp cao như .rolling(), nhưng nó cung cấp cho bạn các khối xây dựng cấp thấp hơn để xây dựng chính xác các tính năng bạn cần, với toàn quyền kiểm soát logic. Trong bài viết này, bạn sẽ xây dựng bảy loại tính năng chuỗi thời gian bằng cách sử dụng itertools. Bạn cũng sẽ áp dụng từng cái cho một tập dữ liệu mẫu. Bạn có thể lấy mã trên GitHub. # Tạo tập dữ liệu mẫu Trước khi bắt đầu xây dựng các tính năng, hãy tạo một tập dữ liệu cảm biến mẫu để sử dụng trong suốt bài viết. nhập numpy dưới dạng np nhập gấu trúc dưới dạng pd nhập itertools np.random.seed(42) tiết = 168 # một tuần đọc hàng giờ chỉ mục = pd.date_range(start="2024-03-01", Period= Periods, freq="h") giờ = np.arange(thời gian) # Nhiệt độ (°C): chu kỳ hàng ngày + trôi dần + tiếng ồn temp_base = 3,5 temp_daily = 1,2 * np.sin(2 * np.pi * giờ / 24) temp_drift = 0,003 * giờ temp_noise = np.random.normal(0, 0,3, dấu chấm) nhiệt độ = temp_base + temp_daily + temp_drift + temp_noise # Độ ẩm (%): tỉ lệ nghịch với nhiệt độ + tiếng ồn độ ẩm = 78 - 2,1 * (nhiệt độ - temp_base) + np.random.normal(0, 1.2, chu kỳ) # Công suất tiêu thụ (kW): cao điểm trong giờ làm việc, cao hơn vào các ngày trong tuần ngày_of_week = chỉ mục.dayofweek business_hours = ((index.hour >= 8) & (index.hour = 5, 0,6, 1,0) sức mạnh = ( 42,0 + 18,0 * giờ làm việc * yếu tố cuối tuần + np.random.normal(0, 2.1, dấu chấm) ) df = pd.DataFrame({ "nhiệt độ_c": np.round(nhiệt độ, 3), "độ ẩm_pct": np.round(độ ẩm, 2), "power_kw": np.round(power, 2), }, chỉ mục=chỉ mục) df.index.name = "dấu thời gian" print(df.head(8)) print(f"\nHình dạng: {df.shape}") Đầu ra: nhiệt độ_c độ ẩm_pct công suất_kw dấu thời gian 2024-03-01 00:00:00 3.649 77.39 40.27 2024-03-01 01:00:00 3.772 76.52 41.33 2024-03-01 02:00:00 4.300 75.25 42.87 2024-03-01 03:00:00 4.814 74.26 40.82 2024-03-01 04:00:00 4.481 75.85 40.27 2024-03-01 05:00:00 4.604 76.09 42.51 2024-03-01 06:00:00 5.192 74.78 42.51 2024-03-01 07:00:00 4.910 76.03 40.94 Hình dạng: (168, 3) Hiện tại chúng tôi có 168 kết quả đọc hàng giờ trên ba kênh cảm biến. Bây giờ hãy xây dựng các tính năng. # 1. Tạo tính năng Lag với islice Đặc điểm độ trễ là đặc điểm chuỗi thời gian cơ bản nhất: giá trị của một biến tại một số bước cố định trong quá khứ. Ví dụ: mỗi giá trị từ 1 bước trước, 6 bước trước hoặc 24 bước trước có thể nắm bắt các mẫu riêng biệt như biến động ngắn hạn, hành vi lặp lại trong khoảng thời gian và xu hướng hoặc tính thời vụ dài hạn hơn. Hãy xây dựng các tính năng độ trễ cho tập dữ liệu mẫu của chúng tôi bằng cách sử dụng islice: cảm biến_readings = df["nhiệt độ_c"].tolist() lag_offsets = [1, 6, 12, 24] lag_features = {} về độ trễ trong lag_offsets: lag = list(itertools.islice(sensor_readings, 0, len(sensor_readings) - lag)) # Đệm phần đầu bằng Không để duy trì căn chỉnh chỉ mục lag_features[f"temp_lag_{lag}h"] = [Không] * lag + lag lag_df = pd.DataFrame(lag_features, index=df.index) lag_df["nhiệt độ_c"] = df["nhiệt độ_c"] print(lag_df.iloc[24:30]) Đầu ra: temp_lag_1h temp_lag_6h temp_lag_12h temp_lag_24h \ dấu thời gian 2024-03-02 00:00:00 2.831 2.082 3.609 3.649 2024-03-02 01:00:00 3.409 1.974 2.654 3.772 2024-03-02 02:00:00 3.919 2.960 2.425 4.300 2024-03-02 03:00:00 3.833 2.647 2.528 4.814 2024-03-02 04:00:00 4.542 2.986 2.205 4.481 2024-03-02 05:00:00 4.443 2.831 2.486 4.604 nhiệt độ_c dấu thời gian 2024-03-02 00:00:00 3.409 2024-03-02 01:00:00 3.919 2024-03-02 02:00:00 3.833 2024-03-02 03:00:00 4.542 2024-03-02 04:00:00 4.443 2024-03-02 05:00:00 4.659 islice(sensor_readings, 0, len - lag) trích xuất chuỗi được dịch ngược theo các bước trễ mà không tạo bản sao của danh sách đầy đủ. Phần đệm Không có ở phía trước giữ cho mọi tính năng trễ được căn chỉnh với chỉ mục gốc. Điều này quan trọng khi sau này bạn bỏ NaN để đào tạo mô hình. #2. Xây dựng tính năng Rolling Window bằng islice và tích lũy Một giá trị độ trễ duy nhất cho bạn biết cảm biến đã đọc được gì tại một thời điểm trong quá khứ. Số liệu thống kê luân phiên cho bạn biết cảm biến đã hoạt động như thế nào trong một khoảng thời gian, điều này thường hữu ích hơn nhiều. số đọc = df["nhiệt độ_c"].tolist() window_size = 6#Cửa sổ cuốn 6 tiếng cán_features = [] cho i trong phạm vi(len(đọc)): nếu tôi Đầu ra: lăn_mean_6h lăn_std_6h lăn_min_6h \ dấu thời gian 2024-03-01 06:00:00 4.2700 0.4256 3.649 2024-03-01 07:00:00 4.5272 0.4386 3.772 2024-03-01 08:00:00 4.7168 0.2929 4.300 2024-03-01 09:00:00 4.7372 0.2662 4.422 2024-03-01 10:00:00 4.6912 0.2728 4.422 2024-03-01 11:00:00 4.6095 0.3769 3.991 nhiệt độ lăn_max_6h

Nguồn tin: KDnuggets — Tác giả: Bala Priya C. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.