『Pythonでできる！ 株価データ分析』をwin10上のVSCodeで写経してみた

# 1.はじめに
片渕著　『[Pythonでできる！株価データ分析](https://www.morikita.co.jp/books/mid/085711)』を写経している。
本書はPythonを使って株価データの分析を行うことをテーマとした書籍である。本書ではツール(IDE、エディタ)としてGoogle Colaboratoryを使っている。Google Colaboratoryの無料版は、動作のレスポンスがなんとなく遅いのと、立ち上げるたびにライブラリをインストールしなければならないので使いたくない。そこでVSCodeで写経を進めたいと思ったが、サンプルコードを写経し始めると思い通りに動かなかったので、その対処法を記述する。
  

# 2.トラブルと対処法
## 2.1　pandas (pandas_datareader)のplot()メソッドで描画できない
リスト2.7～2.8(p33)
GoogleColaboを使えば何の問題もないが、VSCodeを使うとpandasのplot()メソッドで描画ができない。
調べてみたところ、

　(1)pandas_datareaderは、pandasライブラリの派生である。
　(2)[pandasのplot()メソッドは、Pythonのグラフ描画ライブラリMatplotlibのラッパーである。](https://note.nkmk.me/python-pandas-plot/)
　(3)[plot()メソッドの裏でMatplotlibが動いている。](https://teratail.com/questions/354326#reply-484512)

と、いうことが分かった。
以上のことから、ソースコードを以下のように2行追記(「# VSCでグラフを描画するために追加」の箇所)し変更したところ、描画ができるようになった。
```python
#リスト2.7～2.8(p33)
import pandas_datareader as pdr
from matplotlib import pyplot as plt    # VSCでグラフを描画するために追加

def get_stock_data(code):
    df = pdr.DataReader("{}.JP".format(code), "stooq").sort_index()
    return df

df = get_stock_data(9984)
df.plot()
plt.show()    # VSCでグラフを描画するために追加
```
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501068/08b0ce98-38f0-aed0-bbe4-26b768a44dd8.png)


以上から推測すると、`df.plot()`で表示するための作画をし(jpegやpngファイルのようなものつくり)、`plt.show()`で表示するためのウインドウを開き作画したグラフを張り付けて表示したのであろう。（調べてないけど、、、）

## 2.2　mplfinanceで作成されたグラフが表示できない（瞬時に消える）

mplfinanceで作成されたグラフのウインドウが瞬間的に表示され消えてしまう。これも2.1項同様、`pyplot`をインポートし、グラフを表示する際に`fig.show()`の代わりに`plt.show()`と書き換えることで(ソースコードの# VSCでグラフを描画するために追加)、グラフが恒久的に表示される。但し、2.3項のように凡例の線種がことなる問題が起こる。

```python
# リスト3.31 書籍版
import pandas_datareader as pdr
from matplotlib import pyplot as plt    # VSCでグラフを描画するために追加
import mplfinance as mpf
import datetime as dt

def get_stock_data(code):
    df = pdr.DataReader("{}.JP".format(code), "stooq").sort_index()
    return df

######################################################################
# コロワイドの株価を取得
df = get_stock_data(7616)

df["ma5"] = df["Close"].rolling(window=5).mean()
df["ma25"] = df["Close"].rolling(window=25).mean()
df["ma75"] = df["Close"].rolling(window=75).mean()


cdf = df[dt.datetime(2021,10,1):dt.datetime(2022,2,28)]
apd = {"MA5":mpf.make_addplot(cdf["ma5"], color="blue"),        # 書籍(修正版)のコード
       "MA25":mpf.make_addplot(cdf["ma25"], color="green"),
       "MA75":mpf.make_addplot(cdf["ma75"], color="red")
}

#描画情報を取得
fig, axes = mpf.plot(
        cdf, 
        type="candle", 
        figratio=(2,1), 
        addplot=list(apd.values()),     # 書籍(修正版)のコード
        returnfig=True,
        volume=True
    )

# ラベルを追加
axes[0].legend([None]*(len(apd)+2))                             # 書籍(修正版)のコード
handles = axes[0].get_legend().legendHandles                    # 書籍(修正版)のコード
axes[0].legend(handles=handles[2:], labels=list(apd.keys()))    # 書籍(修正版)のコード
# チャートを表示する
#fig.show()     # グラフを表示するためのウインドウが一瞬表示されてすぐに消えてしまう。
                # グラフを表示でいないため、上のfig.show()をコメントアウトし、下のplt.show()を追加
plt.show()      # VSCでグラフを描画するために追加
```

![図３０_縮小25%.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501068/0a4d3cb8-1a4c-13e3-d29b-52ed905bade3.png)

## 2.3 TA-Lib
TA-Libのインストール方法は、書籍のp83~84に記述されているが、これはgoogle Colabo用のインストール方法である。よって、win10の環境下では別の方法が必要になる。
調べたところ、[Qiita](https://qiita.com/ConnieWild/items/cb50f36425a683c914d2#windows)内に記述されていた。
改めて引用し、記述すると、
－－－－
(1)下記サイトからダウンロード
https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib
Python3.10.x 64bit ⇒ TA_Lib-0.4.24-cp310-cp310-win_amd64.whl
上のファイルをダウンロードし、適当なホルダーにコピーする。（例えばD:\kvh8b\tempフォルダを作り、ダウンロードしたファイルをコピー＆ペーストする。）

(2)ダウンロードしたモジュールをインストール
コマンドプロンプトなどを使って、ダウンロードしたファイルのフォルダ(ディレクトリ)に移動し、次のコマンドでモジュールをインストールする。

```
D:\k\temp >pip install TA_Lib-0.4.24-cp38-cp38-win_amd64.whl
```
`Successfully installed TA-Lib-0.4.24`と成功のメッセージがでればインストール完了である。


＜以下、読み進みながら追記していく＞

# 3.環境
## 3.1 PC
OS:windows10

## 3.2 VSCode
python ver.3.10
b==1.0.0
beautifulsoup4==4.12.0
certifi==2022.12.7
charset-normalizer==3.1.0
contourpy==1.0.7
cycler==0.11.0
fonttools==4.39.2
idna==3.4
japanize-matplotlib==1.1.3
kiwisolver==1.4.4
lxml==4.9.3
matplotlib==3.7.1
mplfinance==0.12.9b7
numpy==1.24.2
packaging==23.0
pandas==2.0.3
pandas-datareader==0.10.0
Pillow==9.4.0
pyparsing==3.0.9
python-dateutil==2.8.2
pytz==2023.3
requests==2.28.2
six==1.16.0
soupsieve==2.4
tzdata==2023.3
urllib3==1.26.15

##3.3 GoogleColabo(抜粋）
python Ver.3.10
beautifulsoup4==4.11.2
matplotlib==3.7.1
pandas==1.5.3
pandas-datareader==0.10.0
pandas-gbq==0.17.9