質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Q&A

0回答

3035閲覧

sqliteSendQuery(conn, statement) でエラー。RのrandomForest,SQLiteからのデータの使い方

c1391707

総合スコア10

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

0グッド

1クリップ

投稿2016/09/17 12:21

編集2016/09/17 13:20

###前提・実現したいこと
RのrandomForestパッケージを使って予測モデルを作成したいです。

###発生している問題・エラーメッセージ

作成した素性はSQLiteに格納されているようなのですが、下記のエラーが出てしまいます。
'race.db'をDB Browser for SQLitedeで確認したところ、table: featureはきちんとあるのですが。。。

source("C:\Users\a\analyze.R")

randomForest 4.6-12
Type rfNews() to see new features/changes/bug fixes.
要求されたパッケージ DBI をロード中です
sqliteSendQuery(conn, statement) でエラー:
error in statement: no such table: feature
追加情報: 警告メッセージ:
1: grepl("\n", lines, fixed = TRUE) で:
入力文字列 73 はこのロケールでは不適切です
2: grepl("\n", lines, fixed = TRUE) で:
入力文字列 82 はこのロケールでは不適切です
3: grepl("\n", lines, fixed = TRUE) で:
入力文字列 85 はこのロケールでは不適切です
4: grepl("\n", lines, fixed = TRUE) で:
入力文字列 89 はこのロケールでは不適切です
5: grepl("\n", lines, fixed = TRUE) で:
入力文字列 95 はこのロケールでは不適切です

###analyze.Rのソースコード
library(randomForest)
library(RSQLite)

randomRows <- function(df, n) {
df[sample(nrow(df),n),]
}

downSample <- function(df) {
c1 <- df[df$order_of_finish == "TRUE",]
c2 <- df[df$order_of_finish == "FALSE",]
size <- min(nrow(c1), nrow(c2))
rbind(randomRows(c1,size), randomRows(c2,size))
}

