LoginSignup
0

More than 5 years have passed since last update.

データの大掃除

Last updated at Posted at 2016-12-13

DATUM STUDIO Advent Calendar 2016 13日目の記事です。

年末、大掃除をしたら、新年、気持ちよく迎えられる。

分析も同じです。

データ、お掃除して綺麗にしたら、分析、気持ちよくとりかかれる。

そこで、コマンドでのデータのお掃除(基礎的なもの)方法を紹介します。

  1. どんなデータなんだろう?(ls,head)
  2. 文字コードが違っていて見れない...(nkf)
  3. 不必要な文字が入っている...(grep)
  4. この行だけ必要なのに...(sed)
  5. この列いらない...(cut)
  6. データが大きすぎて他の分析ツールで読み込めないのだが!(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コマンド を詳しく知りたいコマンドと一緒に打ってみてください。
コマンドお掃除で、よいお年を!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0