ゼロから始める株取引！Pythonで株価トレンド予測（１本目：CSVファイルの準備まで）

# はじめに

年明け早々に市場区分の見直しが発表[^1]され、市場の運営を支えるITベンダはざわざわ（？）していることかと思慮します。
昔は、ヘラクレス（新興企業向けの市場で、現在はJASDAQ）の情報をよく眺めていました。。。懐かしい。

筆者の学生時代からの趣味、いや夢。はい、株取引きで楽して儲けたいです。
昔からメンテしている株価トレンド予測のJavaプログラムは一旦置いといて、再スタートを切るべくちょいと前にPythonプログラムとして刷新しました。

今回から2本立ての記事で、「**東証1部の銘柄コードに対して翌日の株価トレンド（上昇／下降）を予測する**」過程をCode交えて紹介してゆく。

1. モデル作成に使うCSVファイルの準備　★本稿
2. [CSVファイルをInputにした予測モデルの作成](https://qiita.com/Blaster36/items/00c1f95f173b63ab3c42)


## 本稿で紹介すること

- データの収集および整形
- 特徴量設計

## 本稿で紹介しないこと

- 予測モデルの作成（含むハイパーパラメータのチューニング）
- 予測精度の確認
- 特徴量重要度の確認（可視化）

# まずは、環境の準備

こちらで紹介されているDockerを使った環境[^2]を参考にしました。

https://kino-code.com/python_automation_stock_analysis2/

:::note info
筆者は、作ったコンテナイメージを使ってJupyterHubからコンテナ起動しました。
:::

ベースのコンテナイメージは、こちらで公開されているものを利用しました。

https://hub.docker.com/r/jupyter/minimal-notebook/tags?page=1&name=python-3.8.8

以下、PythonとPythonライブラリ群のVer情報です。

```shell:
$ python -V
Python 3.8.8
$ python -m pip --version
pip 21.3.1 from /opt/conda/lib/python3.8/site-packages/pip (python 3.8)
```

# 続いて、データの収集および整形

こちらの動画にて解説されているPythonコード[^3]を参考にしました。冒頭から約9分です。

https://www.youtube.com/watch?v=asfWaVpCyl8

異なるところを簡単に。

:::note warn
筆者は、自宅PCからプロバイダ網抜けてインターネット接続ありの環境で実行しています。
企業（Proxy環境）の方はお気を付けくださいませ。
:::

動画では「**日経225インデックス**」を対象としているのですが、本稿では冒頭で伝えた通り東証1部の銘柄コードを対象としました。
そのため、以下のPythonコードでデータ取得しています。

```python
# 分析用データのダウンロード
import datetime
import pandas_datareader as data

# 銘柄コード
MEIGARA_CODE = '9983.T'

start = datetime.date(2010, 1, 1)
end = datetime.date(2021, 12, 31)
df = data.DataReader(MEIGARA_CODE, 'yahoo', start, end)
df.to_csv('%s.csv' %MEIGARA_CODE)
```

目的変数（pandas.DataFrameのUp列）まで作ります。

# そして、特徴量設計

基本的に、参考動画の流れをそのままにです。
が、異なるところを簡単に。

以下のPythonコードで**勢力指数**を追加しました。

```python
# 勢力指数（Force Index）を追加
df['Force_Index'] = df['Close'] * df['Volume']
```

加えて、いくつかテクニカル指標を追加しました。
「TA-Libで株価のテクニカル指標をチェック」の項で紹介されているテクニカル指標が対象[^4]。
TA-Libは秀逸ですね（インストールはちょっとクセあるけれども）。

https://nehori.com/nikki/2020/01/26/post-15231/

```python
# TA-Libのインポート
import talib

# テクニカル指標
def add_technical_features(df):
    # Simple Moving Average
    close = df['Close']
    df['sma3'] = talib.SMA(close, timeperiod=3)
    df['sma5'] = talib.SMA(close, timeperiod=5)
    df['sma25'] = talib.SMA(close, timeperiod=25)
    df['sma50'] = talib.SMA(close, timeperiod=50)
    df['sma75'] = talib.SMA(close, timeperiod=75)
    df['sma100'] = talib.SMA(close, timeperiod=100)
    # Bollinger Bands
    df['upper1'], middle, df['lower1'] = talib.BBANDS(close, timeperiod=25, nbdevup=1, nbdevdn=1, matype=0)
    df['upper2'], middle, df['lower2'] = talib.BBANDS(close, timeperiod=25, nbdevup=2, nbdevdn=2, matype=0)
    df['upper3'], middle, df['lower3'] = talib.BBANDS(close, timeperiod=25, nbdevup=3, nbdevdn=3, matype=0)
    # MACD - Moving Average Convergence/Divergence
    df['macd'], df['macdsignal'], df['macdhist'] = talib.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9)
    # RSI - Relative Strength Index
    df['rsi9'] = talib.RSI(close, timeperiod=9)
    df['rsi14'] = talib.RSI(close, timeperiod=14)
    return df
```

# Notebook（Pythonコード）

githubで公開しました。このタイミングですが、参考サイトの方々に感謝申し上げます。

https://github.com/Blaster36/Script/blob/main/StockPrice/predStockPrice-LightGBM1.ipynb

# まとめ

モデル作成に使うCSVファイルの準備の過程をまずはご紹介。
そして、ココから先が本番。予測モデルの作成＆チューニングのスタートラインに立ったまで。。。

[^1]: 市場区分見直しの概要 | https://www.jpx.co.jp/equities/market-restructure/market-segments/index.html
[^2]: Dockerを使った環境構築 | https://kino-code.com/python_automation_stock_analysis2/#Docker
[^3]: Pythonで将来予測｜株価データを使ってpythonで機械学習をしてみよう【データ加工、データ整形、予測モデル作成、株価データの分類予測、予測精度の確認まで】 | https://www.youtube.com/watch?v=asfWaVpCyl8
[^4]: 機械学習で株価予測（TA-LibとLightGBMを使った学習モデル構築） | https://nehori.com/nikki/2020/01/26/post-15231/