PostgreSQLとの連携

 統計解析を楽にするため、データベースからデータを読み込むようにします。

データベースは使い慣れたPostgreSQL9.6。

 

PostgreSQLにつなげるために、RにDBIとRpostgreSQLパッケージをインストールします。

install.packages("DBI")

install.packages("RPostgreSQL")

 

f:id:norimakibros:20171214162829p:plain

 

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)

 

f:id:norimakibros:20171210122057p:plain

 

これで解析データ作成が楽になるぞ。

 

重回帰分析(その1)

さぁ桐生2日目。竹井選手と大瀧選手が2連勝。2人の戦いになりそうな予感。

 

f:id:norimakibros:20171207230106p:plain

とゆうことで、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)を説明変数した解析結果は以下のようになります。

 

f:id:norimakibros:20171207234245p:plain

推計勝率(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ファイルを読み込むには以下のようにする。

csv  <- read.csv(ファイル名)

or

csv = read.csv(ファイル名)

 

csvデータは作業フォルダにある必要がある。

各種ネットの解説をみてると <- で代入する場合と = で代入するケースがあったが私の環境ではどちらでも代入された。

 

f:id:norimakibros:20171206235041p:plain

 

ちなみに読み込んだデータは本日12/06の桐生競艇勝利者データです。5Rで個人的に応援している竹井選手が6号艇から3週目でぶち抜くすごい勝ち方をしていて、とてもうれしい。

 

また read.table() でもよいらしい。read.table だと,いろいろオプションがある。

f:id:norimakibros:20171207000048p:plain

header=T で1行目をヘッダ行として指定する。Fもしくは指定無しで1行目もデータと判断する。

sep={セパレータ}でcsvのセパレータ(デリミタ)を指定する。上記例ではカンマ区切り。

他にもオプションがあるようですが、とりあえず使わないので使うときにまた記載します。

コマンド入力方法

Rの各コマンドは基本的に2種類の入力方法がある。

1.コンソール上で直接入力する。

コンソール上で直接入力してenterで確定実行。結果はコンソール等に出力される。

 

f:id:norimakibros:20171205232729p:plain

 

2.スクリプト画面で入力して実行する。

こちらのほうがよく使う。

File > 新しいスクリプト

等でスクリプト編集画面をよびだし、コマンドを入力。

実行したいコマンド部分を選択し、ctrl + R で実行すると結果はコンソール等に出力される。

 

f:id:norimakibros:20171205232820p:plain

 

編集したスクリプト

保存

別名で保存...

などでファイルに保存可能。

スクリプトを開く...

で再読み込みできる。

RGuiの日本語化

Edit > GUI Preferences... 画面で

Language for menus and messages を ja に設定(英語にしたい場合は en で設定)し

save...ボタンより

ユーザドキュメントフォルダ(通常 C:\Users\{ユーザ名}\Documents)

にRconsoleとゆう名前で保存後OKした後、

Rを再起動する。

 

f:id:norimakibros:20171204172510p:plain

 

インストール時、日本語でインストールしていた場合は、これで切り替えができますが、Englishでインストールしていた場合は切り替えれないようです。

ワークスペース(ホーム)ディレクトリの設定

ワークスペース(ホーム)ディレクトリの設定

File > Change dir...

で任意のフォルダを設定し、それをワークスペースとします。ここに置かれたファイルしか読み込めないようなので、この設定は必須です。

 

f:id:norimakibros:20171203224848p:plain

R インストール

https://cran.r-project.org/

からインストーラーをダウンロードします。

Download R for windows > base > Download R 3.4.3 for Windows

より、2017.12.01現在の最新バージョン3.4.3 x86版をインストールします。

 

とりあえずデフォルト設定でインストールしましたが、32bit版/日本語インストールすると途中で文字化けしましたがそのまま進めます。

コンポーネントの指定のときに

Message translations

にチェックを入れてインストールします。これがないと日本語にならないようです。

 

f:id:norimakibros:20171205232309p:plain

 

インストール先のRgui.exeやショートカットアイコンからRGuiを起動できればインストール完了です。

f:id:norimakibros:20171205232510p:plain