京橋のバイオインフォマティシャンの日常

南国のビーチパラソルの下で、Rプログラムを打ってる日常を求めて、、Daily Life of Bioinformatician in Kyobashi of Osaka

【R言語とWebスクレイピングとアニメーショングラフ】仮想通貨や株価変動をバー・チャート・レースで観察してみた件【その2 ダウ・ジョーンズ工業株価平均(ダウ平均)編】

はじめに

いま。。このブログは、「アニメーショングラフ」推しです。

第二弾として、ダウ・ジョーンズ工業株価平均(ダウ平均)の各銘柄の時系列データ(日足)について、「バー・チャート・レース」を作成みました。

ダウ平均は、ちょうど、30銘柄なのでバーチャートにしても見易いです。

さぁ、アニメーショングラフをやっていきましょう。

実行環境

実行環境
macOS Big Sur (バージョン11.5.2)
MacBook Air (M1, 2020)
チップ Apple M1
メモリ 16GB

Rパッケージの準備

関連のRパッケージを準備します。結構あります。 ここをスキップして、以下のスクリプトを読み込むのでもOKです。

#パッケージ・インストール
pack <- c("rvest", "quantmod", "magrittr", "purrr", "tidyr", "ggplot2", "treemapify", "gganimate", "gapminder", "gifski")
install.packages(pack[!(pack %in% unique(rownames(installed.packages())))])

#ロード
for(n in 1:length(pack)){ eval(parse(text = paste0("library(", pack[n], ")"))) }; rm("n")

getDJIA.Rスクリプトを読み込んでも、Rパッケージがインストールできます。

同時に、今回使用する、getDJIA_list、DJIA_ChartData、DJIA_ChartData_mod、DJIA_animationといった関数群を読み込みます。各関数は、ダウ平均の30銘柄用に調整しています。

#関連関数群の読み込み
source("https://gist.githubusercontent.com/kumeS/b4c2a978b31dbe5fc3cb41c4d3e0b6ef/raw/95aefe669ef0ffcccec87e85a87e0d225d73cc71/getDJIA.R")

ではでは、早速、実行してみましょう。

ダウ平均銘柄のデータ取得

ダウ平均のウィキペディアページ

まず、getDJIA_list関数では、ウェブスクレイピングを介して、ウィキペディアの該当ページからダウ平均の銘柄リストを取得します。

ダウ平均の30銘柄の情報

ダウ平均の30銘柄の情報は、この表から取得します。シンボルやセクター情報も含まれます。

それでは、次に、DJIA_ChartData関数でデータを取得します。

#Wikipediaページからダウ平均銘柄リストを取得する
DJIAList <- getDJIA_list()

#表示
head(DJIAList)
#           Company Exchange Ticker                  Sector
#1               3M     NYSE    MMM            Conglomerate
#2 American Express     NYSE    AXP      Financial services
#3            Amgen   NASDAQ   AMGN       Biopharmaceutical
#4            Apple   NASDAQ   AAPL  Information technology
#5           Boeing     NYSE     BA   Aerospace and defense
#6      Caterpillar     NYSE    CAT Construction and Mining

#銘柄のセクター数
table(DJIAList$Sector)

#ダウ平均のデータ取得: 実行時間 2分くらい
ChartData <- DJIA_ChartData(Dat=DJIAList, term=c("2022-01-01", "2022-12-31"))

#いったん、RDS保存
saveRDS(ChartData, "DJIA_ChartData.Rds")
#ChartData <- readRDS("DJIA_ChartData.Rds")

#または、DJIA_ChartData.Rdsをダウンロードできるようにもしています。
#system("which svn")
#system("svn export  https://github.com/kumeS/Blog/trunk/R_BarChart/DJIA_ChartData.Rds")

#表示
head(ChartData)
#           Company Ticker                  Sector       date close dclose dclose2 ranking
#1               3M    MMM            Conglomerate 2022-01-03   100      0 #F0F5F0       1
#2 American Express    AXP      Financial services 2022-01-03   100      0 #F0F5F0       2
#3            Amgen   AMGN       Biopharmaceutical 2022-01-03   100      0 #F0F5F0       3
#4            Apple   AAPL  Information technology 2022-01-03   100      0 #F0F5F0       4
#5           Boeing     BA   Aerospace and defense 2022-01-03   100      0 #F0F5F0       5
#6      Caterpillar    CAT Construction and Mining 2022-01-03   100      0 #F0F5F0       6

このステップで、ダウ平均の30銘柄のリストとデータが取得できました。

ダウ平均銘柄でのバー・チャート・レース

ダウ平均銘柄のバー・チャート・レース作成

次に、ダウ平均銘柄のデータを使って、バー・チャート・レースを作成します。

DJIA_ChartData_mod関数で、ダウ平均の全銘柄のデータフレームにします。この関数で、rankingという列データを作成します。その後、DJIA_animation関数を実行して、チャート設定をします。また、日本語設定も別途します。

#データ補正: 全銘柄を取得する
ChartData1 <- DJIA_ChartData_mod(ChartData)

#表示
head(ChartData1)
#    Company Ticker       Sector CompanyTicker     CompanySector       date
#1        3M    MMM Conglomerate      3M (MMM) 3M (Conglomerate) 2022-01-03
#31       3M    MMM Conglomerate      3M (MMM) 3M (Conglomerate) 2022-01-04
#61       3M    MMM Conglomerate      3M (MMM) 3M (Conglomerate) 2022-01-05
#91       3M    MMM Conglomerate      3M (MMM) 3M (Conglomerate) 2022-01-06
#121      3M    MMM Conglomerate      3M (MMM) 3M (Conglomerate) 2022-01-07
#151      3M    MMM Conglomerate      3M (MMM) 3M (Conglomerate) 2022-01-10
#    close dclose dclose2 ranking
#1   100.0    0.0 #F0F5F0       1
#31  101.4    1.4 #F0F5F0      12
#61  101.0    1.0 #F0F5F0      15
#91  100.1    0.1 #F0F5F0      15
#121 101.2    1.2 #F0F5F0      14

#日本語設定: 必須
ggplot2::update_geom_defaults("text", list(family = "HiraKakuPro-W3"))
ggplot2::update_geom_defaults("label", list(family = "HiraKakuPro-W3"))

##実行
p1 <- DJIA_animation(ChartData1, Label="ダウ平均銘柄")

#gif出力: 実行時間 30秒くらい
animate(p1, fps = 2, duration = 125, width = 700, height = 700,
        renderer = gifski_renderer("DJIA_BarChartRace_animation_p1.gif"))

ダウ平均銘柄のバー・チャート・レース

まとめ

今回、ダウ平均銘柄の2022年12月まで値動きのバー・チャート・レースを作成しました。 全体を眺めてみると、12月20日現在で、2022年年初からで100%以上なっている銘柄は、約10銘柄あるみたいですね。 そのなかでも、シェブロン(CVX)とメルク(MRK)が結構上昇していて、目立ちますね。2022年は、石油と医薬品の年でしたね。

関連記事

skume.net

Rコード: getDJIA.R

gist.github.com