Rで時系列分析の簡単なまとめ

時系列のアプローチ 単系列 ざっと見る ARIMA/SARIMAモデルをあてはめる 複数系列の関係→VAR(ベクトル自己回帰)モデル その他の変数がある(時系列+回帰)→状態空間モデル (単なるラグ変数回帰→目的変数自体の時系列性が反映されない) ライブラリ{forecast}を使う 以下、データはy.tsとする 時系列のデータ形式 時系列データにはいくつかの形式がある。 ts: Rの基本の時系列オブジェクト。ほとんどの時系列ライブラリはこの形式の時系列データを扱う xts: データフレームとtsの間に位置づけられる、時系列データを便利に扱えるようにした形式 zoo: データフレームとxtsの間の形式 われわれが一般的に扱うデータ形式はデータフレームで、時系列データも元はCSVやデータベースなどからデータフレームの形式で与えられることが多い。たとえば日付を表す列と値の列がそれぞれ存在したり、1枚のデータフレームに複数列(つまり複数の時系列変数)が収まっていたりする。一方でtsは単系列で日付データではなくサイクルの周期を属性として持つなど、データフレームとは形式が大きく異なり、そのままでは扱いにくい。zooは直接知らなくてもいい。 xts = ts+カレンダー機能+複数系列 データフレームをxtsに変換する read.zoo()を使う データフレームx.dfをxts形式のx.xtsに…

Continue reading →

Googleアナリティクスなどのツールにとらわれないウェブ解析の基本的な考え方

ツールを問わずやりたいのはアクセス解析 Googleアナリティクスは無料でアクセス解析、ウェブ解析ができるツールで、手軽に使えるような環境からよく「Googleアナリティクスの使いかたを学びたい」という声が出てくる。 有料なので使う人はあまり多くはないが、アクセス解析ツールといえばAdobe Analyticsも同じ仲間であり、やることは同じである。 重要なのは「Googleアナリティクス」という固有のツールの使い方を知ることではなく、アクセス解析/ウェブ解析の目的とプロセスを学ぶことである。ツールの違いは方言みたいなもので、使うときに知識として学べばいい。そうしておけばGA、AAだけでなく、どんなツールにも対応できるし、ログ解析にも応用できる。 逆にそれを知らないと、情報量が多い、画面構成が複雑であるアクセス解析ツールに惑わされて 肝心のやりたいことをできない、出すべき情報を得るのに無駄に時間がかかってしまう。 ということで、まずはアクセス解析の基本的な考え方を整理する。 分析の基本的な考え方 アクセス解析/ウェブ解析の前に、そもそも分析とはどういうものかを踏まえておく必要がある。これについては以下のページを参照のこと。シリーズの後のページまでは読まなくてもいいが、このページの内容は押さえておこう。 https://www.marketechlabo.com/objectives…

Continue reading →

アドホックなウェブ解析が簡単に―GoogleアナリティクスとGoogle Data Studioの探索機能

ついにGoogleアナリティクスの無料版で、マウスのドラッグ&ドロップでディメンションや指標を選択し、自由にレポートを作れるようになった。 アドホックなウェブ解析の変遷 ある程度まともにウェブ解析をやっている方であればGoogleアナリティクスやAdobe Analyticsの画面の定型的なレポート、あらかじめ定義されたレポートを見るだけでなく、知りたい指標についてその都度(アドホック)に 対象データを絞り込む(スライス) 切り口を変えて見る(ダイス) 細分化して見る(ドリルダウン) 切り口を掛け合わせて見る 新しい指標を作ってそれを見る などをすることが多いのではないだろうか。 Adobe Analyticsの基本機能としてワークスペース(Workspace)というものが2年ほど前?に現れた。Adobe Analyticsのデータに対して、ディメンションや指標をドラッグ&ドロップでレポートのレイアウトに配置して可視化する(ExcelのピボットテーブルのようなUI)、レポートを作る機能である。 これによって簡単に先のような分析を実現することが可能になった(それ以前もAd Hoc Analysisという機能があったのですが、これは別契約が必要だった)。 しかし依然GoogleアナリティクスではカスタムレポートをCSVでダウンロードする、APIでデータを抽出するなどして、それをExce…

Continue reading →

RとExcel(ファイルの読み書き、データフレームをExcelで編集)

