Sức mạnh thực sự của Python trong phân tích kinh tế không nằm ở bản thân ngôn ngữ cốt lõi, mà ở hệ sinh thái các thư viện mã nguồn mở chuyên dụng. Hệ sinh thái này được tổ chức theo một cấu trúc phân tầng rõ ràng: tại tầng nền tảng, NumPy cung cấp lõi tính toán số học với tốc độ cao; xây dựng trên đó, Pandas đảm nhiệm việc thao tác và xử lý dữ liệu dạng bảng. Ở tầng cao hơn, Matplotlib và Seaborn biến các con số thành biểu đồ trực quan, trong khi SciPy và Scikit-learn thực thi các mô hình kinh tế lượng và học máy phức tạp.
NumPy (Numerical Python) là thư viện cơ bản nhất cho tính toán khoa học, với đối tượng cốt lõi là mảng đa chiều ndarray. Điểm khác biệt mang tính cách mạng của NumPy là cơ chế vector hóa (vectorization), cho phép thực hiện các phép toán song song trên hàng triệu phần tử cùng lúc mà không cần sử dụng vòng lặp for chậm chạp của Python.
Ví dụ: Tính tốc độ tăng trưởng GDP vĩ mô
import numpy as np
# Giả lập mảng dữ liệu GDP Việt Nam qua các năm (tỷ USD)
gdp = np.array([223.9, 245.2, 261.9, 271.2, 294.1, 340.6])
# Sử dụng np.diff() để tính tốc độ tăng trưởng (%) tự động trên toàn mảng
growth_rate = np.diff(gdp) / gdp[:-1] * 100
print('Tăng trưởng GDP (%):', np.round(growth_rate, 2))
1.3.3. Pandas - "Trái tim" của xử lý dữ liệu bảng (Tabular Data) Dữ liệu kinh tế thực tế (báo cáo tài chính, danh sách khách hàng, lịch sử giao dịch) hiếm khi ở dạng mảng số thuần túy mà thường ở định dạng bảng chứa cả số, văn bản và thời gian. Pandas giải quyết bài toán này thông qua cấu trúc DataFrame (bảng hai chiều), hỗ trợ đọc dữ liệu từ nhiều nguồn đa dạng (CSV, Excel, SQL) và cung cấp các công cụ làm sạch, lọc, gom nhóm cực kỳ linh hoạt. (download dữ liệu thực hành)
Ví dụ: Đọc và xem trước một tệp dữ liệu (click vô (link) để xem lại phần tải dữ liệu)
import pandas as pd
# Đọc tệp dữ liệu bán lẻ từ file CSV
df = pd.read_csv("OnlineRetailDataset.csv")
# Xem nhanh 5 dòng đầu tiên của bảng dữ liệu
print(df.head())
1.3.4. Matplotlib & Seaborn - Trực quan hóa dữ liệu kinh tế Trực quan hóa dữ liệu (EDA) là công cụ để khám phá xu hướng, tính mùa vụ, và các điểm bất thường.
Matplotlib: Là thư viện nền tảng cấp thấp, cung cấp quyền kiểm soát toàn diện đối với mọi chi tiết của biểu đồ, rất phù hợp để tạo các biểu đồ đạt tiêu chuẩn xuất bản khoa học.
Seaborn: Được xây dựng trên nền tảng Matplotlib, Seaborn cung cấp các hàm đồ họa thống kê cấp cao tích hợp sâu với Pandas DataFrame, giúp tạo ra các biểu đồ phức tạp như Heatmap (bản đồ nhiệt) hay Boxplot (biểu đồ hộp) chỉ với một dòng mã.
Ví dụ: Vẽ biểu đồ đường xu hướng cơ bản
import matplotlib.pyplot as plt
# 1. Định nghĩa dữ liệu (Bổ sung phần này để code chạy được)
years = [2020, 2021, 2022, 2023, 2024, 2025]
gdp = [271, 366, 408, 430, 465, 500] # Ví dụ về số liệu GDP (tỷ USD)
# 2. Cấu hình để vẽ biểu đồ
plt.plot(years, gdp, marker='o', color='blue', linestyle='-', linewidth=2)
# 3. Thêm tiêu đề và nhãn tọa độ
plt.title('Xu hướng tăng trưởng GDP')
plt.xlabel('Năm')
plt.ylabel('Tỷ USD')
# 4. Thêm lưới (grid) cho biểu đồ dễ nhìn hơn (tùy chọn)
plt.grid(True, linestyle='--', alpha=0.6)
# 5. Hiển thị biểu đồ
plt.show()
Ví dụ: vẽ biểu đồ cột
import matplotlib.pyplot as plt
# 1. Chuẩn bị dữ liệu
countries = ['Việt Nam', 'Thái Lan', 'Indonesia', 'Malaysia', 'Singapore']
gdp_2025 = [500, 530, 1450, 440, 510] # Số liệu giả lập (tỷ USD)
# 2. Cấu hình kích thước biểu đồ (Rộng 8 inch, Cao 5 inch)
plt.figure(figsize=(8, 5))
# 3. Vẽ biểu đồ cột đứng (Sử dụng hàm plt.bar)
# Bạn có thể đổi màu bằng cách sửa giá trị 'skyblue' hoặc dùng mã màu HEX như '#4CAF50'
plt.bar(countries, gdp_2025, color='skyblue', edgecolor='blue', width=0.6)
# 4. Thêm tiêu đề và nhãn các trục
plt.title('So sánh GDP một số quốc gia Đông Nam Á năm 2025', fontsize=14, fontweight='bold')
plt.xlabel('Quốc gia', fontsize=12)
plt.ylabel('GDP (Tỷ USD)', fontsize=12)
# 5. Thêm lưới ngang để dễ quan sát số liệu (tùy chọn)
plt.grid(axis='y', linestyle='--', alpha=0.7)
# 6. Hiển thị biểu đồ
plt.show()
Ví dụ: Biểu đồ cột đôi so sánh giữa 2 năm
import numpy as np
import matplotlib.pyplot as plt
# 1. Chuẩn bị dữ liệu (đã sắp xếp theo thứ tự GDP năm 2025 tăng dần)
countries = ['Malaysia', 'Việt Nam', 'Singapore', 'Thái Lan', 'Indonesia']
gdp_2020 = [337, 346, 340, 500, 1060] # Số liệu tương ứng năm 2020 (tỷ USD)
gdp_2025 = [440, 500, 510, 530, 1450] # Số liệu tương ứng năm 2025 (tỷ USD)
# 2. Tính toán vị trí các cột trên trục hoành
x = np.arange(len(countries)) # Vị trí tâm của các nhóm quốc gia [0, 1, 2, 3, 4]
width = 0.35 # Độ rộng của từng cột đơn
# 3. Vẽ các cột đôi sát nhau
# Cột năm 2020 sẽ lệch sang trái một nửa độ rộng (x - width/2)
plt.bar(x - width/2, gdp_2020, width, label='Năm 2020', color='#4f81bd', edgecolor='black', linewidth=0.7)
# Cột năm 2025 sẽ lệch sang phải một nửa độ rộng (x + width/2)
plt.bar(x + width/2, gdp_2025, width, label='Năm 2025', color='#c0504d', edgecolor='black', linewidth=0.7)
# 4. Thiết lập tiêu đề và nhãn các trục
plt.title('So sánh GDP một số quốc gia Đông Nam Á (2020 vs 2025)', fontsize=13, fontweight='bold', pad=15)
plt.xlabel('Quốc gia', fontsize=11)
plt.ylabel('GDP (Tỷ USD)', fontsize=11)
# Thay thế các số 0, 1, 2... trên trục X bằng tên các quốc gia tương ứng
plt.xticks(x, countries)
# 5. Thêm chú thích (Legend) để phân biệt màu sắc các năm
plt.legend()
# 6. Thêm đường lưới mờ phía sau cho dễ nhìn
plt.grid(axis='y', linestyle='--', alpha=0.5)
# Tự động căn chỉnh khoảng cách để nhãn không bị che khuất
plt.tight_layout()
# 7. Hiển thị biểu đồ
plt.show()
Ví dụ: vẽ biểu đồ tròn
import matplotlib.pyplot as plt
# 1. Chuẩn bị dữ liệu cho biểu đồ tròn
labels = ['Apple', 'Banana', 'Orange', 'Grape']
sizes = [15, 30, 45, 10] # Tỷ lệ phần trăm hoặc giá trị tương đối
colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']
explode = (0, 0.1, 0, 0) # Tách một lát cắt (Banana) ra khỏi biểu đồ
# 2. Vẽ biểu đồ tròn
plt.figure(figsize=(8, 8))
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True, startangle=140)
# autopct hiển thị phần trăm trên biểu đồ
# shadow tạo hiệu ứng đổ bóng
# startangle giúp xoay điểm bắt đầu của lát cắt đầu tiên
# 3. Thêm tiêu đề
plt.title('Tỷ lệ các loại trái cây yêu thích', fontsize=16, fontweight='bold')
# plt.axis('equal') đảm bảo rằng biểu đồ tròn được vẽ dưới dạng một vòng tròn.
plt.axis('equal')
# 4. Hiển thị biểu đồ
plt.show()
Ví dụ: vẽ scatter plot (biểu đồ phân tán)
import matplotlib.pyplot as plt
import numpy as np
# 1. Chuẩn bị dữ liệu cho biểu đồ phân tán
# Giả sử chúng ta có dữ liệu về số giờ học và điểm thi tương ứng của sinh viên
hours_studied = np.array([2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])
exam_scores = np.array([55, 60, 65, 70, 75, 80, 82, 85, 88, 90, 92, 95, 96, 98])
# 2. Vẽ biểu đồ phân tán
plt.figure(figsize=(10, 6))
plt.scatter(hours_studied, exam_scores, color='purple', marker='o', s=100, alpha=0.7)
# color: màu của các điểm
# marker: kiểu điểm (ví dụ 'o' cho hình tròn, 'x' cho dấu X)
# s: kích thước của các điểm
# alpha: độ trong suốt của các điểm (0.0 trong suốt hoàn toàn, 1.0 không trong suốt)
# 3. Thêm tiêu đề và nhãn các trục
plt.title('Mối quan hệ giữa Số giờ học và Điểm thi', fontsize=16, fontweight='bold', pad=15)
plt.xlabel('Số giờ học mỗi tuần', fontsize=12)
plt.ylabel('Điểm thi', fontsize=12)
# 4. Thêm lưới (grid) cho biểu đồ dễ nhìn hơn
plt.grid(True, linestyle='--', alpha=0.6)
# 5. Hiển thị biểu đồ
plt.show()
Ví dụ: vẽ box plot
import matplotlib.pyplot as plt
import numpy as np
# 1. Chuẩn bị dữ liệu cho biểu đồ hộp
# Giả sử chúng ta có điểm số của các nhóm học sinh khác nhau
data_group1 = np.random.normal(loc=70, scale=10, size=100) # Trung bình 70, độ lệch chuẩn 10
data_group2 = np.random.normal(loc=75, scale=8, size=100)
data_group3 = np.random.normal(loc=65, scale=12, size=100)
data = [data_group1, data_group2, data_group3]
labels = ['Nhóm A', 'Nhóm B', 'Nhóm C']
# 2. Vẽ biểu đồ hộp
plt.figure(figsize=(10, 7))
plt.boxplot(data, tick_labels=labels, patch_artist=True, medianprops={'color': 'black'})
# patch_artist=True để có thể tô màu cho các hộp
# medianprops để chỉnh sửa đường trung vị
# 3. Thêm tiêu đề và nhãn các trục
plt.title('Phân phối điểm số của các nhóm học sinh', fontsize=16, fontweight='bold', pad=15)
plt.xlabel('Nhóm học sinh', fontsize=12)
plt.ylabel('Điểm số', fontsize=12)
# 4. Thêm lưới ngang cho dễ nhìn
plt.grid(axis='y', linestyle='--', alpha=0.7)
# 5. Hiển thị biểu đồ
plt.show()
Ví dụ: vẽ histogram cho phân phối chuẩn
import matplotlib.pyplot as plt
import numpy as np
# 1. Tạo dữ liệu giả định theo phân phối chuẩn
# np.random.normal(mean, standard_deviation, number_of_samples)
mean = 0 # Giá trị trung bình
std_dev = 1 # Độ lệch chuẩn
num_samples = 1000 # Số lượng mẫu
data_normal = np.random.normal(mean, std_dev, num_samples)
# 2. Vẽ biểu đồ histogram
plt.figure(figsize=(10, 6))
# bins: số lượng thanh (bins) trong histogram
# edgecolor: màu viền của các thanh
# alpha: độ trong suốt
plt.hist(data_normal, bins=30, edgecolor='black', alpha=0.7, color='skyblue')
# 3. Thêm tiêu đề và nhãn các trục
plt.title('Biểu đồ tần suất cho phân phối chuẩn', fontsize=16, fontweight='bold', pad=15)
plt.xlabel('Giá trị', fontsize=12)
plt.ylabel('Tần suất', fontsize=12)
# 4. Thêm lưới
plt.grid(axis='y', linestyle='--', alpha=0.7)
# 5. Hiển thị biểu đồ
plt.show()
Ví dụ: vẽ heatmap bằng seaborn
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# 1. Tạo dữ liệu giả định cho heatmap
# Ví dụ: một ma trận tương quan hoặc dữ liệu từ một bảng pivot
data = np.random.rand(10, 12) # Ma trận 10x12 với các giá trị ngẫu nhiên từ 0 đến 1
# Hoặc bạn có thể tạo một ma trận tương quan
# import pandas as pd
# df = pd.DataFrame(np.random.rand(100, 5), columns=['A', 'B', 'C', 'D', 'E'])
# data = df.corr()
# 2. Vẽ biểu đồ heatmap
plt.figure(figsize=(10, 8))
sns.heatmap(data, annot=True, cmap='viridis', fmt=".2f", linewidths=.5)
# annot=True để hiển thị giá trị trên mỗi ô
# cmap='viridis' là một bảng màu phổ biến, bạn có thể thử 'coolwarm', 'Blues', 'Greens'...
# fmt=".2f" định dạng số hiển thị với 2 chữ số thập phân
# linewidths=.5 thêm đường viền giữa các ô
# 3. Thêm tiêu đề
plt.title('Ví dụ Biểu đồ Heatmap', fontsize=16, fontweight='bold', pad=15)
# 4. Hiển thị biểu đồ
plt.show()
1.3.5. SciPy và Scikit-learn - Cầu nối đến Mô hình hóa và Học máy Sau khi dữ liệu đã được nhào nặn và quan sát, chúng ta sẽ bước vào giai đoạn dự báo:
SciPy: Cung cấp các thuật toán toán học và thống kê nâng cao (như kiểm định t-test, phân phối xác suất, tối ưu hóa danh mục đầu tư).
Scikit-learn (Sklearn): Là thư viện tiêu chuẩn cho Học máy (Machine Learning). Nó cung cấp một quy trình (pipeline) nhất quán để gọi các thuật toán dự báo thông minh như Hồi quy (Linear Regression), Phân loại (Logistic Regression) hay Phân cụm (K-Means).
💡 ĐỊNH HƯỚNG CHIẾN LƯỢC CHO NGƯỜI ĐỌC: Mục 1.3 này chỉ đóng vai trò là "món khai vị" để bạn làm quen với cú pháp khai báo và tư duy lập trình của hệ sinh thái Python. Trong thực tế kinh tế, dữ liệu khổng lồ và phức tạp hơn rất nhiều.
Đừng quá lo lắng nếu bạn chưa nắm vững toàn bộ các hàm! Những "món chính" thịnh soạn nhất – như ứng dụng Pandas để bóc tách dữ liệu Thương mại điện tử (E-commerce), dùng Scikit-learn để dự báo doanh số siêu thị Walmart, hay thiết lập mạng nơ-ron Học sâu để phát hiện Gian lận thẻ tín dụng – đã được chuẩn bị sẵn sàng và sẽ được hướng dẫn chi tiết "cầm tay chỉ việc" trong các chương tiếp theo của cuốn sách.