地学、地学概論
R言語を使ってみる
この授業の、計算機を使う実習として、
数値計算と、データの作図をしたい。
そのための道具はいろいろありうるが、
わたしは、本来は統計学的データ解析のためのソフトウェアである「R」を、
プログラム言語処理系としても使うことにしたい。
Rについて
Rは、統計学的データ解析のためにつくられたプログラム言語である。
Rの代表的な処理系は、オープンソースソフトウェアとして開発されており、
無料でつかうことができる。ただしメーカー保証はない。
R処理系は、MS Windows、Mac OS、Linuxなど多くのOSで動くものがつくられているので、
自分のパソコンにインストールすれば、
大学のパソコンでも自分のパソコンでも基本的に同じプログラムで処理ができる。
また、Rの作成者は統計学のうちでもデータを図にして見ることを重視していたので、
R処理系には、グラフを作成する機能がふくまれている。
わたしの授業でおもにやりたいことは、
観測データの可視化と、数値シミュレーションの初歩で、Rが最適とは必ずしもいえないが、
Rでも可能ではあり、表計算ソフトウェアでやるよりはだいぶみとおしがよくなる。
また、グラフ作図の機能は、統計学的データ解析のばあいと共通のものが使える。
2019年春学期から、板倉のパソコン教室でRが利用可能になったので、
2019年度の計算の実習は、おもにRで実行するプログラム例を用意し、
すこしだけ編集して動かしてもらうものにした。
2020年度はオンラインだけになってしまったので、R と 表計算ソフトウェアの両方を提示し、
各人ができるものでやってみてほしいという形にした。
2021年度は、2019年度と同じ形を基本にしたい。
Rの入門書をいくつか、本の紹介のページのRに関するところにあげておく。
Rの処理系をインストールする (教室のパソコンにはインストールずみ)
Rの処理系は、CRAN (The Comprehensive R Archive Network)というウェブサイトから配布されている。
ソフトウェアのダウンロードは、
インターネット上で自分に近いミラーサイトからしたほうがよい。
日本では、統計数理研究所にあるミラーサイト
[外]https://cran.ism.ac.jp/がよいだろう。
「Download and Install R」のところで、
自分が使うパソコンのOS用をえらび、そのさきで「base」をえらぶ。
バージョン選択があれば、2021-11-07現在の最新版 4.1.2 でよいだろう。
(使いたい応用パッケージがある人は、そのパッケージが対応しているバージョンをえらぶ。)
Windowsのばあいは、".exe" でおわる名まえのファイルをダウンロードする。
そして、それをローカルに実行すると、インストールがおこなわれる。
ただし、パソコンの管理者権限を要求されることがある。
管理者権限をもつユーザーでログインしていれば、「はい」で応答すればさきにすすめるだろう。
Windows用は、ひとつのパッケージに、計算機の機械語がちがう、
32ビット版 (i386) と 64ビット版 (x64)のものがはいっている。
自分のパソコンのOSがどちらの版であるかによって選択する。
Windows 10のパソコンならばたいてい64ビット版だけでよいと思う。
Linuxについては、Debian, Redhat, Suse, Ubuntu むけのパッケージが用意されていて、
それぞれの Linux distribution のソフトウェアインストール手つづきが使える。
それにあてはまらないばあいは、CRANのトップのページにもどって、Source Code を
ダウンロードして、"make" する。
補足
- 処理系の機能は、OS対応版ごとに、いくらかちがう。
Windows版は、エディタが付属した、いわゆる統合環境になっていて、
その中でコンソール画面とエディタ画面を往復しながら作業できる。
Linux版は、コンソール画面だけなので、外のエディタで編集し、
コンソール画面に文字でコマンドを打ちこむのが、標準的な使いかたである。
- R処理系とあわせてつかう統合環境ソフトウェア「R Studio」というものがあり、
Rの入門書には、それを使うことを前提としているものもある。
2021年度の板倉のパソコン教室には R Studio がはいっている。
わたしはそのつかいかたの指導はできないが、つかえる人はつかってもかまわない。
- R処理系は、ASCII (英語のアルファベット・算用数字などの文字コード)のほか
多様な文字コードに対応しているが、
処理できる日本語文字コードは、それを実行するOSによってちがうことがある。
2019年度の教室にあった Windows 7 上の R では、
日本語文字コードを「Shift-JIS」にすると正常に読み書きできる。
(UTF-8のファイルは文字化けしてしまう。)
ほかのOSでは、文字コードを「UTF-8」にしておく必要があるかもしれない。
教材を自分のパソコンで動かす場合、
Shift-JIS と UTF-8 のあいだのコード変換が必要になるかもしれない。
各自、自分のパソコンのOS上でのやりかたをしらべてほしい。
- Rのグラフィックス機能は、R処理系自体にふくまれた「plot」関数をはじめとする
グラフィックス機能と、追加のライブラリ lattice や ggplot2 を使うものがある。
教科書的な本でも、そのうちどれを使うかは、著者しだいでまちまちである。
わたしの例文では、R処理系自体のグラフィックス機能をつかう。
一行計算 (「電卓」的な使いかた)
Rのコンソール画面に計算式をうちこんで Enter キーをおすと、計算結果が表示される。
この計算式は、(電卓によくある「=」でおわる形ではなく)
数学の数式のようなもので、等式の「=」のあと(右辺)をかくと考えればよい。
「たす」は「+」、「ひく」は「-」、「かける」は「*」(アステリスク)、
「わる」は「/」(斜め線、スラッシュ)であらわす。
わりざんは分数のように考えるが、上下に積むかわりに斜め線をつかう。
演算の順序は、かけざん・わりざんが、たしざん・ひきざんよりも優先される。
かっこ「( )」を使うことによって、
「(2+3)*10」のように、演算の順序を指定することができる。
変数を使うことができる。
変数名は複数文字からなる文字列が使える。(変数名では使えない文字もある。)
「x = 3」のような文は、文脈によって、x に 3 を代入することを意味したり、
x が 3 にひとしいことを意味したりする。
代入は、代入の演算子「 <- 」をつかって「x <- 3」と書くほうがよい。
1行ずつ実行しても、変数は、(原則としてそのコンソール画面を終了するまで) ひきつがれている。
変数に値を代入したあとで、変数名だけを書いて Enter キーをおすとどうなるか、やってみよう。
数値計算は、実数を有限の桁数で近似した「浮動小数点数」で計算するので、
厳密解がわかっている問題でも誤差が生じることがある。
定数 pi 、関数 sin(), cos(), tan(), exp(), log() などがくみこまれている。
三角関数でつかう角度の単位はラジアンである。「度」単位の値を換算するには、pi/180 をかける。
log() は自然対数(eを底とする対数)である。常用対数(10を底とする対数)の log10() もある。
簡単な計算と作図の例題
一次関数、二次関数、指数関数、対数関数、三角関数などを、数値とグラフで見てみよう。
Rでは、複数の数値がならんだ「ベクトル」変数を使うことができる。
次のように「c()」をつかって、ベクトル変数をつくって、値を入れることができる。
また、「seq()」をつかって、次の例ならば、10 から 16 まで 2 おき、つまり「10, 12, 14, 16」という内容を入れることができる。
計算式のなかにベクトル変数名をかくと、ベクトルのそれぞれの要素についてその計算が実行された結果からなるベクトルができる。
- a <- 1.5
- b <- -3
- yv <- a*xv + b
plot() 関数に、ふたつのベクトル変数をあたえると、それを縦軸・横軸にしたグラフをかく。
操作の手順についてのおぼえがき
- OSがちがうばあいは、操作がちがってくるところがあります。
このページは教室にあるパソコンのばあいを説明します。
ただし暫定的に、2019年度に教室にあった Windows 7 のパソコンのばあいについて書いたままになっています。
2021年度に教室にある Windows 10 のパソコンで、ちがいに気づいたばあいは、そのつど書きなおします。
- あらかじめ、自分のホームディレクトリ (パソコン教室では「Zドライブ」になっているようだ)の下に
この実習用のディレクトリをつくっておいたほうがよい。
ディレクトリ名は、自分で区別できれば、なんでもよい。
【ただし、もし R Studio をつかいたいばあいは、日本語文字 (漢字・かな) をさけて、
ASCIIコードで表現できるアルファベット・数字などにかぎる必要がある、と聞いている。】
- Windowsのスタートメニュー(左下)から R をえらんで起動する。
32ビット版と64ビット版のふたつがはいっているが、どちらでもよい。
- 「ファイル」から「ディレクトリの変更」で、
この実習用のディレクトリを指定しておいたほうがよい。
- コンソール(「R Console」)画面にコマンドをうちこむことによって、1行計算をすることができる。
- プログラムをつくって実行する場合には、
「ファイル」から「新しいスクリプト」をえらぶと、編集画面が出るので、そこに書きこみ、
「ファイル」から「保存」または「別名で保存」で、「.R」でおわるファイル名で保存する。
- あるいは、別のエディタ(「メモ帳」でもよい)で作成し、「.R」でおわるファイル名で保存して、
Rの「ファイル」から「スクリプトを開く」で読みこむ。
Rの中で編集ウィンドウが開いて、Rプログラムが読みこまれた状態がみえるはず。
- 必要に応じて編集ウィンドウでRプログラムを変更する。
- プログラムの編集は、Rのシステムの中の編集ウィンドウのほか、その外のエディターでやることもできる。
「メモ帳」でもよい (日本語文字コードによっては文字化けがおきる可能性があるが)。
ただし、ファイル名の拡張子「.R」は、メモ帳やその他のエディタに関連づけられていない。
「このファイルを開けません」となったら、
「インストールされたプログラムの一覧からプログラムを選択する」で
「メモ帳」やその他のエディタを選択すればよい。
エディタ側で保存したら、Rの「ファイル」から「スクリプトを開く」をやりなおす。
- 変更したプログラムを保存しておきたいときは、
Rのメニューの「ファイル」から「別名で保存」を使う。
(同じなまえで重ねがきしてよいときは「保存」でよい。)
- Rのメニューの「編集」から「全て実行」を選択すると、プログラムが実行される。
- グラフを画面でなく画像ファイルに出すには、
plotを含む作業のまえに「png("ファイル名")」(ファイル名は ".png " で終わるものがよい)、
あとに「dev.off()」を入れる。
- 実行結果として、テキストファイルやPNG画像ファイルがつくられる場合は、
あらかじめ「ディレクトリの変更」で指定したところに、
もし指定していなければ、自分のホームディレクトリにできているはず。
教材プログラム例を使うばあいの操作 (1行プログラム)
- ブラウザで、表示されたページのうちから、(右クリック、ドラッグで)該当部分を選択し、
(右クリックから)「コピー」する。
Rのコンソール画面にうつって「ペースト」する。
それからEnterキーを入力すると、1行のプログラムが実行されるだろう。
教材プログラム例を使うばあいの操作 (1行プログラムではないばあい)
- [例文ウェブページ本文中にプログラム例が書かれている場合]
- Rのコンソールで「ファイル」から「新しいスクリプト」を選び、編集画面を開く。
(既存のスクリプトへの追加になる場合は「スクリプトを開く」でそれを開く。)
ブラウザで、表示されたページのうちから、(右クリック、ドラッグで)該当部分を選択し、
(右クリックから)「コピー」する。
Rの編集画面にうつって「ペースト」する。
- [例文ウェブページからリンクされて「.R」で終わる名まえのプログラムがある場合]
- 【つまらない例文プログラム】 hello.R
- 【数値計算をしてグラフをつくる例文プログラム】 growth_ex1.R ... 説明は次の節を参照。
- ブラウザで表示されたページにあるファイル名のリンクを右クリックして、
「名前をつけてリンク先を保存」(Microsoft Edge や Internet Explorerのばあいは「対象をファイルに保存」)で、
保存先のディレクトリを選ぶ。ファイル名は表示されたものをそのまま使えばよい。
こうすれば、ファイル名は「.R」で終わる形のまま保存されるはず。
- 【ファイルの内容を表示させてそれを保存するという手順でやると、
ブラウザによっては、「.txt」になることがある。
そのばあいは、(「エクスプローラー」の「名まえの変更」機能などによって) ファイル名を「.R」になおしておく。】
- 入力データ例がある場合、同様に自分のところにもってくる。
(この授業の教材では、入力データのファイル名は「.txt」で終わるものにするので、そのままでよい。)
- 自分でデータファイルを作成する場合は、「メモ帳」、Wordなどで、
結果をテキストファイル (ファイル名のおわりの部分は「.txt」)で保存する。
(Excelなどの表計算ソフトウェアでつくる場合は、csv のほうがよいかもしれない。
Rのがわの読みとりかたもそれに対応するものにする。)
- Rを起動し、Rの「ファイル」から「スクリプトを開く」で読みこむ。
あとは上にのべたとおり。
数値計算をしてグラフをつくる例文プログラム
変数 v の値が、時間 t によって変わる。変わりかたがつぎの法則にしたがうばあいを考える。
dv/dt = g v 【g は定数。成長 (growth) に関連する定数というつもりであり、重力加速度ではない。】
これは微分方程式としてとくことができ、解は指数関数で書ける。
v(t) = v(0) exp(g t)
しかし、もうすこし複雑な問題の準備として、わざと、時間間隔 Δt きざみで計算してみる。
右辺にでてくる v は、各時間区間のはじめの時点での値を使うことにする
(わたしの知っている専門用語では「前方差分」。
別の教材ページ 「数値計算の教材: 時間発展問題の差分計算」で説明している。)
(v(t+Δt) - v(t))/Δt = g v(t)
v(t+Δt) = v(t) + Δt g v(t)
プログラム例では、v(0) = 100, g は 0.02, -0.02, 0 の3とおり、Δt = 2 とした。
これらの数値は、プログラム内に書きこんである。それを変更すると結果も変わる。
例文プログラムの変種
[2019-09-28のブログ記事]に
図を2つ入れた。この図は、Rのプログラムで作図したもので、
そのプログラムは上にのべた例文プログラムを変形したものである。
(微分方程式を変えたところもあり、別の仮定をいれて数値をあたえてしまったところもある。)
ひとまず説明ぬきに、プログラム例をリンクしておく (日本語文字はShift_JIS)。
(2019-09-30, 2020-06-14, 2020-06-21) 2021-11-07
増田 耕一 (MASUDA Kooiti)