Giới thiệu
Phân tích hiệu suất tài chính của một công ty theo thời gian là nhiệm vụ phổ biến cho các nhà đầu tư và nhà phân tích. Báo cáo thường niên 10-K của công ty là nguồn thông tin chính cho việc này, nhưng dữ liệu thường được trình bày trong các bảng lớn, khó so sánh giữa các năm.
Hướng dẫn này sẽ chỉ cho bạn cách truy cập chương trình vào các hồ sơ SEC để trích xuất và trực quan hóa dữ liệu tài chính. Bằng cách sử dụng Apple Inc. làm ví dụ, bạn sẽ thấy cách lấy nhiều năm hồ sơ 10-K, trích xuất các bảng hiệu suất tài chính, và tạo biểu đồ cột chồng để so sánh doanh thu từ các danh mục sản phẩm và dịch vụ khác nhau.
Nội dung hướng dẫn
- Truy xuất siêu dữ liệu cho các hồ sơ 10-K của một công ty cụ thể.
- Trích xuất nội dung của một mục cụ thể từ một hồ sơ.
- Phân tích các bảng HTML thành định dạng có cấu trúc bằng pandas.
- Làm sạch và chuẩn bị dữ liệu cho trực quan hóa.
- Tạo biểu đồ cột chồng để hiển thị xu hướng tài chính.
Yêu cầu
- Python 3.x với
pandasvàmatplotlib. - Thư viện
api-bricks-sec-api-rest. - Khóa FinFeedAPI của bạn.
1. Cài đặt Môi trường
Đầu tiên, cài đặt thư viện khách hàng FinFeedAPI.
bash
pip install api-bricks-sec-api-rest
Tiếp theo, nhập các thư viện cần thiết và cấu hình khách hàng API với khóa của bạn.
python
# Nhập các thư viện cần thiết
import pandas as pd
import matplotlib.pyplot as plt
import api_bricks_sec_api_rest
# --- Cấu hình API ---
API_KEY = "YOUR_API_KEY_HERE" # <--- THAY THẾ BẰNG KHÓA THỰC CỦA BẠN!
api_client_config = api_bricks_sec_api_rest.Configuration()
api_client_config.api_key['Authorization'] = API_KEY
api_client = api_bricks_sec_api_rest.ApiClient(configuration=api_client_config)
# --- Cấu hình Biểu đồ ---
plt.style.use('seaborn-v0_8-darkgrid')
plt.rcParams['figure.figsize'] = (14, 7)
2. Truy xuất Siêu dữ liệu Hồ sơ
Bắt đầu bằng cách lấy siêu dữ liệu cho các hồ sơ 10-K của Apple trong khoảng thời gian mong muốn. Điều này sẽ cung cấp cho bạn accession_number cho từng hồ sơ, cần thiết để trích xuất nội dung.
python
# Khởi tạo khách hàng API cho siêu dữ liệu hồ sơ
filing_metadata_api = api_bricks_sec_api_rest.FilingMetadataApi(api_client)
# Lấy siêu dữ liệu cho các hồ sơ 10-K của Apple (CIK: 320193)
filings_data = filing_metadata_api.v1_filings_get(
filling_date_start="2020-01-01",
filling_date_end="2025-05-07",
form_type="10-K",
cik=320193
)
# Tạo và sắp xếp DataFrame với siêu dữ liệu hồ sơ
df_filings = pd.DataFrame.from_records(
[vars(x) for x in filings_data],
columns=['accession_number', 'filing_date']
)
df_filings = df_filings.sort_values(by='filing_date', ascending=True)
3. Trích xuất Nội dung từ Hồ sơ
Với accession_number của một hồ sơ cụ thể, bạn có thể trích xuất nội dung của Mục 7, "Thảo luận và Phân tích của Ban Quản lý về Tình hình Tài chính và Kết quả Hoạt động". Phần này thường chứa các bảng với dữ liệu hiệu suất tài chính.
python
# Khởi tạo khách hàng API để trích xuất nội dung
content_extraction_api = api_bricks_sec_api_rest.ContentExtractionApi(api_client)
# Lấy số đăng ký của hồ sơ gần nhất
latest_accession_number = df_filings.iloc[-1]['accession_number']
# Trích xuất nội dung HTML của Mục 7
item7_html = content_extraction_api.v1_extractor_item_get(
accession_number=latest_accession_number,
item_number="7",
type="html"
)
4. Đọc và Làm sạch Các Bảng Tài chính
Nội dung trích xuất là định dạng HTML. Bạn có thể sử dụng hàm read_html của pandas để tự động phân tích tất cả các bảng từ HTML này thành một danh sách DataFrames.
python
# Đọc tất cả các bảng từ chuỗi HTML
tables = pd.read_html(item7_html)
# Bảng thứ hai thường là báo cáo tài chính chính
financial_statements_raw = tables[1]
# Làm sạch DataFrame bằng cách loại bỏ các cột không cần thiết và các hàng trống
df_cleaned = financial_statements_raw.drop(financial_statements_raw.columns[[0, 1]], axis=1)
mask = (df_cleaned.iloc[1:, :].isna()).all(axis=0)
financial_statements = df_cleaned.drop(df_cleaned.columns[mask], axis=1).fillna('')
5. Chuẩn bị Dữ liệu cho Trực quan hóa
Dữ liệu cần được sắp xếp lại để phù hợp cho một biểu đồ cột chồng. Điều này bao gồm việc chọn các hàng và cột đúng và sau đó chuyển vị DataFrame để các năm trở thành chỉ số.
python
# Chọn các hàng và cột có dữ liệu doanh thu
revenue_data = financial_statements.iloc[[1,2,3,4,5,6], [0,2,8,14]]
# Đặt hàng đầu tiên làm tiêu đề
revenue_data.columns = revenue_data.iloc[0]
revenue_data = revenue_data[1:]
# Đặt các danh mục sản phẩm/dịch vụ làm chỉ số
revenue_data = revenue_data.set_index(revenue_data.columns[0])
# Chuyển vị DataFrame để có các năm làm chỉ số
df_plot = revenue_data.transpose()
6. Trực quan hóa Hiệu suất Tài chính
Cuối cùng, tạo một biểu đồ cột chồng để trực quan hóa dữ liệu. Biểu đồ này sẽ hiển thị tổng doanh thu ròng cho mỗi năm, được phân chia theo các danh mục sản phẩm và dịch vụ.
python
import matplotlib.ticker as ticker
# Tạo biểu đồ cột chồng
ax = df_plot.plot(kind='bar', stacked=True, figsize=(10, 7))
# Đặt tiêu đề và nhãn
ax.set_title("Apple - Hiệu suất Sản phẩm và Dịch vụ", fontsize=16, fontweight='bold')
ax.set_xlabel('Năm', fontsize=12)
ax.set_ylabel('Doanh thu Ròng Tổng (triệu USD)', fontsize=12)
plt.xticks(rotation=0)
# Thêm chú thích
ax.legend(title='Danh mục Sản phẩm/Dịch vụ', loc='upper left')
# Thêm giá trị cho từng đoạn thanh
for container in ax.containers:
ax.bar_label(container, labels=[f'{v:,.0f}' for v in container.datavalues], label_type='center', fontsize=8, color='white')
plt.tight_layout()
plt.show()
Các Thực Hành Tốt Nhất
- Luôn kiểm tra sự chính xác của dữ liệu sau khi trích xuất.
- Sử dụng các thư viện như
matplotlibđể tạo các biểu đồ trực quan dễ hiểu. - Cập nhật mã khi có thay đổi trong API hoặc cấu trúc hồ sơ.
Các Cạm Bẫy Thường Gặp
- Không kiểm tra lỗi trong quá trình truy xuất dữ liệu có thể dẫn đến việc bỏ lỡ thông tin quan trọng.
- Không làm sạch dữ liệu đúng cách có thể gây ra những hiểu lầm trong phân tích.
Mẹo Hiệu Suất
- Tối ưu hóa mã để giảm thời gian thực thi khi làm việc với dữ liệu lớn.
- Sử dụng
pandashiệu quả để xử lý và phân tích dữ liệu.
Kết luận
Hướng dẫn này đã chỉ ra quy trình hoàn chỉnh để biến dữ liệu thô từ một hồ sơ SEC thành một trực quan hóa rõ ràng về hiệu suất tài chính của một công ty. Bạn có thể điều chỉnh quy trình này để phân tích các công ty khác, các chỉ số tài chính khác, hoặc các phần khác của các hồ sơ. Bằng cách tự động hóa quá trình trích xuất và trực quan hóa dữ liệu, bạn có thể phân tích các báo cáo tài chính hiệu quả hơn và nhận diện các xu hướng.
Câu hỏi thường gặp (FAQ)
1. Tôi cần những gì để bắt đầu?
Bạn cần Python 3.x, các thư viện pandas, matplotlib, và khóa API từ FinFeed.
2. Làm thế nào để xử lý lỗi khi trích xuất dữ liệu?
Luôn kiểm tra lỗi trả về từ API và xử lý chúng một cách thích hợp để đảm bảo rằng bạn có được dữ liệu chính xác.
3. Có thể áp dụng quy trình này cho các công ty khác không?
Có, bạn có thể áp dụng quy trình này cho bất kỳ công ty nào có hồ sơ SEC công khai.