Python pandas là một thư viện mã nguồn mở được sử dụng để phân tích dữ liệu. Nó cho phép bạn thực hiện nhiều thao tác trên dữ liệu, bao gồm xử lý dữ liệu cá nhân hóa, phân tích thống kê, truy vấn dữ liệu và biến đổi nó. Trong bài viết này, chúng ta sẽ học cách làm việc với dữ liệu chuỗi thời gian bằng cách sử dụng pandas.
Bài viết sẽ được phân thành các phần sau:
- Pandas Series
- Pandas DataFrames
- Dữ liệu chuỗi thời gian
- Resampling
- Time Zone Handling
- Rolling Window Operations
1. Pandas Series
Pandas Series là một đối tượng mảng một chiều có nhãn. Nó giống như một danh sách hoặc một mảng, ngoại trừ rằng mỗi phần tử của nó được liên kết với một nhãn của nó. Sau đây là cách tạo một Pandas Series:
import pandas as pd
data = pd.Series([0.25, 0.5, 0.75, 1.0])
print(data)
Kết quả sẽ là:
Như bạn có thể thấy, Pandas Series không chỉ bao gồm các giá trị, mà còn bao gồm cả các nhãn index. Mặc dù index mặc định là một số nguyên liên tục từ 0, nhưng bạn có thể tùy chỉnh nó để sử dụng bất kỳ chuỗi hoặc đối tượng tương tự nào làm nhãn index.
data = pd.Series([0.25, 0.5, 0.75, 1.0], index=['a', 'b', 'c', 'd'])
print(data)
Kết quả sẽ là:
Bạn có thể truy cập các giá trị trong Pandas Series bằng cách sử dụng các nhãn index hoặc các chỉ số nguyên tương ứng:
print(data['b'])
Kết quả sẽ là:
Bạn cũng có thể sử dụng các phương thức Pandas Series để thực hiện các thao tác như phép chuyển đổi, cộng trừ, các toán tử logic, v.v.
print(data[data > 0.3])
Kết quả sẽ là:
2. Pandas DataFrames
Pandas DataFrame là một đối tượng dạng bảng với các hàng và cột có nhãn. Nó giống như một bảng tính hoặc một SQL table. Bạn có thể tạo DataFrame từ nhiều nguồn dữ liệu, bao gồm Pandas Series, bảng tính Excel, bảng từ tập tin CSV, v.v.
Sau đây là một ví dụ tạo DataFrame từ hai Pandas Series:
population_dict = {'California': 38332521,
'Texas': 26448193,
'New York': 19651127,
'Florida': 19552860,
'Illinois': 12882135}
area_dict = {'California': 423967,
'Texas': 695662,
'New York': 141297,
'Florida': 170312,
'Illinois': 149995}
population = pd.Series(population_dict)
area = pd.Series(area_dict)
states = pd.DataFrame({'population': population, 'area': area})
print(states)
Kết quả sẽ là:
3. Dữ liệu chuỗi thời gian
Trong Pandas, chuỗi thời gian được đại diện bằng Timestamp object. Đối tượng này bao gồm cả một giá trị thời gian và một số nanosecond chính xác đối với giá trị đó. Để tạo một Timestamp, bạn có thể sử dụng hàm pandas.to_datetime():
import pandas as pd
date = pd.to_datetime('2020-12-31')
print(date)
Kết quả sẽ là:
Bạn có thể sử dụng một chuỗi định dạng ngày để tạo một chuỗi các Timestamp:
dates = pd.to_datetime(['2020-12-31', '2021-01-01', '2021-01-02'])
print(dates)
Kết quả sẽ là:
Một số đối tượng Pandas chuyên dụng cho việc làm việc với dữ liệu chuỗi thời gian bao gồm:
– Timestamp: Tạo một Timestamp đại diện cho một giá trị thời gian cụ thể
– DateTimeIndex: Tạo một chuỗi các Timestamp tạo ra một đối tượng điều khiển thời gian làm cho Pandas hiểu được sự cố định của dữ liệu thời gian, như các giá trị phân biệt, các tách biệt thời gian, v.v.
– Period: Tạo một chu kỳ xác định một mốc thời gian cụ thể, chẳng hạn như một ngày hoặc tháng, sử dụng để thực hiện các thao tác chuỗi thời gian có định kì
4. Resampling
Resampling là kỹ thuật quan trọng trong phân tích dữ liệu chuỗi thời gian. Nó cho phép bạn tái tạo lại dữ liệu theo một quy tắc định kì hoặc không định kì. Thường thì resampling bao gồm hai loại:
- Upsampling: chèn dữ liệu vào trong chuỗi thời gian, theo cách hiệu quả nhất.
- Downsampling: tổng hợp dữ liệu từ chuỗi thời gian thành các cấp độ định kì hoặc không định kì tương tự.
Resampling có thể được thực hiện bằng cách sử dụng phương thức resample() hoặc asfreq() của đối tượng DataFrame.
Resample() sử dụng ngày đánh dấu thời gian làm index, thông qua đó nó tự động xác định lượng dữ liệu được đưa vào mỗi mẫu.
Asfreq() tương tự như resample(), nhưng nó sử dụng các giá trị có sẵn mà không quan tâm đến đơn vị thời gian.
Sau đây là một ví dụ minh họa về cách dùng resample() và có upsampling:
import numpy as np
import pandas as pd
index = pd.date_range('1/1/2000', periods=10, freq='D')
series = pd.Series(np.random.randint(0,10,size=(10)), index=index)
print('Original data:')
print(series)
upsampled = series.resample('6H').asfreq()
print('Upsampled data:')
print(upsampled)
Kết quả sẽ là:
5. Time Zone Handling
Trong phân tích dữ liệu chuỗi thời gian, time zone handling là một vấn đề phổ biến. Pandas hỗ trợ hầu hết các time zone trên thế giới thông qua các đối tượng pytz. Để sử dụng các time zone trong Pandas, bạn cần đầu tiên cài đặt pytz package.
!pip install pytz
Bạn có thể sử dụng hàm dt.tz_localize() hoặc dt.tz_convert() để thêm một timezone vào một chuỗi thời gian hoặc chuyển đổi giữa các timezone.
import numpy as np
import pandas as pd
import pytz
rng = pd.date_range('3/6/2012 00:00', periods=15, freq='D')
ts = pd.Series(np.random.randn(len(rng)), rng)
print(ts)
ts_utc = ts.tz_localize('UTC')
print(ts_utc)
ts_sydney = ts_utc.tz_convert('Australia/Sydney')
print(ts_sydney)
Sẽ có kết quả tương tự như sau:
6. Rolling Window Operations
Sử dụng rolling window là một cách tiếp cận thực tế trong phân tích dữ liệu chuỗi thời gian. Nó cho phép bạn tính tổng, trung bình, độ lệch chuẩn, v.v. của một khoảng thời gian đang chọn qua bộ dữ liệu. Pandas hỗ trợ tính toán này thông qua phương thức rolling() của đối tượng DataFrame.
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]})
rolling_df = df.rolling(3)
print(df)
print(rolling_df.mean())
Kết quả sẽ là:
Chúc mừng! Bây giờ bạn đã hiểu cách làm việc với dữ liệu chuỗi thời gian trong Pandas. Bạn có thể xem thêm tài liệu chính thức của Pandas để tìm hiểu thêm về các phương thức và công cụ mạnh mẽ khác cho phân tích dữ liệu.
Học bài tiếp theo: Trực quan hóa dữ liệu với Python Pandas
Bài trước: Reshaping Data với pandas: Học cách thay đổi cấu trúc và phân tích dữ liệu dễ dàng hơn
Quay về trang chủ của khoá học: Python Pandas – Thao tác và phân tích dữ liệu

