Python データ分析 株式投資

【Pythonコード解説】Plotlyで株価チャートにアニメーションをつけてみる【無駄にかっこいいw】

2022年8月10日

【Pythonコード解説】Plotlyで株価チャートにアニメーションをつけてみる【無駄にかっこいいw】

こんにちは。TATです。

今日のテーマは「【Pythonコード解説】Plotlyで株価チャートにアニメーションをつけてみる」です。

 

タイトルの通り、PythonのPlotlyを使って株価チャートにアニメーションをつける方法について解説していきます。

Plotlyにはアニメーション機能が備わっていて、簡単にアニメーションをつけることができます。

 

異なる銘柄の比較とかをする際にはアニメーションをつけるとわかりやすくなります。

あと、無駄にかっこよくなるので、仕事とかで人に見せる時にちょっとだけドヤ顔できるかもですw

 

公式ドキュメントを確認してみる

まずは公式ドキュメントを見てみます。

「Plotly Animation」とかでググるとこのページが出てきます。

Intro to animations in Python - Plotly

 

一番上にサンプルコードがあるので、丸パクリして実行してみます。

 

animation_frameanimation_groupを使えばアニメーションを使うことができるようです。

また、range_xrange_yを指定して、全体のデータが含まれるように設定しておくこともポイントになります。

 

基本的に、animation_frameさえ指定すればアニメーションになります。

こんな感じの動くチャートを株価チャートに適用してみようとおもいます。

 

【Pythonコード解説】Plotlyで株価チャートにアニメーションをつけてみる【無駄にかっこいいw】

ここからが本題です。

株価チャートにアニメーションをつけてみます。

 

1銘柄だけでアニメーションをつけてもあまり意味ないので、複数銘柄を取得してアニメーションをつけ、その推移を視覚的にみてみようとおもいます。

Plotlyのフォーマットに合わせるため、少しだけデータの準備に手間がかかります。

準備の方法についてもバッチリ解説していきます。

 

株価データの準備

まず株価データの準備です。

 

pandas_datareaderで株価データを取得

株価データはpandas_datareaderを使うと簡単に取得できます。

 

今回は複数銘柄を比較するということで、日経平均株価に日本の代表的な銘柄を僕の勝手な判断で選びました。

期間は適当に2020年1月1日〜2022年6月30日とします。

ピックアップした銘柄はこちらです。

ポイント

  • ^N225:日経平均株価
  • 7203:トヨタ自動車
  • 6758:ソニー
  • 8058:三菱商事
  • 9432:NTT
  • 9101:日本郵船

 

 

きちんとデータがとれていることがわかります。

今回は終値だけで比較していこうと思うので、Adj Closeだけ取り出します。

 

これでデータの準備は完了です。

参考記事
【日本株対応】Pythonで株価データを取得する方法まとめ

続きを見る

 

とりあえず可視化してみる

株価データが準備できたのでとりあえず可視化してみましょう。

plot関数でサクッとみてみます。

 

一応可視化はできましたが、それぞれ株価に大きな違いがあるのでわかりにくいですね。

特に株価の低いトヨタとかは変化が見えにくいです。

異なる株価データを比較するには少し工夫が必要です。

 

異なる株価データを横並びで比較するには?

株価の値が違いすぎると、そのまま横並びで比較するのは難しいです。

ゆえに少し工夫して相対値で出してみます。

よくニュースとかでもみる「○○○○年○月○○日を100とした場合の株価推移」みたいな感じです。

 

過去記事でも詳しく解説しています。

参考記事
【コード解説】Pythonで異なる株価データを横並びで比較する
【コード解説】Pythonで異なる株価データを横並びで比較する

続きを見る

 

最初の行を100として相対値をだす

相対値を出すのは簡単です。

最初の行の数値で全体を割って100をかければOKです。

1行で完了します。

 

iloc関数を使って最初の1行を抜き出します。

あとはそれで全体を割って100をかけたらOKです。

簡単ですね。

 

可視化してみる

相対値に変換出来たのでもう一度可視化してみます。

 

先ほどとは雲泥の差ですね。

全銘柄が100からスタートして、そこからの相対値が表示されています。

これなら異なる株価でも横並びで比較することができますね。

とりあえず、コロナ禍の日本郵船がすごいですね。

 

次に、いよいよこのデータにアニメーションをつけていきます。

 

Plotlyでアニメーションをつけるための下準備

