Lesson 4 並べ替える

    Lesson3にて、時間別売上数量金額のデータが作成された。このデータでも十分であるかもしれないが、時間順に並んでいなかったり、視覚的に見づらかったりする。そこでLesson4とLesson5では、データをより見やすくするための加工を学習していく。まずLesson4では、並べ替えについて学習する。

1. 時間順に並べ替える

    Lesson3でコンピュータが処理しやすいように並べ替えることは学習した。ここでの並べ替えは、分析者の目的に応じた並べ替えである。Lesson3で作成した時間別売上のデータを時間順(文字列としてではなく数値としての順序)に並べ替えるには次のように入力する。
 
bash$ sort -n <dat3-2 >dat4-1
    さて上記の結果できたdat4-1の内容を確認すると、下図のように9時から20時までのデータが順番に並べ替わっている様子がわかるであろう("900"が最下行から最上行に移った)。 ここで、"sort"コマンドに対して与えたパラメータ"-n"は数字として並べ替えるためのものである。

 (注)下記の結果は例なので実際に出てくるデータとは異なる。
bash$ less dat4-1
900 4 1398 
1000 80 47141 
1100 131 72931 
1200 96 45076 
1300 162 38923 
1400 72 31785 
1500 152 46934 
1600 156 65250 
1700 199 93684 
1800 164 80829 
1900 106 45124 
2000 39 13111 

2. 金額順に並べ替える

    並べ替えについてさらに詳しく見ていこう。これまでのsortコマンドの利用では、特に「どの項目を基準にして並べ替える」という指定をしてこなかった。そこでここでは"dat3-2"のデータについて第3項目の金額の順番に並べ替えてみよう。sortコマンドにおける項目番号の指定は若干複雑である。
 
bash$ sort -n +2 -3 <dat3-2 >xxtmp
 最初の"-n"パラメータは数値順に並べ替えるための指定である。次の"+2 -3"が並べ替える項目番号の指定のためのパラメータである。このパラメータは、「項目を2個とばし3番目までの項目について並べ替える」ことを意味する。それでは上記の結果できたxxtmpの内容を確認すると、下図のように金額の少ない順に並べ替わっている様子がわかるであろう

 (注)下記の結果は例なので実際に出てくるデータとは異なる。
bash$ less xxtmp
900 4 1398 
2000 39 13111 
1400 72 31785 
1300 162 38923 
1200 96 45076 
1900 106 45124 
1500 152 46934 
1000 80 47141 
1600 156 65250 
1100 131 72931 
1800 164 80829 
1700 199 93684 
ここで項目番号の指定パラメータに関する例をいくつかあげてみよう。
 
パラメータ 項目番号
+1 -3 2,3
+0 -1 1
+0 -2 +3 -6 1,2,4,5,6
+0 -1 +2 -3 +4 -5 1,3,5
    3、4番目の例は、連続しない複数の項目群を指定した例である。また1,3,4番目の例のように、「複数の項目で並べ替える」とはどういうことであろうか。例えば一つ目の例で説明すると、「まず2番目の項目で並べ替え、その結果もし2番目の項目で同じ値があれば、同じ値をもつ複数行に関しては3番目の項目で並べ替える」という意味である。
    なお項目の指定パラメータを省略する(前節までのsortコマンドの利用においては省略していた)と、全項目が指定されたことになる。
 

3. 金額の高い順に並べ替える

    前節での金額の並べ替えでは、金額の低い順になっていた。それを高い順に並べ替えるために以下のように入力する。
 
bash$ sort -nr +2 -3 <dat3-2 >xxtmp
"-r"の指定は「逆順」という意味である。結果を確認すると、第3項目(金額)の高い順に並べ替わっていることが確認できる。

 (注)下記の結果は例なので実際に出てくるデータとは異なる。
bash$ less xxtmp
1700 199 93684 
1800 164 80829 
1100 131 72931 
1600 156 65250 
1000 80 47141 
1500 152 46934 
1900 106 45124 
1200 96 45076 
1300 162 38923 
1400 72 31785 
2000 39 13111 
900 4 1398 
さらに複雑な並べ替えの指定についてはsortコマンドのマニュアルを参照してもらいたい。
 

・演習問題

a) Lesson3のa)の演習で作成したデータについて、「数量の高い順」「金額の低い順」のデータをそれぞれ作りなさい。
b) Lesson3のb)の演習で作成したデータについて、「数量の高い順」「金額の低い順」のデータをそれぞれ作りなさい。
c) Lesson3のc)の演習で作成したデータについて、「数量の高い順」「金額の低い順」のデータをそれぞれ作りなさい。
d) Lesson2のa)の演習で作成したデータについて、「商品コード順金額の高い順数量の高い順」のデータを作りなさい。