PostgreSQLとの連携
統計解析を楽にするため、データベースからデータを読み込むようにします。
データベースは使い慣れたPostgreSQL9.6。
PostgreSQLにつなげるために、RにDBIとRpostgreSQLパッケージをインストールします。
install.packages("DBI")
install.packages("RPostgreSQL")
DBへの接続はインストールしたパッケージを読み込み
("DBI"は明示的に読み込まれるので不要)
require("DBI")
require("RPostgreSQL")
dbConnectで接続。dbGetQueryでSQL文を実行して結果を受け取ります。
DB名:kyotei, ホスト:localhost ポート:5432,user/passともpostgres
テーブルkiryu37とplayer から解析用のクエリを作成した結果をdatasetに入れます。
con <- dbConnect(PostgreSQL(), host="localhost", port=5432, dbname="kyotei", user="postgres", password="postgres")
dataset <- dbGetQuery(con,"SELECT * FROM kiryu37 k37, player p WHERE k37.id=p.id")
5カラム目(dataset[5])が文字化けしたので、iconvでutf-8 -> sjisに変換します
dataset[5] <- data.frame(lapply(dataset[5],iconv,from="utf-8",to="cp932"))
print(dataset)
これで解析データ作成が楽になるぞ。
重回帰分析(その1)
さぁ桐生2日目。竹井選手と大瀧選手が2連勝。2人の戦いになりそうな予感。
とゆうことで、24レースの勝利者データができました。
ん?今井選手いきなり2kgも体重ふえとるぞ。それはさておき、このデータからまず一番関係しそうなモータとボートの勝率から、一着率を目的変数にして、重回帰分析をおこなってみようと思ったけど、1着の選手分しかデータ化してないから勝率を目的変数にできないな。あほか俺は。
まぁ週末にデータ化してちゃんと勝率出せるようにしよう。今日はRを使った重回帰分析の方法だけ。とりあえず全国勝率(win)を目的変数として、選手クラス(class)と桐生の勝率(kiryu_win)を説明変数として重回帰分析してみます。
ちなみに競艇のクラスはA1,A2,B1,B2の4種類あり、A1がトップレーサ達になります。はっきりいって1号艇がA1選手で、他がB2選手だったら、どんなにダメモーターでも、まぁまちがいなく1号艇が勝ちます。
回帰分析とゆうのは多変量解析法の一つで、
1つの目的変数(Y)を
複数の説明変数(Xi i=1,2,3,4,....n)
で、それらの関係を分析する方法。線形の関係が考えられる場合に使います。説明変数が1つの場合は単回帰、複数の場合は重回帰となり、以下の式で関係を表します。
Y = β0 + β1 * X1+ β2 * X2 + ・・・+ βn * Xn
ここで β0は切片。β1~βnは偏回帰変数といいます。まぁよく見る式ですね。
Rでの重回帰分析は lm()とゆうコマンドを使います。
ans = lm(Y~X1+X2+・・・Xn, data)
ans は重回帰分析結果、Yが目的変数、X1・・Xnが説明変数。dataはcsvを読みこんだデータです。このサンプルで全国勝率(win)を目的変数として、選手クラス(class)と桐生の勝率(kiryu_win)を説明変数した解析結果は以下のようになります。
推計勝率(win) = 4.9432 + (-0.5293)*class + 0.3518 * kiryu_win;
これでいくと
竹井選手
4.9432 + (-0.5293)*1+ 0.3518 * 6.55 = 6.71819 (実際値は6.72)
大瀧選手
4.9432 + (-0.5293)*1+ 0.3518 * 5.19 = 6.239742(実際値は6.59)
今井選手
4.9432 + (-0.5293)*4+ 0.3518 * 4.20 = 4.30356(実際値は4.83)
まぁデータ足りないんでこんなもんかな。
csvファイルの読み込み
統計解析するには、あたりまえだが統計データが必要である。
Rではcsvファイルを読み込むには以下のようにする。
or
csvデータは作業フォルダにある必要がある。
各種ネットの解説をみてると <- で代入する場合と = で代入するケースがあったが私の環境ではどちらでも代入された。
ちなみに読み込んだデータは本日12/06の桐生競艇の勝利者データです。5Rで個人的に応援している竹井選手が6号艇から3週目でぶち抜くすごい勝ち方をしていて、とてもうれしい。
また read.table() でもよいらしい。read.table だと,いろいろオプションがある。
header=T で1行目をヘッダ行として指定する。Fもしくは指定無しで1行目もデータと判断する。
sep={セパレータ}でcsvのセパレータ(デリミタ)を指定する。上記例ではカンマ区切り。
他にもオプションがあるようですが、とりあえず使わないので使うときにまた記載します。
R インストール
からインストーラーをダウンロードします。
Download R for windows > base > Download R 3.4.3 for Windows
より、2017.12.01現在の最新バージョン3.4.3 x86版をインストールします。
とりあえずデフォルト設定でインストールしましたが、32bit版/日本語インストールすると途中で文字化けしましたがそのまま進めます。
コンポーネントの指定のときに
Message translations
にチェックを入れてインストールします。これがないと日本語にならないようです。
インストール先のRgui.exeやショートカットアイコンからRGuiを起動できればインストール完了です。