Vnstock Logo

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

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ì?

DuckDB là hệ quản trị cơ sở dữ liệu quan hệ dạng nhúng (SQL OLAP), tối ưu cho truy vấn dữ liệu lớn ngay trong môi trường Python, R hoặc C++. DuckDB nổi bật với tốc độ xử lý, cú pháp SQL quen thuộc và khả năng tích hợp trực tiếp với Pandas, CSV, Parquet. DuckDB Python giúp bạn phân tích dữ liệu chứng khoán siêu tốc, backtest, lọc cổ phiếu hiệu quả.

Đã đế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

Blog image
So sánh DuckDB với Excel truyền thống và Pandas trong Python
Tiêu chíDuckDBPandasExcel
Xử lý dữ liệu lớnRất tốtTrung bìnhKém
Cú phápSQLPythonGiao diện
Tích hợp PythonKhông
Hiệu năngCaoTrung bìnhThấ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.

Blog image
DuckDB trên mọi nguồn dữ liệu phổ biến

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

Shell
pip 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

Python
import 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.

Shell
pip install vnstock
Python
import 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

Python
result = 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

Python
result = 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

Python
import 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:

Python
import 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

Đang tải bình luận...