[解説] 上編：yfinanceの凄さを伝えたい(株価データ, 財務データ, 企業関連ニュースの取得)

# 自己紹介
慶應義塾大学 経済学部 3年生(2024/2/2時点)のアギラーです。
現在は「金融 x データ分析」を中心に学習中
ゼミの研究での学習を備忘録としてまとめていきたいと思います。

- Portfolio: [klynoroales-aguilar.com](https://www.klynoroales-aguilar.com/)

# この記事を読むと…
- yfinanceを体系的に学べる
- 株価分析における株価データの取得を簡略化できる（下編に移行）

# 目次
- [0. そもそもyfinanceとは](#0-そもそもyfinanceとは)
- [1. yfinanceのインストール](#1-yfinanceのインストール)
- [2. データの取得と確認](#2-データの取得と確認)
- [3. 株式に関する情報の取得と確認](#3-株式に関する情報の取得と確認)
- [4. 財務データの取得と確認](#4-財務データの取得と確認)
- [5. 株主情報の取得と確認](#5-株主情報の取得と確認)
- [6. 評価と推奨データの取得と確認](#6-評価と推奨データの取得と確認)

# 0. そもそもyfinanceとは
pythonを用いて株価分析をしようと思った方は必ずや聞いたことであろうライブラリ「yfinance」とはなんでしょうか？

実際に株価を取得できるライブラリおよびAPIはたくさんありますが、"とりあえず"yfinanceが選ばれている印象が強いです。

# 1. yfinanceのインストール
pip環境ではいつものように下記コードでインストールできます。
```terminal: terminal
pip install yfinance
```
しかしconda環境では下記のコードを走らせるだけではエラーが出てしまいます。
```terminal: terminal
conda install yfinance
```
したがってconda-forgeのバージョンをインストールしましょう。
詳しいパッケージの情報は[ANACONDA公式](https://anaconda.org/conda-forge/yfinance)を参照
```terminal:terminal
conda install conda-forge::yfinance
```
これで準備は整いました。

# 2. データの取得と確認
では深く理解していきましょう。今回はApple(ticker: 'APPL')のデータを元に解説していきます。

## 2.1. データの取得
データを取得していきます。
```python: ipynb
import yfinance as yf

appl = yf.Ticker("AAPL") 

# 取得したデータを確認します。
appl
```
```text: output
yfinance.Ticker object <AAPL>
```
出力にある yfinance.Ticker object <AAPL> は、yfinance ライブラリが AAPL についての株式情報を含む Ticker オブジェクトを生成したことを意味します。
この Ticker オブジェクトを使って、株価の履歴、財務諸表、配当情報など、さまざまな株式関連データにアクセスして取得していくようなプロセスになります。

## 2.2. 取得データの確認
取得したデータを .info で確認しましょう
```python: ipynb
# get all stock info
appl.info
```
```tex: output
{'address1': 'One Apple Park Way',
 'city': 'Cupertino',
 'state': 'CA',
 'zip': '95014',
 'country': 'United States',
 'phone': '408 996 1010',
 'website': 'https://www.apple.com',
 'industry': 'Consumer Electronics',
 'industryKey': 'consumer-electronics',
 'industryDisp': 'Consumer Electronics',
 'sector': 'Technology',
 'sectorKey': 'technology',
 'sectorDisp': 'Technology',
 'longBusinessSummary': 'Apple Inc. designs, manufactures, and markets smartphones, personal computers, tablets, wearables, and accessories worldwide. The company offers iPhone, a line of smartphones; Mac, a line of personal computers; iPad, a line of multi-purpose tablets; and wearables, home, and accessories comprising AirPods, Apple TV, Apple Watch, Beats products, and HomePod. It also provides AppleCare support and cloud services; and operates various platforms, including the App Store that allow customers to discover and download applications and digital content, such as books, music, video, games, and podcasts. In addition, the company offers various services, such as Apple Arcade, a game subscription service; Apple Fitness+, a personalized fitness service; Apple Music, which offers users a curated listening experience with on-demand radio stations; Apple News+, a subscription news and magazine service; Apple TV+, which offers exclusive original content; Apple Card, a co-branded credit card; and Apple Pay, a cashless payment service, as well as licenses its intellectual property. The company serves consumers, and small and mid-sized businesses; and the education, enterprise, and government markets. It distributes third-party applications for its products through the App Store. The company also sells its products through its retail and online stores, and direct sales force; and third-party cellular network carriers, wholesalers, retailers, and resellers. Apple Inc. was founded in 1976 and is headquartered in Cupertino, California.',
 'fullTimeEmployees': 161000,
 'companyOfficers': [{'maxAge': 1,
   'name': 'Mr. Timothy D. Cook',
   'age': 62,
   'title': 'CEO & Director',
   'yearBorn': 1961,
   'fiscalYear': 2023,
   'totalPay': 16239562,
   'exercisedValue': 0,
   'unexercisedValue': 0},
  {'maxAge': 1,
   'name': 'Mr. Luca  Maestri',
   'age': 60,
   'title': 'CFO & Senior VP',
   'yearBorn': 1963,
   'fiscalYear': 2023,
   'totalPay': 4612242,
   'exercisedValue': 0,
   'unexercisedValue': 0}],
 'auditRisk': 4,
 'boardRisk': 1,
 'compensationRisk': 6,
 'shareHolderRightsRisk': 1,
 'overallRisk': 1,
 'governanceEpochDate': 1706745600,
 'compensationAsOfEpochDate': 1703980800,
 'maxAge': 86400,
 'priceHint': 2,
 'previousClose': 189.41,
 'open': 189.385,
 'dayLow': 187.35,
 'dayHigh': 189.535,
 'regularMarketPreviousClose': 189.41,
 'regularMarketOpen': 189.385,
 'regularMarketDayLow': 187.35,
 'regularMarketDayHigh': 189.535,
 
 # ......などなどです。
```
こんな感じで株価以外の財務データなども大量に取得することができます。
他にも役員情報や事業内容、業界、時価総額…など豊富なデータにアクセスできます。

## 2.2. 個別にデータを取得する
appl というバリアブルに格納されているのは分かったので個別に取得してみます。
```python: ipynb
appl.info['financialCurrency']
```
```text: output
'USD'
```
こんな感じで色々個別データを取得できます。
ただし、辞書形式の入れ子構造から取得する場合、例えばapplの「companyOfficers」の項目などはget()関数などを使用する必要があります。
**今回は割愛**

# 3. 株式に関する情報の取得と確認
株式に関する情報を取得してみます。
```python: ipynb
appl.actions # アクション(配当、分割)を表示
appl.dividends # 配当
appl.splits # 分割
appl.capital_gains
```

# 4. 財務データの取得と確認
財務データ（財務３表）を取得していきましょう

## 4.1. ①損益計算書
はじめに損益計算書を取得していきます。
```python: ipunb
appl.income_stmt #年単位
appl.quarterly_income_stmt #4ヶ月単位
```
appl.quarterly_income_stmtの方のデータを表示してみます

![スクリーンショット 2024-02-10 0.22.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883815/195421df-1437-da6a-d2cd-f47ebfa39afa.png)

こんな感じで取得できるので財務分析もできちゃいますね👍

## 4.2. ②バランスシート
次にバランスシートを取得していきます
```python: ipynb
# - balance sheet
appl.balance_sheet
appl.quarterly_balance_sheet
```
では同様に appl.quarterly_balance_sheet の方を表示してみます。

![スクリーンショット 2024-02-10 0.24.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883815/18a61f45-29f8-3a28-188c-2cf11662c94a.png)

取得できました。

## 4.3. ③キャッシュフロー
最後にCFを取得してみましょう
```python: ipynb
appl.cashflow #年単位
appl.quarterly_cashflow #4半期単位
```
では表示してみます。

![スクリーンショット 2024-02-10 0.25.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883815/52a6451d-bd61-44e0-d0fd-f77b3b2312f1.png)

以上で財務３表の取得ができました

# 5. 株主情報の取得と確認
株主情報の取得は下記のコードで実行できます。
```python: ipynb
# show holders
appl.major_holders # 大株主
appl.institutional_holders
appl.mutualfund_holders
appl.insider_transactions
appl.insider_purchases
appl.insider_roster_holders
```
ではinsider_roster_holdersを表示してみます

![スクリーンショット 2024-02-10 0.27.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883815/fd5ac8ad-b078-dcf9-da80-ade35804af08.png)

insiter_roster_holder はいわゆる社内の機密情報にアクセスできる人のことでしょうか…🤔

# 6. 評価と推奨データの取得と確認
このときのrecommendationsとはかAPPLの株に対する各証券会社の評価とその後のアクションを指します。

:::note info
ちなみにこの時に使われている「reit」は「reiterate」(再確認)という意味です
:::

```pyhon: ipynb
appl.recommendations
appl.recommendations_summary
appl.upgrades_downgrades
```
では確認していきましょう

![スクリーンショット 2024-02-10 0.27.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883815/a3d41542-8f8a-dc2d-b505-ffb47dc3dbeb.png)


こんな感じで各社のAPPLに対する評価がわかります。
（Outperformが多いのはVision Proを出したからかな？）

# 7. その他データの取得と確認
その他のデータについてはこの章でまとめます。

## 7.1. EPSの取得
株主が気にしがちなEPSを取得します
```python:ipynb
appl.earnings_dates
```
では確認します

![スクリーンショット 2024-02-10 0.28.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883815/3ed24431-831c-010d-5644-4446f8316b5b.png)


## 7.2 銘柄関連ニュース
なんと最新のニュース情報まで取得できます。
```python: ipynb
appl.news
```
確認します
```text: ipynb
[{'uuid': '00085c3f-724a-39ca-aa21-d383d5c5ef58',
  'title': 'Here are my favorite Vision Pro apps (so far)',
  'publisher': 'TechCrunch',
  'link': 'https://finance.yahoo.com/m/00085c3f-724a-39ca-aa21-d383d5c5ef58/here-are-my-favorite-vision.html',
  'providerPublishTime': 1707436280,
  'type': 'STORY',
  'thumbnail': {'resolutions': [{'url': 'https://s.yimg.com/uu/api/res/1.2/jvOMriS3vWCqZxjZJlY.EA--~B/aD0xMzUwO3c9MjQwMDthcHBpZD15dGFjaHlvbg--/https://media.zenfs.com/en/techcrunch_for_finance_733/fd373aec835359acf5c935e81122a73a',
     'width': 2400,
     'height': 1350,
     'tag': 'original'},
    {'url': 'https://s.yimg.com/uu/api/res/1.2/V3a18BNf0FCGTZBB3apaYA--~B/Zmk9ZmlsbDtoPTE0MDtweW9mZj0wO3c9MTQwO2FwcGlkPXl0YWNoeW9u/https://media.zenfs.com/en/techcrunch_for_finance_733/fd373aec835359acf5c935e81122a73a',
     'width': 140,
     'height': 140,
     'tag': '140x140'}]},
  'relatedTickers': ['AAPL']},
 {'uuid': '0c2b9bd6-ab6a-3af7-8d2f-2ce2dce0abe4',
  'title': '30 Largest Companies in the World by Revenue',
  'publisher': 'Insider Monkey',
  'link': 'https://finance.yahoo.com/news/30-largest-companies-world-revenue-230959905.html',
  'providerPublishTime': 1707433799,
  'type': 'STORY',
  'thumbnail': {'resolutions': [{'url': 'https://s.yimg.com/uu/api/res/1.2/bugMxaCL2C1BTh19SMyHBA--~B/aD04MTY7dz0xNDU2O2FwcGlkPXl0YWNoeW9u/https://media.zenfs.com/en/insidermonkey.com/a60d9d9ecc45e68859f24af1edf78365',
     'width': 1456,
     'height': 816,
     'tag': 'original'},
    {'url': 'https://s.yimg.com/uu/api/res/1.2/IM2.nhx7Xky.c8VdxFjZCg--~B/Zmk9ZmlsbDtoPTE0MDtweW9mZj0wO3c9MTQwO2FwcGlkPXl0YWNoeW9u/https://media.zenfs.com/en/insidermonkey.com/a60d9d9ecc45e68859f24af1edf78365',
     'width': 140,
     'height': 140,
     'tag': '140x140'}]},
  'relatedTickers': ['AAPL', '^GSPC', 'WMT', 'AMZN', 'CVX', 'STLAM.MI', 'MCK', 'CI', 'CAH', 'BP', 'MSFT', 'GOOG', 'TM', 'SSNLF', 'XOM', 'COST']},
  ```
  このように最新ニュースのURLやタイトルだけでなく、そのニュースに関連する企業のtickerやニュースの出版元企業なども取得できます。

# 8. まとめ
このようにyfinance のライブラリを用いてyahoo finance APIにアクセスすることでさまざまなデータを取得することが可能です。
予想以上に記事が長くなってしまったので当記事は上編と下編に分けたいと思います。下編ではyfinanceを使った株価データの取得と実際に使っているコードを紹介します。

# 最後に
最後まで読んでいただきありがとうございます🙇
ハートやストックはモチベーションにつながるので是非ともよろしくお願いします。

もしご興味あれば他の記事もぜひご参照ください。

https://qiita.com/aguilarklyno/items/9a1c1a6f5e478c81c725

# 参考文献

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

https://www.qmr.ai/yfinance-library-the-definitive-guide/#Is_yfinance_the_official_library_for_Yahoo_Finance

https://note.com/misamisa333/n/n0d574c96b8d6