Code
<- 3.14 pi
シミュレーション・データの準備とR言語の基本的な機能
2024/04/19
2024/04/19
単純な小売業を例に
Step 1. 本書のサポートサイトのS3にアクセス.
Step 2. Zipファイルをダウンロード.
Step 3. Posit CloudにダウンロードしたZipファイルをアップロード.
Step 4. empirical-accounting-and-finance-in-r-main
フォルダを選択し,Renameによりcodes
フォルダへと識別可能性の観点から名前変更.
Step 1. 本書のサポートサイトのS2にアクセス.
Step 2. Zipファイルをダウンロード.
Step 3. 教科書「まえがき」ivページに記載のパスワードを入力して解凍.
Step 4. 解凍されたファイルを再度圧縮し,改めてZipファイルを作成.
Step 5. Posit Cloudに先の手順により作成されたZipファイルをアップロード.
pi
という変数として記憶したい場合は,以下のように書けば良い.変数に何かを代入するときは=
演算子は使わず,<-
演算子を使うのがポイント!
ひとたびpi
を定義すれば,例えば,半径4の円の面積S
を求めるとき,pi
を使って計算することができる.
Rは「半角スペース」を無視するので,あってもなくてもコード上は一緒.ただし,可読性の観点から様々な作法が存在する.GoogleのRユーザー・コミュニティでは,例えば,二項演算子 (binary operators)の前後には半角スペースを挿入することが徹底されている.
x
として定義する場合は,以下の通りである.c()
関数はベクトルを作成する関数であり,c
はconcatenate(連結する)の略である._
(アンダースコア),.
(ピリオド)sales_growth
(売上高増加率), FY2020.EARNINGS
(2020年度の利益)数字からははじまる変数は付けられない (ダメな例: 2020_earnings
, 001Variable
)
大文字と小文字は区別されるので,Sales
とsales
は別々の変数として認識される.
salesGrowth
, annualStockData
SalesGrowth
, AnnualStockData
sales_growth
, annual_stock_data
sales-growth
, annual-stock-data
20点,35点,40点,70点,95点という5人の成績を示したテストの点数 (Test Score)を表すベクトルを作成してみよう.なお,命名規則は,スネークケースによること.
平均点を求めてみよう.
mean()
関数の第一引数に先に作成したTest Scoreのベクトルを代入すればオッケー!N
とする新たな変数を作成しよう.mean()
関数は平均値を返すが,同様に,length()
関数はベクトルの次元を返す.R
ベクトルを作ってみよう!関数に受け渡す値を指し,例えば三つの引数を取る関数 example_function(A, B, C)
に関して,A
を第一引数,B
を第二引数,C
を第三引数と呼ぶ.関数ごとに引数の数や指定の仕方は異なる.
R <- seq(0.1, 0.2, 0.01)
は,R <- seq(from = 0.1, to = 0.2, by = 0.01)
の省略形である.seq()
関数の場合,引数名が省略されていると,最初の三つの引数はそれぞれ等差数列の始点 (from
),終点 (to
),差分 (by
)と解釈し,実行してくれる.help(関数名)
あるいは?関数名
と打つことで,関数のヘルプを表示できることも知っておこう.R[2]
とすれば,2番目の要素が参照できる.要素の指定は変数を用いて行うこともでき,i <- 2
と定義しておけば,R[i]
は2番目の要素を表す.[1] 0.11
[1] 0.11
R[2:5]
と入力すれば良い.一般にコロン (:
)は公差が1の等差数列を作成するために用いられ,2:5
はc(2, 3, 4, 5)
という4次元ベクトルを作成する.R[2:length(R)]
と入力する.length()
関数は,Exercise 2で学習したように,ベクトルの次元を返すので,ここではlength(R)
は11
となる. [1] 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.20
(10, 11)
という2次元ベクトルと,ABC
という文字列をそれぞれの要素として含んでいる.リストは要素の参照方法が通常のベクトルと異なり,カッコを二重にする.x
の1番目の要素を参照するには,x[[1]]
と指定.上の例だと,x[[1]]
は(10, 11)
というベクトルであるため,そのうち11
を参照したければ,x[[1]][2]
と指定.x[[1]]
と同じ内容を参照するのに,x$ID
と指定することもできる.x[ , 1]
として特定の次元を空白とすると,その次元は全ての要素が指定される.したがって,x[ , 1]
はx$ID
と全く同じ参照となる.for
文の使い方for
文の概要for
文とは?
for (
Variable Name in
Sequence) {
Do Something
}
for
文のように,コードのどの行が実行されるか順序を制御する構文のことを,一般に制御構文と呼ぶ.for
文の練習問題(ヒント!)
asum
を作成し,初期値として0
を代入する.i in 1:10
としてasum
にi = 1
から10
を次々に代入し,asum
の計算結果を更新print()
関数を使って,asum
を表示させる.for
文を使った発展問題(ヒント!)
---
title: "2 Rのセットアップ"
subtitle: "シミュレーション・データの準備とR言語の基本的な機能"
date: 2024/04/19
format:
html: default
revealjs:
output-file: 2_setup_slide.html
---
## Accounting 101(教科書第1.1節) {data-name="Accounting 101"}
### 企業が営む経済活動
- 資金調達活動 (Financing)
- 資金投下(投資)活動 (Investing)
- 営業活動 (Operation)
<p align="center" style="font-size: 20px;">
<strong><u>単純な小売業を例に</u></strong>
</p>
![](images/2017F1_01.png){width="80%"}
------------------------------------------------------------------------
### 経済活動を要約するツール $=$ 財務諸表
![](images/FD03.png)
------------------------------------------------------------------------
## 上場企業のディスクロージャー制度(教科書第4.1節) {data-name="ディスクロージャー制度"}
### 法定開示と適時開示
![](images/F01_01.png)
------------------------------------------------------------------------
### EdinetとTDnetから情報を入手してみよう!
::: {.callout-note icon="false"}
#### Exercise 1
- EDINETより任天堂の2023年3月期 (2022/04/01-2023/03/31)の有価証券報告書をダウンロードしてみよう.
- [任天堂の公式サイト](https://www.nintendo.com/jp/)から2023年3月期の決算短信を探し,ダウンロードしてみよう.
- 有価証券報告書と決算短信の相違点を考えてみよう.
:::
------------------------------------------------------------------------
## コードとシミュレーション・データの準備 {data-name="本講義の準備"}
### コードのダウンロード
**Step 1.** [本書のサポートサイトのS3](https://www2.econ.osaka-u.ac.jp/~eaafinr/sect-3.html)にアクセス.
**Step 2.** Zipファイルをダウンロード. ![](images/スクリーンショット%202024-03-20%2010.35.45.png)
------------------------------------------------------------------------
### Posit Cloudへのコードのアップロード
::: larger
**Step 3.** Posit CloudにダウンロードしたZipファイルをアップロード.
![](images/スクリーンショット%202024-03-20%2010.41.25.png)
**Step 4.** `empirical-accounting-and-finance-in-r-main`フォルダを選択し,Renameにより`codes`フォルダへと識別可能性の観点から名前変更.
:::
------------------------------------------------------------------------
### シミュレーション・データのダウンロード
**Step 1.** [本書のサポートサイトのS2](https://www2.econ.osaka-u.ac.jp/~eaafinr/sect-2.html)にアクセス.
**Step 2.** Zipファイルをダウンロード. ![](images/スクリーンショット%202024-03-20%2011.09.48.png){width="75%"}
**Step 3.** 教科書「まえがき」ivページに記載のパスワードを入力して解凍.
**Step 4.** 解凍されたファイルを再度圧縮し,改めてZipファイルを作成.
------------------------------------------------------------------------
### シミュレーション・データのアップロード
**Step 5.** Posit Cloudに先の手順により作成されたZipファイルをアップロード.![](images/スクリーンショット%202024-03-20%2011.15.14.png)
------------------------------------------------------------------------
## R言語入門 {data-name="R言語入門"}
### 変数という考え方
- [**変数**]{style="color: red"}とは,データを読み書きする「名前付き」の記憶域 (storage)のことで,データを一定期間記憶しておいてくれるので,プログラムによりいつでも参照することができる.例えば,3.14というスカラーを`pi`という変数として記憶したい場合は,以下のように書けば良い.
```{r}
pi <- 3.14
```
- 変数に[**何かを代入するときは`=`演算子は使わず,`<-`演算子を使う**]{style="color: blue"}のがポイント!
- ひとたび`pi`を定義すれば,例えば,半径4の円の面積`S`を求めるとき,`pi`を使って計算することができる.
```{r}
S <- pi * 4^2
print(S) # print()関数で結果を出力
```
------------------------------------------------------------------------
### R言語の作法
::: callout-tip
#### 可読性の高いコードを目指して
Rは「半角スペース」を無視するので,あってもなくてもコード上は一緒.ただし,可読性の観点から様々な作法が存在する.[GoogleのRユーザー・コミュニティ](https://google.github.io/styleguide/Rguide.html)では,例えば,二項演算子 (binary operators)の前後には半角スペースを挿入することが徹底されている.
```{r}
# 良い例
S <- pi * 4^2
# 悪い例
S<-pi*4^2
```
:::
- もちろんスカラー以外にも,ベクトルや行列などの変数も作成することができる.先ほどのように$(1,2,6)$の3次元のベクトルを`x`として定義する場合は,以下の通りである.
```{r}
x <- c(1, 2, 6)
```
- `c()`関数はベクトルを作成する関数であり,`c`はconcatenate(連結する)の略である.
------------------------------------------------------------------------
### 変数の命名規則
- 変数の名前は自由に付けることができる。このようなプログラマが自由に付けて良い名前を[**識別子**]{style="color: red"} (identifier)という.
識別子に使える文字
: - アルファベット,数字,`_`(アンダースコア),`.`(ピリオド)
具体例
: - `sales_growth`(売上高増加率), `FY2020.EARNINGS`(2020年度の利益)
------------------------------------------------------------------------
### 変数命名に関する注意点
- 数字からははじまる変数は付けられない (ダメな例: `2020_earnings`, `001Variable`)
- 大文字と小文字は区別されるので,`Sales`と`sales`は別々の変数として認識される.
::: callout-tip
#### プログラミング全般での名前の付け方の作法
- キャメルケース (camelCase)・・・ `salesGrowth`, `annualStockData`
- パスカルケース (PascalCase)・・・ `SalesGrowth`, `AnnualStockData`
- [**スネークケース (snake_case)**]{style="color: red"}・・・ `sales_growth`, `annual_stock_data`
- ケバブケース (kebab-case)・・・ `sales-growth`, `annual-stock-data`
:::
------------------------------------------------------------------------
### 問題をやってみよう! {#Exercise2}
::: {.callout-note icon="false"}
#### Exercise 2
1. 20点,35点,40点,70点,95点という5人の成績を示したテストの点数 (Test Score)を表すベクトルを作成してみよう.なお,命名規則は,スネークケースによること.
2. 平均点を求めてみよう.
- **(ヒント)** `mean()`関数の第一引数に先に作成したTest Scoreのベクトルを代入すればオッケー!
3. 学生の人数を`N`とする新たな変数を作成しよう.
- **(ヒント)** `mean()`関数は平均値を返すが,同様に,`length()`関数はベクトルの次元を返す.
:::
------------------------------------------------------------------------
## 引数とは?(教科書第3.1節) {data-name="引数"}
### 0.1から0.2まで0.01刻みの`R`ベクトルを作ってみよう! {#ここ}
```{r}
R <- seq(0.1, 0.2, 0.01)
```
![](images/Lec03_03A.png){width="75%"}
::: callout-tip
#### 引数 (arguments)とは
関数に受け渡す値を指し,例えば三つの引数を取る関数 `example_function(A, B, C)`に関して,`A`を第一引数,`B`を第二引数,`C`を第三引数と呼ぶ.関数ごとに引数の数や指定の仕方は異なる.
:::
- `R <- seq(0.1, 0.2, 0.01)`は,`R <- seq(from = 0.1, to = 0.2, by = 0.01)`の省略形である.
- R言語の関数には[**位置指定**]{style="color: red"}という概念があり,例えば`seq()` 関数の場合,引数名が省略されていると,最初の三つの引数はそれぞれ等差数列の始点 (`from`),終点 (`to`),差分 (`by`)と解釈し,実行してくれる.
------------------------------------------------------------------------
### 関数名や引数は憶えないといけない?(教科書コラム3.3)
- 現実的には,自分が使う頻度が高い関数に関しては,使い方を積極的に覚えるようにし,そうでない関数はその都度インターネット検索などで使い方を確認するのが良いだろう.
- それぞれの関数ごとに,引数の指定の仕方や結果の形態が異なっており,それらは全て [RDocumentation](https://www.rdocumentation.org/)というサイトに一覧で載っている.
- 加えて,インターネット上には,個人ブログなどの数多くの有益な情報源が存在しているので,それらの調べ方もRを使いこなす上で重要なスキルである.
- 最後に,コンソール上で[`help(関数名)`]{style="color: red"}あるいは[`?関数名`]{style="color: red"}と打つことで,関数のヘルプを表示できることも知っておこう.
```{r}
help(seq)
?seq
```
------------------------------------------------------------------------
### 要素へのアクセス {#要素へのアクセス}
![](images/ch03_04.png)
- 例えば`R[2]`とすれば,2番目の要素が参照できる.要素の指定は変数を用いて行うこともでき,`i <- 2`と定義しておけば,`R[i]`は2番目の要素を表す.
```{r}
# 第2要素へのアクセス方法1
R[2]
# 第2要素へのアクセス方法2
i <- 2 # iを2として定義
R[i] # ベクトルRの第i要素へのアクセス
```
------------------------------------------------------------------------
### 連続した要素へのアクセス
- ベクトルの中から連続する一部分を取り出すためにはコロンを使う.例えば,2番目から5番目の要素のみを取り出す場合,`R[2:5]`と入力すれば良い.一般にコロン (`:`)は**公差が1の等差数列**を作成するために用いられ,`2:5`は`c(2, 3, 4, 5)`という4次元ベクトルを作成する.
```{r}
# 第2-第5要素へのアクセス
R[2:5]
```
- もし2番目から最後までの要素を取り出したければ,`R[2:length(R)]`と入力する.`length()`関数は,[Exercise 2](#Exercise2)で学習したように,ベクトルの次元を返すので,ここでは`length(R)`は`11`となる.
```{r}
# 第2-第11要素へのアクセス
R[2:length(R)] # length(R)はRの次元11を返す
```
------------------------------------------------------------------------
## 行列・リスト・データフレーム(教科書コラム3.4) {data-name="行列・リスト・データフレーム"}
### 行列
- ここまではスカラーとベクトルが登場した.Rでは,[**行列**]{style="color: red"} (matrix)も扱うことができる.
::: columns
::: {.column width="50%"}
![](images/Fch03_10.png){width="95%"}
:::
::: {.column width="50%"}
```{r}
# 3×2行列の作成
x <- matrix(1:6, nrow = 3, ncol = 2)
print(x)
```
:::
:::
::: columns
::: {.column width="50%"}
![](images/Fch03_11.png){width="95%"}
:::
::: {.column width="50%"}
```{r}
# 文字を要素とする行列の作成
y <- matrix(c("a", "b", "c", "d"), nrow = 2, ncol = 2)
print(y)
```
:::
:::
------------------------------------------------------------------------
### リスト
::: goal
- [**リスト**]{style="color: red"} (list)とは,任意のオブジェクトや変数をまとめたもの.
:::
::: columns
::: {.column width="60%"}
![](images/Fch03_12.png){width="95%"}
:::
::: {.column width="40%"}
```{r}
# リストの作成
x <- list(10:11, "ABC")
print(x[[1]])
print(x[[1]][2])
print(x[[2]])
```
:::
:::
- このリストは,`(10, 11)`という2次元ベクトルと,`ABC`という文字列をそれぞれの要素として含んでいる.リストは要素の参照方法が通常のベクトルと異なり,[**カッコを二重**]{style="color: blue"}にする.
- 例えば,`x`の1番目の要素を参照するには,`x[[1]]`と指定.上の例だと,`x[[1]]`は`(10, 11)`というベクトルであるため,そのうち`11`を参照したければ,`x[[1]][2]`と指定.
------------------------------------------------------------------------
### データフレーム
::: goal
- [**データフレーム**]{style="color: red"} (data frame)とは,異なるサンプルのデータを表形式にして一つのデータとして扱うためのオブジェクトである.
- 外観は行列と同じ2次元配列であるが,各行・列がラベルを持ち,それらがどのサンプルの何に関するデータなのかを表す.
:::
::: columns
::: {.column width="50%"}
![](images/Fch03_13.png){width="95%"}
:::
::: {.column width="50%"}
```{r}
# データフレームの作成
ID <- c(1001, 1002, 1003)
name <- c("Firm A", "Firm B", "Firm C")
ROE <- c(0.08, 0.12, 0.15)
x <- data.frame(ID, name, ROE)
print(x)
```
:::
:::
------------------------------------------------------------------------
### (続)データフレーム {#続データフレーム}
- Rの内部ではデータフレームはリストの一種として認識されているので,[**リスト同様の参照が可能**]{style="color: blue"}である.
- データフレーム特有の参照方法として,`x[[1]]`と同じ内容を参照するのに,`x$ID`と指定することもできる.
- R特有の文法として,仮に`x[ , 1]`として[**特定の次元を空白とする**]{style="color: red"}と,その次元は全ての要素が指定される.したがって,`x[ , 1]`は`x$ID`と全く同じ参照となる.
```{r}
print(x[ , 1])
print(x$ID)
```
------------------------------------------------------------------------
## `for`文の使い方 {data-name="for文"}
### `for`文の概要
::: callout-note
### `for`文とは?
`for (`[**Variable Name**]{style="color: blue"} `in` [**Sequence**]{style="color: green"}`) {` <br> [**Do Something**]{style="color: orange"} <br> `}`
- `for`文のように,コードのどの行が実行されるか順序を制御する構文のことを,一般に[**制御構文**]{style="color: red"}と呼ぶ.
:::
```{r}
for (i in 1:4) {
j <- i + 10 # iに10を足したものをjとして定義
print(j) # jを出力
}
```
------------------------------------------------------------------------
### `for`文の練習問題
::: {.callout-note icon="false"}
#### Exercise 3
- 1から10を順番に足した和を求めてみよう!
:::
::: goal
**(ヒント!)**
1. 等差数列の和 (sum of arithmetic series)を表す変数`asum`を作成し,初期値として`0`を代入する.
2. `i in 1:10`として`asum`に`i = 1`から`10`を次々に代入し,`asum`の計算結果を更新
3. 最後に`print()`関数を使って,`asum`を表示させる.
:::
------------------------------------------------------------------------
### `for`文を使った発展問題
::: {.callout-note icon="false"}
#### Exercise 4
- 初項が2,公差が3の等差数列について初項から第10項までの和を求めよ.
:::
**(ヒント!)**
1. 等差数列は`seq()`関数を使えば作成することができる.忘れている人は,[ここ](#ここ)を参照.
2. 初項から第10項までのベクトルを`a` $=(2, 5, \ldots, 29)$として定義すれば,初項は`a[1]`,第2項は`a[2]`で参照することができる.忘れている人は,[要素へのアクセス](#要素へのアクセス)を確認しよう.