Plotlyでアニメーションをつけるには、animation_frameを指定すればOKでした。

あとはデータ全体が表示されるようにrange_xとrange_yも指定しておく必要があります。

 

折れ線グラフにアニメーションをつけるには少し癖がある

まず、Plotlyで折れ線グラフにアニメーションをつけるポイントについて解説しておきます。

 

結論、今のデータをそのまま使うと事故ります。

理由は、時系列ごとのデータで見ると点でしかないからです。

 

animation_frameは、指定したカラムの値ごとにデータをチャートに表示して、それを連続的に変化させていきます。

なめらかに繋がったパラパラ漫画みたいなイメージです。

 

折れ線グラフの場合、例えば2018-01-04のデータを抽出すると、この日のデータしかありません。

どの日付で抽出してもその日のデータしかありません。

アニメーションで表示するには、2018-01-04には2018-01-04のデータ、2018-01-05のデータには2018-01-04〜2018-01-05のデータ、2018-01-09のデータには2018-01-04〜2018-01-09のデータ、以降繰り返し、のように表示していく必要があります。

 

アニメーション用にデータを変形する

したがって、アニメーション表示するためにデータを少し変形します。

数行で完了します。

 

 

delayというカラムを作り、ここにanimation_framの順番をつけました。

0なら2018-01-04のデータ、1なら2018-01-04〜2018-01-05のデータ、2なら2018-01-04〜2018-01-09のデータといった具合です。

これを順番に表示していくと、折れ線グラフがニョキニョキと伸びているように見えます。

 

Plotlyのデータ形式に合わせるため、ちょっとデータを変形します

次にPlotlyのデータ形式に合わせたデータ整形です。

先ほどのPlot関数とPlotlyでは、データを表示する際のデータ形式が異なります。