drv <- dbDriver('SQLite')
conn <- dbConnect(drv, dbname='race.db')
rs <- dbSendQuery(conn, '
select
order_of_finish,
race_id,
horse_number,
grade,
age,
avgsr4,
avgWin4,
dhweight,
disRoc,
r.distance,
dsl,
enterTimes,
eps,
hweight,
jwinper,
odds,
owinper,
preSRa,
sex,
f.surface,
surfaceScore,
twinper,
f.weather,
weight,
winRun,
jEps,
jAvgWin4,
preOOF,
pre2OOF,
month,
runningStyle,
preLastPhase,
lateStartPer,
course,
placeCode,
race_number
from
feature f
inner join
race_info r
on
f.race_id = r.id
where
order_of_finish is not null
and
preSRa is not null
limit 250000')

allData <- fetch(rs, n = -1)

dbClearResult(rs)
dbDisconnect(conn)

#カテゴリ変数をファクターに変換しておく
allData$placeCode <- factor(allData$placeCode)
allData$month <- factor(allData$month)
allData$grade <- factor(allData$grade)
allData$sex <- factor(allData$sex)
allData$weather <- factor(allData$weather)
allData$surface <- factor(allData$surface)
allData$course <- factor(allData$course)

#負担重量/馬体重を素性に追加
allData$weightper <- allData$weight / allData$hweight

#オッズを支持率に変換
allData$support <- 0.788 / (allData$odds - 0.1)
allData$odds <- NULL

#着順をカテゴリ変数に変換
allData$order_of_finish <- factor(allData$order_of_finish == 1)

allData.s <- downSample(na.omit(allData))
allData.s <- allData.s[order(allData.s$race_id),]

#データを学習用とテスト用に分割する
train <- allData.s[1:(nrow(allData.s)-5000),]
test <- allData.s[(nrow(allData.s)-4999):nrow(allData.s),]

#予測モデルを作成
(rf.model1 <- randomForest(
order_of_finish ~ . - support - race_id, train))

#素性の重要度を見てみる
importance(rf.model1)

#テストデータで予測力を見てみる
pred <- predict(rf.model1, test)
tbl <- table(pred, test$order_of_finish)
sum(diag(tbl)) / sum(tbl)

#支持率だけを用いて予測モデルを作成する
(rf.model2 <- randomForest(
order_of_finish ~ support, train))

pred <- predict(rf.model2, test)
tbl <- table(pred, test$order_of_finish)
sum(diag(tbl)) / sum(tbl)

racewiseFeature <-
c("avgsr4",
"avgWin4",
"dhweight",
"disRoc",
"dsl",
"enterTimes",
"eps",
"hweight",
"jwinper",
"owinper",
"preSRa",
"twinper",
"weight",
"jEps",
"jAvgWin4",
"preOOF",
"pre2OOF",
"runningStyle",
"preLastPhase",
"lateStartPer",
"weightper",
"winRun")

splited.allData <- split(allData, allData$race_id)

scaled.allData <- unsplit(
lapply(splited.allData,
function(rw) {
data.frame(
order_of_finish = rw$order_of_finish,
race_id = rw$race_id,
age = rw$age,
grade = rw$grade,
distance = rw$distance,
sex = rw$sex,
weather = rw$weather,
course = rw$course,
month = rw$month,
surface = rw$surface,
surfaceScore = rw$surfaceScore,
horse_number = rw$horse_number,
placeCode = rw$placeCode,
race_number = rw$race_number,
support = rw$support,
scale(rw[,racewiseFeature]))
}),
allData$race_id)

scaled.allData$order_of_finish = factor(scaled.allData$order_of_finish)

is.nan.df <- function(x) do.call(cbind, lapply(x, is.nan))
scaled.allData[is.nan.df(scaled.allData)] <- 0

scaled.allData <- downSample(na.omit(scaled.allData))
scaled.allData <- scaled.allData[order(scaled.allData$race_id),]

#データを学習用とテスト用に分割する
scaled.train <- scaled.allData[1:(nrow(scaled.allData)-5000),]
scaled.test <- scaled.allData[(nrow(scaled.allData)-4999):nrow(scaled.allData),]

#レース毎に正規化されたデータで予測モデルを作成
(rf.model3 <- randomForest(
order_of_finish ~ . - support - race_id, scaled.train))

#素性の重要度を見てみる
importance(rf.model3)

#テストデータで予測力を見てみる
pred <- predict(rf.model3, scaled.test)
tbl <- table(pred, scaled.test$order_of_finish)
sum(diag(tbl)) / sum(tbl)

#支持率を追加して予測モデルを作成
(rf.model4 <- randomForest(
order_of_finish ~ support, train))

#素性の重要度を見てみる
importance(rf.model4)

#テストデータで予測力を見てみる
pred <- predict(rf.model4, test)
tbl <- table(pred, test$order_of_finish)
sum(diag(tbl)) / sum(tbl)

#支持率を追加して予測モデルを作成
(rf.model5 <- randomForest(
order_of_finish ~ support, scaled.train))

#素性の重要度を見てみる
importance(rf.model5)

#テストデータで予測力を見てみる
pred <- predict(rf.model5, scaled.test)
tbl <- table(pred, scaled.test$order_of_finish)
sum(diag(tbl)) / sum(tbl)

#試したこと

現在、Rについて勉強中なのですが何が原因か、予想がつかない状態でございます。
初歩的ではございますが、よろしく御教示お願いいたします。

###補足情報
windows10
ちなみに、analyze.Rの#の行をすべて削除したところ

source("C:\Users\a\analyze.R")

randomForest 4.6-12
Type rfNews() to see new features/changes/bug fixes.
要求されたパッケージ DBI をロード中です
sqliteSendQuery(conn, statement) でエラー:
error in statement: no such table: feature

エラーメッセージは上記のみになりました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/17 12:55

Rの処理とは関係なさそうです。statementの中のエラーだといっています。statementにはSQLが記述されていると推測します。SQLは外部ファイルですか? だとしたら、エンコーディングは、Shift_JIS、CP932、UTF-8のどれですか?Windows 10の環境なので、Shift_JISかCP932にすべきと思います。ともあれ、まずstatementを調べましょう。
退会済みユーザー

退会済みユーザー

2016/09/17 13:03

SQLはanalyze.Rファイルの中にあるのですね。ファイルのエンコーディングを調べてください。
c1391707

2016/09/17 13:13

vornan19様 早速のご返信ありがとうございます。 analyze.Rファイルのエンコーディングは、Shift_JISのようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問