こんにちは、usagi-sanです。
今回は統計解析で用いる解析データ(csvやexcel)、そのデータを解析するプログラミングファイル(ファイル.R)、統計解析などの結果のファイル(csvやexcel)を自動で整理してくれるプログラムを作ってみました。
普通は解析をする前に、データ保存用のフォルダ、プログラミングのフォルダ、結果のフォルダなどを事前に作成したうえで解析をすると思います。
ただ、その場合3つのフォルダのパスを取得しながら解析をすることとなってしまい、自分以外が同じプログラムを実行するときにパスの違いにより、実行できないことがほとんどです。
今回紹介するプログラムでは、こうしたパスの違いに関係なく、解析データとプログラミングファイルと結果のファイルを自動で区別してくれるものとなっています。
この関数はこんな方におすすめ
- 解析データのファイルや解析結果のファイルが膨大であり、ファイルの整理に困っている方
- フォルダーを作成するのがめんどくさい方や、ファイルやフォルダーの整理が苦手な方
- 解析データのファイルや解析結果を拡張子別で厳密に整理したい方
「解析するデータをR言語のプログラミングにより解析を行い、解析結果を出力する。」が統計解析の一連の流れとなりますが、
この流れで準備しておいたファイル、または出力したファイルすべてを一括に整理してくれます。
下の関数の説明文でもありますが、ファイルの数が多い場合も対応しており、拡張子別のフォルダに整理するのも、この関数のメリットといえます。
この関数は次の記事のパッケージで利用可能です。また、この記事のスクリプトファイルをダウンロードしたい方は記事の下のダウンロードリンクから入手してください。
R言語 自作パッケージ UsagiSan
こんにちは、usagi-sanです。 R言語の自作パッケージを紹介します。 統計解析のアルバイトをしている中、暇な時間を見つけて自分でパッケージを作ってみました。 Rのパッケージには、統計解析用のパッ ...
続きを見る
関数の説明
実際に自作したが次の関数mkDirectoriesとなります。下記のプログラミングソースは、この記事の最後にダウンロードリンクから入手可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | mkDirectories <- function(parentDirName, dataDirName="data", programmingDirName="program", resultDirName="result", updateTime=1, arrange = TRUE) { dir.create(paste0(getwd(), "/", parentDirName)) dir.create(paste0(getwd(), "/", parentDirName, "/", dataDirName)) dir.create(paste0(getwd(), "/", parentDirName, "/", programmingDirName)) dir.create(paste0(getwd(), "/", parentDirName, "/", resultDirName)) files <- list.files() R.files <- grep("\\.R$", files) fileExtension <- NULL for (i in seq_len(length(strsplit(files[- (R.files)], "\\.")))) { if (length(strsplit(files[- (R.files)], "\\.")[[i]]) == 1) { fileExtension[length(fileExtension) + 1] <- strsplit(files[- (R.files)], "\\.")[[i]][2] }else { fileExtension[length(fileExtension) + 1] <- strsplit(files[- (R.files)], "\\.")[[i]][length(strsplit(files[- (R.files)], "\\.")[[i]])] } } fileExtension <- unique(fileExtension) resultExtension <- fileExtension dataExtension <- fileExtension for (i in files[- (R.files)]) { if (!is.na(file.info(paste0(getwd(), "/", i))$mtime) & i != parentDirName) { get_resultOrData <- as.numeric(as.POSIXct(as.list(file.info(paste0(getwd(), "/", i)))$mtime, format = "%Y-%m-%d %H:%M:%S", tz = "Japan") - Sys.time(), units = "mins") > (-1) * updateTime * 60 if (arrange == TRUE) { if (get_resultOrData) { resultExtension <- mkDirFor_result_data(parentDirName, resultDirName, resultExtension, i) } else { dataExtension <- mkDirFor_result_data(parentDirName, dataDirName, dataExtension, i) } } else { if (get_resultOrData) { mkDir_noArrange_esult_data(parentDirName, resultDirName, i) } else { mkDir_noArrange_esult_data(parentDirName, dataDirName, i) } } } } for (i in files[R.files]) { file.copy(paste0(getwd(), "/", i), paste0(getwd(), "/", parentDirName, "/", programmingDirName, "/", i)) } } |
この関数の引数の説明は次の表のとおりです。
引数の意味を読んでもなかなか理解できないと思うので、次で実行例と画像で詳しく引数の設定方法をみていきます。
parentDirectoryName | 解析データ、プログラミング、結果の3つのフォルダを含むフォルダ名前 |
dataDirectoryName | 解析データを入れるフォルダの名前 |
programmingDirectoryName | プログラミングファイルを入れるフォルダの名前 |
resultDirectoryName | 結果のファイルを入れるフォルダの名前 |
updateTime | 解析データと結果のファイルを区別する時間(updateTime=2とすると、最終更新日が2時間前のデータは回帰せデータ、それ以降は結果のファイルとする。) |
arrange | TRUEの場合、データフォルダ、結果フォルダのファイルを拡張子別に整理する機能を適用する。 |
ポイント1
関数の引数にあるparentDirectoryNameは解析データのフォルダ、プログラミングのフォルダ、結果のフォルダの3つのフォルダをもつフォルダの名前であり、このフォルダの中に解析データのファイル、プログラミングファイルの、結果のファイルを整理したフォルダを作成していきます。
ポイント2
2つ目以降の引数dataDirectoryName、programmingDirectoryName、resultDirectoryNameはそれぞれ、数のparentDirectory中に格納されているフォルダーの名前です。それぞれ解析データを格納するディレクトリの名前、プログラミングファイルを格納するディレクトリの名前、解析結果のファイルを格納するディレクトリの名前を意味します。
ディレクトリは下の図のようになっています。
条件分岐をみれば分かる通り、引数updateTimeの値で解析データと結果のファイルを区別しています。
一般に解析データは最終更新日が1時間前であると考えられるため、デフォルトの値は1となっています。
注意ポイント
1時間以上前に更新された解析結果ファイルを整理したい(resultDirectoryに格納したい)場合は、updateTimeを変更してください。例:2時間前に更新された解析結果の場合は、updateTime = 2としてください。(実際、Rで解析を行う場合、統計解析が数分で終わり、結果出力まで1時間もかからないので、updeteTimeを変更するのではなく、同じ解析結果をもう一度出力した方が賢明です。)
関数の使いかた
この関数の使いかたを実際のプログラミングコードを用いて説明します。
step
1作業ディレクトリの作成
まず最初に新規フォルダーまたはディレクトリを作りましょう。
ポイント
この新しく作ったディレクトリをRスクリプトの作業ディレクトリとして、以降説明していきます。作業ディレクトリがこのディレクトリでない場合、setwd()で作業ディレクトリを変更してください。
この中でmakeDirectories.Rと解析するデータ(csvやexcelファイル)をあらかじめ用意しておききましょう。
step
2解析結果ファイルの出力
次に統計解析の結果を出力します。
ここでは、エクセル色塗りで用いたreg_funを用います。
1 | reg_fun(iris, "重回帰分析") |
これを実行すると、先ほどのフォルダ内に重回帰分析.csvが保存されています。
ポイント
この例では、関数reg_fun()を用いましたが、自分で作った関数で構いません。"重回帰分析.csv"という解析結果のファイルを得るために、行っただけですので、自分が作った関数で好きな解析結果を出力しても大丈夫です。
step
3mkDirectoriesを使った作業ディレクトリの整理
そして、次のmkDirectoriesを実行します。
1 | mkDirectories("iris解析まとめ") |
最初の引数に、解析データ、プログラミングファイル、解析結果の3つのディレクトリをもつ親ディレクトリの名前を指定します。
ここではirisをデータに用いたので、"iris解析まとめ"としました。
すると作業しているパスに"iris解析まとめ"というフォルダが作成されています。
ポイント
この例では、最初の引数であるparentDirectoryNameのみ指定しましたが、dataDirectoryName、programmingDirectoryName、resultDirectoryNameを指定することで、この親ディレクトリのもつ3つのディレクトの名前も変更することが可能です。
実行して作成された"iris解析まとめ"というディレクトリ中には下の画像のように、さきほどの作業ディレクトリにあったすべてのファイルが3つのフォルダに整理さています。
さらに、データフォルダと結果フォルダに格納されるファイルは次の画像のように、各拡張子の種類別で整理する機能もあります。
注意ポイント
zipファイルに対してこの関数を実行すると、正しくコピーすることができず圧縮ファイル中のファイルを整理することができません。注意してください。
自分でも使ってみました、非常に便利であり、整理作業がはかどりました。
関数mkDirectoriesですが、新規フォルダー上で解析をすることを前提としています。
ダウンロード方法
この関数のダウンロードリンクは以下になります。
R言語 自動ファイル整理 makeDirectories.R Rスクリプト
便利そうだなと思ったら、ぜひぜひ使ってみてください。
フォルダの種類に汎用性がなくて使いずらいなという方でも、R言語でのディレクトリ・ファイルの操作を学べるようなプログラミングコードとなっています。
自由に書き換えて使ってみてください。
みなさんからの意見もお待ちしております。