RでExcelファイル(.xlsx)を読み書きするライブラリはいくつかあるが、openxlsxが多機能でかつ使いやすい。Javaも不要なのでインストールや動作も軽い。古いファイル(.xls)には非対応だが、現行のファイル(.xlsx)のみ対応でよければこれがおすすめ。 Excelファイルの読み込み read.xlsx()関数を使う。 たとえばファイルC:/Users/fukuyama/Documents/master.xlsxのシート「ユーザ」を読み込む場合 m_user.df <- read.xlsx(‘C:/Users/fukuyama/Documents/master.xlsx’, na.string = ”, sheet = ‘ユーザ’) na.stringを指定しないと「NA」という文字列を欠損値扱いする。基本的にはいつも空文字を欠損値扱いするようにしておいたほうが安全である。 Excelファイル書き出し 単純にテーブルをそのまま出力するだけ 書式など細かいカスタマイズをせず、単にテーブルを出力するだけであればread.xlsx()関数を使えばいい。 出力したxlsxファイルを開くのがopenXL()関数である。 複数のテーブルをシート別にまとめて1個のファイルで出力し、それを開く場合 list( ‘IRIS’ = iris, ‘CO2’ = CO2, ‘USAr…

Continue reading →

Googleタグマネージャーの使い方

この記事は連載「タグマネジメント完全マニュアル」の全 2 ページ中 2 ページ目です。

Googleタグマネージャー(GTM)とはGoogleが提供している無料のタグマネージャ。 Googleアナリティクスの管理に向いている。 設置 タグは2個あり、両方設置する。それぞれ設置個所が決まっている。 ~内 <body>開始タグの直後 ここにないとSearch Consoleなどの認証で失敗する。 タグの設定 タグ+トリガー+変数 のセット→これら設定の一式をコンテナという タグ→実行するタグ トリガー→タグの実行(発火)条件 変数 トリガーの中での条件判定に使う タグに動的に値を渡す(データレイヤー) 条件判定で使う変数は、たとえば クリックしたリンクのURL ログイン済みかどうか(フラグ) など、その値によってタグを実行するかどうかの扱いが変わるもの。 タグに動的に値を渡すというのはサーバから出力される問合せ番号や注文番号など。 サーバで処理をした結果をGoogleアナリティクスや広告のコンバージョンタグなどに送りたい場合に使う。 コンテナ 現在のタグ一式(タグ+トリガー+変数)をまとめたもの タグ(+トリガー+変数)を登録しただけでは本サイト上では有効にならず、公開(パブリッシュ)するとはじめて本番環境に反映される コンテナのバージョン管理の仕組みがある 過去のバージョンを保存しているため以前のバージョンに戻すことも容易。過去のバージョンに戻した後、最新版…

Continue reading →

Rでデータセットの抽出(行の抽出、並べ替え、サンプリング、分割)

この記事は連載「Rのデータ前処理」の全 4 ページ中 4 ページ目です。

前のページではデータフレーム、data.tableの列(変数)の処理について解説したが、今度は行の抽出、並べ替え、サンプリング、分割といった行の処理についてまとめる。 行の削除(抽出) データフレーム adlog <- adlog[adlog$imp>1000 & adlog$click<10, , drop=F] adlog <- with(adlog, adlog[imp>1000 & click<10, , drop=F]) 上下は同じ。with()関数はバッチの中でも使えるので便利。 データフレームの抽出・絞り込みでは第3添字にdrop=FALSEを付けること! 行列の添え字にdrop=FALSEを付けないと1行(列)のみマッチの場合にベクトルとして返す。そうなるとデータフレームを想定してその後の処理にrbind()をしていたのができなくなるなど、行列処理に思わぬ不具合をきたすことになる。 drop=FALSEを付けて1行n列の行列を返すように。 ただしtapply()などで使う1列取得の際は付けてはならない。ベクトルとして処理する必要がある。 data.table n_purchase < 10の行を抽出 # dplyrのパイプを使う場合 x.dt %>% filter(n_purchase < 10)…

Continue reading →

Rでデータクリーニング、変数の生成

この記事は連載「Rのデータ前処理」の全 4 ページ中 3 ページ目です。

このあたりから処理がアドホック寄りになるので、data.tableを使う場合でもパイプ(dplyr)を使って一度に実行するのではなく添字記法を使って1ステップずつ進めていくといい(1行ずつ実行する場合は添字記法を使った方がコード量が少なくて済む)。 行の削除(抽出) 行の抽出 行の並べ替え(ソート) 行の並べ替え 変数の加工(データフレーム/data.frame共通) 標準化(scale) 指定した変数を標準化(平均=0、分散=1のスケールに圧縮/拡大)する。 scale()関数を使う。 # データフレーム x.dt$purchase_amount <- scale(x.dt$purchase_amount) # data.table x.dt[,purchase_amount := scale(purchase_amount)] 複数列をまとめてやるにはmutate_at()を使って x.dt %>% mutate_at(vars(n_purchase, purchase_amount), funs(scale)) -> x.dt などとする。 mutate_at()の使い方はこちらを参照 欠損値処理 NAをいずれかの列に含む行全体を削除(いわゆるリストワイズ法)→na.omit()関数を使う # データフレーム x.df <- na.omit(x.df)…

Continue reading →

Rでデータの整形(列のデータ型確認、列の抽出、列名の変更、列の型変換)

この記事は連載「Rのデータ前処理」の全 4 ページ中 2 ページ目です。

ローデータから分析対象とする変数のみ抽出し(個人情報など、保持すべきでない変数を削除するなど)、情報を失わない範囲で分析するためのデータセットを作る。分析プロジェクトにおけるローデータと同じ量の情報を持つ、整形された(扱いやすい)データセットを作るのである。 この後のデータクレンジング以降で、データの加工方法を変更するなどで手戻りが発生することもある。その際ローデータの読み込みまで戻るのは大変なので、ローデータを同じ情報を持つ、整形された状態のデータを作っておくのが重要である。データクレンジングで手戻りが発生しても、ここで整形したデータセットまで戻ればいい。 変数の型 データの型確認 関数str()を使う。これはデータフレーム、data.table同様に使える関数である。 データフレーム str(customer.df) data.table str(customer.dt) customer.dt %>% str 基本的なデータの型の種類 boolean logical: TRUE or FALSE、短縮してT or Fとしても可能 数値 整数はinteger 明示的にintegerとして扱うにはx <- 5LのようにLを付ける 小数を含めるとnumeric bigint相当はlibrary(bit64)を使うとinteger64として指定できる。fread()で読み…

Continue reading →

Rでローデータの読み込み(データフレーム、data.table、webデータの取得)

この記事は連載「Rのデータ前処理」の全 4 ページ中 1 ページ目です。

Rを使ったデータ前処理の方法を解説する。 データフレーム形式だけでなく、大きなデータを扱うのに高速なdata.tableを使ったデータの前処理の方法も解説する。 まず一般的にデータの前処理の手順は以下のようなものである。 ローデータの読み込み データの整形(分析用データセットの生成。データの持つ情報は保持) データの型確認 必要な(分析対象とする)列の抽出 列名の変更 データ変換 データの型変換 日時データの生成 因子データの生成(ordered) データクリーニング(正しく分析できるように必要に応じて情報を一部削る) 行の削除(抽出) 行の並べ替え(ソート) 標準化(scale) 欠損値処理 外れ値処理 結合 変数の追加と削除 変数の追加 コーディング/グルーピング 合成変数の生成 変数の削除 この順を追って、データの前処理の方法を解説する。 データフレームを使ったデータの前処理の方法 Rでデータクリーニング – RjpWiki ※data.tableオブジェクトはデータフレームクラスにも属しているため、多くの場合でデータフレームのように扱うことができるが、data.tableで扱う方が高速である。 data.tableをデータフレームと比べた時に気をつけるべき大きな違いは 日付でPOSIXltは使えない rownamesを使わない ワーキングディレクトリのセット プ…

Continue reading →

Rの細かいTipsまとめ(小さいTipsの寄せ集め)

独立した記事にはならないが、それぞれ便利かつ重要な小さなRのTipsを紹介。 stratified sampling(層化抽出法) ライブラリsamplingを使う strata(data, stratanames=c(‘層化に使うカラム1’, ‘層化に使うカラム2’), size=c(カラム1の抽出率, カラム2の抽出率)) method – ‘srswor’: 非復元ランダムサンプリング(デフォルト) – ‘srswr’: 復元ランダムサンプリング – ‘poisson’: ポアソンサンプリング – ‘systematic’: 系統抽出 Rで文字列をコマンドとして実行する(eval) Rの繰り返し処理などでコマンドの一部のみを書き換えて同様の処理を行いたい、たとえば対象のデータフレームのみ変えて同じ処理を実行したい場合がある。 そういう場合には動的な部分(データフレームオブジェクト名)を変数として含むコマンドの文字列を生成し、その文字列をコマンドとして実行することになる。 言葉にするとややこしいが、他の言語でもあるeval処理である。 コマンドが1行の場合 最も単純なケースである。 基本形 ファイル名に動的部分を含むテキストファイル(activity_type1.txt)を読み込み、名前に動的部分を含むテーブル(t_activit…

Continue reading →