QuantX Factory、pandasチュートリアル1

# この記事について
QuantX Factoryにてシステムトレードアルゴリズムを開発したい人向けのチュートリアルです。必要となるpandas知識を絞り込み、最短経路でシステムトレードアルゴリズムを作成できるようになることを目的とした記事となっています。
pandasの基礎を網羅的に知りたい方は、他の方のpandasまとめ記事をご覧ください。

# [QuantX Factory](https://factory.quantx.io/)とは
smart trade社が無料で提供しているシステムトレードアルゴリズムをブラウザ上でpythonを使って開発できるプラットフォーム。

以下の理由から、pythonで株価予測をやってみたい人におすすめです。
- Web上のプラットフォームのため開発環境構築が不要であること
- 各銘柄の終値や高値などの各種データが用意されておりデータセットの用意不要
- 開発したトレードアルゴリズムは審査を通過すればQuantX Storeで販売可能
- 新エンジン移行に伴い、終値、始値、指値での注文が選択可能になるなど、より多様な戦略を組めるようになったこと

データの収集、更新だけに大量の時間を持っていかれる時代もこれにて終わりですね。
QuantXの詳しい使い方については[こちら](https://factory.quantx.io/handbook/ja/)。


# pandasとは
データ分析を効率的に行うライブラリで、数表および時系列データを操作する際によく用いられます。QuantXではこのpandasを基本としてコードが書かれているので、操作方法を着実に理解していきましょう！

（まだpythonを触ったことがない人は、[こちら](http://etc9.hatenablog.com/entry/20100914/1284482050)のリンクで簡潔にわかりやすくまとまっていたので、こういったサイトでpythonの基本を学ぶところから始めましょう！）

# 目標
チュートリアル1では、pandasを使って日付、銘柄ごとの株価表を作成することを目指します。

完成目標

|  | jp.stock.1305 | jp.stock.9984 |
|:-:|:-:|:-:|
|2019-06-24|1640.0|5152.5|
|2019-06-25|1635.0|5099.0|
|2019-06-26|1628.0|5027.0|
|2019-06-27|1647.0|5201.0|
|2019-06-28|1646.0|5165.0|


# 流れ
１、準備
実際にコードを書いて練習するための準備をします
２、練習
QuantX Factoryでの使用を想定し、サンプル株価データを使いながら、pandasの基本から練習していきます。
３、クイズ
練習したものの中から、数個クイズ形式で問題を出します。これをクリアして次のチュートリアルへ進みましょう！

# １、準備
ただ読むだけでは飽きてしまうので、ブラウザ上でpythonコードを実行できるサイトを用いて、実際に書いて練習しましょう！操作はとても簡単です。
まずこちらのサイトを開いてください。[paiza.IO (パイザ・アイオー)](https://paiza.io/ja)

### paiza.IOの使い方
<img width="1440" alt="スクリーンショット 2019-07-04 15.47.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/383100/3d532c60-92ed-eedc-c500-a893192a1a32.png">

赤丸で囲ってある、”コード作成を試してみる（無料）”をクリックしてください。

<img width="1440" alt="スクリーンショット 2019-07-04 15.54.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/383100/a07a7901-ce95-cbea-9ef7-a7c5ae0771a4.png">

すると、こちらの画面に移ります。
左上の緑色のボタンで言語をpython3へ変更してください。

<img width="723" alt="スクリーンショット 2019-07-04 16.03.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/383100/ee0eac64-365f-25f4-e83d-bc763eca0041.png">



準備完了です！！
これでブラウザ上でコードを書き、結果を表示することができます。

大まかな使い方は以下の通りです。
1、上半分（黒背景）のコード記入部分にプログラムを記入
2、左下の緑色の実行ボタンを押す（ショートカットキー：Ctrl+Enter）
３、下半分（白背景）の出力画面で、プログラム実行結果を確認
（思ったように出力されていなければ、また１からスタート）

それでは、実際にpandasを使ってコードを書いていきましょう！
# ２、練習

## import
まずはpandasライブラリを使用するために、pandasをimportしましょう！
（importの説明は[こちら](https://techacademy.jp/magazine/19292)の記事をチェックしてください。）

```
import pandas as pd
```
paiza.IOのコード記入部分へ、このコードを記入して、左下の実行ボタンを押してください。ここでは、出力画面に何も表示されないのが正解です！
```メモ：
pandasをimportするときは、"as pd"を後ろに付けるのが慣例です。
これは、今後pandasライブラリ内の関数を使う際に、毎回pandasと書くのが面倒なので、pandasを"pdとして"importして、今後はpdだけ書けばOKにしますよ！っていう意味です。
```

さあ無事にimportできたら、実際にサンプル株価データを作成してみましょう！


## シリーズ（Series）
pandasには主にシリーズ（Series）とデータフレーム（DataFrame）の2種類のデータ形式があります。それぞれデータを、シリーズでは１次元データ、データフレームでは2次元データとして収納します。まずは、シリーズを使って1次元データを作成しましょう。
（3次元データに対応するパネル(panel)もありますが、こちらはQuantX Factoryのチュートリアルで説明します。）

### 株価データ
今回はダイワ 上場投信-トピックス（"jp.stock.1305"）の2019年6/24~6/28までの株価（終値）を使ってみましょう。
（コードは毎回、前回のものを消去し、新たなもののみを記入してください。）

```
import pandas as pd
cp = [1640.0, 1635.0, 1628.0, 1647.0, 1646.0]
data = pd.Series(cp)
print(data)
```
コードが書けたら、実行を押し、出力を確認しましょう。
<img width="160" alt="スクリーンショット 2019-07-05 11.22.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/383100/d5a76990-708c-8784-1ee8-f2cdbd0413bb.png">

株価のシリーズができました！

<img width="160" alt="スクリーンショット 2019-07-05 11.22.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/383100/b774a707-aa99-40a1-7529-3518bb7937c0.png">

株価の左に0~4と数字が並んでいますね。シリーズでは、データ配列とそれに関連づけられたインデックスというデータラベルの配列が含まれます。今回はインデックスを特に指定しなかったため、出力左列のように、0~4のデフォルトのインデックスが作成されています。
```メモ：
出力下部のdtypeとは、配列データのデータ型を示しています。ここでは特に気にする必要はありません。
```

### 日付をインデックスとして追加
pd.Series()中で、データののちに、追加したいインデックスを引数として与えることで、任意のインデックスを追加することができます。今回は日毎の終値データを使用しているの、日付をインデックスとして追加してみましょう。

```
import pandas as pd
cp = [1640.0, 1635.0, 1628.0, 1647.0, 1646.0]
cp_index = ["2019-06-24", "2019-06-25", "2019-06-26", "2019-06-27", "2019-06-28"]
df = pd.Series(cp, index=cp_index)
print(df)
```
コードを記入して、実行を押してください！

<img width="179" alt="スクリーンショット 2019-07-05 11.31.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/383100/6c211062-d881-7399-18a4-a45098061805.png">
インデックスとして、日付を追加することができましたね！

## データフレーム(DataFrame)
次に、データフレームを使って2次元データを作成しましょう。
次元が増えることで、先ほどの日付ごとのデータに、銘柄ごとや、値段の付け方ごと（始値、高値、安値）といった、新たな軸のデータを追加できます！
今回は、同じ時期のソフトバンクグループ("jp.stock.9984")の終値を追加してみましょう。

データフレームを作成するには様々な方法がありますが、ディクショナリーかNumpyの配列を使うのが最も一般的です。Numpyを知らない人もいると思うので、ここではディクショナリーを使用しましょう。

```
import pandas as pd
cp = {"jp.stock.1305":[1640.0, 1635.0, 1628.0, 1647.0, 1646.0],
      "jp.stock.9984":[5152.5, 5099.0, 5027.0, 5201.0, 5165.0]}
cp_index = ["2019-06-24", "2019-06-25", "2019-06-26", "2019-06-27", "2019-06-28"]
df = pd.DataFrame(cp, index=cp_index)
print(df)
```
さあ出力結果はどうですか？
<img width="332" alt="スクリーンショット 2019-07-05 13.13.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/383100/18d899b5-2296-b439-dad9-71616f0db6a4.png">
銘柄ごとの情報が追加されました！
さあ、これであなたもpythonで株価データ表を作成することができるようになりました！

# Quiz
さあ、チュートリアルで学んだことを使って、新しい株価表を作ってみましょう！
今回は、同時期の日産自動車（"jp.stock.7201")、ファストリテーディング("jp.stock.9983")の株価表を作ります。

使用するデータはこちら(簡単のため、小数点以下四捨五入しています)

|  | jp.stock.7201 | jp.stock.9983 |
|:-:|:-:|:-:|
|2019-06-24|767|66530|
|2019-06-25|764|66090|
|2019-06-26|761|65400|
|2019-06-27|778|65390|
|2019-06-28|772|65130|


先ほどのコードの必要な部分だけ修正して、pandasで新しい株価表を作りましょう。

正解の出力がこちら。簡単ですね！次のチュートリアルは[こちら](https://qiita.com/kei-tenniaco/items/7f3ed0d3d89febca8794)！
<img width="333" alt="スクリーンショット 2019-07-08 11.14.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/383100/ee0e84f7-389a-0c02-c3ff-2edc0aed579f.png">

解答

```
import pandas as pd
cp = {"jp.stock.7201":[767, 764, 761, 778, 772],
      "jp.stock.9983":[66530, 66090, 65400, 65390, 65130]}
cp_index = ["2019-06-24", "2019-06-25", "2019-06-26", "2019-06-27", "2019-06-28"]
df = pd.DataFrame(cp, index=cp_index)
print(df)
```