DuckDB là gì? Hướng dẫn DuckDB Python phân tích dữ liệu chứng khoán

Mục lục
Bạn đang làm việc với dữ liệu chứng khoán và cảm thấy:
- Excel quá chậm khi xử lý file lớn?
- Pandas DataFrame linh hoạt nhưng cú pháp phức tạp, khó nhớ?
- Database thì mạnh mẽ nhưng thiết lập rườm rà?
DuckDB là gì?
DuckDB là gì?
Đã đến lúc bạn cần DuckDB - một thư viện Python giúp bạn chạy câu lệnh SQL trực tiếp trên Pandas DataFrame, CSV và nhiều định dạng khác với tốc độ đáng kinh ngạc. Hãy tạm biệt các cú pháp lọc và join phức tạp, DuckDB sẽ mang đến siêu năng lực mới cho công việc phân tích dữ liệu của bạn.
DuckDB giải quyết bài toán gì cho dân chứng khoán?
Trong lĩnh vực chứng khoán, tốc độ và khả năng xử lý dữ liệu lớn là yếu tố then chốt để đưa ra quyết định đầu tư kịp thời. DuckDB sinh ra để giải quyết những vấn đề sau:
- Nhà đầu tư cá nhân: Phân tích lịch sử giao dịch, tìm kiếm cơ hội đầu tư từ bộ lọc cổ phiếu phức tạp mà không cần mở Excel.
- Chuyên viên phân tích: Kết hợp dữ liệu từ nhiều nguồn (báo cáo tài chính, dữ liệu thị trường, tin tức) một cách nhanh chóng để tạo ra báo cáo chuyên sâu.
- Chuyên viên dữ liệu: Xây dựng các pipeline dữ liệu mạnh mẽ, tự động hóa quy trình ETL (trích xuất, chuyển đổi, tải) để phục vụ cho các mô hình phân tích và dự báo.
- Nhà giao dịch (quỹ, tự doanh, cá nhân): Backtest chiến lược giao dịch, tìm kiếm các mẫu hình (pattern) trên dữ liệu lịch sử với tốc độ cao.
Bảng so sánh DuckDB với Pandas và Excel

Tiêu chí | DuckDB | Pandas | Excel |
---|---|---|---|
Xử lý dữ liệu lớn | Rất tốt | Trung bình | Kém |
Cú pháp | SQL | Python | Giao diện |
Tích hợp Python | Có | Có | Không |
Hiệu năng | Cao | Trung bình | Thấp |
Tại sao nên chọn DuckDB thay vì Excel, Pandas hay Database thông thường?
- Excel: DuckDB vượt trội về tốc độ và khả năng xử lý dữ liệu lớn. Bạn có thể thực hiện các truy vấn phức tạp trên hàng triệu dòng dữ liệu chỉ tính bằng giây.
- Pandas: Cú pháp SQL của DuckDB quen thuộc với người có kinh nghiệm về cơ sở dữ liệu và dễ dùng AI tạo câu truy vấn dễ dàng, linh hoạt hơn Pandas trong nhiều trường hợp, đặc biệt khi bạn cần thực hiện các phép join, group by, window function.
- Database (SQL Server, PostgreSQL): DuckDB không yêu cầu cài đặt và cấu hình phức tạp (tương đồng SQLite nhưng vượt trội hơn ở nhiều yếu tố), bạn có thể sử dụng nó ngay lập tức trong môi trường Python của mình.
Sức mạnh của DuckDB: SQL trên mọi thứ
DuckDB Python cho phép bạn truy vấn dữ liệu bằng SQL từ nhiều nguồn khác nhau: Pandas DataFrame, CSV, Parquet, HTTP, SQLite. DuckDB tối ưu cho phân tích dữ liệu chứng khoán, ETL, backtest, lọc cổ phiếu.

