2016/07/14
今回は、
Rで
SQLiteのデータベースからデータを読み込み、基本的な解析を行います。 まず、
SQLiteのデータベースを使えるようにするため、"
RSQLite"のパッケージをインストールします。操作の途中でパッケージのダウンロード先(C
RANのミラーサイト)を指定するように聞かれましたので、Tokyoを指定しました。
> install.packages("RSQLite")
install.packages("RSQLite") で警告がありました:
'lib = "C:/Program Files/R/R-3.3.1/library"' は書き込み可能ではありません
--- このセッションで使うために、CRAN のミラーサイトを選んでください ---
依存対象 (dependency) ‘DBI’ もインストールします
URL 'https://cran.ism.ac.jp/bin/windows/contrib/3.3/DBI_0.4-1.zip' を試しています
Content type 'application/zip' length 207665 bytes (202 KB)
downloaded 202 KB
URL 'https://cran.ism.ac.jp/bin/windows/contrib/3.3/RSQLite_1.0.0.zip' を試しています
Content type 'application/zip' length 1264262 bytes (1.2 MB)
downloaded 1.2 MB
パッケージ ‘DBI’ は無事に展開され、MD5 サムもチェックされました
パッケージ ‘RSQLite’ は無事に展開され、MD5 サムもチェックされました
ダウンロードされたパッケージは、以下にあります
C:\Users\xxxxxx\AppData\Local\Temp\Rtmp6z9pcc\downloaded_packages
無事にダウンロードされました。次にダウンロードした"RSQLite"パッケージを読み込みます。
> library(RSQLite)
要求されたパッケージ DBI をロード中です
以下、データベース”walkdata.db"を読み込む操作です。このデータベースはテーブル名walkdataを持ち、date、week、total_calory、activity、weight、step、PW、JOG、km、Exの10個のフィールドを持っています。これは、私が日々身に着けているYAMASA製の活動量計MC-500のデータです。かれこれ、3年半ぐらいデータが入っています。
> drv<-dbDriver("SQLite") #"SQLite"のデータベースドライバをロードする
> con<-dbConnect(drv,dbname="walkdata.db") #データベースに接続する
> rs=dbGetQuery(con,"SELECT * from walkdata;") #クエリ送信(すべてのフィールドを取得
取得したデータを表示させると以下の通り。
> print(rs)
date week total_calory activity weight step PW JOG km Ex
1 130216 Sat 2094.5 287.6 5.20 2002 789 58 1.50 0.40
2 130217 Sun 2450.6 608.4 51.50 9016 8249 0 6.73 4.40
3 130218 Mon 2225.7 405.8 24.60 4881 3942 0 3.64 2.10
...中略...
1223 160701 Fri 2340.9 546.1 45.90 8800 7261 83 6.62 3.90
1224 160702 Sat 2450.6 644.9 61.70 11178 9874 0 8.40 5.20
1225 160703 Sun 2324.5 531.3 45.60 8159 7298 0 6.13 3.90>
問題なく取り込めました。
次に膨大なデータからの抽出です。先頭からのデータを取得する場合はhead関数、末尾からのデータを取得する場合はtail関数を用います。
> head(rs,n=10) #先頭から10データ取得
date week total_calory activity weight step PW JOG km Ex
1 130216 Sat 2094.5 287.6 5.2 2002 789 58 1.50 0.4
2 130217 Sun 2450.6 608.4 51.5 9016 8249 0 6.73 4.4
3 130218 Mon 2225.7 405.8 24.6 4881 3942 0 3.64 2.1
...中略...
8 130223 Sat 2084.1 278.2 8.9 2541 1434 0 1.89 0.7
9 130224 Sun 2034.1 233.2 5.5 1648 835 56 1.24 0.5
10 130225 Mon 2395.9 559.1 48.1 8896 7710 0 6.64 4.1
> tail(rs,10) #末尾から10データ取得
date week total_calory activity weight step PW JOG km Ex
1216 160624 Fri 2589.0 769.6 79.7 14083 12678 82 10.59 6.8
1217 160625 Sat 1954.1 197.6 6.1 1662 980 0 1.24 0.5
1218 160626 Sun 2616.8 794.6 65.2 11720 9934 509 8.92 5.7
...中略...
1223 160701 Fri 2340.9 546.1 45.9 8800 7261 83 6.62 3.9
1224 160702 Sat 2450.6 644.9 61.7 11178 9874 0 8.40 5.2
1225 160703 Sun 2324.5 531.3 45.6 8159 7298 0 6.13 3.9
条件付きの抽出はsubset関数を用います。
> xx<-subset(rs, total_calory > 2700) #total_caloryが2700より大きいレコードを抽出
> print(xx)
date week total_calory activity weight step PW JOG km Ex
99 130525 Sat 2717.2 848.6 62.8 12268 8056 1996 9.82 6.5
192 130826 Mon 2818.8 940.1 76.1 14674 12154 28 10.96 6.4
398 140320 Thu 2730.9 860.9 77.5 14196 12026 384 10.67 6.8
...中略...
1212 160620 Mon 2876.8 1028.9 107.7 19353 17129 108 14.57 9.2
1222 160630 Thu 2803.0 962.4 93.6 17058 14960 26 12.83 8.0
ここで、16年3月と16年6月のデータをそれぞれ抽出し、比較してみます。
> data1603 <- subset(rs, (date >= 160301) & (date <= 160331))
> data1603
date week total_calory activity weight step PW JOG km Ex
1101 160301 Tue 2293.8 503.6 42.6 8126 6715 110 6.13 3.7
1102 160302 Wed 2175.3 396.9 31.9 5931 5104 0 4.46 2.7
1103 160303 Thu 2212.2 430.1 38.1 7218 5999 105 5.43 3.3
...中略...
1129 160329 Tue 2227.4 443.8 36.0 6792 5771 0 5.10 3.1
1130 160330 Wed 2301.1 510.2 41.8 8219 6666 27 6.18 3.6
1131 160331 Thu 2241.2 456.2 41.1 7822 6496 83 5.89 3.5
>
> data1606 <- subset(rs, (date >= 160601) & (date <= 160630))
> data1606
date week total_calory activity weight step PW JOG km Ex
1193 160601 Wed 2641.1 816.5 83.0 14914 13175 108 11.23 7.1
1194 160602 Thu 2500.8 690.1 74.5 13468 11870 58 10.13 6.4
1195 160603 Fri 2236.6 452.1 40.2 7939 6369 78 5.97 3.4
...中略...
1220 160628 Tue 2274.3 486.1 39.5 7631 6293 27 5.74 3.3
1221 160629 Wed 2589.1 769.7 76.6 13705 12186 79 10.31 6.6
1222 160630 Thu 2803.0 962.4 93.6 17058 14960 26 12.83 8.0
>
> apply(data1603[,3:10],2,mean) #16年3月の平均演算実行
total_calory activity weight step PW JOG km Ex
2268.400000 480.738710 43.109677 8022.000000 6858.645161 46.741935 6.035161 3.680645
> apply(data1606[,3:10],2,mean) #16年6月の平均演算実行
total_calory activity weight step PW JOG km Ex
2431.290000 627.493333 57.243333 10609.066667 9093.466667 72.300000 7.986000 4.896667
16年3月よりも6月の方が活動量Upです。4月から早朝散歩をしている結果が表れています。ただし、このデータベースにデータはありませんが、本人の体重減少にはさほど効果がないようです・・。