yfinanceを使って株価データや財務情報を取得する方法

stock_image finance
スポンサーリンク

こんにちは。カルークです。

前の記事では、pandas datareaderを用いた株価データの取得方法について紹介しました。

今回は、yfinanceというAPIを使って株価データや、企業の財務に関する情報を取得する方法について紹介したいと思います。

スポンサーリンク

yfinanceについて

yfinanceは名前から察する通り、Yahoo! Financeから情報を取得するためのAPIです。オープンソースとして公開されており、python環境がある場合はpip installで簡単にインストールが出来ます。

コチラが公式サイトになります(PyPIのサイト)。

PyPIのサイトに記載してあるように、yfinanceはYahoo!非公認のAPIサービスであり、利用はあくまで教育や調査目的に限るようです。ちなみに、取れるデータは英語になっているので、必要であればgoogle翻訳を駆使して下さい。

yfinanceのバージョン

本記事執筆時点でのバージョンは0.1.67です。

yfinanceのインストール

yfinanceはpipでインストールできます。お使いのpython環境コマンドライン(コマンドプロンプト、Anaconda prompt、Power shellなど)にて、以下のコマンドを入力します。

pip install yfinance

yfinanceのインポート

ここからがpythonコード上の話になります(実行環境はjupyter notebookです)。yfinanceのインストールが出来たら、早速python上で使ってみましょう。まずはyfinanceをインポートしてみます。

import yfinance as yf

yfinanceを用いた情報取得

会社概要情報を取得

yfinanceでは、Tickerと呼ばれるモジュールを使って、株価コードに紐付いた様々な情報にアクセスが出来ます。手始めに、会社の概要情報を取得してみましょう。ここでは、ソフトバンクグループ(株価コード:9984)を例にします。

# ソフトバンクグループの情報を取得(Tは東証を表す)
ticker_info = yf.Ticker("9984.T")

# 会社概要(info)を出力
ticker_info.info

以下のように、ソフトバンクグループの会社概要情報がjson形式で取れているのが確認できます。郵便番号、業種、住所、電話番号など基本的な情報から、従業員数や売上高、利益などの定量的な情報まで多岐に渡って取得が出来ています。

