データの整理:ケーススタディを使用した分析用のデータセットの準備

この記事は、情報をロシア語に処理し、翻訳した結果として生まれました。次の2つの情報源から取られました。





データ分析の分野の専門家にとって、これは長い間学んだ掛け算表のように見えるかもしれません-ここで新しいものを見つける可能性は低いでしょう。 そして、私と同じように、この分野とR言語の機能にしか慣れていない人は、読み続けてください。



はじめに


データ分析プロセスの最大80%が準備に費やされた時間であると広く信じられています。 この記事では、分析用のデータの準備の1つの側面、つまりデータセットの構造化と配置、いわゆる データ整理



「整理されたデータ」という用語は、「正確なデータ」または「順序付けられたデータ」としてロシア語に翻訳できます。 Leo Tolstoyを言い換えると、すべての順序付けられたデータセットは互いに類似しており、各ランダムデータセットは独自の方法でランダムです。



順序付けられたデータセットが何であるかを尋ねることから始めましょう。



順序付けされたデータセットの定義


ほとんどのデータセットは、 を含むテーブルです。 データセットにはが含まれます 。 通常、これらは数値(定量データ)または文字列(定性データ)のいずれかです。 各値は、一方で変数を参照し、他方で対応する観測値を参照します。 この場合、観測値を観測単位(観測単位)のタイプにグループ化して、別々のストレージを確保し、矛盾を防ぐことができます。



データセットが順序付けられているか無秩序であるかどうかは、行、列、およびテーブルがケース、変数、およびユニットタイプにどのように対応するかによって異なります。 順序付けられたデータセットには3つの属性があります。

  1. 各変数は列を形成します。
  2. 各観測は線を形成します。
  3. 各タイプの観測単位は表を形成します。


これらの症状のいずれかの違反は、データセットが不安定であることを意味します。



データセットの順序付け


現実の世界では、偶然でない限り、順序付けられたデータセットをすぐに取得できます。 R tidyrおよびdplyr言語パックを使用して、データセットの5つの主な問題とそれらを解決する方法を考えてみましょう。



1.列ヘッダーには変数名ではなく値が含まれます



学生のデータセットを考えてみましょう。



> students grade male female 1 A 1 5 2 B 5 0 3 C 5 2 4 D 5 5 5 E 7 4
      
      





Gradeの最初の列は生徒が受け取った評点を示し、2番目と3番目の列はそれぞれの生徒の数を示しています。



このデータセットには、実際にはスコア、性別、数量の3つの変数があります。 変数「性別」の値は、2番目と3番目の列のヘッダーに含まれています。 変数番号は、成績と性別の組み合わせごとに何人の生徒がいるかを示します。



このデータセットを整理するには、各列が個別の変数を記述していることを確認する必要があります。 これは、Gather関数を使用して簡単に実行できます。



 > gather(students, sex, count, -grade) grade sex count 1 A male 1 2 B male 5 3 C male 5 4 D male 5 5 E male 7 6 A female 5 7 B female 0 8 C female 2 9 D female 5 10 E female 4
      
      





Gather関数を使用して、複数の列をキーと値のペアに収集します。 この場合、性別がキーであり、カウントが値です。 「-grade」パラメーターは、この変数がプロセスに関与せず、変更されないことを意味します。



2.複数の変数が1つの列に格納されます



Students2データセットを考えます。



 > students2 grade male_1 female_1 male_2 female_2 1 A 3 4 3 4 2 B 6 4 3 5 3 C 7 4 3 8 4 D 4 0 8 1 5 E 1 1 2 7
      
      





以前のデータセットに似ています。 違いは、2つのクラスに分かれており、学生数が性別とクラスごとの区分で示されることです。 前の問題に加えて、新しい問題がここに追加されます-変数「性別」と「クラス」は1つの列に格納されます。



この場合、データセットを整理する問題は2つのステップで解決されます。 まず、性別とクラス変数の和集合を維持しながら、変数カウントを出力します。 次に、変数「gender」と「class」を異なる列に分けます。 便宜上、ミニスクリプトでは、すべてのアクションをチェーン演算子に接続します。



 students2 %>% gather(sex_class, count, -grade) %>% separate(sex_class, into = c("sex", "class")) %>% print
      
      





仕事の結果:



  grade sex class count 1 A male 1 3 2 B male 1 6 3 C male 1 7 4 D male 1 4 5 E male 1 1 6 A female 1 4 7 B female 1 4 8 C female 1 4 9 D female 1 0 10 E female 1 1 11 A male 2 3 12 B male 2 3 13 C male 2 3 14 D male 2 8 15 E male 2 2 16 A female 2 4 17 B female 2 5 18 C female 2 8 19 D female 2 1 20 E female 2 7
      
      







3.変数は列と行の両方に保存されます