Plot関数は、複数行のデータをまとめて可視化できるので便利ですが、Plotlyでは整然データに変換する必要があります。(参照Wikipedia

 

イメージこんな感じです↓

引用元:https://ja.wikipedia.org/wiki/Tidy_data

 

この雑然データの各カラムが、今でいうところの銘柄です。

株価データは銘柄ごとにカラムが異なっています。

整然データにするには、株価データを1つのカラムにまとめて、銘柄名を確認できるカラムを追加すればOKです。

 

melt関数で一瞬で整然データに変換する

整然データを作るとなると大変そうなイメージを持たれるかもしれませんが、Pythonなら一瞬です。

Pandasには、melt関数というものが用意されていて、これで整然データに簡単に変形することができます。

 

 

id_varsで残したいカラムを指定することができます。

ここにDateを指定するために、まずはreset_index()でindexをDateカラムに加えます。

そしてmelt関数でid_varsにDateとdelayを指定すればOKです。

残りのカラムは整然データに変換されます。

 

これで準備OKです。

きちんと整然データに変換されていることが確認できます。

これで全ての準備が整いました。

 

Plotlyでアニメーションをつける

いよいよアニメーションをつけます。

アニメーションをつけるには、animation_frameを指定する必要があります。

ここで先ほど作ったdelayを使います。

また、全体のデータが表示されるように、range_xとrange_yを指定することも必要です。

 

とりあえず可視化してみる

まずは素直にそのままアニメーションをつけて可視化してみます。

データが重いので表示に時間かかります。

2つの銘柄だけとか、期間を狭くするとか工夫しないと大変なことになりそうですw

 

ちょっとファイルでかすぎたので動画とりました。

とりあえずスピードがめちゃ遅いことだけわかっていただけるかとおもいますw

 

データが多いと、そのままの表示ではアニメーションがめちゃくちゃ遅くなります。

 

表示スピードを変える

そのままチャートを作ると表示スピードが遅すぎたので、ここを変更してみます。

 

スピードを変えるには、frameとtransitionのdurationを変更すればOKです。

単位はms(ミリ秒)です。

 

 

これでいい感じに表示されるようになりました。

日本郵船のコロナ禍の爆上げがよくわかりますね。

 

これでアニメーションがいい感じに表示できました。

 

全コードをまとめて公開

最後に、ここまで解説してきたコードをまとめてご紹介します。

 

銘柄とか期間とかを自由に弄りながら使っていただければとおもいます。

修正しやすいように、ところどころ変数に書き換えました。

 

データ数が増えると表示に時間がかかるのでお気をつけください。

ここでご紹介したデータでも結構重いです。

 

銘柄数を減らすか、期間を短くするとかの工夫が必要です。

それではコードをまとめてどうぞ。

なるべくコメントも多くつけました。

 

 

こちらのコードは自由にコピっていただいて大丈夫です。

 

まとめ

本記事では、「【Pythonコード解説】Plotlyで株価チャートにアニメーションをつけてみる」というテーマで、Plotlyを使ったアニメーション機能を株価チャートにつけてみました。

折れ線グラフにアニメーションをつけるには少しデータの変形が必要になります。

Plotlyのデータ形式に合わせるためのデータ変形も必要です。

準備が少し手間がかかりますが、データの変形は数行できてしまうので、慣れれば問題ないかとおもいます。

 

アニメーションをつけるのは、ほぼ自己満な感じはありますが、とりあえず無駄にかっこよくなりますw

仕事とかでチラッと見せたらちょっとドヤ顔できるかもですね。

 

本記事では折れ線グラフにアニメーションをつけましたが、今後は別のいろいろなチャートにもつけてみたいですね。

とりあえず今日はここまでにします。

 

ここまで読んでくださり、ありがとうございました。

 

「Python」×「株式投資」

Pythonで株式データを扱う記事はこちらでまとめています。

収集・管理しているデータの販売もしています。

Pythonで株価データを扱う方法まとめ【データの取得・分析・可視化等、なんでもできます】

オニールとミネルヴィニの投資手法を日本株に適用するために必要なデータを販売します!


 

Pythonの独学ロードマップを作りました!

社会人になってからPythonを独学した経験を活かして、独学ロードマップを作りました。

これからPythonを学ぼうとしている方、学習中の方の参考になれば嬉しいです。

【決定版】Python独学ロードマップ【完全初心者からでもOKです】
【決定版】Python独学ロードマップ【完全初心者OK】

続きを見る

 

おすすめのPython学習法!

Udemy

Pythonを独学するならUdemyがおすすめです。

動画教材なので理解がしやすく、セールで購入すれば90%オフとかで買えるのでコスパも最強です。

おすすめポイント

  • 動画教材で理解しやすい
  • セール中なら90%オフとかで購入可能
  • プログラミングスクールよりも格安で良質なコンテンツが手に入る
  • 30日間の返金保証
  • 講師に質問できる&過去の質問を閲覧できる

\30日返金保証/

Udemyを詳しく見る

セール中なら90%オフとかで購入可能です!

プログラミングの独学にUdemyをおすすめする理由!

続きを見る

 

CodeCamp(コードキャンプ)

プログラミングスクールならCodeCamp(コードキャンプ)がおすすめです。

オンラインでマンツーマンレッスンが受けられるので挫折なく学習を進めることができます。

分割払いで月額6,600円から通うことも可能です。

おすすめポイント

  • オンラインによるマンツーマンレッスンで挫折しない
  • 分割払いで月額6,600円から始められる
  • 講師は通過率8%の厳しい選考を通過した現役エンジニアのみ
  • 大手IT企業のエンジニア育成研修で使用されたカリキュラムをベースに開発
  • 無料カウンセリングを受講すると受講料が1万円引きになる

\マンツーマンレッスンで学べる/

CodeCampを詳しく見る!

無料体験レッスンを受けたら受講料が1万円引きに

 

データミックス(datamix)

Pythonによるデータ分析に興味のある方は、データミックス(datamix)がおすすめです。

プログラミングだけではなく、データサイエンスやビジネスに関するノウハウも合わせて学ぶことができます。

おすすめポイント

  • データサイエンティストが開発・監修した体系的かつ実践的に学べるカリキュラム
  • Pythonなどの「スキル」のみでなく、データサイエンスの本質である「理論」や「思考」が学べる
  • エンジニアに限らず、多様なキャリアを形成・構築できる
  • オンラインチャットツールによる質問対応やコミュニティなどの充実したフォロー体制
  • 専門実践教育訓練給付金の対象講座で授業料の最大70%還付

\データサイエンスとビジネスが学べる/

データミックス(datamix)を詳しく見る!

エンジニア転職だけでなく起業やフリーランスなど多様なキャリア形成・構築に繋がる

データミックス(datamix)の特徴や評判は?【データサイエンスとビジネスが学べる】

続きを見る

-Python, データ分析, 株式投資
-, , , ,

© 2022 気ままなブログ