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’,…

続きを読む →

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

前のページではデータフレーム、data.tableの列(変数)の処理について解説したが、今度は行の抽出、並べ替え、サンプリング、分割といった行の処理についてまとめる。 行の削除(抽出) データフレーム adlog <- adlog[adlog$imp>1000 & adlog$click<10, , drop=F] adlog <- with(adlog, adlog[imp>1000 & click<10, , drop=F]) 上下は同じ。with()関数はバッチの中でも使えるので便利。 データフレームの抽出・絞り込みでは第3添字にdro…

続きを読む →

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

このあたりから処理がアドホック寄りになるので、data.tableを使う場合でもパイプ(dplyr)を使って一度に実行するのではなく添字記法を使って1ステップずつ進めていくといい(1行ずつ実行する場合は添字記法を使った方がコード量が少なくて済む)。 行の削除(抽出) 行の抽出 行の並べ替え(ソート) 行の並べ替え 変数の加工(データフレーム/data.frame共通) 標準化(scale) 指定した変数を標準化(平均=0、分散=1のスケールに圧縮/拡大)する。 scale()関数を使う。 # データフレーム x.dt$purchase_amount <- scale(x.dt$purch…

続きを読む →

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

ローデータから分析対象とする変数のみ抽出し(個人情報など、保持すべきでない変数を削除するなど)、情報を失わない範囲で分析するためのデータセットを作る。分析プロジェクトにおけるローデータと同じ量の情報を持つ、整形された(扱いやすい)データセットを作るのである。 この後のデータクレンジング以降で、データの加工方法を変更するなどで手戻りが発生することもある。その際ローデータの読み込みまで戻るのは大変なので、ローデータを同じ情報を持つ、整形された状態のデータを作っておくのが重要である。データクレンジングで手戻りが発生しても、ここで整形したデータセットまで戻ればいい。 カテゴリ変数の型となるfactor…

続きを読む →

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

Rを使ったデータ前処理の方法を解説する。 データフレーム形式だけでなく、大きなデータを扱うのに高速なdata.tableを使ったデータの前処理の方法も解説する。 まず一般的にデータの前処理の手順は以下のようなものである。 ローデータの読み込み データの整形(分析用データセットの生成。データの持つ情報は保持) データの型確認 必要な(分析対象とする)列の抽出 列名の変更 データ変換 データの型変換 日時データの生成 因子データの生成(ordered) データクリーニング(正しく分析できるように必要に応じて情報を一部削る) 行の削除(抽出) 行の並べ替え(ソート) 標準化(scale) 欠損値処理…

続きを読む →

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

独立した記事にはならないが、それぞれ便利かつ重要な小さなRのTipsを紹介。 チートシート ggplot2 qplot() 基本 qplot(x=Sepal.Width, y=Sepal.Length, data=iris, geom=”point”, color=Species) # 散布図 qplot(x=date, y=unemploy, data=economics, geom=”line”) # 折れ線グラフ qplot(x=feed, data=chickwts, geom=”bar”) # 棒グラフ qplot(x=Sepal.Width, data=iris, binwidth…

続きを読む →

Rの関数定義でNSEを使う(表現式を引数にとれるようにする)

NSEとは NSEとはNon-standard evaluationの略。 関数に対して値を与えるのではなく、表現式(expression)を与えて処理させる方法。 言葉にするとわかりにくいので、具体例で。 NSEを使う局面 やりたいこと たとえばデータフレームcustomer.df内の f_purchaseとdurationという列に対して処理をする関数myfun()を作りたい場合 直感的には myfun(customer.df, f_purchase, duration) という引数の与え方をしたい。これがRのもっとも自然なコーディングである。 たとえば glm(f_purchase ~ …

続きを読む →

Rでクラスター分析〜距離行列の生成からクラスタリングまで

クラスター分析は 距離行列の生成(類似度行列ではない!) クラスタリングの実行 という流れになる。 それぞれのステップで、採用する 距離の種類 クラスタリングの方法 がチューニング変数となる。 この順に手順を見ていく。 行数、列数の多いビッグデータ向きのデータ形式であるMatrixパッケージに対応した距離行列についても説明する。 距離行列を生成する 類似度行列ではなく距離行列を作る。similarityではなくdistanceを作る。 直感的にはデータから距離の指標(どれだけ離れているか)ではなく類似度(どれだけ近いか)の指標を抽出し、そこからクラスタリングしたいケースが多いのだが、あくまで類…

続きを読む →

Rで決定木分析(rpartによるCARTとrangerによるランダムフォレスト)

準備 決定木(decision tree)分析をする際、まず目的変数の種類とアルゴリズムを決定する。 アルゴリズム CART CHAID ID3 / C4.5 / C5.0 目的変数の型 目的変数の型によって扱いが変わる 質的変数(2値変数):分類木→目的変数が0/1, T/Fの場合はas.factor()でfactor型にデータ変換しておく 量的変数:回帰木 survivalオブジェクト (生起を表す2カラム) CARTはすべて対応、C4.5/C5.0は質的変数のみ ここではCARTアルゴリズムでツリーモデルを生成するrpartと、ランダムフォレストrangerを中心に説明する。 データセッ…

続きを読む →

一般的なDBに慣れてきた人がBigQueryを扱う際にハマりやすいポイント(Legacy SQL編)

一般的なSQLに慣れてきた人がBigQuery(Legacy SQL)を使う際によくハマるポイント、 特にGoogleアナリティクス360(旧Googleアナリティクスプレミアム)が出力するログデータを扱う場合に直面する問題を中心に解説する。 Googleアナリティクス360のログデータはBigQueryの特徴的なところを嫌というほど満載している。 ということで、これを扱えれば大概の問題には対応できるようになるだろう。 なおLegacy SQLに限定した話。Standard SQLは未検証。 言語個別の仕様 ネストされたデータ形式 BigQueryでは各レコードの1個のカラムに複数の値、つまり…

続きを読む →