在量化投資中,金融數據是基礎。獲取、清洗並處理這些數據是構建量化策略的第一步。今天將介紹如何使用 Python 獲取金融數據,並進行基本的數據檢視和處理,還會講解如何使用 Python 進行數據的基本視覺化。另外本系列文章除去特別情況皆會使用 Colab 來執行呈現結果,今日 Colab 連結在此
yfinance
下載金融數據yfinance
是一個常用的 Python 庫,用於從 Yahoo Finance 下載歷史金融數據,包括股票價格、指數、匯率等。
yfinance
首先,你需要安裝 yfinance
庫:
pip install yfinance
以下是一個下載單隻股票(例如蘋果公司,代碼 AAPL)的示例:
import yfinance as yf
# 下載蘋果公司的歷史數據
stock_data = yf.download('AAPL', start='2020-01-01', end='2024-01-01')
# 檢視前五行數據
print(stock_data.head())
應該可以看到以下畫面:
你也可以同時下載多隻股票的數據:
# 下載多隻股票的歷史數據
stocks = ['AAPL', 'GOOGL', 'MSFT']
stock_data = yf.download(stocks, start='2020-01-01', end='2024-01-01')
# 檢視數據結構
print(stock_data.head())
應該可以看到以下畫面:
yfinance
下載的數據格式通常為 pandas.DataFrame
,數據會包括以下幾列:
Open
: 開盤價High
: 最高價Low
: 最低價Close
: 收盤價Adj Close
: 調整後收盤價(考慮股息和分拆影響)Volume
: 交易量你可以檢視數據的形狀和結構:
# 檢查數據形狀
print(stock_data.shape)
# 檢查列標籤
print(stock_data.columns)
我們依照上面的3個股票的資料得到下面結果:
股票價格數據是一種典型的時間序列數據。處理這些數據的關鍵之一是正確處理時間索引(即日期)。檢查數據是否按時間順序排列:
# 確認數據是否按日期排序
print(stock_data.index.is_monotonic_increasing)
如果數據沒有按順序排列,你可以手動排序:
# 按日期排序數據
stock_data = stock_data.sort_index()
根據你的需求,你可能只需要收盤價或某個特定的價格列,例如 Adj Close
(調整後收盤價)。你可以提取這一列:
# 提取調整後的收盤價
adj_close = stock_data['Adj Close']
print(adj_close.head())
依照上面的3個股票的資料得到下面結果:
在進行視覺化之前,確保已安裝 matplotlib,這是 Python 中常用的視覺化工具。
pip install matplotlib seaborn
我們將提取 APPL 的 Adj Close(調整後收盤價)列,並使用 matplotlib 繪製其走勢圖。
import matplotlib.pyplot as plt
import yfinance as yf
# 下載蘋果公司(AAPL)的歷史數據
stock_data = yf.download('AAPL', start='2020-01-01', end='2024-01-01')
# 提取調整後的收盤價
adj_close = stock_data['Adj Close']
# 繪製收盤價走勢圖
plt.figure(figsize=(10, 6))
plt.plot(adj_close, label='AAPL Adj Close')
plt.title('AAPL 調整後收盤價走勢圖')
plt.xlabel('日期')
plt.ylabel('調整後收盤價')
plt.legend()
plt.grid(True)
plt.show()
可以得到下面圖:
如果要同時顯示多隻股票的也沒問題。
import matplotlib.pyplot as plt
import yfinance as yf
# 下載多隻股票的歷史數據
stocks = ['AAPL', 'GOOGL', 'MSFT']
stock_data = yf.download(stocks, start='2020-01-01', end='2024-01-01')
# 提取調整後的收盤價
adj_close = stock_data['Adj Close']
# 繪製收盤價走勢圖
plt.figure(figsize=(10, 6))
plt.plot(adj_close, label=['AAPL Adj Close', 'GOOGL Adj Close', 'MSFT Adj Close'])
plt.title('各個調整後收盤價走勢圖')
plt.xlabel('日期')
plt.ylabel('調整後收盤價')
plt.legend()
plt.grid(True)
plt.show()
可以得到下面圖:
在處理數據後,你可以將其保存到本地文件,以便後續分析使用:
# 將數據保存為 CSV 文件
stock_data.to_csv('stock_data.csv')
如果是在colab應該可以點選旁邊檔案欄,看到 stock_data.csv已經被順利存下來囉~
yfinance
庫,下載一隻或多隻股票的歷史數據,並進行檢視。這樣,你將掌握如何獲取和保存金融數據,這是量化投資的第一步。在接下來的幾天中,我們將學習如何對這些數據進行處理、分析和應用於投資策略。