R言語

R言語 データ整形練習【初心者向け】

  1. HOME >
  2. R言語 >

R言語 データ整形練習【初心者向け】

スポンサーリンク

こんにちは、usagi-sanです。

今回は、統計解析に用いるデータを整形する方法について解説します。

統計解析をする際に、約8割から9割の作業がこのデータ整形に費やされます。

マジで面倒くさいです。さらに、この作業を怠ると後の統計解析で、解析結果に誤りが見つかったり、そもそも解析ができなかったりするなど、大抵の人は発狂します。

ここでは、アルバイトでのデータ解析の経験で用いたテクニックのみ紹介します。

今回用いるプログラミングコードは以下からダウンロードできます

ぜひぜひダウンロードしてください。

練習用データをダウンロードしよう

今回用いるデータは統計データ分析コンペティションでダウンロードできます。csvファイルをあらかじめダウンロードしておいてください。また、記事下のダウンロードリンクから加工済みのデータも入手できます。

練習用データフレームの加工

ダウンロードしたら作業ディレクトリ(rファイルを保存した場所)で、以下のread.csvを用いて"SSDSE-2020A.csv"を読み込んでみましょう。

これで、dfに先ほどダウンロードしたcsvファイルがデータフレームとして代入されました。

試しにコンソール上で次のように

と実行するとわかる通り、このdf欠損値をもっていません。

このままでは、教育用標準データセットなのに、全然練習用としてよろしくないので、

次のようにしてランダムに欠損値を代入していきます。

3行目で、関数sampleを用いることで、データフレームの行数の中から、ランダムに30個の数字をとりだし、それらをrandomというベクトルに代入しています。

3:nrow(df)としたのは、3行目以降にデータの値が格納されているためです(1,2行目は列名など)。

4~6行目で3つの種類の欠損値「"","欠損値","unknown"」を先ほどのrandomから、ランダムに選ばれた要素を行番号として、これらの欠損値を代入しています。

これで練習用のデータフレームが完成しました。

関数sample

欠損値を代入する際に用いた関数sampleを補足として説明します。

ベクトルの要素をランダムに抽出したい場合は、関数sampleを用います。

以下に関数sample(x, size, replace = FALSE, prob = NULL)の引数を表にまとめました。

sampleの引数
sizeベクトルxから抽出する標本の数
replaceTRUEの場合、復元抽出する。
probベクトルxの各要素の抽出される確率(デフォルトだと確率はすべて同じ)。

加工済みのデータフレームを保存する

次のように、作成したデータフレームはcsvファイルとして保存するのをお勧めします。

fileEncoding="CP932"としているのは、RStudioのエンコーディングがデフォルトでCP932だからです(windowsとmacで同じ.Rファイルを開くときに互換性が高いため使っています)。

今後は、上で保存した"SSDSE-2020A(NA挿入後).csv"というファイルの整形方法を紹介します。

統計解析を行いやすいデータに加工していきます。

データ整形

列名の整理

先ほど保存したファイルをread.csvを使って読み込んでみましょう。

特に意味はないと思われますが、新しく読み込むことで、欠損値が挿入された数値データの列(総人口など)が文字列データ(""で囲まれているデータ)になっていることがわかります。解析するデータはこのように、数値が文字列となっていることが多いため、改めてread.csvを用いました。

最初にデータの列名を確認しましょう。データフレームの列数やどのようなデータから構成されているか視覚的にとらえることが可能です。

列名をコンソール上で確かめると、上のように変な列名を返します。

次にデータの一部を表示してみましょう。次のようにデータフレームの一部をコンソール上で表示させます。

1から4行目をひょうじすることによって 、1行目に「year, 年度、年度、2015、2015」、2行目に「地域コード、都道府県、市区町村、総人口、総人口(男)」というデータのヘッダーを持っていることが分かります。

このように1行目以降にもヘッダー(列名)を持つデータは、統計解析には向いていません

次に1,2行目の列名を結合し、新しい列名を作っていきます。

関数paste、paste0

文字列を結合させたいときは関数paste、またはpaste0を用います。

関数paste(x, y sep = " ", collase = NULL)paste(x, y sep = "", collase = NULL)の引数を以下にまとめます。

