(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【R言語】一次元数値配列データの差分算出法

スポンサーリンク

結論

diffを利用する。

Description
Returns suitably lagged and iterated differences. 
Usage
diff(x, ...)
## Default S3 method:
diff(x, lag = 1, differences = 1, ...)
## S3 method for class 'POSIXt'
diff(x, lag = 1, differences = 1, ...)
## S3 method for class 'Date'
diff(x, lag = 1, differences = 1, ...)

利用法とデータの題材

出会い系マッチングアプリの登録者数を利用します。クリスマスを境にしてどのような変化があるのか興味がありました。

データの用意

今回は、" CROSS ME " というアプリを用いて検証します。
こちらの選定理由は、登録者が自分の いいね などのランキングを全体の登録者数との立ち位置として確認できるため、全体の登録者数を取得できるからです。登録者数の閲覧用にテストアカウントを作成し、毎日0時に登録者を取得しました。

実データ取得

取得したデータは下記です。

12/7,54768,26733
12/8,55482,27056
12/9,56171,27296
12/10,57101,27644
12/11,58316,28018
12/12,59142,28340
12/13,59997,28724
...

一列目は日付、ニ列目は男性の登録者数、三列目は女性の登録者数。

可視化

今回はRで推移を可視化するためにデータを読み込みます。

read関数でCSVファイルを読み込めるので、下記のように簡単に値を取得できます。

> data_crossme <- read.csv("./hoge.csv")
> dim(data_crossme)
[1] 20  3

用意した日付は12/7 0:00~12/27 0:00 の計20ポイントです。

そして、前日との登録者数の差分は diff で取得できます。

> diff(data_crossme[[2]]) #男性
 [1]  689  930 1215  826  855  942  819
 [8] 1033  778 1095  764 1014  627  712
[15]  998 1003 2371  852  844
> diff(data_crossme[[3]]) #女性
 [1] 240 348 374 322 384 316 328 356 329
[10] 339 239 310 187 232 228 324 299 282
[19] 263

以下で、日付をx座標にするため、文字列を日付に変更します。

strptime関数を用いて形式を指定してあげます。

> day_data <- strptime(data_crossme[[1]],"%m/%d")
> day_data
 [1] "2017-12-08 JST" "2017-12-09 JST"
 [3] "2017-12-10 JST" "2017-12-11 JST"
 [5] "2017-12-12 JST" "2017-12-13 JST"
...


plot関数で増減を可視化します。

> plot(x=day_data[2:length(day_data)],y=,diff(data_crossme[[2]]),ylim=c(0,2500),xlab="",ylab="")
> par(new=T)
> plot(x=day_data[2:length(day_data)],y=,diff(data_crossme[[3]]),ylim=c(0,2500),xlab="",ylab="",pch=2)

f:id:mtiit:20171227230131p:plain
△マークが女性、〇マークが男性です。

△マークは特に日による変化は見られません。
一方、〇マークは1日だけ突出している日があります。

よく見ると、
12/24 0:00~12/25 0:00 のところだけ2000を超える異様なデータとなっています。

可視化した結論

クリスマスイブに、男性側のみ登録者数が急増する

以上、R言語のdiffによる一元数値配列データの差分算出でした。