{'zip': '105-7317',
 'sector': 'Communication Services',
 'fullTimeEmployees': 58786,
 'longBusinessSummary': 'SoftBank Group Corp. provides telecommunication services in Japan and internationally. The company operates through four segments: Investment Business of Holding Companies; SoftBank Vision Fund and Other SBIA-Managed Funds; SoftBank; and Arm. It offers mobile communications, broadband, and fixed-line communications services; and sells mobile devices. The company is also involved in internet advertising marketing, online advertising distribution, e-book distribution, investment, and planning and operation of a fashion e-commerce website; and designs and develops mobile robots. In addition, it designs microprocessor intellectual property and related technology; sells software tools; and generates, supplies, and sells electricity from renewable energy sources, as well as offers related services. Further, the company provides investment management and marketing services, smartphone payment services, PC software downloads, banking services, and solutions and services for online businesses; distributes video, voice, and data content; manufactures, distributes, and sells IT-related products, as well as IT-related services; and manages funds. The company operates a professional baseball team, as well as manages and maintains baseball stadium and other sports facilities; and operates ITmedia, an IT information site. It also operates the fashion online shopping website ZOZOTOWN. The company was formerly known as SoftBank Corp. and changed its name to SoftBank Group Corp. in July 2015. SoftBank Group Corp. was incorporated in 1981 and is headquartered in Tokyo, Japan.',
 'city': 'Tokyo',
 'phone': '81 3 6889 2000',
 'country': 'Japan',
 'companyOfficers': [],
 'website': 'https://group.softbank',
 'maxAge': 1,
 'address1': '1-7-1, Kaigan',
 'industry': 'Telecom Services',
 'address2': 'Minato-ku',
 'ebitdaMargins': 0.25201,
 'profitMargins': 0.57988,
 'grossMargins': 0.51665,
 'operatingCashflow': 2103621976064,
 'revenueGrowth': 0.114,
 'operatingMargins': 0.10773,
 'ebitda': 1507280945152,
 'targetLowPrice': 7400,
 'recommendationKey': 'buy',
 'grossProfits': 2874929000000,
 'freeCashflow': 325206376448,
 'targetMedianPrice': 10000,
 'currentPrice': 5481,
 'earningsGrowth': None,
 'currentRatio': 0.802,
 'returnOnAssets': 0.00984,
 'numberOfAnalystOpinions': 15,
 'targetMeanPrice': 9808.7,
 'debtToEquity': 170.992,
 'returnOnEquity': 0.36495,
 'targetHighPrice': 12600,
 'totalCash': 5548188106752,
 'totalDebt': 21099454660608,
 'totalRevenue': 5981139894272,
 'totalCashPerShare': 3237.707,
 'financialCurrency': 'JPY',
 'revenuePerShare': 3381.237,
 'quickRatio': 0.675,
 'recommendationMean': 1.8,
 'exchange': 'JPX',
 'shortName': 'SOFTBANK GROUP CORP',
 'longName': 'SoftBank Group Corp.',
 'exchangeTimezoneName': 'Asia/Tokyo',
 'exchangeTimezoneShortName': 'JST',
 'isEsgPopulated': False,
 'gmtOffSetMilliseconds': '32400000',
 'quoteType': 'EQUITY',
 'symbol': '9984.T',
 'messageBoardId': 'finmb_23013',
 'market': 'jp_market',
 'annualHoldingsTurnover': None,
 'enterpriseToRevenue': 4.516,
 'beta3Year': None,
 'enterpriseToEbitda': 17.921,
 '52WeekChange': -0.3543409,
 'morningStarRiskRating': None,
 'forwardEps': 793.41,
 'revenueQuarterlyGrowth': None,
 'sharesOutstanding': 1709660032,
 'fundInceptionDate': None,
 'annualReportExpenseRatio': None,
 'totalAssets': None,
 'bookValue': 6155.731,
 'sharesShort': None,
 'sharesPercentSharesOut': None,
 'fundFamily': None,
 'lastFiscalYearEnd': 1617148800,
 'heldPercentInstitutions': 0.37238997,
 'netIncomeToCommon': 3437314965504,
 'trailingEps': 1740.613,
 'lastDividendValue': 22,
 'SandP52WeekChange': 0.26353753,
 'priceToBook': 0.8903898,
 'heldPercentInsiders': 0.30174,
 'nextFiscalYearEnd': 1680220800,
 'yield': None,
 'mostRecentQuarter': 1632960000,
 'shortRatio': None,
 'sharesShortPreviousMonthDate': None,
 'floatShares': 1199480050,
 'beta': 1.199778,
 'enterpriseValue': 27012110483456,
 'priceHint': 2,
 'threeYearAverageReturn': None,
 'lastSplitDate': 1561420800,
 'lastSplitFactor': '2:1',
 'legalType': None,
 'lastDividendDate': 1648598400,
 'morningStarOverallRating': None,
 'earningsQuarterlyGrowth': None,
 'priceToSalesTrailing12Months': 1.5666991,
 'dateShortInterest': None,
 'pegRatio': -0.34,
 'ytdReturn': None,
 'forwardPE': 6.9081564,
 'lastCapGain': None,
 'shortPercentOfFloat': None,
 'sharesShortPriorMonth': None,
 'impliedSharesOutstanding': None,
 'category': None,
 'fiveYearAverageReturn': None,
 'previousClose': 5643,
 'regularMarketOpen': 5550,
 'twoHundredDayAverage': 7580.54,
 'trailingAnnualDividendYield': 0.007797271,
 'payoutRatio': 0.0256,
 'volume24Hr': None,
 'regularMarketDayHigh': 5578,
 'navPrice': None,
 'averageDailyVolume10Day': 19897080,
 'regularMarketPreviousClose': 5643,
 'fiftyDayAverage': 6246.38,
 'trailingAnnualDividendRate': 44,
 'open': 5550,
 'toCurrency': None,
 'averageVolume10days': 19897080,
 'expireDate': None,
 'algorithm': None,
 'dividendRate': 44,
 'exDividendDate': 1648598400,
 'circulatingSupply': None,
 'startDate': None,
 'regularMarketDayLow': 5476,
 'currency': 'JPY',
 'trailingPE': 3.1488905,
 'regularMarketVolume': 14780400,
 'lastMarket': None,
 'maxSupply': None,
 'openInterest': None,
 'marketCap': 9370646609920,
 'volumeAllCurrencies': None,
 'strikePrice': None,
 'averageVolume': 18682101,
 'dayLow': 5476,
 'ask': 5486,
 'askSize': 0,
 'volume': 14780400,
 'fiftyTwoWeekHigh': 10695,
 'fromCurrency': None,
 'fiveYearAvgDividendYield': 0.57,
 'fiftyTwoWeekLow': 5057,
 'bid': 5477,
 'tradeable': False,
 'dividendYield': 0.0078,
 'bidSize': 0,
 'dayHigh': 5578,
 'regularMarketPrice': 5481,
 'preMarketPrice': None,
 'logo_url': 'https://logo.clearbit.com/group.softbank'}

