Pythonの基礎も知らない超初心者が、GAFAの株価をグラフにしてみた

Pythonの基礎すらわかっていない超初心者です。
ひたすらググりながら、GAFAの株価をグラフにしてみました。
取得までの流れを、学習メモとして記録します。

※元記事→[Pythonの基礎も知らない超初心者が、GAFAの株価をグラフにしてみた【学習メモ】](https://note.com/cotton11aq/n/nb32042072e43?magazine_key=m115992c894aa)

## Pythonライブラリ

株価を取得してグラフにするには、以下のライブラリを使います。

* <strong>Pandas：データ解析ライブラリ
* <strong>Matplotlib：グラフ描画ライブラリ
* <strong>NumPy：Pythonの拡張モジュール

各ライブラリの特徴は以下の記事から確認してください。




>[データ分析のライブラリ！Pandasとは【初心者向け】｜現役エンジニアが解説](https://techacademy.jp/magazine/17697)
データの統計量を表示したり、グラフ化するなど、データ分析（データサイエンス）のライブラリPandasについて紹介しています。

>[グラフ描画ライブラリ！matplotlibの使い方【初心者向け】](https://techacademy.jp/magazine/17472)
Pythonでグラフ描画ができるライブラリmatplotlibの使い方について詳しく解説しています。


>[Pythonの拡張モジュール「NumPy」とは？インストール…｜Udemy メディア](https://udemy.benesse.co.jp/data-science/ai/python-numpy.html)
NumPyはPythonでの機械学習の計算をより速く、効率的に行えるようにする拡張モジュールです。

## 環境構築

Pythonの実行環境は、<strong>Google Colaboratory</strong>を使います。

* <strong>Google Colaboratory</strong>
Jupyter Notebookを必要最低限の労力とコストで利用でき、ブラウザとインターネットがあれば今すぐにでも機械学習のプロジェクトを進めることが可能なサービスのこと。

* <strong>Jupyter Notebook</strong> 
Pythonをブラウザ上で実行し、実行結果を記録しながらプログラミングを進めるためのツール。

データ分析の現場や、研究機関などでも頻繁に使われています。
これらのサービスを使うことで、ブラウザ上でPythonの実行結果をすぐに確認することができます。

詳しくは以下の記事を参考にしてください。

>* [Google Colaboratory](https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja)
Colaboratory（略称: Colab）は、ブラウザから Python を記述、実行できるサービスです。

>* [データ分析で欠かせない！Jupyter Notebookの使い方【初心者向け】](https://techacademy.jp/magazine/17430)
初心者向けにPythonを使ったデータ分析で便利なJupyter Notebookの使い方を詳しく解説しています。


ここまでの流れをまとめます。

* Pythonでデータ分析をするためにはPythonのライブラリが必要。
* Google Colaboratoryというサービスを使って、簡単にプロジェクトを進めることができる。
* Jupyter Notebookというツールで、Pythonをブラウザ上で実行し、実行結果を記録しながらプログラミングを進めることができる。

という認識で良いでしょう。
間違ってたらすいません。

## 株価を取得してグラフを作成する

では、実際にコードを書いてみます。

コードについては、TFさんの記事を参考にさせていただきました。
TFさんは、Pythonを使った資産運用の記事をたくさん書かれています。
ここまでPython使えたら楽しいでしょうね。

>* [米国株のパフォーマンス・成績をPythonで早く、綺麗に調べる [Python 米国株 pyfolio コードあり]](https://note.com/225_dow/n/n5ba1c25224dd)


そして出来上がったコードがこちら。

```python

!pip install fix_yahoo_finance

import datetime
import fix_yahoo_finance as yf
import matplotlib.pyplot as plt
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')

start = datetime.date(2020,1,1)
end = datetime.date.today()

codelist = ["GOOGL","AAPL","FB","AMZN","^N225"]
data2 = yf.download(codelist, start=start, end=end)["Adj Close"]

display(data2.head(2).append(data2.tail(2)))
df_all=100*data2.pct_change()
display(df_all[codelist].head(2).append(df_all[codelist].tail(2)))

df_all[codelist].cumsum().plot(figsize=(8,6),fontsize=18)
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5), fontsize=18)

plt.grid(True)
plt.show()
```

## コードの解説

#### 株価の情報をインストール

```
!pip install fix_yahoo_finance
```


データ分析にはpandasというライブラリを使います。
そのpandasを使ってヤフーファイナンスから株価の情報をインストールします。
<br />

####現在の日付をインポート

```
import datetime
```

<br />
#### pandasでインストールしたヤフーファイナンスの情報を「yf」という名前でインポート

```
import fix_yahoo_finance as yf
```


<br />
#### matplotlibのpyplotを、pltという名前でインポート

```
import matplotlib.pyplot as plt
```


><strong>matplotlib</strong>：Pythonでグラフを描画したり、イメージを表示させたりする際に使用するライブラリ。
><strong>pyplot</strong>：matplotlibパッケージ内のモジュール。

欲しいプロットを作るために暗黙的かつ自動的に図形や軸を作成するインターフェースです。
基本的にはこのモジュール越しにmatplotlibの機能を活用します。

<br />
#### Jupyter Notebookでノートブック上にグラフを描画する際に指定する記述

```
%matplotlib inline
```


<br />
Jupyter Notebookで原因不明のエラーのような警告が表示されることがあります。
しかし、結果には何の影響もない警告なので、それを非表示にします。

```
import warnings
warnings.filterwarnings('ignore')
```

<br />
ここまでの実行結果は以下のようになります。
Errorが出ていますが、問題ないエラーみたいです。

![picture_pc_fbf3da8829153c94e5cf65eaa79ec57b-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/999567/517c0ea2-8da1-2a3c-76b6-f2ab0fd9b1b9.jpeg)

<br />

#### startに取得したい期間の最初の日付を代入

```
start = datetime.date(2020,1,1)
```
<br />

#### endに今日の日付を代入

```
end = datetime.date.today()
```

<br />

#### codelistに配列でGAFAの名前を代入

```
codelist = ["GOOGL","AAPL","FB","AMZN","^N225"]
```
名前の略称のルールは調べてもわかりませんでしたが、tradingviewで出てくる名前を入れたら大丈夫でした。
また、比較用に日経平均のデータも代入します。

<br />

####data2に上記のcodelistの企業のstartからendまでの株価情報（調整後終値）をダウンロード

```
data2 = yf.download(codelist, start=start, end=end)["Adj Close"]
```
<strong>Adj Close</strong>：調整後終値
<br />

#### data2の上位２件と下位２件をdisplayで表示

```
display(data2.head(2).append(data2.tail(2)))
```
<strong>display</strong>：dataframe形式の表のレイアウトを保持して表示
<strong>head(2)</strong>：上位２件
<strong>tail(2)</strong>：下位２件
<strong>append</strong>：末尾に要素を追加

<br />

#### data2のデータの変化の比率を100回分計算し、df_allに代入

```
df_all=100*data2.pct_change()
```
<strong>pct_change</strong>：変化の比率を計算する関数
（その行の値ー前の行の値）／前の行の値

例）今日の株価：1,100円／株
　　昨日の株価：1,000円／株
（1,100ー1,000）／1,000＝10
株価が10％上昇したことになります。


<br />

#### codelist（GAFAと日経平均)の変化率の上位２件と下位２件を表示

```
display(df_all[codelist].head(2).append(df_all[codelist].tail(2)))
```
<br />
ここまでの実行結果は以下のようになります。
![picture_pc_ed60c26a27446451a289d4e60f682877.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/999567/b2c32c39-0dbd-80dd-33a9-cbd81022fc77.jpeg)
株価と株価の変化率の上位２件と下位２件が取得できていることがわかります。

<br />
#### 各株価の変化率を足し合わせ、配列として出力

```
df_all[codelist].cumsum().plot(figsize=(8,6),fontsize=18)
```


<strong>cumsum()関数</strong>：要素を足し合わせたものを、配列として出力するNumPyの関数
<strong>plot</strong>：matplotlibのメソッド。線グラフを書くときに使います。
<strong>figsize</strong>：横のサイズと縦のサイズ
<strong>fontsize</strong>：フォントの判例のフォントサイズ

<br />

#### 凡例をグラフの右側の縦中央に表示

```
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5), fontsize=18)
```


<strong>plt.legend</strong>：判例を表示loc：判例の場所を指定
<strong>center</strong>：判例の縦の位置
<strong>left</strong>：判例の横の位置
<strong>bbox_to_anchor</strong>：グラフの枠の位置指定
<strong>1,0.5</strong>：右端、縦中央

<br />

ここまでの実行結果は以下のようになります。
![picture_pc_3748032b7c7e73dc5ac2013b8c96efca.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/999567/cd9fd159-e291-8f17-b47b-ba11d2c89322.jpeg)

#### グリッド（格子）をグラフに表示

```
plt.grid(True)
```

<br />

#### 作ったグラフを画面に表示

```
plt.show()
```
<br />
実行結果は以下のようになります。
![picture_pc_b46ee18774c68f646de566ac41a804d9.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/999567/fb33eade-3c43-25f0-da69-f4b198d0408d.jpeg)
株価の変化率を格子状のグラフに表すことができました。

「エクセルにできてPythonにできないことはない」と聞いたことがありますが、初心者ながら、そんな可能性を感じさせてくれました。

## GAFAが強すぎる件

株価をグラフに表すことができたので、少し中身をみて見ましょう。

GAFAについては、コロナショックで一時的に下げたものの、あっという間にコロナ前の水準を回復し、今も史上最高値を更新し続けています。

何も考えず、GAFAのどれか買っておけば間違いない気がしますね。

日経平均はGAFAに比べるとかなり弱いですね。

とはいえ、政府のありとあらゆる政策のおかげで、コロナ前の水準はほぼ回復しています。

一番弱い日経平均でさえ、コロナショックの最安値から30%近く上昇しています。
コロナショック時にたくさん仕込みたかった。

## まとめ

* 超初心者でもGAFAの株価を取得することができた。
* やりながら学んでいったら自ずと知識がついた。
* 投資先は日本株より米国株がいい。
* 暴落が来ても政府がなんとかしてくれるので、ガチホすればいい。

今回はGAFAの株価を取得しただけですが、それだけでもPythonのすごさを体感することができました。

Pythonで自分の資産運用ポートフォリオとか作れたら楽しそうですね