Web Scraping with Python YFinance package (Yahoo! Finance)

M. Kannika
4 min readJan 20, 2022

บทความนี้จะมาแนะนำการใช้งาน yfinance เบื้องต้นกัน ซึ่ง yfinance เป็น open-source package ของภาษา Python สำหรับการทำ web scraping หรือ “การดึงข้อมูล” ที่เกี่ยวกับ market data จาก Yahoo! Finance API โดยข้อมูลที่ดึงออกมาจะอยู่ในรูปแบบของ Pandas series/dataframes(ประกอบด้วย row และ column) ซึ่งทำให้สะดวกมากๆในการทำ visualization หรือ plotting กราฟ

“Market data” คืออะไร?

ยกตัวอย่าง เช่น ข้อมูลกำไร-ขาดทุนของบริษัทต่างๆ, ราคาซื้อ-ขายหุ้น, ราคาซื้อ-ขายเหรียญคริปโต(cryptocurrency) เป็นต้น

ความรู้พื้นฐานที่ต้องมีดังนี้

• พื้นฐานภาษา Python
• ความรู้เบื้องต้นของ Pandas library สำหรับการจัดการข้อมูลในรูปแบบ series หรือ dataframes
• ความรู้เบื้องต้นของ Matplotlib library สำหรับการ plot กราฟจากข้อมูล

ก่อนอื่นมาติดตั้ง package yfinance กันก่อน:

>>> pip install yfinance

จากนั้น import package:

หลังจากติดตั้งและอิมพอร์ต package แล้ว เราจะเรียกใช้งาน module ของ yfinance ที่ชื่อว่า Ticker เพื่อเข้าถึงข้อมูลของ ticker ด้วยการระบุ “ticker symbol” หรือชื่อย่อของ ticker เช่น “TSLA” (Tesla Inc.), “AAPL” (Apple Inc.), “MSFT” (Microsoft Corporation), “AMZN” (Amazon.com) เป็นต้น

ตัวอย่างการเข้าถึงข้อมูลของ Tesla Inc.

data = yf.Ticker(“TSLA”)

ถ้าต้องการเข้าถึงมากกว่า 1 ticker ในครั้งเดียว ให้เว้นวรรคแต่ละ ticker symbol ด้วย space เช่น

data = yf.Ticker(“TSLA AAPL AMZN”)

การเรียกดูข้อมูลทั่วไปของ Tesla Inc.

print(data.info)

Output:

ลองดึงข้อมูลของ Profit margin และ RoE(Return on Equity) โดยการระบุ field name เช่น

print(data.info[‘profitMargins’])
print(data.info[‘returnOnEquity’])

Output:

Profit margin = 0.07403 และ RoE = 0.15641

ลองสร้าง function เพื่อแสดงข้อมูล RoE ของ ticker อื่นๆ บ้างกัน

Output:

ถ้าต้องการเรียกดู field name ทั้งหมด:

print(data.info.keys())

Output:

นอกจากนี้ ในส่วนของ info field ของ data object ยังมี field เพิ่มเติม ได้แก่

dividends, splits, balance_sheet, cashflow และ earnings

# show dividends
print(data.dividends)

# show splits
print(data.splits)

# show balance sheet
print(data.balance_sheet)

# show cashflow
print(data.cashflow)

# show earnings
print(data.earnings)

Output:

ข้อมูลที่ได้จาก data.earnings เพื่อให้แสดงภาพชัดเจนมากยิ่งขึ้น เราลองมา plot กราฟแบบง่ายๆ โดยใช้ matplotlib.pyplot กัน

ก่อนอื่นติดตั้ง package matplotlib:

>>> pip install matplotlib

จากนั้น import package เเละ plot กราฟ:

Output:

yfinance ยังสามารถเรียกดูข้อมูล stock price ของ ticker ในรอบ 1 เดือนล่าสุด(ค่า default) ดังนี้

print(data.history())

Output:

ถ้าต้องการกำหนด period ของข้อมูลที่ต้องการแสดง ให้กำหนดค่าของ parameter period ใน data.history() เช่น

data.history(period=“5d”)

หรือ
data.history(“5d”)

จะแสดงข้อมูล stock price ใ่นรอบ 5 วันล่าสุด:

Output:

ตัวอย่างการกำหนด period อื่นๆ เช่น

1d, 10d, 5mo, 9mo, 1y, 5y, ytd, max

หรือเราสามารถกำหนดวันที่เริ่มต้นและสิ้นสุดได้ด้วยการระบุ start และ end ดังนี้

การ download ข้อมูล “stock price” ที่ผ่านมาของแต่ละ ticker โดยเลือกให้แสดงเฉพาะ close price ในรอบ 1 ปีที่ผ่านมา:

data = yf.download()

Output:

plot กราฟจากข้อมูลที่ได้:

สุดท้ายนี้ เราลองมา plot กราฟ close price ในแต่ละเดือนของ Bitcoin (BTC-USD) ในรอบ 1 ปีล่าสุดกัน

Output:

สรุป

จะเห็นได้ว่า yfinance เป็น package ที่ช่วยในการดึงข้อมูลได้รวดเร็วและง่ายมากๆ บทความนี้แค่แนะนำการใช้งาน yfinance เบื้องต้นเท่านั้น หากผู้อ่านสนใจศึกษาเพิ่มเติม สามารถเข้าไปอ่าน document ได้ที่

https://pypi.org/project/yfinance/#description

https://aroussi.com/post/python-yahoo-finance

--

--

M. Kannika

Web Application & Blockchain Developer | Cat Lover | INTJ-A