株価データ(日毎)を取得

yfinanceでは、Dailyの株価データの取得も可能です。具体的には以下のコマンドを使います。period=”max”で、コードを実行した日から遡れる所まで遡って取得します。

# 株価データ(日毎)を取得
hist = ticker_info.history(period="max")

出力を見てみます。

2000年1月4日以降~2021年12月18日現在までの日毎の株価情報が取得出来ているのが確認できます。各カラムの意味は以下のようになります。

  • Open:その日の始値
  • High:その日の最高値
  • Low:その日の最安値
  • Close:その日の終値
  • Volume:その日の取引量
  • Dividends:配当金
  • Stock Splits:株式分割数

Adj Close価格(株式分割調整後の終値)の情報が無いんだけど…?

前の記事のpandas datareaderを用いた株価データの取得では、”Adj Close”価格(株式分割を考慮した終値)の取得ができましたが、yfinanceではそのカラムが無いようです。そのため、株式分割調整後の株価データを用いたい場合には、yfinanceよりもpandas datareaderを用いたほうが良さそうです。もしくは、yfinanceであっても”Stock Splits”カラムがあるので、自分で”Adj Close”を計算するでも良いと思います。

配当金および株式分割の確定日を取得

先程はhistory()を用いて日毎の株価情報を取得し、その中には”Dividends(配当金)”や”Stock Splits(株式分割数)”の情報が記載されていましたが、実際は配当金額が確定するのは決算や半期ごとであったり、株式分割が行われるのはもっと頻度が低かったりします。そのため、history()で見た場合は殆どのレコードで0になっていましたね。

そこで、”actions”という変数を使って、配当金や株式分割の情報にアクセスし、実際に配当金の権利確定日や、株式分割のあった日付だけを取得する事が出来ます。

ticker_info.actions

出力は以下のようになります。実際にアクションがあったDateが取得できています。

ちなみに、”Dividends(配当金)”と”Stock Splits(株式分割数)”は別々に取得する事もできます。(.actionsを使えば両方取れるので不要かもしれませんが)

ticker_info.dividends
ticker_info.splits

財務諸表(直近4年分)を取得

financialsという変数を用いると、直近4年分の財務諸表の取得ができます。

ticker_info.financials

出力はこんな感じです。

念の為、日本のyahoo financeのサイトでも確認してみます。

例えば、Net Income (純利益)の2021/3/31決算は4.98796e+12(e+12は10の12乗なので、4.99兆円)です。Webページの方でも確認しましたが、一致しているのが分かります。(ハイライト箇所)

ちなみに表記は英語になっていますが、数値の単位はドルではなく「円」ということですね。

財務諸表(直近四半期分)を取得

同様に、quarterly_financialsという変数を用いると、直近4年分の財務諸表の取得ができます。

ticker_info.quarterly_financials

出力はこんな感じです。2021/9月期、2021/6月期、2021/3月期、2020/12月期の四半期決算の財務諸表が取得出来ているのが分かります。

