Pythonの基礎も知らない超初心者が、楽天証券の実現損益データをPythonでグラフ化してみた

楽天証券の実現損益データをグラフにしてみました。

実現損益とは、<strong>保有する株式などを売却したり決済したりして確定する損益のこと</strong>を意味します。
それまでは<strong>含み損益</strong>と呼び、現金化されることでその損益を確定することになります。

つまり、実現損益を確認することで、自分が今まで得をしたのか、損をしたのかがわかります。
過去の成績を振り返り、同じミスをしないよう、今後の投資に活かしていきましょう。

※元記事→[楽天証券の実現損益データをPythonでグラフ化【学習メモ】](https://note.com/cotton11aq/n/na083465799bb?magazine_key=m115992c894aa)

## csvファイルの取得

まずは楽天証券から実現損益のデータ（csvファイル）を取得します。
楽天証券にログインし、口座管理→損益・税金履歴→実現損益を開きます。

以下のような画面が表示されたら、画面右下の「CSV形式で保存」をクリックして保存します。

![picture_pc_55f4822bae2299441937f6c4fed09926.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/999567/335ef259-a905-c593-6c20-cfaa4ae7745a.jpeg)

以下のように、楽天証券から実現損益のcsvファイルを取得することができました。（見にくいですが、99%損してます。）

![picture_pc_25da6fe28172d07769885719567f609d.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/999567/2598756a-05de-fc28-bc7d-4eaa8948dd3f.jpeg)

## ※csvファイルの注意点

楽天証券から持ってくるcsvファイルですが、実は「銘柄コード」以外のすべてのデータ型が「object型」となっています。（dtypesでデータ型を確認）

![picture_pc_3c47c2f12ae2093c2c9852c5bfbec692.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/999567/67db5fee-87bf-2ecd-59b8-608587a739ff.jpeg)

データ型に関しては、以下の記事をご覧ください。

[Pandasでデータ型を確認するdtype/dtypesと型変換を行うastypePandasでデータ型を確認するdtype/dtypesと型変換を行うastype | 侍エンジニア塾ブログ（Samurai Blog） - プログラミング入門者向けサイト](https://www.sejuku.net/blog/62023)

このままだと計算ができないので、「object型」を「int型」に変換する必要があります。
Pythonを使って型を変換しましょう。

と言いたいところでしたが、私にはどうしてもできませんでした。
ということで、今回はスプレッドシートで直接「int型」に変換するという苦肉の策をとりました。

スプレッドシートでファイルを開き、表示形式を「自動」にします。

![picture_pc_da0560848e8a140622d964f7e8be242d.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/999567/2ab8c771-9017-7e4b-9750-c17f3a9deddd.jpeg)


これで「object型」を「int型」に変換することができました。

今後の課題ですね。

「こうすればできるよ！」という心優しい方がおられましたら、教えていただけたら幸いです。

## 作成の手順

それではcsvファイルを読み込み、実現損益をグラフ化していきましょう。

完成したコードはこちら。

```python
from google.colab import drive
drive.mount('/content/drive')

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('drive/My Drive/csv/rakuten-int.csv', encoding='utf-8')

df.head()

df.dtypes

df['実現損益[円]'].cumsum().plot(figsize=(8,6),fontsize=18)
plt.xlabel("Number of transactions",size="12")
plt.ylabel("Realized profit/loss",size="12")
plt.grid(True)
plt.show()
```


まず初めに、csvファイルをGoogle Colabで読み込めるようにします。


しかし、Google Colabはインターネット上で実行するため、csvファイルの読み込みには工夫が必要です。

#### 以下のコードを実行

```python
from google.colab import drive
drive.mount('/content/drive')
```

「count」ディレクトリ以下の「drive」というフォルダに、Google Driveをマウントするという意味です。
Google Driveのファイルはここで指定したフォルダ「drive」以下の、「drive/My Drive」フォルダに格納されます。
このコードを実行すると認証URLが出てくるので、以下の記事の通り、アップデートまで進めてください。


[【Google Colab】ファイルを読み込む方法【3分で出来る】](https://katsuhiroblog.com/google-colab-read-file/)

アップデートまで終わったら、csvファイルを読み込むために、pandasとmatplotlibをインポートします。

#### pandasとmatplotlibをインポート
```python
import pandas as pd
import matplotlib.pyplot as plt
```

#### dfにcsvファイルを代入

```python
df = pd.read_csv('drive/My Drive/csv/rakuten-int.csv', encoding='utf-8
')
```

<strong>read_csv</strong>：csvファイルを読み込む際に使用
<strong>'drive/My Drive/csv/rakuten-int.csv'</strong>：csvファイルまでの相対パス
<strong>encoding=’utf-8’</strong>：文字コード

楽天証券から持ってきたcsvファイルは文字コードに問題？があるため、エラーが発生します。
相対パスの後に必ず「encoding=’utf-8’」を記入しましょう。
詳しくは以下の記事をご確認ください。

[Pythonにおけるunicode decode errorに関する回避方法を現役エンジニアが解説【初心者向け】](https://techacademy.jp/magazine/26028)

#### データが取得できたか確認
```python
df.head()
```

![picture_pc_d4b3682ba02ef6ffbe1d270a755ce078.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/999567/998d1639-73e8-186b-6698-4850324a56e8.jpeg)

データを取得することができました。

#### 実現損益のデータをグラフ化

```python
df['実現損益[円]'].cumsum().plot(figsize=(8,6),fontsize=18)
plt.xlabel("Number of transactions",size="12")
plt.ylabel("Realized profit/loss",size="12")
plt.grid(True)
plt.show()
```

<strong>df['実現損益[円]']</strong>：dfの中の['実現損益[円]']
<strong>cumsum()</strong>：累積和（数列に対して、最初の項からn番目の項まで足したもの）
例えば、日々の売上データからその日までの累計の売上データを出すような計算です。

#### x軸のラベルをプロット
```python
plt.xlabel("Number of transactions",size="12")
```

<strong>Number of transactons</strong>：x軸の名前（日本語で「取引回数」）
<strong>size</strong>：フォントサイズ

#### y軸のラベルをプロット
```python
plt.ylabel("Realized profit/loss",size="12")
```

<strong>Realized profit/loss</strong>：y軸の名前（日本語で「実現損益」）

軸のラベルが英語表記なのですが、日本語表記にすると文字化けします。
本当は日本語表記にしたかったのですが、長くなりそうなのでまた別の機会にします。

<strong>plt.grid(True)</strong>：グリッド（格子）をグラフに表示する
<strong>plt.show()</strong>：作ったグラフを画面に表示する

ここまでの実行結果がこちらです。

![picture_pc_ce65da45eb230cccde0c497dd42ae0cf.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/999567/beacb223-4623-5f2c-bfd9-e90c6acce160.jpeg)

実現損益のデータをグラフにすることができました。

見事なWボトムからのジリ貧です。
グラフで可視化すると非常にわかりやすいですね。

一時はマイナス20万円近くまで行きましたが、急激に取り戻してプラス15万円近くまで回復し、調子に乗って結局マイナスで終わりました。

<strong>ちなみに、最終の実現損益は−5,091円です。</strong>（2020年4月30日でいったん終了）

１年間かけて資産をおよそ5,000円失いました。
勉強代と思えば安いものですね。

## 今後の課題

* Pythonを使って「object型」を「int型」へ変換する
* 軸のラベルを日本語表記にする
* 実現損益を±０以上にする

もっとPythonのスキルをつけて、詳細な分析ができるようにしたいですね。
そして、恥ずかしくない取引データがお見せできるように、資産運用も引き続き頑張ります。