mathematikの すうがく ブログ

機械学習とかRとかPythonを中心に書いていく予定です

Rで分析しようとしてちょっとハマった

データサイエンティストになりたいと考え最近Rの勉強をしたりしています。

 

一行目とは全く関係ないですが、最近9G近く準備しているLinux Mintのswapに空きが恒常的に0で、気持ち悪いのでいろいろやっています。

sudo sysctl vm.swappiness=10

を実行しましたが、swapサイズに変化がありませんでした。
swapoff -aをしてswapon -aをするといいよ、という記事を見たので早速実行してみると、確かにswapの割り当てが減っていっている。

 

が、

 

 

お、遅い。

 

 

swapのサイズ減少が遅々として進みません。

どれくらいかかるのか気になってRの勉強も兼ねて計算することにしました。

$date +%s;free

というコマンドを複数回実行して、現在時刻とswapのサイズを取得、データを加工して、Rでtsv形式にして読み込んでみました。(今までは計算はLibreOfficeのCalcでやってました)

 

$cat ~/swapsize.tsv
time    swap
1426429000    8812360
1426429006    8811788
1426429012    8809144
1426429015    8808752
1426429019    8803304
1426429029    8798456

 

 

これを以下の様にRで読み込みます。

> swapsize=read.table("~/swapsize.tsv",sep="\t",header=T)

で、time-swapsizeのグラフを描いて回帰曲線も描いてみます。

 

> ggplot(swapsize,aes(x=time,y=swap))+
+ geom_point()+
+ theme_bw(16)+
+ geom_smooth(method="lm")

 

するとこんなグラフに

 

f:id:mathematik:20150316130441p:plain

 

何かがおかしい。多分青い線はx軸ではなく、回帰直線。

おそらくtime(UNIX time)の大きさに対してswapの変化量が小さいのが原因かと考え、以下のようにして時間を補正(UNIX timeでなく、経過時間(s)をx軸に採用)

> swapsize$time=swapsize$time-min(swapsize$time)

そしてプロットをし直す。

 

f:id:mathematik:20150316130442p:plain

 

今度は、そんなもんかなというデータ。ミリ秒とかではなくて1秒というとり方もあってか、綺麗に直線には乗らなかった。

 

あとはswapさんがいなくなるまでの時間をざるに計算する。まずは回帰直線の傾きと切片を教えてもらう。

> swapsize.lm=lm(swap~time,data=swapsize)

> summary(swapsize.lm)

Call:
lm(formula = swap ~ time, data = swapsize)

Residuals:
      1       2       3       4       5       6
-1818.6   666.2  1079.1  2215.6 -1194.5  -947.7

Coefficients:
              Estimate Std. Error  t value Pr(>|t|)    
(Intercept) 8814178.65    1258.67 7002.757  2.5e-15 ***
time           -509.48      76.91   -6.624  0.00269 **

 あとはy(swap)がゼロになる=処理が終わる時間を推測。

y=ax+bでy=0で解くので、今回の場合は0=(time)*x+(intercept)を解いて、秒を3600で割って時間単位に変換する。

$echo "scale=4;8814178.0/509.4/60/60"|bc
4.8064
 

5時間....だと !!!!

待っていられないので一旦swapoff -aはキャンセルしてすぐにswapon -aを実行。

元に戻しました。

朝起きてみると一旦7.5G付近まで下がっていたswapの使用料が7.8Gまで拡大。今後の経過を見守りたい