株式保有割合の情報を取得

major_holdersという変数を用いると、株式保有割合の情報を取得出来ます。

ticker_info.major_holders

こんな感じで、機関投資家の保有割合や保有数などの情報が取得できます。

B/S:バランスシート(直近4年分)を取得

balance_sheetという変数を用いると、直近4年分のB/S(バランスシート)の情報を取得出来ます。

ticker_info.balance_sheet

出力はこんな感じ、かなり詳細な情報が出力できます。

B/S:バランスシート(直近四半期分)を取得

同様に、quarterly_balance_sheetという変数を用いると、 直近四半期分のB/S(バランスシート)の情報を取得出来ます。

ticker_info.quarterly_balance_sheet

出力は以下のようになります。

キャッシュフロー(直近4年分)を取得

cashflowという変数を用いると、直近4年分のキャッシュフローの情報を取得出来ます。

ticker_info.cashflow

出力は以下のようになります。

キャッシュフロー(直近四半期分)を取得

同様に、quarterly_cashflowという変数を用いると、 直近四半期分のキャッシュフローの情報を取得出来ます。

ticker_info.quarterly_cashflow

出力は以下のようになります。

売上高と純利益(直近4年分)を取得

earningsという変数を用いると、直近4年分の売上高と純利益の情報を取得出来ます。

ticker_info.earnings

出力は以下のようになります。

ちなみに、出力のカラム名は英語で”Revenue”、”Earnings”とあり、どちらも「収益」で曖昧ですが、Yahooファイナンスにおける会計用語に合わせるならそれぞれ「売上高」と「純利益(当期利益)」に該当します。Yahoo financeのWebページの決算情報の数値とマップを取って確認しました。

売上高と純利益(直近四半期分)を取得

同様に、quarterly_earningsという変数を用いると、 直近四半期分の売上高と純利益の情報を取得出来ます。

ticker_info.quarterly_earnings

出力は以下のようになります。

企業のサステナビリティに関する情報を取得

sustainabilityという変数を用いると企業のサステナビリティに関する活動の情報を取得することが出来ます。

ticker_info.sustainability

出力です。

環境スコア(環境配慮度合い?)や、ミリタリーコンタクト(軍事目的の企業活動をしていないか?)、ガバナンススコアなど、色々と取れているみたいです。ソースがどこか気になりますが、後で時間があれば調べたいと思います。

企業のイベント情報(次回決算日など)の取得

calendarという変数を用いて、企業の次回決算日などのイベント情報を取得することが出来ます。

ticker_info.calendar

出力はこんな感じです。

証券識別コード(ISINコード)の取得

isinという変数を用いて、証券識別コード(International Securities Identification Number)の取得が出来ます。ちなみに、野村證券のHPによると、ISINの意味は以下とのことです。

International Securities Identification Number の略で、国際証券コード仕様ISO6166で定められている全世界共通の12桁の証券識別コードのこと。

最初の2桁がアルファベットで国名を表し(日本はJP)、次の9桁が新証券コード(基本コード。発行体属性コード・1桁+発行体固有名コード・5桁+証券種類コード・3桁)、最後の1桁が「チェックディジット」といわれるコンピュータ処理用の番号で構成されている。

https://www.nomura.co.jp/terms/english/i/A02453.html

pythonコードはこんな感じです。

ticker_info.isin

出力もシンプルにISINコードが1個出てくるだけです。

ちなみに、公式ドキュメントによると.isinの機能は「実験的」とあるので、今後使えなくなる可能性が有るので注意して下さい。

企業の関連ニュース記事を取得

newsという変数を用いると、その企業に関係するニュース記事のタイトル、発行元、記事リンク、発行日時が取得出来ます。

ticker_info.news

出力はjsonです。中身はリストになっていて1記事が1個の要素、中身(タイトル、発行元など)がdictionary型のobjectで入っています。providerPublishTimeについては、UNIXTIMEで可読性が悪いので変換が必要です。記事はアメリカ版Yahoo Financeで、英語の記事となっております。

