東村山1丁目 diary

渋谷のIT企業から波佐見焼の会社へ転職!Webディレクション・デザイン・ECなど仕事の話から、食事や映画の感想まで。

大容量のCSVファイルをRでランダムに二等分する方法(メールマーケティング・A/Bテスト用)

メルマガのA/Bテストを行いたい時など、大容量のCSVファイルをランダムに2分割したいことってありますよね。 Excelだと容量の大きいファイルを扱えないこともあります。 そこで今回自分はRを使いました。 使い慣れてないこともありやり方がちょっと変かもしれませんが、特に問題なかったのでメモ的にブログに残します。

R STUDIOインストール

まずはこのツールをインストールしましょう。 https://www.rstudio.com/

以下、コマンドです。

R コマンド

現在のワーキングディレクトリを確認

getwd()

CSVのあるディレクトリをセットする

setwd()

※例

> setwd("/Users/usr0600150/R/")

CSVファイルを読み込む

read.table() または read.csv() 一行目からデータが入っている場合(一行目に列名が入ってない場合)は header=Fの引数をつける ※例 任意のデータテーブル名 <- read.csv("CSVファイル名" header=F )

データのサマリーを表示

summary()

データ数を表示

nrow()

重複したデータを1つのみ表示させる

unique()

※例 mailtestunique <- unique(mailtest)

順番をシャッフルする

シャッフルする方法は色々あると思いますが、sample関数を利用しました。 ※例 mailtestuniqueshutfle <- sample(mailtestunique, length(mailtestunique))

データをランダムに二等分する

※上記でシャッフルしているのでsplit関数などで単に二等分するのでもいいと思いますが今回は以下の方法で行いました。

偶数行だけ抽出する

※例 L <- length(mailtestunique[,1]) mailtestuniqueeven <- mailtestunique[seq(0,L,+2),]

奇数行だけ抽出する

※例 mailtestuniqueodd <- mailtestunique[seq(1,L,+2),]

二等分したデータをCSVに出力する

偶数行と奇数行の二つのデータテーブルをCSVに出力する

write.table(出力したいデータテーブル名,"CSVのファイルパス",quote=F,col.names=F,row.names=F,append=F)

※例 write.table(mailtestuniqueeven,"/Users/usr0600150/R/mailtest_unique_even.csv",quote=F,col.names=F,row.names=F,append=F) write.table(mailtestuniqueodd,"/Users/usr0600150/R/mailtest_unique_odd.csv",quote=F,col.names=F,row.names=F,append=F)

データテーブル間の重複の有無の確認

二つに分けたCSVファイルに重複がないか確認したくてその方法を探してみたのですが、あまりこれといったものが見つからず、ひとまず再度データをマージして重複データを確認しました。

使った関数 merge() duplicated(data.frame())

※例

> setwd("/Users/usr0600150/R/")
> mail <- read.table("mail.csv")
> mail2 <- read.table("mail2.csv")
> mailsum <- merge(mail,mail2)
> sum(duplicated(data.frame(mailsum)))
[1] 0

0になれば重複がないということになります。

R studioの使い方は、簡単なことであれば教えられますので社内の方はお声がけください♩

はー、いっちょめいっちょめ。