2
如果你對 python 還不熟的話, 可能建議你先學習一下 python, 有個基本功再來這邊喔!!! 當然完全不懂 python, 照著內文說明做, 誤打誤撞 “可能” 也會成功!! 事不宜遲我們先來準備一下相關環境吧!!
環境設定
首先你當然是會先有 python 的開發與執行環境對吧!! 好比說筆者這邊用的就是 PyCharm, 當然有些人會選擇 jupyter, 就看你自己習慣囉!
如果是 IDE, 你就可以再輸入 source code 時, 依依帶入所需要的 library, 如果是純文字模式, 那你可能就需要先安裝環境套見到你的電腦中.
# jupyter
!pip install yfinance
# terminal mode
pip install yfinance
# or, maybe 如果你的環境中有 python2 與 3 的時候 就會分 pip 與 pip3 兩種指令
pip3 install yfinance
# 其實我們還需要另外兩個 library
# numpy 與 pandas, 只是通常我們的環境內都有, 所以沒有特別提出來
首先我們先小試一下抓取資料
以下就是我們試著抓取美國 Tesla 股價的一小段程式碼
import numpy as np
import pandas as pd
import yfinance as yf
my_data = yf.download('TSLA', start='2025-01-02', end='2025-07-02')
print(my_data.info)
以上存檔執行後你就會看到類似以下畫面的結果, 當然這邊僅顯示一部分而已, 這僅是示意圖
Close. High Low Open Volume
Date
2025-01-02 379.279999 392.730011 373.040009 390.100006 109710700
2025-01-03 410.440002 411.880005 379.450012 381.480011 95423300
2025-01-06 411.049988 426.429993 401.700012 423.200012 85516500
2025-01-07 394.359985 414.329987 390.000000 405.829987 75699500
2025-01-08 394.940002 402.500000 387.399994 392.950012 73038800
... ... ... ... ... ...
2025-06-25 327.549988 343.000000 320.399994 342.700012 119845100
2025-06-26 325.779999 331.049988 323.609985 324.609985 80440900
2025-06-27 323.630005 329.339996 317.500000 324.510010 89067000
2025-06-30 317.660004 325.579987 316.600006 319.899994 76695100
2025-07-01 300.709991 305.890015 293.209991 298.459991 145085700
[123 rows x 5 columns]>
這邊的程式碼有一段關鍵, 那就是 yf.download(‘TSLA’, start=’2025-01-02′, end=’2025-07-02′)
TSLA 這是股價代號, 這個代號要怎麼查呢? 各位可以到 yahoo finance 的網站去查看, 搜尋到你要抓取的股票資訊後, 你可以查看網址列就會發現他的代號是多少了, 未來我再準備一篇查詢教學 building !!
那麼後面那兩個參數就是一個是開始日期, 一個是結束日期. 應該很容易理解.
以下就是執行出來的結果
最後我將 source code 列出如下, 歡迎大家拿去改喔!!!
# For data manipulation
from datetime import datetime
import numpy as np
import pandas as pd
# To fetch financial data
import yfinance as yf
# For visualisation
import matplotlib.pyplot as plt
#print(plt.style.available)
#exit(0)
#plt.style.use('seaborn-darkgrid')
#plt.style.use('seaborn-v0_8-darkgrid')
# Set the ticker as 'EURUSD=X'
endToday = datetime.today().strftime('%Y-%m-%d')
#forex_data = yf.download('EURUSD=X', start='2025-01-02', end='2021-12-31')
#forex_data = yf.download('EURUSD=X', start='2025-01-02', end=endToday)
forex_data = yf.download('TSLA', start='2025-01-02', end=endToday)
#forex_data = yf.download('TSLA', start='2025-01-02', end='2025-07-02')
print(forex_data.info)
#exit(0)
# Set the index to a datetime object
forex_data.index = pd.to_datetime(forex_data.index)
# Display the last five rows
#forex_data.tail()
# Plot the close price
plt.figure(figsize=(15, 7))
#forex_data['Adj Close'].plot()
# 就是這一行讓繪圖先出現, 之後再呼叫 show 就出現一個空白的
#forex_data['Close'].plot()
plt.plot(forex_data['Close'])
# Set the title and axis label
plt.title('Tesla Data', fontsize=16)
plt.xlabel('Year-Month', fontsize=12)
plt.ylabel('Price', fontsize=12)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.legend(['Close'], prop={'size': 12})
# Show the plot
plt.show()