結論
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)
△マークが女性、〇マークが男性です。
△マークは特に日による変化は見られません。
一方、〇マークは1日だけ突出している日があります。
よく見ると、
12/24 0:00~12/25 0:00 のところだけ2000を超える異様なデータとなっています。
可視化した結論
クリスマスイブに、男性側のみ登録者数が急増する
以上、R言語のdiffによる一元数値配列データの差分算出でした。