[{'uuid': 'a5d78ad6-b7bb-310d-90d4-3f0a3bc774f1',
  'title': 'Employee Retention Tax Credit 2021 Application – Payroll Returns Service Launch',
  'publisher': 'GlobeNewswire',
  'link': 'https://finance.yahoo.com/news/employee-retention-tax-credit-2021-133900447.html',
  'providerPublishTime': 1639834740,
  'type': 'STORY'},
 {'uuid': '919dc030-fe17-32b3-9ffe-95342c0f84cb',
  'title': 'Slutty Vegan Owner And Varo Bank Partner to Provide Atlanta Entrepreneurs With Financial Resources',
  'publisher': 'Black Enterprise',
  'link': 'https://finance.yahoo.com/news/slutty-vegan-owner-varo-bank-133524020.html',
  'providerPublishTime': 1639834524,
  'type': 'STORY'},
 {'uuid': '48bee71e-6c28-3c2a-96a1-8529a662ce3e',
  'title': 'Medical Debt Has Forced 23% of Consumers to Carry a Credit Card Balance',
  'publisher': 'Motley Fool',
  'link': 'https://finance.yahoo.com/m/48bee71e-6c28-3c2a-96a1-8529a662ce3e/medical-debt-has-forced-23%25.html',
  'providerPublishTime': 1639834354,
  'type': 'STORY'},
 {'uuid': 'b8f03cdd-8af5-3007-8751-b7a767bc5c26',
  'title': 'How Would Shopify Perform During a Recession?',
  'publisher': 'Motley Fool',
  'link': 'https://finance.yahoo.com/m/b8f03cdd-8af5-3007-8751-b7a767bc5c26/how-would-shopify-perform.html',
  'providerPublishTime': 1639834320,
  'type': 'STORY'},
 {'uuid': '7c66c9ab-5bed-3572-b8e5-df80d31a2089',
  'title': 'Matte Black Smart Kitchen Faucet – Touch Sensor/Pull-Down Swivel Sprayer Launch',
  'publisher': 'GlobeNewswire',
  'link': 'https://finance.yahoo.com/news/matte-black-smart-kitchen-faucet-133000020.html',
  'providerPublishTime': 1639834200,
  'type': 'STORY'},
 {'uuid': 'a1962c2a-1828-3b2b-a6e7-7ce2ad66c3c9',
  'title': "These Risks Could Slow Brilliant Earth's Growth",
  'publisher': 'Motley Fool',
  'link': 'https://finance.yahoo.com/m/a1962c2a-1828-3b2b-a6e7-7ce2ad66c3c9/these-risks-could-slow.html',
  'providerPublishTime': 1639834200,
  'type': 'STORY'},
 {'uuid': 'eb1497f4-898a-3b58-91e8-531c767f2af2',
  'title': 'Stocks vs. Bonds and the 60/40 Rule',
  'publisher': 'Motley Fool',
  'link': 'https://finance.yahoo.com/m/eb1497f4-898a-3b58-91e8-531c767f2af2/stocks-vs.-bonds-and-the.html',
  'providerPublishTime': 1639834200,
  'type': 'STORY'},
 {'uuid': 'fc7fabd5-6dec-3cc7-b0a0-a973236ab048',
  'title': 'Why inflation and the U.S. policy response will be key for markets in 2022',
  'publisher': 'MarketWatch',
  'link': 'https://finance.yahoo.com/m/fc7fabd5-6dec-3cc7-b0a0-a973236ab048/why-inflation-and-the-u.s..html',
  'providerPublishTime': 1639834200,
  'type': 'STORY'}]

publish timeを見ましたが、一番下(1639834200)が2021-12-18 22:30:00、一番上(1639834740)が2021-12-18 22:39:00なので、あまり時間的な幅は取れないのかもしれないです。

まとめ

今回は、yfinanceを用いて企業の株価情報や財務情報など様々な情報の取得方法について書きました。テクニカルな観点での株価分析だけでなく、ファンダメンタルズの観点での株価分析、株価予測などの効率化に役立ちそうです。

タイトルとURLをコピーしました