2026/04/24
,) で区切って書いたテキスト・ファイルのことを指す..xlsxファイル)を思い浮かべるかもしれないが,特定のアプリケーションに依存したファイル形式だと,互換性がなくて他の環境では開けない恐れがある.したがって,テキストファイルに値とカンマだけで内容を書き込み,互換性を高めたファイル形式がCSVファイルである.read.csv()関数を使ったCSVファイルの読み込みread.csv()関数が用意されている.read.csv()関数には数多くのオプション引数が存在するが,それらをいったん無視して,ファイルのパスをダブルクォーテーション("")で囲って引数に指定すれば良い.tidyverseパッケージ群のreadrにはread_csv()という関数が用意されており,こちらを使うと前回紹介したtibble形式でデータが読み込まれる.本講義では以降read_csv()を主に使用する.ch03_daily_stock_return.csvがコードと同じ作業ディレクトリに位置しているなら,上のように"ch03_daily_stock_return.csv"という相対パスのみ指定すれば,Rはそのファイルを発見できる.もし上のコードを実行して,次のようなエラーが出る場合,Rはch03_daily_stock_return.csvを発見できていない.ch03_daily_stock_return.csvから変更されていないことを確認しよう.繰り返し同じファイルをダウンロードしているとch03_daily_stock_return(1).csvのように,勝手に名前が変更されてしまう場合がある.daily_stock_returnの詳細の確認head()関数を用いて,コンソール上でdaily_stock_returnの冒頭6行を出力してみる.nrow()関数を用いて,何営業日分の株価を含んでいるか確認してみよう.ここで,nrowはnumber of rows(行数)の略である.daily_stock_returnの詳細の確認daily_stock_returnの各列の名前やデータ型を確認したい.str()関数を用いてdaily_stock_returnの内部構造を調べてみよう.strはstructure(構造)の略で,変数の内部構造を意味する.'data.frame': 21 obs. of 3 variables:
$ date : chr "2020-04-01" "2020-04-02" "2020-04-03" "2020-04-06" ...
$ firm1: num -0.03948 0.00598 0.05579 0.04193 -0.02019 ...
$ firm2: num 0.07696 -0.00725 -0.0173 0.00217 0.07555 ...
21 obs. of 3 variablesより,三変数について,21の観測値が収録されていることが確認できる.chr)のdatenum)のfirm1num)のfirm2daily_stock_returnの詳細の確認firm1)と企業2 (firm2)の株式の日次リターンについて,平均的に見てどちらのリターンが高かったのか,mean()関数を用いて確認してみよう.$演算子を用いると列名で各列を参照できることを思い出そう. firm_ID name industry
1 1 Firm A Machinery
2 2 Firm B Chemicals
3 3 Firm C Machinery
firm_dataというデータフレームを作成すると,firm_ID列は数値型,name列とindustry列が文字型となる.industry列はカテゴリカル変数と呼ばれ,各観測データがどのサブカテゴリーに属するかを明らかにする役割を果たしている.
'data.frame': 3 obs. of 3 variables:
$ firm_ID : num 1 2 3
$ name : chr "Firm A" "Firm B" "Firm C"
$ industry: Factor w/ 2 levels "Chemicals","Machinery": 2 1 2
factor()関数は,新しいファクターを生成する関数である.str()関数を用いて構造を眺めてみると,name列が文字型 (chr)のままであるのに対し,industry列はファクター型 (Factor)に変換済."Chemicals"と"Machinery"は水準 (level)と呼ばれ,各カテゴリーの名前を表す.コンピュータ内部では各カテゴリーが自然数で表されており,今回の観測データはその番号を介して,2 (Machinery),1 (Chemicals),2 (Machinery)と表現されている.factor()関数とlevels引数
'data.frame': 3 obs. of 3 variables:
$ firm_ID : num 1 2 3
$ name : chr "Firm A" "Firm B" "Firm C"
$ industry: Factor w/ 2 levels "Machinery","Chemicals": 1 2 1
factor()関数のlevels引数を指定することで,ファクターの順序を明示的に定義している.industry列の水準を1 (Machinery) \(\rightarrow\) 2 (Chemicals)の順に並べるよう指定した.levelsを明示的に指定するのが望ましい.
life_cycleがあったとき,導入期Introduction \(\rightarrow\) 成長期Growth \(\rightarrow\) 成熟期Mature \(\rightarrow\) 淘汰期Shake-Out \(\rightarrow\) 衰退期Declineの順に水準を指定するのが適当である.\[ \begin{align*} \underbrace{\mathit{PV}}_{\textbf{現在価値}}= \frac{\overbrace{CF_1}^{\textbf{1年後の確実なキャッシュフロー}}}{\underbrace{1 + R_{F}}_{\textbf{無リスク金利$R_F$で割り引く}}} \end{align*} \]
\[ \begin{align*} \underbrace{\mathit{PV}}_{\textbf{現在価値}} &= \frac{\overbrace{CF_T}^{\textbf{$T$年後の確実なキャッシュフロー}}}{\underbrace{(1+R_F)^ {T}}_{\textbf{$T$年分だけ無リスク金利$R_F$で割り引く}}} \end{align*} \]
tidyverseパッケージとは?tidyverseと呼ばれるパッケージ群である.以下が,それに含まれる主なパッケージ一覧である.| 名称 | 使用用途 |
|---|---|
ggplot2 |
グラフの描画によるデータの可視化 |
dplyr |
データの加工や操作に便利な関数の提供 |
tidyr |
雑然データを整然データの形式に変換する関数の提供 |
readr |
CSVファイルなどの高速,かつ,ユーザー・フレンドリーな読み込み |
tibble |
前回紹介したデータフレームの改良版tibbleの提供 |
tidyverseパッケージのインストールinstall.packages()関数を用いて,第一引数にインストールしたいパッケージ名を""で囲って指定する.ggplot2による作図 — 作図データの準備目標
\(R_{F}\)が0.1から0.01刻みで0.2まで変化するときの1年後の確実なキャッシュフロー100の現在価値を求め,割引率に応じて現在価値がどのように変化するか可視化してみよう.
100というのは1次元のスカラー(一つの実数)であり,Rは11次元のベクトルである.したがって,次式を計算しようとすると,両者の次元が一致しておらず,数学的には不完全な式となっている. \[
PV = \frac{\overbrace{100}^{\textbf{スカラー}}}{1 + \underbrace{\text{R}}_{\textbf{11次元のベクトル}}}
\]ggplot2による作図 — データフレームの準備ggplot2は,入力データをデータフレームの形式で準備する必要があるので,まずはdata.frame()関数を使って 新たなデータフレームfigure_dataを作成しよう.ggplot2による作図 — tidyverseパッケージの読み込みggplot2パッケージを使うためには,library()関数を使ってtidyverseを利用することを冒頭で宣言する必要がある.pacman::p_load()を利用する.:: 演算子の意味
R では パッケージ名::関数名 と書くことで, そのパッケージに含まれる関数を明示的に呼び出すことができる.
pacman::p_load()は,pacmanパッケージに入っているp_load()関数を呼び出すという意味である.dplyr::filter() は,dplyrパッケージに入っているfilter()関数を呼び出すという意味である.こうすることで,他のパッケージに同じ名前の関数があっても衝突せずに使える.
なお,本講義では 衝突の可能性のない関数のみを利用する ため,原則として pacman以外ではパッケージ名の指定を省略する.
ggplot2のggとは
grammar of graphicsの略である.ggplot2では,グラフの構成要素を各種のレイヤーに分解し,コード上でそれを積み重ねていく形でグラフを作図する.
ggplot2による作図 — data引数の指定ggplot()関数により,作図用キャンバスを準備し,入力データを指定.data = figure_dataとして,figure_dataを入力用データとして用いることを宣言している.+演算子を用いてレイヤーを足していく形で図を作成する.geom_line()関数である.mapping引数のaes()関数では,\(x\)軸と\(y\)軸の要素をラベル名で指定している.ggplot2による作図 — 散布図の追加ggplot2の使い方に慣れるために,先ほどの折れ線グラフに各データを表す点を追加してみよう.geom_point()であるから,+演算子を用いてそれを先ほどのコードに追加すると,散布図が上書きされる.ggplot2による作図 — その他の調整Discount RateとPresent Valueへと変更しよう.labs()関数を使えば簡単にできる.theme_classic()関数は,グラフの背景や枠線など(グラフのテーマと言う)を統一的に変更するための関数である.theme_void()や,背景は白だがメモリを表す十字線が入るtheme_bw()など,複数の選択肢があるので,目的に応じて使い分けると良いだろう.Exercise 1
ggplot2を駆使して描画せよ.なお,\(x\)軸のラベルはyear,\(y\)軸のラベルはPresent Valueとすること.set.seed()関数の引数には,自分の学籍番号の下4桁を入力すること.set.seed()関数は乱数の種(seed)を固定する関数である.学籍番号の下4桁が異なれば生成される割引率も異なるため,各自固有のデータで練習することになる.問題
r を使い,\(t = 1, 2, \ldots, 10\) 年後に確実に受け取れる100万円の現在価値をそれぞれ計算し,ベクトル PV に格納せよ.
Tを使わないこと.RではTは組み込み変数(TRUEの省略形)であるため,T <- 1:10のように代入すると組み込みの値が上書きされ,バグの原因になる(第2回資料参照).例えばyears <- 1:10のように別の名前を付けよう.問題
PV と年限のベクトル(\(= 1, 2, \ldots, 10\))を用いて,year 列と PV 列からなるデータフレーム pv_data を data.frame() 関数で作成せよ.pv_data の中身を表示して確認すること.問題
pv_data を使い,\(x\) 軸を year,\(y\) 軸を PV とした散布図を ggplot2 で描画せよ.
Year,\(y\) 軸のラベルは Present Value とすること.theme_classic() を使用すること.scale_x_continuous(breaks = 1:10)を追加すると整数のみの目盛りにできる.2025 経営データ分析(会計)