Rのキャッチアップ第2弾。指定したディレクトリ以下に保存されているすべてのファイルに対してファイルサイズを調べ、拡張子ごとに合計を取得してグラフ化します。私の環境では以下のような結果となりました。以前ダウンロードしたXenServerのISOとEclipseプラグインを構成するJARが大部分を占めているようです。
DOSバッチによる元データ作成
元データ(拡張子とファイルサイズ)の作成には手軽に利用できるDOSバッチを採用しました。I/Oが高くつくため時間をかなり必要としますが、1度実行するだけで充分ですので気長に待つことにします。
@ECHO OFF REM ファイルサイズ取得バッチ REM カレントフォルダ以下にあるすべてのファイルに対し、拡張子とファイルサイズをタブ区切りで出力する SET __LOGFILE_NAME=filesize.txt DEL %__LOGFILE_NAME% FOR /r %%F IN (*.*) DO ( ECHO %%~xF %%~zF >> %__LOGFILE_NAME% )
作成されるファイルは以下のようなフォーマットとなります。区切り文字にタブを使用したのは、スペースやカンマはファイル名として使用できてしまう=拡張子に含まれる可能性があるためです。
.JPG 1724555 .JPG 1810203 .JPG 1723646 .mid 57241 .lnk 654 .lnk 908 .lnk 766 .lnk 593 .xml 1233 .txt 1043
Rによる円グラフの作成
最適な関数オブジェクトの検索に手間取りましたが、結果は以下の通りです。拡張子の大文字小文字は区別しています。
fs<-data.frame(scan("filesize.txt", sep="\t", list(e=" ", s=0))) grouped<-rowsum(fs[,2],fs[,1]) names(grouped)<-rownames(grouped) pie(grouped, radius=1)
SQLのORDER BYに似た処理をどのように実装すべきか迷いましたが、今回はrowsum関数オブジェクトで実現することができました。複雑な処理の場合はapplyに自作関数オブジェクトを渡すような工夫が必要になるのかもしれません。
3行めのnames<-rownamesが妙な感じですが、私のデータの扱いに問題があるから必要になってしまうのでしょうか。
参考(過去ログ)
- [http
- //rpen.blogspot.com/2007/11/excel.html:title]:HSP3とExcelで似た処理を行うサンプルです。