DATUM STUDIO Advent Calendar 2016 13日目の記事です。
年末、大掃除をしたら、新年、気持ちよく迎えられる。
分析も同じです。
データ、お掃除して綺麗にしたら、分析、気持ちよくとりかかれる。
そこで、コマンドでのデータのお掃除(基礎的なもの)方法を紹介します。
- どんなデータなんだろう?(ls,head)
- 文字コードが違っていて見れない...(nkf)
- 不必要な文字が入っている...(grep)
- この行だけ必要なのに...(sed)
- この列いらない...(cut)
- データが大きすぎて他の分析ツールで読み込めないのだが!(split)
##1.どんなデータなんだろう?
データをもらった時に、まずすることは、データの確認です。
お掃除の前に、まず確認です。
###データのつくりを理解する
まずはlsコマンドでデータのつくりを確認しましょう。
$ ls -l data.csv
結果
-rw-r--r-- 1 daifuku_mochi2 mochi 105 12 03 23:30 data.csv
ファイル種別 | アクセス権限 | リンク数 | 所有者 | 所有グループ | ファイルサイズ(バイト数) | 最終更新日時 | ファイル名 | |
---|---|---|---|---|---|---|---|---|
出力 | - | rw-r--r-- | 1 | daifuku_mochi2 | mochi | 105 | 12 03 23:30 | data.csv |
説明 |
- はファイルを表す |
所有者は読み取り(read のr)書き込み(write のw)が可能。所有グループに属する人と、その他の人は読み取りのみ可能。 | 通常のファイルの場合は1 | ファイル所有者 | グループ名 | 105バイトですね。 | 眠くなる時間ですね | 今回使用していくデータ名 |
ここで、データのサイズや、そもそも自分は書換える権限があるのか?等の確認ができます。
###データの中身を確認しよう!
headコマンドで少しデータの中身を見てみましょう。
$ head data.csv #head ファイル名
結果
01,1,??
02,2,??
03,3,aaa
04,4,??
05,5,??
06,6,??
07,7,??a
08,8,??
09,9,??
10,10,a??
データの一部を確認できました。
##2.文字コードが違っていて見れない...
データは確認できましたが、文字化けしていて確認できませんでした。
そんな時はnkfコマンドで文字コードを確認しましょう。
###まずは文字コードの確認
$nkf --guess sample.txt #nkf --guess ファイル名
結果
Shift_JIS (LF)
###文字コードを変更しよう
Shift_JIS をUTF-8に変換します。
$nkf -w --overwrite sample.txt #nkf -変更したい文字コードを表す記号(Shift_JISなら"s",UTF-8なら"w"など) --ファイルを上書きするならoverwrite ファイル名
ここで、もう一度文字コードを確認してみると、
結果
UTF-8 (LF)
ちゃんと変更されていました!!
中を見てみましょう。
01,1,も
02,2,ち
03,3,aaa
04,4,も
05,5,ち
06,6,も
07,7,もa
08,8,も
09,9,ち
10,10,aち
これで中を見ることができました。
##3.不必要な文字が入っている...
なんでところどころに"a"がはいっているんだ...意味がわからない...
そんな時ありますよね。
不必要な文字がついている行をgrepコマンドで削除することにします。
$ grep -v "a" data.csv #grep -v "不必要な文字" ファイル名
結果
01,1,も
02,2,ち
04,4,も
05,5,ち
06,6,も
08,8,も
09,9,ち
grepは、検索パターンに一致した行を表示するコマンドです。
-v オプションを使用した場合、逆にパターンに一致しなかった行のみを表示します。
##4.この行だけ必要なのに...
sedコマンドで必要な行を抽出します。
$sed -n '1,2p' data.csv #sed -n '抽出したい行の開始行,抽出したい行の終了行' ファイル名
結果
01,1,も
02,2,ち
※$sed -e '3,9d' でも同じ結果が得られます。(指定行の削除)
##5.この列いらない...
cutコマンドで削除しましょう。
$cat data.csv | cut -d "," -f 2-3 #cat ファイル名 | cut -d "ファイルの区切り文字" 表示させたい列
結果
1,も
2,ち
3,aaa
4,も
5,ち
6,も
7,もa
8,も
9,ち
10,aち
※区切り文字がtabの場合は、"-d"オプションは不要。
###6.データが大きすぎて他の分析ツールで読み込めないのだが!
これくらいの大きさのファイルなら読み込めるのに...!
という時、splitコマンドが役立ちます。指定のバイト数で区切ることができます。
$split -b 50 data.csv #split -b 一つのファイルあたりのバイト数 ファイル名
結果(ls -lで見ます)
-rw-r--r--@ 1 daifuku_mochi2 mochi 105 12 03 23:30 data.csv
-rw-r--r-- 1 daifuku_mochi2 mochi 50 12 12 23:27 xaa
-rw-r--r-- 1 daifuku_mochi2 mochi 50 12 12 23:27 xab
-rw-r--r-- 1 daifuku_mochi2 mochi 5 12 12 23:27 xac
3つのファイルが出力されました。
105バイトあったdata.csvは、50バイト,50バイト,5バイトと分割されていることがわかります。
###まとめ
大きなデータでファイルが開けないので手作業が難しい、
手作業は煩わしい、ミスをしてしまうことが不安だ
というような時、コマンドでの処理はとても便利です。
ここで紹介したコマンドは、上記以外にもたくさんの便利なオプションがあります。
man
コマンド を詳しく知りたいコマンドと一緒に打ってみてください。
コマンドお掃除で、よいお年を!