{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\tHiroshi TAKEMOTO\n", "\t(take.pwave@gmail.com)\n", "\t\n", "\t

Rとの連携

\n", "\t

\n", "\t\tRはフリーの統計解析ソフトで、Sageのパッケージに付属しており、SageからRのコマンドを実行するための\n", "\t\tインターフェースも用意されています。\n", "\t

\n", "\t

\n", "\t\tRの特徴に以下のものがあげられます。\n", "\t\t

\n", "\t\t\n", "\t\tSageからRのグラフ機能を使った例として、\"R in action\" で紹介されているグラフをSageで表示したSageのワークシート\n", "\t\tをここにアップしてありますので、\n", "\t\t参考にしてください。\n", "\t

\n", "\t

\n", "\t\tここでは、SageからRのコマンドを使用する場合の注意点とRインタフェースの使用方法に説明します。\n", "\t

\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%%HTML\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

Rのユーティリティ関数

\n", "\t

\n", "\t\tSageからRのコマンドを使いやすくするために、以下のユーティリティ関数を用意、RUtil.pyに納めました。\n", "\t\t

\n", "\t

\n", "\t

\n", "\t\tload関数を使ってRUtil.pyを読み込みます。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# RとPandasのデータフレームを相互に変換する関数を読み込む\n", "# Rの必要なライブラリ\n", "r('library(ggplot2)')\n", "r('library(jsonlite)')\n", "\n", "# jupyter用のdisplayメソッド\n", "from IPython.display import display, Latex, HTML, Math, JSON\n", "# sageユーティリティ\n", "load('script/sage_util.py')\n", "# Rユーティリティ\n", "load('script/RUtil.py')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

Rインターフェース

\n", "\t

\n", "\t\tRとのインタフェースとして、r関数が提供されています。\n", "\t\tr関数では、Rのコマンドを文字列で与えます。Rのコマンド内でダブルクォートを使っている場合には、シングルクォートでくくり、\n", "\t\tRのコマンド内でシングルクォートを使っている場合には、ダブルクォートを使って指定します。\n", "

\n",
    "\tr('Rのコマンド')\n",
    "
\t\t\n", "\t\tRのコマンドにSageの変数の文字列を代入する場合には、以下のように%を使ってセットします。\n", "
\n",
    "\tr('Rのコマンド1%s, Rのコマンド2%s' % (変数1, 変数2))\n",
    "
\t\n", "\t\t上記の例では、1番目の%sが変数1に、2番目の%sが変数2の値に置き換わります。\t\n", "\t

\n", "\t

\n", "\t\tr関数の例として、Rで計算させた2のsqrtの結果を出力します。Rの出力では最初に[1]のように番号が付いて\n", "\t\t表示されます。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[1] 1.414214" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Rインターフェース\n", "r('sqrt(2)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

複数行のコマンド

\n", "\t

\n", "\t\t関数定義やRの制御コマンド(ループやif文等)を含む複数行のRコマンドをSageから実行する場合には、\n", "\t\tファイルにまとめてワークシートにアップロードして使います。\n", "\t

\n", "\t

\n", "\t\t例でとして%%writefileコマンドを使って、data/mystats.txtに以下のように自乗を計算するx2関数を書いておきます。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Writing data/mystats.txt\n" ] } ], "source": [ "%%writefile data/mystats.txt\n", "x2 <- function(x) {\n", " return (x^x)\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

Rコマンドファイルの実行

\n", "\t

\n", "\t\tファイルに定義されたRのコマンドを読み込み評価するには、Rのsourceコマンドを使用します。\n", "\t

\n", "\t

\n", "\t\t以下の例では、mystats.txtに書かれたx2の関数定義を実行し、リストlの各要素に関数x2を適応しています。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[[1]]\n", "[1] 1\n", "\n", "[[2]]\n", "[1] 4\n", "\n", "[[3]]\n", "[1] 27\n" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Source関数でテキストファイルの内容を評価実行します\n", "r('source(\"data/mystats.txt\")')\n", "# リストlの各要素に関数x2を適応する\n", "r('l <- c(1, 2, 3)')\n", "r('lapply(l, x2)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

Sageから変数(リスト)をRに渡す

\n", "\t

\n", "\t\tSageとRとの連携で重要なポイントはSageの変数をどうやってRに渡すかです。\n", "\t

\n", "\t

\n", "\t\t以下の例では、変数slに[1, 2, 3]のリストをセットし、これをr関数に渡しています。\n", "\t\tこのままですとrlに返されるRElementオブジェクトの名前がSagexxのように自動で\n", "\t\t割り当てられてしまします。\n", "\t

\n", "\t

\n", "\t\tそこで、name関数でRにおける変数名を指定します。\n", "

\n",
    "\trl = r(sl).name('l')\n",
    "
\t\t\n", "\t\t説明でRの変数とSageの変数を混同しないようにRでの変数名をlとし、r関数の返した\n", "\t\t値をrl変数にセットします。\n", "\t

\n", "\t

\n", "\t\t出力結果から、r('l')で正しくslのリストがRに渡っていることが確認できます。\n", "\t\tまた、rlのタイプは、sage.interfaces.r.RElementであり、その値の出力結果は\n", "\t\tr('l')と同じであることも確認できます。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1] 1 2 3\n", "\n", "[1] 1 2 3\n" ] } ], "source": [ "# Sageの変数(リスト)をRに渡す\n", "sl = [1, 2, 3]\n", "# RにSageの変数slを渡し、Rでの変数名をlとする\n", "rl = r(sl).name('l')\n", "print r('l')\n", "print type(rl)\n", "print rl" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

SageからマトリックスをRに渡す

\n", "\t

\n", "\t\tリストの次にRでよく使われるのがマトリックスです。\n", "\t\t例として、r.matrix関数を使って[1, 2, 3, 4]のリストから、2x2のマトリックスを作成します。\n", "\t\tbyrow=Trueとすることで、Sageと同じ行単位での配置を指定しています。\n", "\t\t(RではFORTRANの影響で列単位で配列を保持しています)\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ " [,1] [,2]\n", "[1,] 1 2\n", "[2,] 3 4" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# マトリックスの生成も同様に生成後に名前をつけて代入すればよい\n", "m = r.matrix([1, 2, 3, 4], 2, 2, byrow=True).name('m'); m" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

\n", "\t\tRに定義された変数mの値を出力すると、上記の出力と同じことであることが確認できます。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ " [,1] [,2]\n", "[1,] 1 2\n", "[2,] 3 4" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# rでも同じ変数名が定義される\n", "r('m')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

RのマトリックスからSageのマトリックスへの変換

\n", "\t

\n", "\t\t次にRのマトリックスをSageのマトリックスに変換する方法を示します。\n", "\t

\n", "\t

\n", "\t\t先に定義されたRのマトリックスmをsageobj関数を使ってSageのマトリックスに変換します。\n", "\t\t以下の例では、r('m')で返されたRElementをsageobjでSageの変数smに代入し、\n", "\t\tその値とタイプを確認しています。smは正しく変換され、smのタイプも\n", "\t\tsage.matrix.matrix_integer_dense.Matrix_integer_denseとなっていることが\n", "\t\t確認できます。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "[1 2]\n", "[3 4]" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "# Rのマトリックス変数をsageの変数に変換する\n", "print type(m)\n", "sm = sageobj(m)\n", "show(sm)\n", "print type(sm)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

Sageのマトリックス変数からRのマトリックスへの変換

\n", "\t

\n", "\t\tSageの変数smからRのマトリックスに変換する場合には、listメソッドを使ってマトリックスsm\n", "\t\tをリストに変換し、smの行、sm列を使ってRのマトリックスに変換します。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ " [,1] [,2]\n", "[1,] 1 2\n", "[2,] 3 4" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sage => Rの場合には、listメソッドでマトリックスからリストに変換する\n", "r.matrix(sm.list(), sm.nrows(), sm.ncols(), byrow=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

文字列リストの変換

\n", "\t

\n", "\t\t残念ながら、Sageの文字列リストは、そのままではRの文字列リストに変換されません。\n", "\t\tそこで、文字列リストをstr関数を使って文字列に変換し、最初[と最後の]を取り除いて、\n", "\t\tr('c(%s)'%文字列リスト)を使ってRの文字列リストに変換します。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "'a', 'b'\n", "[1] \"a\" \"b\"\n", "['a', 'b']\n" ] } ], "source": [ "# 文字列のリストの場合には、上記の方法では上手くいかない\n", "ary = [\"a\", \"b\"]\n", "ss = str(ary)[1:-1]; print ss # リストを文字列に変換して[、]を取り除く\n", "rary = r('c(%s)'%ss).name('rary')\n", "print rary # Rに変換した配列\n", "sary = sageobj(rary)\n", "print sary # sageに戻した配列" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

Rのプロット関数

\n", "\t

\n", "\t\tRのプロット関数を使う場合には、preGraphとpostGraphで挟むようにします。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfgAAAH4CAQAAAAMITf0AAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJiS0dE\nAACqjSMyAAAACXBIWXMAAABIAAAASABGyWs+AAActklEQVR42u3dO24r3Zre8edtfB05qoMODDgw\nXAo7apRgOzaKE2iAGgIFOG9QQ6CGIA6BnIABVuRYNQQR9gR2RU7ctl8HIvcmJUriparWqlr/3w7O\n+S4SixKf7133ZS4Aqfi70A8AoD8EHkgIgQcSQuCBhBB4ICEEHkgIgQcSQuCBhBB4ICEEHkgIgQcS\nQuCBhBB4ICEEHkgIgQcSQuCBhBB4ICEEHkgIgQcSQuCBhBB4ICEEHkgIgQcSQuCBhBB4ICEEHkgI\ngQcSQuCBhBB4ICEEHkgIgQcSQuCBhBB4ICEEHkgIgQcSQuCBhBB4ICEEHkgIgQcSQuCBhBB4ICEE\nHkgIgQcSQuCBhBB4ICEEHkgIgQcSQuCBhBB4ICEEHkgIgQcSQuCBhBB4ICEEHkgIgQcSQuCBhBB4\nICF/hXhRy1SEfuPAYNXeXPulQQKvQnPVQV4ZP/lP+s/6H/q3+m/6n6EfBScVelZ17ReHCbxU+1Og\nV8aXrNRCW/2jb63UQv+gR9+GfiZ8ZItbvpo+PCRJlttKL3ryB99KXvm91nq1hWWhnwxtIvCQZbbQ\nRrXf+UFT0Ze6k/Rms9DPh/YQ+OTZVK/KdO/PH/+JN/6ke01tY2Xop0Q7QvXhEQUrtJD04F8OofpW\nEyv1YpWe6dEPHxU+WZbZQiutfeI/zJh45XdqtLltuAgxIPCJskxvku59ed6/70+6V2ab0M+N2xD4\nVM219KdLFnB4448SQ3jDRh8+SVZoprsrvvBRr7a+fp0XQqPCp2mhi6r7nm+11Dz0w+N6BD5BNpPO\n7bt/8qyZsRNisAh8cizTXFcvbPZGT2K0frAIfHrmWv80EfcdX0o2Df0mcB0G7RJj+ZXDdYeetLKK\nobshosKn5uW64bpDXmvN0N0wEfik2PSG4bpDz5pZHvrd4HIEPiGWaXH9cN0hb/Skl9DvB5cj8Cm5\ncbjuEEN3w8SgXTJaGa47xNDdAFHh09HCcN0hhu6GiMAnorXhukMM3Q0OgU9Ce8N1hxi6Gx4Cn4YW\nh+sOMXQ3NAzaJaD14bpDDN0NChU+BS0P1x1i6G5YCPzo2VRZ68N1hxi6GxACP3LdDNcd8kbPDN0N\nBYEfu7kqv/omsvP4szKG7oaBwI/dTM+3f5MfPYvADwKBHzWbqurj+ghfq6AfPwQEftymWvf0Smtx\ngPUAEPgRs1yF9xX4JY36ISDwY9ZffZdvVTNwFz8CP2YzdTn//lEl7piNHoEfLSu17fO+V19qalno\nd43vEfjx6rFBv7Nk4C52BH6kLNO00wW1pzBSHz0CP1b913d5rYZrqOJG4Meq3wG7PRr1kSPwo2SF\n1MWBFz9aq2TgLmYEfpxm/TfoJckbVSzAiRmBH6dpkAa9xMBd5Aj8CNlM61CHTnmljG008SLwYxRg\nhP4AA3cRI/CjY7nyro+8+BaBjxiBH59AA3Z73qhiG02sCPz4hBuw21szUh8rAj8yNlXd55aZUzj/\nJl4EfmzCDtjtMTkXKQI/Kpap7O2Mm+9w/k2kCPy4hFlB/4lvtTWOw4gQgR+XSAIvBu4iReBHxEo1\noQfs9jj/Jk4EfkzCT8gdYuAuQgR+NCxTGcUI/R4DdxEi8OMxVVT3tHv9vi8fMSHw4xHPgN0eq+qj\nQ+BHwgplQc64+Q4j9dEh8GMR14CdJMkbrY0aHxUCPxbxNeglanx0CPwohDzj5jteKWcbTUwI/DiU\nCnnkxXeo8VEh8OMQx5aZUwh8VAj8CNg02vourznUMiYEfgzibdBL0pprpONB4McgjkMvvlIT+HgQ\n+MGzQnWMI/R7zvVTESHwwxdxD36HgbtoEPjhi7tBL0mV2EQTCQI/cFbEc+jFl7hgMhoEfujiHqGX\nxNUUMSHwQxd/g16SKkbq40DgB83yCDfFnsJcfCQI/LANo77LGzWcfhMDAj9sRfw9+B2m5qJA4AfM\nMpVBL4a+BIGPAoEfsoE06CXJt2rYRBMegR+yAUzJHWA2PgIEfsji3QV/Co36CBD4wYp5F/wp7IyP\nAYEfrmE16CVm4yNA4IcrroulzsHO+OAI/EBZoW3Mu+BPYWd8eAR+qAbWg99h4C4wAj9UA5qDP8DO\n+MBaCbxNbWMry21jbm9shOye5QPYBX8Kc/GBtRB4K/SitWpttHXToxb00zo3zAY9O+ODa6PCT7X0\npT+r0bPklbY02zo3zAa9xM74wNoI/FbvFf1x18ikvndsMLvgT2EuPqg2Ar9WYRvLvZastJU0mB1c\nQzW8Gfjf2BkfVguB90aTgw9grUnoNzV6w1tjd4ipuYDM2/6GmYrPFd5yHa6i/if9B/+vod/6UFmm\nN/9b6Ke44flzbfwu9FMMly1UXd+G/qv15ym0kX36u/lRz+0/6h96+dmM03AH7CRJvrXG8kFOKo5A\n64H36kTc5dVhI9T+Rf8c+o0P2HCOtfpKpameQz9EmlhpNzzTQe2CP4VefDDtrLQrbWVubm6/7IU9\nz10a2i74U7xWxuKsMNpYaZdrpUp3bm6aqNErv8wODXuEfo8aH0gbFX6mpS/fB2G89ietWWnXoQHP\nwR9gZ3wgbQS+VvGnplumUozAdmSIu+BPYWd8KC2M0vvaSr1ZrVpSoULPTLl0ZgQ9+J31SNoqA9PK\noJ0/arL7IC5170y4dGfgc/AH2EQTREvz8P5e39Gpwe6CP6XSix5DP0R6mIcfkvE06N93xlPje0fg\nh2QcU3J7jNQHQOAH4/S2pAFjZ3wABH44xlXf5VtuoukfgR+OkQVe1PgACPxwjC/w9OJ7R+AHYlRT\ncjtOhe8dgR+KEU3JHWBqrmcEfiiGf+zFKTTqe0bgh6Ic1ZTcHo36nhH4QRjDsRenMDXXNwI/DONs\n0EvU+J4R+GEYaYUXvfieEfgBGOOU3B5Tc/0i8EMw3vouSTVTc/0h8EMw3h68xFEYvSLwQzDOKbk9\nAt8jAh+9sU7J7XnN1Fx/CHz8xt2gl6jxPSLw8Rt5hReB7xGBj9yYp+R+I/C9IfCxG399lzeqjduK\nekHgYzf+Hrz0foE0ekDgYzfuKbk9GvU9IfBRG/uU3B4XSPeFwMctjQa9RKO+JwQ+bolUeEkVl4z3\ngcBHLIkpuT0qfC8IfMzSqe9MzfWEwMcsnR68RI3vBYGPWRpTcntMzfWAwEcrlSm5Pabm+kDg45VW\ng16iUd8DAh+vxCq8mJrrAYGPVFJTcntU+M4R+FilV9+ZmusBgY9Vej14iRrfOQIfq7Sm5PaYmusY\ngY9SalNye0zNdY3AxynNBr1Eo75jBD5OiVZ4MTXXMQIfIcul5Kbk9qjwnSLwMZpqHfoRQmFqrlsE\nPkaF6tCPEBA1vkMEPkZTT7bCi6m5ThH46FjCDXqJqbluEfj4pN2gl2jUd4jAx6dMu8KLqbkOEfjI\nWK4s2Sm5PSp8Zwh8bKjvTM11iMDHpky+By9JNTW+GwQ+NmXSU3J7a6bmukHgo2Jlsmvoj3itnKm5\nLhD4uNCg31vTqO8CgY8LQ3Z7NVNzXSDwEWFK7gC9+E4Q+JhQ33/zRg1Tc+0j8DGhB3+ITTQdIPAx\nYUruEI36DhD4aDAld8xrFUzNtY3Ax4MG/UfU+NYR+HgwZPdRTeDbRuAjwZTcCVT41h0F3gqb02sK\nhPr+CVNz7Tuu8I1yvdnKWNTYP3rwpzA117KjwPvWH3WnSlP7ZS/8t7VXTMmdQqO+ZZ/68N6o1laN\nSq3szfLQD5gGpuROY2qubcd9+MwW9qaVpAe/8zutNQv9gImgQf8Vanyr/jr6q1zSg//56C1DP14y\nSj2EfoRI1Qxntum4SZ9J+7jbwkrfMlHUB6bkvkGFb9VBhTeXJJvv/rKhvveGHvyXvLHGCqfD05KD\nCu+mez267f78jZrTGwL/HabmWnQ8LVc7VT0EAv8dGvUt+t2kt4W2qrX48498Evrh0mCFam9CP0W8\nvLbCMn5C7fjTh1+rUaPn0A+UoCn1/QdrRurb8rtJ77VvvfFKW6/EhYZ9okH/E3bNtebjwptfmlqu\nlTK9hn60NFimjDHoH9CLb83xPPxUa3/WTEt/0tbO/iHbwtzcdv3/9+k9nIkG/Y/YNdeejwtvGl3c\nxLRCU93pbyptccnXQZJUEPgzMDXXkuPArzW1F2Ve2fyCXvxUa996owdN2ehwMSr8OQh8Sz5sj9VE\njSaSGk3OngjZKt999VrU+IswJXcer9g1146P22NnKvRiG03Pj64vldurzSR/Um6b0G9pUKjv56LG\nt+Jot5xNVerp8m/i9/sBPp/YjAm9C5R6DP0IA1ExF9+Gj9tjK7+q4hx81ZpLAM/FlNwFKs1v/yY4\nDvxSq5sXMRbayD7+TZsdXf777/Wvod94FGjQn8231ljOhq5bfazwuX7Z7kN43Vp6rz7HXfLl4WZb\n+xf9c+g3HgWm5C5RacrS71sdB35Lj7JX02tGTJJVceDa7Y4C7811FcdK7ZvsjdZ6puF1DqbkLuOV\nrUI/w/B9mJazmf0yt9Lezj+b3nKtVOnOzU0TNXplxvQs9OAvVXFjwq0+3Dyjue71LOlRi7NjO9PS\nl+9V3Wt/Ypz+TOySu1TFJ+tWxxW+1HoX3Erbs3+4R2eHW6ZSNOl/xJTcFSpR4W/0cdDuz7BIrjP7\nl762Um9Wq5ZUqKAPfxYa9BfzLQda3up4Lf1ajb2q0NTeVJ3/g/VHTXYf36XunamTc9Cgv8aaGn+b\n4wovf7CpCkmPl62485oFtRcqnasnLlfpJfQjDNtfH/+Gr1mx3D2jQX8Vry1jvd0tDpr07zfLmdsv\nW51/2g2uQoP+Whx3dZPfgbdMb8r0qIketBV3xHdrSjvqSmyTvcmfJv1ca98vrK2s1pyPZFdYY3c9\nr+z2DV4J+9OkLw4D7iye6RI9+FvQqL/B393+LXAxjnK4BafU3+BwlL6wq78Nzsfl0Ddaa8Guzmsd\nBp4DKPvBgN1NvLHKyutOZsKfq6Ymvy+K3v0J/WijRYP+VjTqr0YfvmeWidXgt2KB7dUIfN9o0N/M\nt1w9dS0C3zfW2LWB5TdXIvB9K50Kfzsa9Vci8L1i00w7vFbGQWrXIPD94mDqtnD6zVUIfL8YsmsL\nvfirEPgeWaGGbR/tcFbUX4XA94n63iYOrb4Cge8TU3JtolF/BQLfG8s5mLpVTM1dgcD3hwZ9q7xR\nzXq7SxH4/jAl1zam5i5G4HtimdjS2TZG6i9G4PtCg751vlVmeeinGBYC3xca9F1g4O5CBL4vrKLv\nAo36CxH4XlipijV27fOjm4vxMwLfj5K79zpCo/4iBL4fDNl1hfV2FyHwPbBCDQdTd4NNNJch8H1g\nDX2X2ERzAQLfBxr0Xaq4Fu18BL5zbJrpGAtsL0Dgu8fFE53i0OpLEPjuMSXXNabmzkbgu8fB1F1j\nau5sBL5jHEzdPa/ZRHMuAt81puT6QKP+TAS+a0zJ9YHAn4nAd8qmbJrpA436cxH4bjEl1xdq/FkI\nfIcs05QR+p4Q+LMQ+C7Rf++N1xKN+p8R+C4xQt+ntWahHyF+BL4zlrHkplc06s9A4Lsz1TL0I6SE\nNfXnIPDdmdGD7xk1/kcEviNsig1gSeB/QuC7wgh977xRzek33yPwXSHwIbBv7gcEvhOWv88Mo2f0\n4n9A4LvBgF0Q3nCk5fcIfDdo0IdCjf8Wge8A59CH42uVXD71NQLfBep7SNT4bxD4LsxYYxcQI/Xf\nIPCt49CLsGjUf4fAt489cqEt2Tf3FQLfPnrwodGL/xKBbxkN+vA44e5rBL5t1PcYUOO/QOBbxaEX\nkSDwXyDw7aK+R8FricMwTiHw7WKEPhbU+JMIfIto0EeEwJ9E4NvECrtocMLdaQS+TfTgY0KNP4HA\nt4ZT7CLDersTCHx7qO9R4TCMUwh8ewh8bNg39wmBb4kVnGIXHXrxnxD4tlDfo0Oj/jMC3xYCHyNq\n/AcEvhWcYhcnDsP4iMC3gyU3saLGHyHwLbBMJQ36SC01D/0IMSHwbZhpzaEXcfJaW2Ny7jcC3wYa\n9DFbs+Luj79u/xaW68NxQp7UFlGbasuAXbx8aXPL+Q29ayHwKrT4EHkL/bZ6RX2P3VozPYV+iDi0\n0KT3te4ltz9/Qr+pPlmunD3wkXumUb/XSh/eGz2HfiPBzKnvsfNGayPyklobtPNEG0yWqSTwA8DA\n3U7ro/SWJTUJMuMU+iHwSkrqc/mlNgbtjhXafB60s9nReqd/p/8d+o23ZKZJ6EfAWZaacsBoB4H3\n6tQYvS8PG75WjmOfspVMyA2FL+2XPfPbYuHNLZiQGxKOvFJLgbfSVrsZuV/2ksqtXparYEJuQAi8\nWgm85Vqp0p2bmyZq9JrIhkTq+6D4lsm5dvrwMy1999H3WrVlKsY/PGKZZroL/RS4yFqL1P8j3UaT\nvlbxp6ZbplIpDI1M2SE3NF5x41wLFd7XVurNatWSChVKYyx0rofQj4CLLTXTY+iHCKmdpbWPmuwa\n8UvdewLLbK3UljNqh8eXmiYywvSFlubh/b2+p2PGCTcDtdQ85Z1zzMNfwXIVnvjgz2At0z7jjsBf\ng/o+WL5VnfLkHIG/xizh7cDDl3SNJ/AXM46sHDSvlKc7OUfgL8cKu6FL+AQcAn8hK7k0cvDW6U7O\nEfhLTanvQ+dNuhtpCPxFLNeUCbkRIPA4C/33UfCt6jQvkibwlyHwY5HosZYE/gI20zqJjUEJ8LXy\nFI+1JPBns0wLFtyMyHOK98oS+PPNqe9j4ssUj65u/5jqkbJMU92Hfgq06lkvqZ1aRIU/14IFtWPj\nlbapbaShwp/Fck1TqwVJeNTGkvoPORX+PAs9pfSxSIVvVaU1dEfgz2AlB16M1nNa6+oJ/DmSPhRp\n3HyrdUo1nsD/yKYSN8yM2LNmqdyWRODPwXKbUfMmpSU4BP4HNlPto79HJ23+rDKVJTgE/luW0X9P\nQjI1nsB/b66K5bTjl84yWxbefIPltAl51iKF3zUV/jtzltOmwis1KSyzpcJ/yXIuhE7KozbjP96E\nCv+1OctpU+JbVbYI/RRdI/BfsFIly2kTk8AyWwL/lTnLbVKTwjJbAn+Sle9TNUjM6JfZEvjTXqjv\nKfJGy3HXeAJ/gs20ZTltmvxJ5ZivmiTwn1imuR5DPwWCedaIx+oJ/GcLTqdNmS8lG22znoU3H9hM\nhSewxBLfeNCbVeO8I5gKf8QKzfUQ+ikQljd60GqcM/IE/tiLnmjOwyutx9mTJ/AHbKGaw6wgSf6k\nYoybaejD/2ZTlZqEfgpE40Ebq8fWk6fC71iuhR7ZLIM93+pJL6Gfom0Efu9Fy7H91xy38bXqse2f\nI/CSJFuocRbT4qMnlTYN/RBtog8vyUqOssIp3tijVlaPZ+aGCi/LtNIDvXec4rWWY+rJE3h67/iW\nP6sZT08++cDbXJlz8jy+86jpWA6xTrwPb4XmHFSJ73ljD9rY3Ri6fUlXeHrvOM94evJJB14LrTno\nAufwJ2Vj2DSbcJOejbC4yCg2zSZb4W2mBRthcT5v9KDN0I+/SjTwNtNCk/Esp0AfvNLT0COfZOB3\ncR944wz986UmWg058gkG3maaEXdcx2s9DDnyyQWeuOM2w458YoHfxZ2Zd9zAaz1oM8zzcJKalrOF\nSuKO23ltE21sgNeRJRR4e1FB3NGOoUY+mSY9cUe7vNZEs6E17BOp8PainLijXUOs8kkE3l4k5zxa\ntM6boUU+gSa9vUjO5ZDohDeaaDacAzJGHnjLbUPc0SVvNFFpL8O4mmrUgbe5NqqIO7rljSZq9DqE\n821HG3grbKNCEw6fRve88Sc9aG7RX0E50sDbQhst/YH9cOiL136vrd7irvMjDLwV9qpcd1wLib75\nk+41s43loZ/kKyMLvGW20ErPzkl1CMK3PlGlTazHYY0q8FbqVdI9tR0h+bMmKuOs86MJvGW20Ise\n/YnajtB86xOt9Rrf/PxIAm+zXW3nDFpEwpe6U26vcV1hMfjAW24L+6VCD9R2xMUbf9Cz5vZm81im\n6wYdeCttpY2ke3/kDBvEyNc+0US5Xu0lhlNyBrp5xjLNNNNWa+eoaUTOt3q0TFOtbKt12I02A6zw\nVtiLXpVr4pPh7FJC2rzxpd/pWYX9skW48fuBBd5mttFKte79kVV0GBqv/FH3kja2CrMibyCBt9IW\ntrFfKvTsd75keA5D5Vt/8jtVmtovW9m835595H14K1WqUKFKtZ4YmMNY+FLL3ed7Ye+f717urYs0\n8FaoVKEpQceYeaVK2gX/xXJVqlR12Vk1D/A2baqFvntT/0X/R/9X/6p/DfBwkvRv9L8CvTKvn/Lr\nm/5ef+nv9f/037/5t3I93FACPcI/2vD6vD6v38WfgQzaAWgDgQcSQuCBhBB4ICEEHkgIgQcSEmQe\n/seHysIuneX1ef2xvn6UgQfQDZr0QEIIPJAQAg8khMADCSHwQEIIPJAQAg8kJNrAW2YzW4Q8yTv0\n60s2DXG6qU1Dnqoa7n3/fvWgv/euP/eRBt4ybVRI2oS6bdteVUpahbsdzDIt1PsH3140kxTwgqQw\n7/v3qwf9vffwuQ97tseXZ37M3k/92P9v769f6tXlUi4P9BNYyOUqe37VQr+UuTTTKqX3HcvvvfvP\nfaQVXpUeJUmZQq1qfr/iItiaan9yC/CypWpvJFUK1LIK9L7/CPt77/xzH+mptb6VrNCLMk2CvP77\nWaK5VnoO/bPoVaZaknwbNnWhhP69d/+5jybwlh/027a+lby2B8310k/kP7++LTTV2p9CvX+E0e/v\n/bNuP/fRBF7lQSNybVvJK9/qsbftfEevr6VttNV9j9skP7x+b697rNZMkqwI15kJq/ff+/Grl51/\n7sMMjvw4eDF/HzRSqbeQgyeBfwr9D9rlu0G7hV5Set+x/N67/9zHU+GPLbWxVzXKFaZplavc/zc2\n8CBSr3xrz3q1SlPdh36WIEL/3jv/3Ed8AIaV0m7MGD2yXDk/93C6/dxHHHgAbYt1Hh5ABwg8kBAC\nDySEwAMJIfBAQgg8kBACDySEwAMJIfBAQgg8kBACDySEwAMJIfBAQgg8kBACDySEwAMJIfBAQgg8\nkBACPwK22d8EZ8X1d6Idf61tdn8Wlp3/VYhdrKfW4hKlct1JkjJdf+/o8deWelItaao3u/vmSMVG\nJy7NME/prN8hocKPQ/2xztrU5pZLlllhuc1+/7+5lX/+qWSZTb+4nrj2yit/1Frzg+9ZSFa8V33L\nrFDzfjnV4fexYnf26u+vQCwI/Dg8aXYYLHvVVJlebapCL1opl1RopYUyrWyjQoU2kqTN7nrk2Zff\ne/1+J46tNFOmlc00e7+fRgtNVWjx6fsUksqjr0AsQt6zwZ92/shdmmvjUqnNwaXDpd5UypXv/uqX\ny6WFFr+/Ktfc9X499PvX/vme+9tfVMpdmv6+SPnX7///S/nuFQ++z+/vffAVoX9C/Nn/oQ8/Ev5s\npc3fm9fKd3fAVpZLqn5fTVl/+qqtVbZQplLfXV/ZSCrU7LoNma9tYbkK1b597xic/D4HXxH6p4M9\nmvTj8aT5wQ20Z7FSG2213t1KflqpSpK0VaVKlSZ6b+aXWv/wfQ6/AlEg8KPhtZa7/nS963XPPtf0\nD0otfemVyq/+BZtqpqWkSqVXXkl60S7wvvz2+xx/BaJAk35E/MmmkuRrK+1NWxWa/NCcXmtlmXI1\nyvVPH/7ZxiSp1qNXkldW2Zu279ccem3Zru5/+j5WeqXGFv50+BWIA3fLjZQVys65ktAyFdr61kpt\nfXv99zz+PpYr9+r8p0BfCDyQEPrwQEIIPJAQAg8khMADCSHwQEIIPJAQAg8khMADCSHwQEIIPJAQ\nAg8khMADCSHwQEIIPJAQAg8khMADCSHwQEL+P5WEAJ8IE4CdAAAAJXRFWHRkYXRlOmNyZWF0ZQAy\nMDE2LTA3LTEwVDA3OjQxOjI4KzAwOjAwlrISuQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNy0x\nMFQwNzo0MToyOCswMDowMOfvqgUAAAAgdEVYdHBkZjpIaVJlc0JvdW5kaW5nQm94ADUwNHg1MDQr\nMCswpXe8owAAABR0RVh0cGRmOlZlcnNpb24AUERGLTEuNCAcRzp4AAAASnRFWHRzaWduYXR1cmUA\nMjhjZjhlMzUxMWNmZmQ3Y2FhMzgzNWZmNzU1MGRiYzg2OTY3NGFkYWZiMmU1YTUxNWQ5ZDk4ZWUw\nOWZhZGQzYQi+3+EAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 正規分布をRインターフェースを使って表示\n", "graph = preGraph(\"images/ch12_fig1.pdf\")\n", "r('x <- pretty(c(-3,3), 30)')\n", "r('y <- dnorm(x)')\n", "r('plot(x, y, type = \"l\", xlab = \"Normal Deviate\", ylab = \"Density\", yaxs = \"i\")')\n", "postGraph(graph)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "\n", "\t

Rの関数を使ってSageでプロット

\n", "\t

\n", "\t\t上記と同じことをRの関数dnormの値を使ってSageのplot関数でプロットした例を以下に示します。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nv69ff91+n4uIBAIVpCCxZg188412r0louvlm2LgR1q51nURExFJBChJvvAHVqtnLM4iEmo4doXp1\nO4okIhIIVJCCwJEjtiDddJPdEi0SaiIj7ehoaqq9iK2IiGsqSEFg/nx7var+/V0nESk+N98MmZn2\n+mwiIq6pIAWBSZOgUSNo0sR1EpHi07QpNGigaTYRCQwqSAFu716YORMGDHCdRKR4eZ4dRZo2DX76\nyXUaEQl3KkgB7s03ITcX+vVznUSk+PXrBwcPwvTprpOISLjzjNHJI4GsZUuoXBnmzHGdJLzk5OQQ\nExNDYmIikZGRpKSkkKIzFkpE27b2Ujrz5rlOIiLhTHuiAtimTfDRR7pOlUtpaWlER0e7jhFWbr4Z\n7rwTtm+HCy5wnUZEwpWm2ALY5MkQEwNJSa6TiJScG2+EqCh47TXXSUQknKkgBahjx+wviL59oWxZ\n12lESk5MDFx/Pbzyii49IiLuqCAFqMWL4bvvtHtNwtMtt9gp5mXLXCcRkXClghSgJk2COnWgVSvX\nSURKXrt2ULu2HUUSEXFBBSkAHTgAb79tT872PNdpREqezweDBtljLvbvd51GRMKRClIAeustW5L+\n8AfXSUTcGTDAnon05puuk4hIONI5SAGoTRu7MHvhQtdJwtfxc5Cys7O1zd+hrl3tqdpaiyQiJU0j\nSAHm88/tL4PBg10nEXHvlltg+XLYuNF1EhEJNypIAebll6FKFejd23USEfd697Ynyb/6quskIhJu\nVJACyKFD9nDI/v2hdGnXaUTcK10abrrJ7uo8csR1GhEJJypIAWTGDMjK0vRaYY0dO5batWtTtmxZ\nWrRowerVq0953507d3LTTTdx6aWXEhERwf3331+CSeVc3HILZGZCerrrJCISTlSQAsiECfbco8su\nc50k8E2dOpXhw4czYsQI1q1bR+PGjenatStZWVkF3v/QoUNUq1aNxx57jCZNmpRwWjkXTZpAfDy8\n9JLrJCISTlSQAsTmzfDeexo9KqxRo0Zx++23079/f+rXr89LL71EuXLleOUUJwtefPHFjBo1iptv\nvlm70oLQnXfCvHnw7beuk4hIuFBBChAvvgiVKtkLdcrpHTlyhDVr1tCpU6e82zzPo3PnzqxYscJh\nMikuyckQHQ3jxrlOIiLhQgUpAPz8s72kwqBBUK6c6zSBLysri9zcXOLi4vLdHhcXx86dOx2lkuJU\n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\nHzRoEJdccgme57Fly5aT1mGdaO3atdx0001cfPHFlClThipVqpCQkEB6evppv3anZALEunXG3Hqr\nMaVLG1OunDF33mnMxo2uU0m4ys7ONoDJzs52HUXC1MaNxgwebExUlDHlyxtz++3GrF/vOlXBatWq\nZXw+n1m2bJlZuXKl8TzPVKpUyezduzff/Tp37mx8Pp+ZNGnSSc/Rv39/43meiYqKMp07dzb9+vUz\n9evXN57nmfLly5v58+ef8nXvvvtu43meadasmbnppptMhw4dzNKlS40xxgwcOND4fD4zbNgwU6FC\nBdOgQQPTr18/07p1a+Pz+UxERIR5++23zbRp00xUVJSJj483KSkppmnTpnl5li1bdtJrd+7c2URG\nRprGjRubHj16mBtvvNFceeWVxufzGc/zzJgxY056zAcffGA8zzMdOnQ4q69vQV+3E1WpUsX4fD7z\n1FNP5bt9//79pn379sbzPBMdHW06dOhg+vbtaxo0aGA8zzOxsbHmk08+ybt/dna2KVeunImMjDTb\nt28v8LXGjBljPM8zN9xwQ77bPc8zPp/vpPsPHjzY+Hw+c9lll5nExESTkpJiWrdubSIjI43neWb4\n8OH57v/yyy+bG264wXieZypWrGgGDRqU93HLLbfku+/o0aNNRESE8fl85oorrjB9+/Y1bdu2NWXK\nlDGe55knn3zyjF+7EzktSLt3GzN6tDFNmhgDxlx4oTEjRxqzZ4/LVCIqSBI4tm835oknjDn/fPtz\n8sorjRkzxv78DBS/LUjGGNOnTx/j8/lO+oV3qoL04osvGs/zTLVq1cynn36a73MjRowwnueZypUr\nm6ysrJNe1/M8U6pUKTN79uwCsw0cODDvF/bIkSPzfe65554znueZGjVqmCpVqpg33ngj3+fvu+8+\n43me6dKly0nPO2/ePLNz586Tbv/oo49MTEyMKV269EnFoiQK0jXXXGN8Pp/p379/vtv79etnPM8z\nvXr1MrtP+OZ59tlnjed55tJLLzXHjh3Lu/3mm28usGwd17RpU+Pz+czcuXPz3X6qgrRkyRLz7bff\nnnT7pk2bTI0aNYzP5zOrV6/O97ktW7YYz/NM7dq1T/me582bZ3w+n6lWrVpeMT5uw4YNec+9ZMmS\nUz5HQUq8IO3ebcyECcZ062ZMqVL247rrjJk1y5jDh0s6jUjBVJAk0Bw+bMw77xjTq5cxkZH2o2dP\n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\n", "text/plain": [ "Graphics object consisting of 1 graphics primitive" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 同じグラフをRと連携して表示した例(計算にRの関数を使用)\n", "# Sage 6.7ではN()を使った数値化が失敗するため、sageobjを使ってrの戻り値を数値に変換\n", "x = var('x')\n", "f = lambda x: sageobj(r.dnorm(x)) # r.dnormを使ってRのdnorm関数を呼び出す\n", "plot(f, [x, -3, 3], axes_labels=[\"Normal Deviate\", \"Density\"], figsize=6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

r.plot関数を使ったプロット

\n", "\t

\n", "\t\t次に、r.plotを使ったプロットの例を示します。X軸にage、Y軸にweightを表示します。\n", "\t\tr.plotにX, Yにsageの変数age, weightを使った場合、軸ラベル名にsagexxのような\n", "\t\t名前が表示されます。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nEXxA3uvGSpV6tDtJWy3Va6dv34zrdVgNr9WUFqLEGQg+IKuV+VqtSYUyNd5Iz3N5p0qSVEpqtfF7\nyUptdKNWD5b5MIGFKHEGgo+o095KSblulWtrmXINyq30xip71KBMg7fW2pN65VpOaiFKnIG15UKy\nTIV0WL7aMhXqvbfDq/jDK/ZctS9eL/g4/6UW54/gccRKbbSU9KC1J14lHZdA8Dhh5eH1+2H2x9wQ\nPBAIZ9oBgRA8EAjBA4EQPBAIwQOBEDwQCMEDgRA8EAjBA4EQPBAIwQOBEDwQCMEDgRA8EAjBA4H8\nP5Tl+0q8TMvtAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA3LTEwVDA3OjQxOjM0KzAwOjAwnbh4\nUwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNy0xMFQwNzo0MTozNCswMDowMOzlwO8AAAAgdEVY\ndHBkZjpIaVJlc0JvdW5kaW5nQm94ADUwNHg1MDQrMCswpXe8owAAABR0RVh0cGRmOlZlcnNpb24A\nUERGLTEuNCAcRzp4AAAASnRFWHRzaWduYXR1cmUAMDBmZGU2NWUwNmJkYmJmMzRiMDBhM2Y5YTg1\nZjljNmQ5ZjhmN2I1OWE3MjcxM2IxMDIwYWY5MGVhN2MzZGE2MFXVCOcAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# グラフ表示(軸ラベルが正しく表示されていない)\n", "age = [1,3,5,2,11,9,3,9,12,3]\n", "weight = [4.4,5.3,7.2,5.2,8.5,7.3,6.0,10.4,10.2,6.1]\n", "graph = preGraph(\"images/ch12_fig2.pdf\")\n", "r.plot(age, weight)\n", "postGraph(graph)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

変数名を付けてr.plotでプロット

\n", "\t

\n", "\t\tage, weightにnameコマンドでRの変数名をセットすると、軸ラベルがage, weightと\n", "\t\t表示されます。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfgAAAH4CAQAAAAMITf0AAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJiS0dE\nAACqjSMyAAAACXBIWXMAAABIAAAASABGyWs+AAARpUlEQVR42u3dQY7bWnaH8f/pdoIOMuIbJehB\nA6zuFdCDLIDagAHWNDPWCgxplqm0BGkJ0ixTcQMBiksoLqGIAAmC4AU4GUguS+UqP7dF9aV4vt8D\n3lPB9eTLsj5fUqR4zQUgit+lHgCAvx2CBwIheCAQggcCIXggEIIHAiF4IBCCBwIheCAQggcCIXgg\nEIIHAiF4IBCCBwIheCAQggcCIXggEIIHAiF4IBCCBwIheCAQggcCIXggEIIHAiF4IBCCBwIheCAQ\nggcCIXggEIIHAiF4IBCCBwIheCAQggcCIXggEIIHAiF4IBCCBwIheCAQggcCIXggEIIHAiF4IBCC\nBwIheCAQggcCIXggEIIHAiF4IBCCBwIheCAQggcCIXggEIIHAiF4IBCCBwIheCCQDyl+U8tUpN5w\n4Ga13v/s/5okeBWaq03yOwO3rtBKzc/+z2mCl1pfJPqdgZtmy0v+b47hgUAIHgiE4IFACB4IhOCB\nQAgeCITggUAIHggk1YU3wCAsVy75T195Fg0zPG6YzfWoUnPbW5Z6LLeB4HGzrFCtO1/4TJ3mqUdz\nGwget6vS7vi5sRWfv/wxBI/b1b08ylMP5VYQPG7XTpVVkhVaapN6MLeB4HGzvNdMlT1rrZXvUo/m\nNnBaDjfMO92nHsNtYYYHAiF4IBCCBwIheCAQggdGxErb2962dqUrCwgeGA0rtNXKZ2r0eJ1PBxA8\nMB61HryRfKON6mv8BgQPjEeuL2vKdGKGByauUXV8VP/86jLfQ/DAaPhKue1taU9qr3NTDy6tBUbE\nZ1Yp071fae1FggdG5bofA2KXHghkkOCttK25ubk92/palwwAuNQAwVuurRrdublppv5alwwAuNQQ\nx/C1Nn6834i3ai1TcZ1TCgAuM8Qufavi65xumcqTe40BGJEBZnjfWakna9VKKlRo5QQPjNIgp+X8\nwTYqlUnaqH0rd6tfriCSpH/Sf6becCCigc7D+2F+f//XN6d3FbXP+pR6w4GIBgj+sLrXKVb6AsZp\n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\nDwRC8EAgBA8EQvBAIAQPBELwQCBprrTLVFlx9S37F/13kq17ayx/p/9JPYijf9Cv+r/UgxjhWP5x\nNK8W6e/1H9/51Vy7n39q89QbdzW291nqMRxHUqr0RepRHMeyVONN6lGMcCyjebVcdyzs0gOBEDwQ\nCMEDgRA8EAjBA4EQPBDIlE/LZeO5SdZ4xjKekTCWFGOZcPAAXmOXHgiE4IFACB4IhOCBQAgeCITg\ngUAIHghkssFbbcur32TjrxnPMvUIjuMobGmjWIh7LH9CVll+8nhpCdct/jqWa/10Jhq8PaqUtB1N\nZkvNU4/hOI61pLUlH83xT2hvVeJxZFp+WZrc1qolPab6C/HrWK74+vUJ/qNSjy6XcnnqsRzHsx/D\nSJTrWZlLhdbJfyJPLpcq7ZOOYymXq3S5VBx/OrW2acdyzdfvRGd4bSRJo7g62jIt9ZB6FJKkUq1k\npTpPPZ5OmWWS8rR/Rr5wO/3peC+pUZK9jrOxXO31O7rloodwuE+a5dpqlXosktZaeWeXP8/lckl7\n9Sps4ZuUA/HONnq2TtmIFgfP1B7Hlngg13z9TnWGly21V5P+1pE2V+8X3GV0YLlmPtNMid/bsFK1\nPvqdNlqn/pGM07Vev5Oc4SXbq9PHUXzgsVRptSSZa5b4Hq2dOu8lby1L/lPZeCv5YkQf12x1+HMq\n0h8KXu/1O8kZ3mrJH0aRu3zm5uYmuSW/JXOj3DLJyuQv6V6FNI64XrQqLJNUXXLf9yFc8/U7zRk+\nV/ll5vDUB2Qj4p3t9Gid8uRvIm5U2qN6FUp+0PWFd7bSozWqkr+vcMXX74j2qPC3YLny47vRqUdS\nKBvHSE7GNJqfztW2kOCBOCZ5DA/gbQQPBELwQCAEDwRC8EAgBA8EQvBAIAQPBELwQCAEDwRC8EAg\nBA8EQvBAIAQPBELwQCAEDwRC8EAgBA8EQvBAIAQPBELw4Vlm1deliS2z2mrp5evK5mNY1BnDIHjs\nj0sT15Jl2qtQbvvDYlS2Va3s8GuYgmkuRIEfZrl2vpKsU6mNarX+INlShWSVcv8o2UaPSrr4JIZC\n8MF5Z40tlalUp6/LNzcqJBXq7bDsZOq16DAQdumDs1J7ddq9s/hUp0aNGs1SjxPDIPjoSm18441K\nSVJ7WOTx+FWj0htvJBZ1ngp26aPbaWuZcvXKrfSNVfaoXpl6yRtr7Emd8vEs+YjLsLZceJapUOed\nHY7iD8fruWqfSeNc8hE/j+BxwkqttZA018oTr5KOayB4nLFSpaTDkTsmh+CBQHiXHgiE4IFACB4I\nhOCBQAgeCITggUAIHgiE4IFACB4IhOCBQAgeCITggUAIHgiE4IFACB4I5P8Bw+SLjDYn/18AAAAl\ndEVYdGRhdGU6Y3JlYXRlADIwMTYtMDctMTBUMDc6NDI6MTQrMDA6MDA0qsQtAAAAJXRFWHRkYXRl\nOm1vZGlmeQAyMDE2LTA3LTEwVDA3OjQyOjE0KzAwOjAwRfd8kQAAACB0RVh0cGRmOkhpUmVzQm91\nbmRpbmdCb3gANTA0eDUwNCswKzCld7yjAAAAFHRFWHRwZGY6VmVyc2lvbgBQREYtMS40IBxHOngA\nAABKdEVYdHNpZ25hdHVyZQBmNGU5YWRhNDg5NDY3YWQwNDk3OWI2ZjE3MDg0ZGJmY2ExZWJiOGJj\nNTljMjc5MDg5ZDgyZmY3NzkxZGFjODFmLfRjZAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# データのセット\n", "age = r([1,3,5,2,11,9,3,9,12,3]).name('age')\n", "weight = r([4.4,5.3,7.2,5.2,8.5,7.3,6.0,10.4,10.2,6.1]).name('weight')\n", "# グラフ表示\n", "graph = preGraph(\"images/ch12_fig3.pdf\")\n", "r.plot(age, weight)\n", "postGraph(graph)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

plotのオプションを指定

\n", "\t

\n", "\t\tRのplot関数にタイトル等のオプションを指定する場合には、r関数を使って以下のように表示します。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n85lmSvzahpWq9dE/aKN16h/JON3q+TvJGV6yvTp9HMUbHkuVVkuSuWaJz9HaqfNe8tay5D+VjbeS\nL0b0ds1Wx3+nIv2m4O2ev5Oc4a2W/HEUuctnbm5uklvyUzI3yi2TrEz+lO5VSOOI60WrwjJJ1TXn\nfR/CLZ+/05zhc5WfZg5PvUE2It7ZTgfrlCd/EXGj0g7qVSj5Rtcn3tlKB2tUJX9d4YbP3xGtUeG3\nYLny06vRqUdSKBvHSM7GNJqfzs2WkOCBOCa5DQ/gbQQPBELwQCAEDwRC8EAgBA8EQvBAIAQPBELw\nQCAEDwRC8EAgBA8EQvBAIAQPBELwQCAEDwRC8EAgBA8EQvBAIAQPBELw4Vlm1edLE1tmtdXSy+eV\nzcdwUWcMg+CxP12auJYs016FctsfL0ZlW9XKjl/DFEzzQhT4bpZr5yvJOpXaqFbrj5ItVUhWKfeP\nkm10UNKLT2IoBB+cd9bYUplKdfp8+eZGhaRCvR0vO5n6WnQYCKv0wVmpvTrt3rn4VKdGjRrNUo8T\nwyD46EptfOONSklSe7zI4+mzRqU33khc1HkqWKWPbqetZcrVK7fSN1bZQb0y9ZI31tiTOuXjueQj\nrsO15cKzTIU67+y4FX/cXs9V+0wa5yUf8eMIHmes1FoLSXOtPPFV0nELBI8LVqqUdNxyx+QQPBAI\nr9IDgRA8EAjBA4EQPBAIwQOBEDwQCMEDgRA8EAjBA4EQPBAIwQOBEDwQCMEDgRA8EAjBA4H8P7Rg\n0oX+zEFhAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA3LTEwVDA3OjQyOjU3KzAwOjAwgQjQSgAA\nACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNy0xMFQwNzo0Mjo1NyswMDowMPBVaPYAAAAgdEVYdHBk\nZjpIaVJlc0JvdW5kaW5nQm94ADUwNHg1MDQrMCswpXe8owAAABR0RVh0cGRmOlZlcnNpb24AUERG\nLTEuNCAcRzp4AAAASnRFWHRzaWduYXR1cmUAZjMzNDBjY2IxOGU0ZjA1MGM3NjY0OTYxYTk1MzUx\nOGQyYWQxNDg5NWNhNDFhNDUwZWI5MTk3ZTY3MWQyYTg3OL5o3b4AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# タイトル等グラフオプションを指定する場合には、r.plotではなくr関数を使用する\n", "graph = preGraph(\"images/ch12_fig4.pdf\")\n", "# r('par(family=\"Japan1Ryumin\")')\n", "r(\"plot(age, weight, main='Test plot')\")\n", "postGraph(graph)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

データファイルからの集計

\n", "\t

\n", "\t\tRの得意とする集計処理を以下のようなデータファイルを読み込み、\n", "\t\tクロス集計を作成してみましょう。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Writing data/ch12_data.txt\n" ] } ], "source": [ "%%writefile data/ch12_data.txt\n", "diabetes status\n", "Type1 Poor\n", "Type2 Improved\n", "Type1 Excellent\n", "Type1 Poor" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

データファイルの読み込み

\n", "\t

\n", "\t\tデータファイルの読み込みは、Rのread.table関数を使用します。\n", "\t\theader=Tを付けて、1行目がヘッダであり、\n", "\t\t1列目がdiabetes、2行目がstatusと名前付けします。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ " diabetes status\n", "1 Type1 Poor\n", "2 Type2 Improved\n", "3 Type1 Excellent\n", "4 Type1 Poor" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# データファイルの読み込み\n", "d = r(\"d<-read.table('data/ch12_data.txt', header=T)\") ; d\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

クロス集計

\n", "\t

\n", "\t\tクロス集計には、table関数を使用し、データセットdの変数、\n", "\t\tdiabetes, statusを指定します。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ " \n", " Excellent Improved Poor\n", " Type1 1 0 2\n", " Type2 0 1 0" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# クロス集計\n", "r('table(d$diabetes, d$status)')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "SageMath 7.2", "language": "", "name": "sagemath" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.10" } }, "nbformat": 4, "nbformat_minor": 0 }