Students3データセットを考えてみましょう。



 > students3 name test class1 class2 class3 class4 class5 1 Sally midterm A <NA> B <NA> <NA> 2 Sally final C <NA> C <NA> <NA> 3 Jeff midterm <NA> D <NA> A <NA> 4 Jeff final <NA> E <NA> C <NA> 5 Roger midterm <NA> C <NA> <NA> B 6 Roger final <NA> A <NA> <NA> A 7 Karen midterm <NA> <NA> CA <NA> 8 Karen final <NA> <NA> CA <NA> 9 Brian midterm B <NA> <NA> <NA> A 10 Brian final B <NA> <NA> <NA> C
      
      





5人の生徒それぞれについて、中間評価と最終評価が行われます。 同時に、誰もが5つの可能性のある2つのクラスで勉強しました。



このデータセットの問題は、列名class1:class5に単一のクラス変数の値が含まれているという事実から始まります。 列の値のテスト(中間、最終)は可変で、各生徒の成績値を含む必要があります。

この問題を解決するために、クラス変数を整理し、その値で列名class1:class5を非表示にします。 次に、テスト列の値を最終変数と中間変数に展開します。 そして最後に、変数クラスの値の冗長性を取り除き、そこに数字だけを残します。 以下はミニスクリプトです。



 students3 %>% gather(class, grade, class1:class5, na.rm = TRUE) %>% spread(test, grade) %>% mutate(class, class = extract_numeric(class)) %>% print
      
      





そして、以下は彼の仕事の結果です-順序付けられたデータセット:



  name class final midterm 1 Brian 1 BB 2 Brian 5 CA 3 Jeff 2 ED 4 Jeff 4 CA 5 Karen 3 CC 6 Karen 4 AA 7 Roger 2 AC 8 Roger 5 AB 9 Sally 1 CA 10 Sally 3 CB
      
      







4.複数のタイプの観測単位が1つのテーブルに保存されます。



次のstudent4データセットは、前の例の順序付けられたstudent3とほぼ同じに見えます。 主な違いは、id列とgender列が追加されることです。



 > students4 id name sex class midterm final 1 168 Brian F 1 BB 2 168 Brian F 5 AC 3 588 Sally M 1 AC 4 588 Sally M 3 BC 5 710 Jeff M 2 DE 6 710 Jeff M 4 AC 7 731 Roger F 2 CA 8 731 Roger F 5 BA 9 908 Karen M 3 CC 10 908 Karen M 4 AA
      
      





このセットの問題はデータの冗長性です-組み合わせ(ID、名前、性別)が2回発生します。 この問題の解決策は、データセットを2つのテーブルに分割することです。





学生に関する情報の表を収集します(必要な列を選択し、重複を削除します):



 student_info <- students4 %>% select(id, name, sex) %>% unique() %>% print id name sex 1 168 Brian F 3 588 Sally M 5 710 Jeff M 7 731 Roger F 9 908 Karen M
      
      





2番目のテーブルは、必要なフィールドを選択するだけで取得できます。



 gradebook <- students4 %>% select(id, class, midterm, final) %>% print id class midterm final 1 168 1 BB 2 168 5 AC 3 588 1 AC 4 588 3 BC 5 710 2 DE 6 710 4 AC 7 731 2 CA 8 731 5 BA 9 908 3 CC 10 908 4 AA
      
      





テーブルはidフィールド(学生ID)によって相互接続されます。



5. 1つの観測単位が複数のテーブルに保存されます。



前の例とは逆の例を示します-観測単位は異なるテーブルに保存されます(合格-試験に合格した人と不合格の人-不合格の人):



 > passed name class final 1 Brian 1 B 2 Roger 2 A 3 Roger 5 A 4 Karen 4 A > failed name class final 1 Brian 5 C 2 Sally 1 C 3 Sally 3 C 4 Jeff 2 E 5 Jeff 4 C 6 Karen 3 C
      
      





同時に、学生が試験に合格したかどうかに関する情報は、評価自体に含まれています(A、B-合格、他の場合-合格しませんでした)。



学生が試験に合格したかどうかにかかわらず、ステータス列に記号を追加した後、1つのテーブルに情報を結合します。



 passed <- mutate(passed, status = "passed") failed <- mutate(failed, status = "failed") > rbind_list(passed, failed) Source: local data frame [10 x 4] name class final status 1 Brian 1 B passed 2 Roger 2 A passed 3 Roger 5 A passed 4 Karen 4 A passed 5 Brian 5 C failed 6 Sally 1 C failed 7 Sally 3 C failed 8 Jeff 2 E failed 9 Jeff 4 C failed 10 Karen 3 C failed
      
      





その結果、合格/不合格の記号が付いた順序付けられたデータセットを取得しました。



ソースのリスト:





All Articles