Phần 13: Analyzing Time Series Data phần 1 – Lập trình AI bằng Python

Dự đoán tiếp theo trong 1 chuỗi đầu vào nhất định là 1 khái niệm quan trọng khác trong học máy. Bài này cung cấp cho các bạn lời giải thích chi tiết về phân tích dữ liệu chuỗi thời gian.
Table of Contents
1. Giới thiệu :
Dữ liệu chuỗi thời gian nghĩa là dữ liệu nằm trong 1 chuỗi các khoảng giờ giấc cụ thể. Nếu như ta muốn xây dựng dự đoán trình tự trong học máy, thì ta phải xử lý dữ liệu tuần tự và thời gian. Dữ liệu chuỗi là 1 bản tóm tắt của dữ liệu tuần tự. Thứ tự dữ liệu là 1 tính năng quan trọng của dữ liệu tuần tự.
2. Khái niệm căn bản về Sequence Analysis hay Time Series Analysis
Sequence Analysis hay Time Series Analysis là dự đoán tiếp theo trong 1 chuỗi đầu vào nhất định dựa trên các gì đã quan sát trước đây. Dự đoán có thể là bất kỳ cái gì có thể xảy ra tiếp theo: 1 biểu tượng, 1 con số, thời tiết ngày hôm sau, thuật ngữ tiếp theo trong bài phát biểu, v.v. Phân tích trình tự có thể rất có ích trong những ứng dụng như phân tích thị trường chứng khoán, dự báo thời tiết và đề xuất sản phẩm.
Ví dụ :
Hãy xem xét ví dụ sau để hiểu dự đoán chuỗi. Tại đây A, B, C, D là những giá trị đã cho và bạn cần dự đoán giá trị E bằng Mô hình dự đoán trình tự.
3. Cài đặt các bundle quan trọng :
Để phân tích dữ liệu chuỗi thời gian bằng Python, ta cần cài đặt các bundle sau:
a. Pandas
Pandas 1 thư viện mã nguồn mở được cấp phép BSD cung cấp những công cụ phân tích dữ liệu và hiệu suất cao, dễ dàng sử dụng cấu trúc dữ liệu cho Python. Bạn sẽ có thể cài đặt Pandas như dưới đây :
pip set up pandas
Nếu như bạn sử dụng conda thì cài đặt với câu lệnh sau :
conda set up -c anaconda pandas
b. hmmlearn
Là 1 thư viện mã nguồn mở được cấp phép BSD gồm các thuật toán và mô hình đơn giản để học Mô hình Markov ẩn (HMM) trong Python.Cài đặt hmmlearn với câu lệnh sau :
pip set up hmmlearn
Nếu như bạn sử dụng conda thì cài đặt với câu lệnh sau :
conda set up -c omnia hmmlearn
c. PyStruct
Là 1 thư viện dự đoán và học tập có cấu trúc. Các thuật toán học tập được bắt đầu trong PyStruct có tên như trường ngẫu nhiên có một điều kiện (CRF), Mạng ngẫu nhiên Markov Margin tối đa (M3N) hay máy vectơ hỗ trợ cấu trúc. Cài đặt với câu lệnh sau :
pip set up pystruct
d. CVXOPT :
Được dùng để tối ưu lồi dựa vào ngôn ngữ lập trình Python. Nó cũng chính là 1 gói phần mềm miễn phí
pip set up cvxopt
anaconda:
conda set up -c anaconda cvdoxt
4. Pandas : Xử lý, cắt và trích xuất thống kê từ dữ liệu chuỗi thời gian
Pandas : là 1 công cụ rất có ích nếu như bạn cần làm việc với dữ liệu chuỗi thời gian. Với sự giúp đỡ của Pandas, bạn sẽ có thể thực hiện những việc sau
- Tạo phạm vi ngày bằng bundle pd.date_range
- Lập index pandas với ngày tháng bằng cách sử dụng gói pd.Series
- Thực hiện lấy mẫu lại bằng cách sử dụng gói ts.resample
- Thay đổi tần số
Ví dụ sau cho ta thấy bạn xử lý và cắt dữ liệu chuỗi thời gian bằng cách sử dụng Pandas. Chú ý rằng tại đây ta đang dùng dữ liệu Dao động Bắc Cực mỗi tháng, dữ liệu này có thể được download từ (*1*)và có thể được chuyển đổi sang định dạng văn bản .
Xử lý dữ liệu time sequence :
Để xử lý dữ liệu chuỗi thời gian, bạn phải thực hiện những bước sau:
import các bundle cần thiết :
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
xác định 1 hàm sẽ đọc dữ liệu từ file đầu vào, như được hiển thị trong đoạn mã sau đây:
def read_data(input_file):
input_data = np.loadtxt(input_file, delimiter = None)
Hiện tại, hãy chuyển đổi dữ liệu này thành chuỗi thời gian. Đối với điều đó, hãy tạo phạm vi ngày trong chuỗi thời gian . Trong ví dụ này,ta giữ 1 tháng làm tần suất dữ liệu. File của ta có dữ liệu khởi đầu từ tháng 1 năm 1950.
dates = pd.date_range('1950-01', durations = input_data.form[0], freq = 'M')
Tạo dữ liệu chuỗi thời gian với sự giúp đỡ của Chuỗi Pandas, như được hiển thị phía dưới –
output = pd.Series(input_data[:, index], index = dates)
return output
if __name__=='__main__':
Nhập link của file đầu vào như dưới đây :
input_file = "/Users/admin/AO.txt"
chuyển đổi cột sang định dạng thời gian
timeseries = read_data(input_file)
Cuối cùng, plot và visualize dữ liệu :
plt.determine()
timeseries.plot()
plt.present()
plots hiển thị như dưới đây :
Cắt dữ liệu time sequence :
Cắt chỉ liên quan tới việc truy xuất những phần của dữ liệu chuỗi thời gian. Là 1 phần của ví dụ, mình chỉ cắt dữ liệu từ năm 1980 tới năm 1990. Hãy quan sát đoạn mã sau thực hiện tác vụ này
timeseries['1980':'1990'].plot()
<matplotlib.axes._subplots.AxesSubplot at 0xa0e4b00>
plt.present()
Khi bạn chạy đoạn mã để cắt dữ liệu chuỗi thời gian, bạn sẽ có thể quan sát biểu đồ sau như được hiển thị trong hình ảnh tại đây: