
Mô phỏng dữ liệu chuỗi thời gian cảm biến IoT trong một năm bằng Mimesis
Trong hướng dẫn này, bạn sẽ tìm hiểu quy trình tạo dữ liệu nhiệt độ hàng ngày trong một năm, mô phỏng đường cong theo mùa giống như thực tế — cùng với siêu dữ liệu (metadata) cấp thiết bị và sẵn sàng xây dựng dựa trên các khuôn khổ mã nguồn mở.
Giả lập dữ liệu chuỗi thời gian cảm biến IoT trong một năm với Mimesis - KDnuggets
Blog
Bài viết hàng đầu
Giới thiệu
Chủ đề
AI
Tư vấ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
Tập dữ liệu
Sự kiện
Tài nguyên
Tóm tắt kiến thức
Đề xuất
Báo cáo kỹ thuật
Quảng cáo
Tham gia Bản tin
Giả lập dữ liệu chuỗi thời gian cảm biến IoT trong một năm với Mimesis
Trong hướng dẫn này, bạn sẽ tìm hiểu quy trình tạo dữ liệu nhiệt độ hàng ngày trong một năm, mô phỏng đường cong theo mùa trông giống thật — tất cả cùng với siêu dữ liệu cấp thiết bị và sẵn sàng xây dựng dựa trên các framework mã nguồn mở.
Bởi Iván Palomares Carrascosa, Chuyên gia nội dung kỹ thuật của KDnuggets vào ngày 1/6/2026 trong Khoa học dữ liệu
# Giới thiệu
Việc giả lập dữ liệu cảm biến Internet vạn vật (IoT) mà nếu không sẽ khó thu thập ở quy mô lớn có thể là một phương pháp có giá trị để tạo điều kiện thuận lợi cho các phân tích, dự án và nghiên cứu thử nghiệm. Tuy nhiên, điều này đòi hỏi nhiều hơn là chỉ tạo ra các giá trị ngẫu nhiên: nó cần một dòng thời gian theo thứ tự, siêu dữ liệu thiết bị và nhu cầu phản ánh các biến động hoặc mô hình môi trường tự nhiên như tính thời vụ. Mimesis là một công cụ mã nguồn mở tuyệt vời để tạo dữ liệu giả, trong khi một chút toán học có thể được tích hợp vào một giải pháp dựa trên mã để xử lý vấn đề sau: bài viết này sẽ chỉ ra cách thực hiện.
Thông qua hướng dẫn từng bước dưới đây, tôi sẽ hướng dẫn bạn quy trình tạo dữ liệu nhiệt độ hàng ngày trong một năm, mô phỏng đường cong theo mùa trông giống thật — tất cả cùng với siêu dữ liệu cấp thiết bị và sẵn sàng xây dựng dựa trên các framework mã nguồn mở.
# Hướng dẫn từng bước
Chúng ta sẽ dựa vào ba thư viện Python chính để tạo tập hợp dữ liệu cảm biến IoT quanh năm của mình: mimesis để tạo dữ liệu tổng hợp, pandas để xử lý cấu trúc chuỗi thời gian và NumPy để thực hiện một số phép toán, giúp chúng ta mô phỏng các mô hình theo mùa.
Lưu ý rằng các tập dữ liệu chuỗi thời gian IoT trong thế giới thực thường gắn liền với một thiết bị cụ thể. Cách để mô phỏng điều này, với sự hỗ trợ của Mimesis, là sử dụng lớp nhà cung cấp Generic và tạo một hồ sơ thiết bị phần cứng thực tế: "cảm biến hư cấu" của chúng ta, có thể nói như vậy. Điều này được thực hiện trước khi tạo các dữ liệu đọc hàng ngày thực tế:
import pandas as pd
import numpy as np
from mimesis import Generic
from mimesis.locales import Locale
# Khởi tạo một nhà cung cấp chung cho ngôn ngữ tiếng Anh
g = Generic(locale=Locale.EN, seed=101)
# Tạo siêu dữ liệu tĩnh cho thiết bị IoT giả của chúng ta
device_profile = {
'device_id': g.cryptographic.uuid(),
'location': g.address.city(),
'firmware_version': g.development.version(),
'ip_address': g.internet.ip_v4()
}
print(f"Theo dõi thiết bị: {device_profile['device_id']} đặt tại {device_profile['location']}")
Lưu ý rằng device_profile là một từ điển chứa siêu dữ liệu cảm biến hư cấu của chúng ta: mã định danh, vị trí, phiên bản firmware và địa chỉ IP. Nó sẽ trông như sau:
Theo dõi thiết bị: e88b7591-31db-4e32-98dc-b35f94c662cd đặt tại Paragould
Trước khi tạo chuỗi thời gian, chúng ta sẽ định nghĩa một phương trình để mô phỏng mô hình thời tiết theo mùa, phản ánh nhiệt độ trong suốt một năm. Các hàm lượng giác như hàm sin rất phù hợp để phản ánh kiểu mô hình quanh năm này, trông giống như một sóng hình sin, do đó phương trình của chúng ta sẽ dựa trên một hàm như vậy:
\[
T(t) = T_{\text{base}} + A \cdot \sin\left(\frac{2\pi (t - \phi)}{365}\right) + \epsilon
\]
Trong đó, \(T(t)\) là chỉ số nhiệt độ vào ngày \(t\) trong năm, từ 1 đến 365. Các biến còn lại là thành phần của một sóng hình sin, và quan trọng là, \(\epsilon\) là nhiễu ngẫu nhiên được đưa vào bằng cách sử dụng Mimesis: nếu không có \(\epsilon\), chúng ta sẽ có một sóng hình sin hoàn hảo, trơn tru, điều này không thực tế, vì nhiệt độ trong thế giới thực có những biến động ngắn hạn.
Tiếp theo, chúng ta lặp lại trong suốt cả năm, từng ngày, để tạo ra dòng thời gian hàng ngày. pandas sẽ điều khiển quá trình tạo dữ liệu, trong khi mimesis.numeric sẽ được sử dụng để đưa vào không chỉ nhiễu môi trường đã nói ở trên, mà còn cả độ trễ mạng thực tế: một khía cạnh phổ biến trong các thiết bị IoT. Tất cả những điều này được thêm vào phương trình cơ sở toán học đã định nghĩa trước đó. Vai trò của NumPy là áp dụng hàm sin như một phần của quá trình tạo.
# 1. Thiết lập các hằng số toán học để mô phỏng nhiệt độ hàng ngày
T_base = 15.0 # Nhiệt độ cơ sở tính bằng độ C
A = 12.0 # Biến động 12 độ lên/xuống trong suốt cả năm
phase_shift = 80 # Dịch chuyển sóng hình sin để đỉnh rơi vào mùa hè
# 2. Tạo chuỗi thời gian 365 ngày bắt đầu từ ngày 1/1/2026
dates = pd.date_range(start='2026-01-01', periods=365, freq='D')
readings = []
# 3. Lặp qua từng ngày và tính toán các chỉ số
for day_index, current_date in enumerate(dates):
# Tính toán đường cơ sở của đường cong theo mùa cho ngày cụ thể này
seasonal_temp = T_base + A * np.sin(2 * np.pi * (day_index - phase_shift) / 365)
# Sử dụng Mimesis để đưa vào biến động/nhiễu phần cứng ngẫu nhiên (ví dụ: -2.0 đến 2.0 độ)
sensor_noise = g.numeric.float_number(start=-2.0, end=2.0, precision=2)
# Tính toán nhiệt độ cuối cùng được ghi lại
final_temp = round(seasonal_temp + sensor_noise, 2)
# Biên soạn bản ghi hàng ngày, kết hợp siêu dữ liệu tĩnh với tạo Mimesis động
readings.append({
'timestamp': current_date,
'device_id': device_profile['device_id'],
'location': device_profile['location'],
'temperature_c': final_temp,
'latency_ms': g.numeric.integer_number(start=12, end=145) # Mô phỏng biến động cường độ/độ trễ kết nối mạng mỗi ngày
})
# Chuyển đổi thành DataFrame để phân tích
df = pd.DataFrame(readings)
Như quý vị có thể quan sát,
Nguồn tin: KDnuggets — Tác giả: Iván Palomares Carrascosa. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.