paste、paste0の引数
sep1文字の区切り文字(char型)。pasteの場合、デフォルトの区切り文字は" "でありpaste0の場合、""である。
collapse2文字以上の区切り文字(string型)。

文字列を結合

1,2行目の文字列をpast0を用いて、列ごとに結合させ、これをdfの列名に代入しましょう。

上のコードの3行目ではdfの1,2行目を消去しています。

df[-x, ]はベクトルxの行を除くdfを返します。同様にdf[,-x]でxの列を除くデータフレームを返します。

dfをコンソール上で確認してみます。

dfの列名が"year_地域コード"のように区切り文字"_"によって区切られた列名に変更されてるのが確認できます。

年度別の人口のデータの列名を1行で表現できました。

注意として、今回2行を結合させて新しい列名としましたが、これは使用するデータによって変わるため、そのデータに適した列名に変更してください。大事なのは列名は複数行にまたがって定義せず、colnames(df)だけがdfの列名を意味することです。

欠損値の整理

次に、最初に代入した欠損値の整理をしていきます。

今、「""、"欠損値"、"unknown"」という3つの欠損値があるため、これらをNAに変更します。

このようなNAではない欠損値がデータに含まれていると、統計解析に支障が出てきます。

予め欠損値に相当するデータをNAに変更しておきましょう。

データの置き換えには関数replaceを用います。

次のようにfor文、またはapplyを用いて、3つの欠損値をNAに置き換えます。

上のfor文または、applyのどちらか一方を実行してください。

実際に欠損値がNAに変更されているか確認してみましょう。

<NA>に置き換わっていることが確認できました(ブログ上では<NA>が表示されません)。

これで欠損値の整理は完了です。

数値データの整理

次に、身長、体重などの数値データの整理をしていきます。

R言語では数値データをnumericと呼びます。

まず、どの列名を参照し、どの列が数値データであるかを確認します。

上のように、dfの4列目以降が総人口や人口の数値データで構成されていることが分かります。

試しに、is.numericを用いて4列目以降が数値データであるかを確認してみます。

すべてFALSEとなっていて、数値データになっていないことが分かります。

df[1:10, 4]を参照すると、次のように数値データが文字列になっていることがわかります。

R言語では、数値データの中に「""、"欠損値"、"unknown"」のような文字列が1つでも入っていると、その列は文字列のデータとして扱われます。

本来、この文字列のデータは数値として扱いたいため、次のようにas.numericを用いて文字列を数値に変更する必要があります。

上のfor文、またはapplyを実行した後に、同じ列を参照してみます。

ダブルクオーテーション""が取り除かれ、数値データに置き換わりました。

これでdfの4列目以降の全ての数値データの修正が完了いたしました。

因子データの整理

最後に因子データを整理していきます。

R言語では因子をfactorと呼びます。

数値データと同様に、どの列が因子であるかをみていきます。

dfの1から3列目をみてみると、2,3列目が都道府県と市区町村であり、これらは因子データであることが分かりました(因子とは、「男性、女性」のような水準を持つデータです)。

is.factorを用いて、これらが因子であるかを確認しましょう。

Flaseを返し、因子ではないことが分かります。

試しに、2列目のデータの一部を見てみます。

上の実行結果のように、文字列となっています(factorである場合、上の実行結果にlevelsが表示されます)。

as.factorを用いて2,3列目のデータを因子(factor)に変更します。

2列目のデータの一部を見てみます。

上のように47個の都道府県をLevelsにもつfactorに変更されました。

これで因子データの整理は完了しました。

関数replace

補足として、データを置き換える際に用いた関数replaceの説明をします。

関数replace(x, list, values)の引数を以下の表にまとめました。

replaceの引数
list置き換えるインデックス。真偽値のベクトルのTRUEの部分が置き換える要素となる。
values置き換え後の値。

まとめ

データフレーム整形方法を一通り解析しました

dfをコンソール上で確認すると、より解析に適したデータになったことが分かります。

次の記事では、今回整形したデータをより細かく調整していきます。

数値データをカテゴリカルデータに変更したり、因子の水準を変更したりしていきます。

 

スポンサーリンク

  • この記事を書いた人
  • 最新記事

usagi-san

統計学とゲームとかをメインに解説していくよ。 数式とかプログラミングコードにミスがあったり質問があったりする場合はコメントで受け付けます。すぐに対応します。

-R言語
-,