DuckDB cho phép bạn truy vấn dữ liệu bằng SQL từ nhiều nguồn khác nhau:
- Pandas DataFrame: Phân tích dữ liệu đã có trong DataFrame một cách dễ dàng.
- CSV/Parquet files: Đọc và truy vấn trực tiếp các file dữ liệu lớn mà không cần tải toàn bộ vào bộ nhớ.
- HTTP Endpoints: Truy cập dữ liệu từ các nguồn trực tuyến thông qua HTTP.
- SQLite database: Kết hợp dữ liệu từ DuckDB với SQLite.
Điều này giúp bạn linh hoạt hơn trong việc làm việc với dữ liệu, không còn bị giới hạn bởi định dạng hay nguồn gốc của dữ liệu.
DuckDB tutorial: Hướng dẫn DuckDB Python phân tích dữ liệu chứng khoán
Trước tiên, bạn sẽ thấy DuckDB cực kỳ dễ cài đặt và sử dụng, không cần cấu hình phức tạp như các hệ quản trị cơ sở dữ liệu truyền thống. Chỉ một dòng lệnh là bạn đã sẵn sàng bắt đầu phân tích dữ liệu lớn với DuckDB Python.
Bước 1: Cài đặt DuckDB Python
Shellpip install duckdb
Điểm mạnh của DuckDB là khả năng kết nối trực tiếp với Pandas DataFrame, giúp bạn tận dụng dữ liệu đã có mà không cần chuyển đổi định dạng. Điều này giúp tiết kiệm thời gian và tối ưu hiệu năng xử lý dữ liệu.
Bước 2: Kết nối DuckDB với DataFrame
Pythonimport duckdb import pandas as pd # Tạo DataFrame mẫu data = {'ticker': ['FPT', 'VNM', 'HPG'], 'price': [100, 120, 30], 'volume': [1000, 2000, 1500]} df = pd.DataFrame(data) # Kết nối DuckDB với DataFrame con = duckdb.connect(database=':memory:', read_only=False)
DuckDB cho phép bạn sử dụng cú pháp SQL quen thuộc để truy vấn, lọc, phân tích dữ liệu ngay trên DataFrame. Bạn không cần phải nhớ các hàm phức tạp của Pandas, chỉ cần viết SQL như trên database chuyên nghiệp.
Bước 3: Truy vấn dữ liệu với DuckDB SQL functions
Python# Truy vấn SQL trực tiếp trên DataFrame 'df' result = con.execute("SELECT ticker, price FROM df WHERE volume > 1500").df() # In kết quả print(result) con.close()
Chỉ với vài dòng code đơn giản, bạn đã có thể truy vấn dữ liệu từ DataFrame bằng SQL. Đây là lý do DuckDB được cộng đồng data analyst và developer yêu thích: đơn giản, mạnh mẽ, quen thuộc và cực kỳ nhanh.
DuckDB đặc biệt phù hợp cho các bài toán tài chính, nơi bạn cần xử lý dữ liệu lịch sử giao dịch, backtest chiến lược, hoặc phân tích cổ phiếu với tốc độ cao. Dưới đây là ví dụ thực tế sử dụng DuckDB Python cùng dữ liệu chứng khoán.
DuckDB cho tài chính: Phân tích dữ liệu chứng khoán với DuckDB Python
Với DuckDB, bạn có thể dễ dàng kết hợp với các thư viện Python khác như vnstock để lấy dữ liệu chứng khoán, sau đó phân tích trực tiếp bằng SQL mà không cần chuyển đổi qua nhiều bước trung gian.
Chuẩn bị dữ liệu
Để thực hành, chúng ta sẽ sử dụng thư viện vnstock
để tải dữ liệu chứng khoán.
Shellpip install vnstock
Pythonimport duckdb import pandas as pd from vnstock import Quote quote = Quote(symbol='VCI', source='VCI') df = quote.history(start='2020-01-01', end='2024-05-25') # Kết nối DuckDB con = duckdb.connect(database=':memory:')
Một trong những ứng dụng mạnh mẽ của DuckDB là tính toán các chỉ số tài chính phức tạp chỉ với một truy vấn SQL. Ví dụ dưới đây cho thấy cách bạn có thể tính lợi nhuận trung bình theo tháng cực kỳ nhanh chóng.
Tính toán lợi nhuận trung bình theo tháng
Pythonresult = con.execute(""" SELECT strftime(time, '%Y-%m') AS month, AVG((close - open) / open) AS avg_monthly_return FROM df GROUP BY month ORDER BY month """).df() print(result)
Bạn cũng có thể dễ dàng lọc ra các ngày tăng giá đột biến, phục vụ cho việc phát hiện cơ hội đầu tư hoặc kiểm tra hiệu quả chiến lược giao dịch. DuckDB giúp bạn thực hiện các phép lọc, sắp xếp, tính toán phức tạp chỉ với một truy vấn SQL duy nhất.
Tìm kiếm các ngày tăng giá đột biến
Pythonresult = con.execute(""" SELECT time, (close - open) / open AS daily_return FROM df WHERE (close - open) / open > 0.05 -- Lọc các ngày tăng trên 5% ORDER BY daily_return DESC """).df() print(result)
Mở rộng khả năng với DuckDB:
Đọc dữ liệu trực tiếp từ file CSV
Trước tiên hãy tải file csv ví dụ về để thực hiện theo hướng dẫn
Pythonimport requests url = 'https://raw.githubusercontent.com/vnstock-official/vnstock_market_data/refs/heads/main/historical_price/all_time/ACB.csv' response = requests.get(url) with open('ACB.csv', 'wb') as f: f.write(response.content)
Đọc file CSV với DuckDB:
Pythonimport duckdb # Đọc file CSV với DuckDB không cần tới Pandas con = duckdb.connect(database=':memory:') my_table_from_csv = con.execute("SELECT * FROM read_csv_auto('ACB.csv')").df() print(my_table_from_csv) con.close()
Truy vấn dữ liệu từ nhiều bảng (Pandas DataFrame và CSV)
Python# Giả sử bạn đã có DataFrame df và đã tải file ACB.csv về máy query = """ SELECT * FROM df t1 JOIN read_csv_auto('ACB.csv') t2 ON t1.time = t2.date -- Giả sử join qua cột ngày """ combined_result = con.execute(query).df() print(combined_result) con.close()
Câu hỏi thường gặp về DuckDB
DuckDB có miễn phí không?
Có, DuckDB là mã nguồn mở và miễn phí.
DuckDB dùng cho dữ liệu lớn được không?
Có, DuckDB tối ưu cho phân tích dữ liệu hàng triệu dòng.
DuckDB có hỗ trợ cloud không?
DuckDB có thể dùng trên cloud thông qua các dịch vụ lưu trữ file như S3, GCS, Azure Blob.
Cách cài đặt DuckDB trên Windows/Mac/Linux?
Chỉ cần
pip install duckdb
cho Python.
Lời kết: Sẵn sàng để bứt phá với DuckDB?
DuckDB không chỉ là một công cụ, mà là một tư duy mới để làm việc với dữ liệu. Với DuckDB, bạn có thể:
- Tối ưu hóa quy trình phân tích, tiết kiệm thời gian và công sức.
- Khai thác tối đa tiềm năng của dữ liệu chứng khoán.
- Nâng cao kỹ năng và tạo ra những giá trị khác biệt.
Hãy bắt đầu khám phá sức mạnh của DuckDB ngay hôm nay và trở thành một chuyên gia phân tích dữ liệu tài chính hàng đầu.
Bạn có thể xem thêm tài liệu hướng dẫn của DuckDB tại đây. Chúc các bạn thành công!
Bình luận