Rで解析:時系列データの操作とggplot2のプロットに便利「ggpmisc」パッケージ


投稿日: Rの解析に役に立つ記事

時系列のts classをdata.frameに変換する際にas.data.frameを利用すると見かけの時系列情報が失われます。本パッケージでは時系列情報を保持しながらts classをdata.frameにすることが可能です。

また、ggplot2で時系列データをプロットするのに便利なコマンドも収録されています。ggplot2のレイヤー概念を利用したデータの上書きコマンドが便利です。

他に時系列データの操作に便利なパッケージとして「chron」パッケージがあります。

・Rで解析:日付けや時間データの取り扱いに便利です。「chron」パッケージ
 https://www.karada-good.net/analyticsr/r-117/

パッケージバージョンは0.2.7。実行コマンドはwindows 7およびOS X 10.11.2のR version 3.2.3で確認しています。


パッケージのインストール

下記、コマンドを実行してください。

#パッケージのインストール
install.packages("ggpmisc")

実行コマンド

詳細はコメント、パッケージのヘルプを確認してください。

#パッケージの読み込み
library("ggpmisc")
library("ggplot2")

###データ例の作成#####
#測定月数の設定
#3年分を設定
n <- 3
#作成
TestData <- ts(floor(runif(n * 12, min = 0, max = 10)),
               start = c(2000,1), frequency = 12)
#データ構造の確認
str(TestData)
Time-Series [1:36] from 2000 to 2003: 7 1 7 8 7 4 8 4 8 9 ...
#classの確認
class(TestData)
[1] "ts"
########

#データフレームへの変換:try_data_frameコマンド
#例えばas.data.frameで変換すると
#見かけは値だけになります
DFTestData <- as.data.frame(TestData)
#確認
head(DFTestData)
  x
1 7
2 1
3 7
4 8
5 7
6 4
#データ構造の確認
str(DFTestData)
'data.frame':   36 obs. of  1 variable:
$ x: Time-Series  from 2000 to 2003: 7 1 7 8 7 4 8 4 8 9 ...

###try_data_frameコマンドで変換#####
#オプションを指定しない
#変換に必要なxtsパッケージを読み込み
library(xts)
ChangeTestData <- try_data_frame(TestData)
#確認
head(ChangeTestData)
        time V.TestData
1 2000-01-01          7
2 2000-02-01          1
3 2000-03-01          7
4 2000-04-01          8
5 2000-05-01          7
6 2000-06-01          4
#データ構造の確認
str(ChangeTestData)
'data.frame':   36 obs. of  2 variables:
$ time      : POSIXct, format: "2000-01-01" "2000-02-01" ...
$ V.TestData: num  7 1 7 8 7 4 8 4 8 9 ...

#時間データを数値に変換:as.numericオプション
ChangeNumTestData <- try_data_frame(TestData, as.numeric = TRUE)
#確認
head(ChangeNumTestData)
      time V.TestData
1 2000.000          7
2 2000.085          1
3 2000.164          7
4 2000.249          8
5 2000.331          7
6 2000.415          4
#データ構造の確認
str(ChangeNumTestData)
'data.frame':   36 obs. of  2 variables:
$ time      : num  2000 2000 2000 2000 2000 ...
$ V.TestData: num  7 1 7 8 7 4 8 4 8 9 ...

#時間データの範囲を変更:time.resolutionオプション
#classが数値に変換されます
ChangeTRTestData <- try_data_frame(TestData, as.numeric = TRUE,
                                   time.resolution = "year")
#確認
head(ChangeTRTestData)
  time V.TestData
1 2000          7
2 2000          1
3 2000          7
4 2000          8
5 2000          7
6 2000          4
#データ構造の確認
str(ChangeTRTestData)
'data.frame':   36 obs. of  2 variables:
$ time      : num  2000 2000 2000 2000 2000 ...
$ V.TestData: num  7 1 7 8 7 4 8 4 8 9 ...

#ggplot2で時系列をプロット:stat_peaksコマンド
#プロットシンボルの設定:geomオプション;point,text,line,
#rug,hline,vlineの設定が可能
#プロット間隔の設定:spanオプション
#ラベルの書式設定:x.label.fmtオプション;"%Y"や"%b"等の指定が可能
#ラベルの傾きを設定:angleオプション
PlotData <- ggplot(ChangeTestData, aes(time, V.TestData)) + geom_line() +
  stat_peaks(geom = "point",colour = "red", span = 2) +
  stat_peaks(geom = "rug",colour = "red", span = 0) +
  stat_peaks(geom = "text", colour = "red", angle = -60,
             vjust = -0.5, span = 2, x.label.fmt = "%Y")
#グラフをプロット
PlotData

#レイヤーを追加してグラフ体裁を調整:stat_valleysコマンド
#オプションはstat_peaksコマンドと共通
AddleysPlotData <- PlotData +
  stat_valleys(geom = "point",colour = "blue", span = 2) +
  stat_valleys(geom = "rug",colour = "blue", span = 2) +
  stat_valleys(geom = "text", colour = "blue", angle = 0,
               vjust = 1.3, span = 2, x.label.fmt = "Month:%b")
#グラフをプロット
AddleysPlotData

出力例

・stat_peaksコマンド
stat_peaks

・stat_valleysコマンド
stat_valleys


少しでも、あなたのウェブや実験の解析が楽になりますように!!

スポンサードリンク

おすすめコンテンツ


スポンサードリンク